From 6e2f93b053825680d03e27c9acae8ded6bd00dc4 Mon Sep 17 00:00:00 2001 From: Nitload Date: Thu, 3 Oct 2024 04:03:06 +0800 Subject: [PATCH] daily update on 20241002 by nitload youmu, intrinsic function rebuild, syntax style arrange --- .../stgsharpdevelop.metadata.v9.bin | Bin 3491 -> 3230 bytes .../stgsharpdevelop.projects.v9.bin | Bin 604294 -> 1090677 bytes .../stgsharpdevelop.strings.v9.bin | Bin 195502 -> 195529 bytes .../DesignTimeBuild/.dtbcache.v2 | Bin 273924 -> 275189 bytes ...24dbea97-4e44-4cff-bde9-b5bb8d11c9d6.vsidx | Bin 0 -> 846152 bytes ...2ecb2157-6d69-46ac-ac04-f2c2c406bcb1.vsidx | Bin 935953 -> 0 bytes ...3b705e44-0470-400d-91ba-30dd2533d372.vsidx | Bin 170329 -> 0 bytes ...601a6295-f112-466c-bb36-82a968868280.vsidx | Bin 114333 -> 0 bytes ...6f05dbc3-ffc9-4234-b625-69119aa7c5ef.vsidx | Bin 0 -> 166571 bytes ...7955f8f1-869a-4859-b56d-599bf6b1a7e0.vsidx | Bin 96451 -> 0 bytes ...cd0fd8f0-6ffa-4e38-af84-d93f68d4836e.vsidx | Bin 98741 -> 0 bytes ...d0863680-9836-43d8-844c-586ad60694d1.vsidx | Bin 0 -> 152159 bytes ...d8d4d07e-433d-44b5-9469-b0c37138d0c9.vsidx | Bin 0 -> 154136 bytes ...e00aa217-54e1-420d-82bd-36dcdbe2a2e1.vsidx | Bin 0 -> 184732 bytes 源代码/.vs/StgSharpDevelop/v17/.futdcache.v2 | Bin 2260 -> 2760 bytes 源代码/.vs/StgSharpDevelop/v17/.suo | Bin 1245696 -> 1154560 bytes .../v17/DocumentLayout.backup.json | 5204 +++---- .../StgSharpDevelop/v17/DocumentLayout.json | 5047 +++--- .../StgSharpDevelop/v17/HierarchyCache.v1.txt | Bin 118593 -> 122687 bytes 源代码/.vs/StgSharpDevelop/v17/Solution.VC.db | Bin 1028096 -> 1118208 bytes .../v17/TestStore/0/000.testlog | Bin 4595 -> 5762 bytes 源代码/.vs/StgSharpDevelop/v17/fileList.bin | Bin 91675 -> 98114 bytes .../obj/BenchMark.csproj.nuget.dgspec.json | 1 - .../Debug/net6.0/BenchMark.AssemblyInfo.cs | 2 +- .../Release/net6.0/BenchMark.AssemblyInfo.cs | 2 +- .../Release/net6.0/BenchMark.sourcelink.json | 2 +- 源代码/BenchMark/obj/project.assets.json | 1 - .../OEM/obj/Debug/net8.0/OEM.AssemblyInfo.cs | 2 +- 源代码/OEM/obj/OEM.csproj.nuget.dgspec.json | 2 - 源代码/OEM/obj/project.assets.json | 1 - .../x64/Debug/net6.0/StgSharpDebug.deps.json | 238 +- .../Controlling/Controls/BattleField.cs | 17 +- .../Controlling/Controls/ButtonGroup.cs | 50 +- .../Controls/CharacterIndexImage.cs | 45 +- .../Controlling/Controls/ControllingIntem.cs | 23 +- .../Controlling/Controls/DecorationBox.cs | 20 +- .../Controlling/Controls/MarkingLable.cs | 33 +- .../Controlling/Controls/TriggerButton.cs | 126 +- 源代码/StgSharp/Controlling/IO/GLIO.cs | 96 +- 源代码/StgSharp/Controlling/IO/InternalIO.cs | 89 +- 源代码/StgSharp/Controlling/KeyEnum.cs | 237 + .../StgSharp/Controlling/KeyEventAttribute.cs | 27 +- .../Controlling/UsrActivity/IClickTrigger.cs | 51 + .../UsrActivity/JoystickTrigger.cs | 44 +- .../Controlling/UsrActivity/KeyTrigger.cs | 27 +- .../Controlling/UsrActivity/MouseTrigger.cs | 72 + .../Controlling/UsrActivity/TriggetFactory.cs | 102 + 源代码/StgSharp/Data/GlobalData/root.cs | 1 - 源代码/StgSharp/Data/InternalData.cs | 4 +- 源代码/StgSharp/Data/Intrinsic/ColumnSet2.cs | 90 + 源代码/StgSharp/Data/Intrinsic/ColumnSet3.cs | 87 + 源代码/StgSharp/Data/Intrinsic/ColumnSet4.cs | 110 + .../StgSharp/Data/Intrinsic/IRegisterType.cs | 61 + .../Data/Intrinsic/IntrinsicContext.cs | 59 + 源代码/StgSharp/Data/Intrinsic/M128.cs | 193 + 源代码/StgSharp/Data/Intrinsic/M256.cs | 63 + .../Intrinsic/intrinsicContextProvider.cs | 57 + 源代码/StgSharp/Data/Lable.cs | 70 + 源代码/StgSharp/Data/RandomGenerator.cs | 89 +- 源代码/StgSharp/Data/SSD/Area.cs | 11 +- 源代码/StgSharp/Data/SSD/DataHead.cs | 42 +- 源代码/StgSharp/Data/SSD/DataSegment.cs | 116 +- 源代码/StgSharp/Data/SSD/SSD.cs | 10 +- 源代码/StgSharp/Data/SSD/SSDVirtualFolder.cs | 17 +- 源代码/StgSharp/Data/SSD/SSDraw.cs | 32 +- 源代码/StgSharp/Data/Serialize/Define.cs | 7 +- .../Data/Serialize/ISSDSerializable.cs | 25 +- 源代码/StgSharp/Entities/BehaviorArgs.cs | 5 +- 源代码/StgSharp/Entities/EliteEnemy.cs | 25 +- 源代码/StgSharp/Entities/Enemy.cs | 22 +- 源代码/StgSharp/Entities/EntityPartical.cs | 5 +- 源代码/StgSharp/Entities/IEntity.cs | 30 +- 源代码/StgSharp/Entities/Launcher.cs | 11 +- 源代码/StgSharp/Entities/Player.cs | 2 - 源代码/StgSharp/Environment/ErrorDefine.cs | 8 +- 源代码/StgSharp/Environment/GlobalSetting.cs | 34 +- 源代码/StgSharp/Environment/Monitors.cs | 14 +- 源代码/StgSharp/Environment/Platform.cs | 102 +- 源代码/StgSharp/Environment/globalKeyStat.cs | 6 +- .../Coordination/CoordinationBase.cs | 12 +- .../Coordination/PlainCoordinate.cs | 19 +- .../Coordination/SpaceCoordinate.cs | 11 +- 源代码/StgSharp/Geometries/GemoryException.cs | 44 +- .../GeometryOperation/GeometryOperation.cs | 57 +- .../Geometries/GeometryScaler/Angle.cs | 100 +- 源代码/StgSharp/Geometries/IGeometry.cs | 14 +- 源代码/StgSharp/Geometries/IGeomtryBuffer.cs | 6 +- 源代码/StgSharp/Geometries/IInstancing.cs | 27 +- .../StgSharp/Geometries/IInstancingBuffer.cs | 32 +- .../Geometries/PlainGeometry/Cordinate.cs | 36 +- .../PlainGeometry/Define/GeometryOperation.cs | 8 +- .../PlainGeometry/Define/IPlainEntity.cs | 18 +- .../PlainGeometry/Define/ParticleOnPlain.cs | 18 +- .../PlainGeometry/Define/PlainGeometry.cs | 24 +- .../Define/PlainInstancingBuffer.cs | 130 +- .../Geometries/PlainGeometry/Parallelogram.cs | 66 +- .../Geometries/PlainGeometry/Plain.cs | 48 +- .../Geometries/PlainGeometry/Polygon4.cs | 92 +- .../Geometries/PlainGeometry/Polygon5.cs | 63 +- .../Geometries/PlainGeometry/Polygon6.cs | 37 +- .../Geometries/PlainGeometry/Rectangle.cs | 67 +- .../Geometries/PlainGeometry/Square.cs | 24 +- .../Geometries/PlainGeometry/Triangle.cs | 74 +- 源代码/StgSharp/Geometries/Point.cs | 24 +- .../Geometries/SpaceGeometry/Class1.cs | 4 +- .../Graphics/CPUanimation/IImageProvider.cs | 2 + .../Graphics/CPUanimation/ImageHelper.cs | 31 +- .../Graphics/Define/BufferObjectBase.cs | 16 +- .../StgSharp/Graphics/Define/StructDefine.cs | 202 +- .../StgSharp/Graphics/Define/glApiDefine.cs | 54 +- 源代码/StgSharp/Graphics/Define/glConst.cs | 20 +- 源代码/StgSharp/Graphics/Define/glEnum.cs | 45 +- 源代码/StgSharp/Graphics/Define/glType.cs | 117 +- 源代码/StgSharp/Graphics/IGraphicAPIs.cs | 6 +- 源代码/StgSharp/Graphics/Image.cs | 197 +- .../Graphics/OpenGL/Buffer/AutoTexture.cs | 127 +- 源代码/StgSharp/Graphics/OpenGL/Buffer/EBO.cs | 46 +- 源代码/StgSharp/Graphics/OpenGL/Buffer/FBO.cs | 48 +- .../OpenGL/Buffer/GLBufferObjectBase.cs | 2 +- 源代码/StgSharp/Graphics/OpenGL/Buffer/RBO.cs | 30 +- .../Graphics/OpenGL/Buffer/TextureGL.cs | 88 +- 源代码/StgSharp/Graphics/OpenGL/Buffer/VAO.cs | 37 +- 源代码/StgSharp/Graphics/OpenGL/Buffer/VBO.cs | 118 +- .../OpenGL/ShaderEdit/IglConvertable.cs | 13 +- .../Graphics/OpenGL/ShaderEdit/Shader.cs | 174 +- .../Graphics/OpenGL/ShaderEdit/Uniform.cs | 132 +- .../StgSharp/Graphics/OpenGL/glAPICalling.cs | 7 +- .../StgSharp/Graphics/OpenGL/glApiManager.cs | 5686 +++++-- .../Graphics/OpenGL/glApiManagerConst.cs | 3 +- .../OpenGL/glFucntionSourceManager.cs | 92 + 源代码/StgSharp/Graphics/OpenGL/glFunction.cs | 803 +- .../Graphics/OpenGL/glRenderSourceGenrator.cs | 107 + .../Graphics/OpenGL/glRenderStream.cs | 135 +- .../Graphics/OpenGL/glRenderThreadSecurity.cs | 49 + 源代码/StgSharp/Graphics/Pixels.cs | 38 +- 源代码/StgSharp/Graphics/PlainGeometryMesh.cs | 47 +- 源代码/StgSharp/Graphics/RenderStream.cs | 129 +- .../Graphics/ShaderEdit/ShaderGenerator.cs | 102 +- .../Graphics/ShaderEdit/ShaderStruct.cs | 31 +- .../StgSharp/Graphics/TextureBufferImage.cs | 98 + 源代码/StgSharp/Graphics/TexturePipeline.cs | 6 +- 源代码/StgSharp/Graphics/TextureProvider.cs | 30 +- 源代码/StgSharp/Graphics/Vulkan/vkHandle.cs | 51 + 源代码/StgSharp/Graphics/framework.cs | 541 +- .../StgSharp/Graphics/frameworkSyncContext.cs | 78 + 源代码/StgSharp/Logic/Blueprint/Blueprint.cs | 79 +- .../Logic/Blueprint/BlueprintActionNode.cs | 12 +- .../StgSharp/Logic/Blueprint/BlueprintNode.cs | 203 +- .../Logic/Blueprint/BlueprintRunner.cs | 149 +- .../Logic/Blueprint/BpNodeActionAttribute.cs | 14 +- .../StgSharp/Logic/Blueprint/BpNodeBuilder.cs | 45 +- .../Blueprint/CrossFrameBlueprintNode.cs | 33 +- .../Blueprint/IConvertableToBlueprintNode.cs | 40 +- 源代码/StgSharp/Logic/Blueprint/PipeLine.cs | 49 +- .../StgSharp/Logic/Blueprint/RouteSwitch.cs | 54 +- 源代码/StgSharp/Logic/Blueprint/SideNode.cs | 51 +- .../Collections/BidirectionalDictionary.cs | 132 +- .../Collections/IBidrirectionalDictionary.cs | 124 +- .../Logic/Collections/SizeFixedList.cs | 91 +- 源代码/StgSharp/Logic/Counter.cs | 28 +- 源代码/StgSharp/Logic/Sensor.cs | 14 +- 源代码/StgSharp/Logic/StateMachine.cs | 72 + .../Logic/Threading/CancellableTask.cs | 122 + .../StgSharp/Logic/Threading/EmptyThread.cs | 62 + .../Logic/Threading/MainThreadAssert.cs | 58 + .../Logic/Threading/frameworkSyncContext.cs | 54 + 源代码/StgSharp/Logic/Timing/TimeFunction.cs | 60 +- 源代码/StgSharp/Logic/Timing/TimeProvider.cs | 152 + .../Logic/Timing/TimeSourceProvider.cs | 39 +- .../Logic/Timing/TimeSpanAwaitingToken.cs | 165 + .../StgSharp/Logic/Timing/TimeSpanProvider.cs | 189 +- .../MVVM/OpenGLControllingItemRender.cs | 5 - 源代码/StgSharp/MVVM/View/ViewBase.cs | 86 +- 源代码/StgSharp/MVVM/View/ViewDesigner.cs | 65 +- 源代码/StgSharp/MVVM/View/ViewRender.cs | 69 +- 源代码/StgSharp/MVVM/View/ViewResponder.cs | 81 +- 源代码/StgSharp/MVVM/ViewModel/DataBinding.cs | 121 +- .../StgSharp/MVVM/ViewModel/ShowViewPort.cs | 92 +- 源代码/StgSharp/MVVM/ViewModel/ViewManage.cs | 10 +- 源代码/StgSharp/MVVM/ViewModel/ViewModel.cs | 244 +- 源代码/StgSharp/MVVM/ViewPort.cs | 134 +- 源代码/StgSharp/Math/GLfixed.cs | 8 +- 源代码/StgSharp/Math/Graphic/Camera.cs | 151 +- 源代码/StgSharp/Math/Linear/Cordination.cs | 3 +- 源代码/StgSharp/Math/Linear/IVector.cs | 8 + 源代码/StgSharp/Math/Linear/MatInterface.cs | 4 +- 源代码/StgSharp/Math/Linear/Matrix22.cs | 136 +- 源代码/StgSharp/Math/Linear/Matrix23.cs | 175 +- 源代码/StgSharp/Math/Linear/Matrix24.cs | 192 +- 源代码/StgSharp/Math/Linear/Matrix32.cs | 204 +- 源代码/StgSharp/Math/Linear/Matrix33.cs | 219 +- 源代码/StgSharp/Math/Linear/Matrix34.cs | 214 +- 源代码/StgSharp/Math/Linear/Matrix42.cs | 222 +- 源代码/StgSharp/Math/Linear/Matrix43.cs | 246 +- 源代码/StgSharp/Math/Linear/Matrix44.cs | 320 +- 源代码/StgSharp/Math/Linear/Vec2.cs | 133 + 源代码/StgSharp/Math/Linear/Vec3.cs | 227 + 源代码/StgSharp/Math/Linear/Vec4.cs | 175 + 源代码/StgSharp/Math/Linear/Vector.Cross.cs | 15 +- .../StgSharp/Math/Linear/Vector.GetAngle.cs | 22 +- .../StgSharp/Math/Linear/Vector.GetLength.cs | 8 +- .../StgSharp/Math/Linear/Vector.Normalize.cs | 27 +- .../Math/Linear/Vector.Orthogonalize.cs | 49 +- 源代码/StgSharp/Math/Scalar/ACos.cs | 6 +- 源代码/StgSharp/Math/Scalar/ASin.cs | 8 +- 源代码/StgSharp/Math/Scalar/ATan.cs | 6 +- 源代码/StgSharp/Math/Scalar/BasicOps.cs | 25 +- 源代码/StgSharp/Math/Scalar/Compare.cs | 33 +- 源代码/StgSharp/Math/Scalar/Cos.cs | 6 +- 源代码/StgSharp/Math/Scalar/Ctor.cs | 30 +- 源代码/StgSharp/Math/Scalar/Exp.cs | 47 +- 源代码/StgSharp/Math/Scalar/Function.cs | 6 +- 源代码/StgSharp/Math/Scalar/Log.cs | 47 +- 源代码/StgSharp/Math/Scalar/Pow.cs | 56 +- 源代码/StgSharp/Math/Scalar/Random.cs | 62 +- 源代码/StgSharp/Math/Scalar/SignOf.cs | 21 +- 源代码/StgSharp/Math/Scalar/Sin.cs | 34 +- 源代码/StgSharp/Math/Scalar/Sqrt.cs | 32 +- 源代码/StgSharp/Math/Scalar/Tan.cs | 14 +- 源代码/StgSharp/Math/glClampf.cs | 27 +- 源代码/StgSharp/Math/glHalfNV.cs | 13 +- 源代码/StgSharp/Stg/Bullet.cs | 25 +- 源代码/StgSharp/Stg/CollisionTexture.cs | 146 +- 源代码/StgSharp/Stg/TimeLine.cs | 4 +- 源代码/StgSharp/Stg/Touhou/TouhouBuilder.cs | 2 - 源代码/StgSharp/Stg/Touhou/TouhouWindow.cs | 6 +- .../StgSharp/Stg/Touhou/View/OpenningView.cs | 5 +- .../obj/StgSharp.csproj.nuget.dgspec.json | 1 - 源代码/StgSharp/obj/project.assets.json | 1 - .../netstandard2.1/StgSharp.AssemblyInfo.cs | 2 +- .../netstandard2.1/StgSharp.AssemblyInfo.cs | 2 +- 源代码/StgSharpC/StgSharpC.c | 104 +- 源代码/StgSharpC/StgSharpC.h | 145 +- 源代码/StgSharpC/StgSharpC.vcxproj | 10 +- 源代码/StgSharpC/dllmain.c | 43 +- 源代码/StgSharpC/intrinsic.c | 24 + 源代码/StgSharpC/mat2.c | 50 +- 源代码/StgSharpC/mat3.c | 114 +- 源代码/StgSharpC/mat4.c | 100 +- 源代码/StgSharpC/quick_hash.c | 24 + 源代码/StgSharpC/ssc_framework.h | 12 + 源代码/StgSharpC/ssc_internal.h | 39 + 源代码/StgSharpC/ssc_intrinsic.h | 70 + 源代码/StgSharpC/stb_image.c | 12718 +++++++++------- 源代码/StgSharpC/vector.c | 51 +- 源代码/StgSharpDebug/AlphaDemo/Program.cs | 86 + .../AlphaDemo/RenderStream/Partical.cs | 428 + .../StgSharpDebug/AlphaDemo/View/Control.cs | 61 + 源代码/StgSharpDebug/AlphaDemo/View/Design.cs | 100 + .../StgSharpDebug/AlphaDemo/View/NewRender.cs | 71 + .../StgSharpDebug/AlphaDemo/View/ViewMain.cs | 100 + .../StgSharpDebug/AlphaDemo/ViewModelMain.cs | 78 + .../Properties/launchSettings.json | 2 +- 源代码/StgSharpDebug/StgSharpDebug.csproj | 7 +- .../StgSharpDebug.csproj.nuget.dgspec.json | 9 +- 源代码/StgSharpDebug/obj/project.assets.json | 1285 +- .../net6.0/StgSharpDebug.AssemblyInfo.cs | 2 +- ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 4 +- .../net6.0/StgSharpDebug.AssemblyInfo.cs | 45 +- .../StgSharpDebug.csproj.FileListAbsolute.txt | 14 +- .../net6.0/StgSharpDebug.sourcelink.json | 2 +- .../net6.0/StgsharpEnvDebug.AssemblyInfo.cs | 2 +- .../StgsharpEnvDebug.csproj.nuget.dgspec.json | 2 - .../StgsharpEnvDebug/obj/project.assets.json | 1 - .../net6.0/StgsharpEnvDebug.AssemblyInfo.cs | 2 +- 265 files changed, 26732 insertions(+), 19058 deletions(-) create mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/24dbea97-4e44-4cff-bde9-b5bb8d11c9d6.vsidx delete mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/2ecb2157-6d69-46ac-ac04-f2c2c406bcb1.vsidx delete mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/3b705e44-0470-400d-91ba-30dd2533d372.vsidx delete mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/601a6295-f112-466c-bb36-82a968868280.vsidx create mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/6f05dbc3-ffc9-4234-b625-69119aa7c5ef.vsidx delete mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/7955f8f1-869a-4859-b56d-599bf6b1a7e0.vsidx delete mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/cd0fd8f0-6ffa-4e38-af84-d93f68d4836e.vsidx create mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/d0863680-9836-43d8-844c-586ad60694d1.vsidx create mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/d8d4d07e-433d-44b5-9469-b0c37138d0c9.vsidx create mode 100644 源代码/.vs/StgSharpDevelop/FileContentIndex/e00aa217-54e1-420d-82bd-36dcdbe2a2e1.vsidx create mode 100644 源代码/StgSharp/Controlling/KeyEnum.cs create mode 100644 源代码/StgSharp/Controlling/UsrActivity/IClickTrigger.cs create mode 100644 源代码/StgSharp/Controlling/UsrActivity/MouseTrigger.cs create mode 100644 源代码/StgSharp/Controlling/UsrActivity/TriggetFactory.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/ColumnSet2.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/ColumnSet3.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/ColumnSet4.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/IRegisterType.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/IntrinsicContext.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/M128.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/M256.cs create mode 100644 源代码/StgSharp/Data/Intrinsic/intrinsicContextProvider.cs create mode 100644 源代码/StgSharp/Data/Lable.cs create mode 100644 源代码/StgSharp/Graphics/OpenGL/glFucntionSourceManager.cs create mode 100644 源代码/StgSharp/Graphics/OpenGL/glRenderSourceGenrator.cs create mode 100644 源代码/StgSharp/Graphics/OpenGL/glRenderThreadSecurity.cs create mode 100644 源代码/StgSharp/Graphics/TextureBufferImage.cs create mode 100644 源代码/StgSharp/Graphics/Vulkan/vkHandle.cs create mode 100644 源代码/StgSharp/Graphics/frameworkSyncContext.cs create mode 100644 源代码/StgSharp/Logic/StateMachine.cs create mode 100644 源代码/StgSharp/Logic/Threading/CancellableTask.cs create mode 100644 源代码/StgSharp/Logic/Threading/EmptyThread.cs create mode 100644 源代码/StgSharp/Logic/Threading/MainThreadAssert.cs create mode 100644 源代码/StgSharp/Logic/Threading/frameworkSyncContext.cs create mode 100644 源代码/StgSharp/Logic/Timing/TimeProvider.cs create mode 100644 源代码/StgSharp/Logic/Timing/TimeSpanAwaitingToken.cs create mode 100644 源代码/StgSharp/Math/Linear/Vec2.cs create mode 100644 源代码/StgSharp/Math/Linear/Vec3.cs create mode 100644 源代码/StgSharp/Math/Linear/Vec4.cs create mode 100644 源代码/StgSharpC/intrinsic.c create mode 100644 源代码/StgSharpC/quick_hash.c create mode 100644 源代码/StgSharpC/ssc_framework.h create mode 100644 源代码/StgSharpC/ssc_internal.h create mode 100644 源代码/StgSharpC/ssc_intrinsic.h create mode 100644 源代码/StgSharpDebug/AlphaDemo/Program.cs create mode 100644 源代码/StgSharpDebug/AlphaDemo/RenderStream/Partical.cs create mode 100644 源代码/StgSharpDebug/AlphaDemo/View/Control.cs create mode 100644 源代码/StgSharpDebug/AlphaDemo/View/Design.cs create mode 100644 源代码/StgSharpDebug/AlphaDemo/View/NewRender.cs create mode 100644 源代码/StgSharpDebug/AlphaDemo/View/ViewMain.cs create mode 100644 源代码/StgSharpDebug/AlphaDemo/ViewModelMain.cs diff --git a/源代码/.vs/ProjectEvaluation/stgsharpdevelop.metadata.v9.bin b/源代码/.vs/ProjectEvaluation/stgsharpdevelop.metadata.v9.bin index 39eb7cef89cb70fb78c80744315ee2e7b0c040e8..deef2d1c8e7b68caee58436f0079fec217e44042 100644 GIT binary patch literal 3230 zcmcJR32;tV6vyw&N%)ey?};sz6bWLD28p#%jiuI7nV?!Uq$2ihtfRzE>?C9%3$oCJ zl+P}Wj6Eo08X3F6R0pxt8t+Q_zwdqT`#xqmosN;2U(UJrp1YlM?s*?$j6X0(t)1B9 z`0eYadHkW7ES|BEi}SCW_#-pj2&+0)(~Hf-I(1B#H>=RZADe00w4hFlgv}E(<4-X* zq}B57Nmoqjd^!vK*_Jw%7IEQ4OoDl)0*)Hm>1fwtOPSoIm4CuXT}G~jGm z+CrR9T}M$D+vrDCVUg}#dafZXHqdF89DR)gv}S;A%sF$c+LbF3J5^YkcL?33SfC6;&7GsQt1yLeNg>uK=js(~ z%bm~;b7I_&Xk4}69pZ$1GF(6k)h_9(9aD|59iBTYlp8ZzKYffd6_y(~wxAiNxF}5B zL|1czH)|`D!wv^iE!x$S$S2mKU7eQ~o8dNHo0OD%f7PVs(3gc7soIQioWZ0J4=5j~ zg~}Bx%rBg9U?!sLhH35!ZJN?KG)|oF3~s)aIz23DtuW>pj#d0yEij;z+UU%x7bJV7;>hfJw5Z1QCjuMYi5xtUth)PUZu?Kj%$(`dN= zJ3SQ^Q^6#zt6sFN#^*Z&)$1syPd8rw#I3s z{bUjLjdzpZw^Q`HjUjgTtCY@Si&@ms%j&ZfN{F|Ha00RX75Db;fWc1t$;#8k=UvjZ z^NzKz5KZaL`Ui@9QTLF~bn6y#=xqz@-HuScuhkDL>=&9%cOQl8mtRVmU971|B#sYs{rl|tbXDxGLbT-Mu*8muA7{A z6^Wm8;dLZ_$wkHt+sJ!G>$bfd@IRp&#mu2h@Out6cO3L94)!-4`Y+2gDq!-h#AA3} zH)N_`wCq9YVCcm%J?$1$F9FA_&1)jTy+9gD%4d+ZKy6S5%ri;c8`1~V1#?Y|&j$6N zM?uzy^aTyT9JCukHpV)QAb&=?F=P|a6!?K=U?%!MSC~8ZS9pNLn=56!1!xHZK%l}~ zDZDkbHlVG-+bO&~v@eu0iI=!Z{H@#a`W~9QtK)w`MCM=lci`?=uNGc6@nvyvx3?s# zHEosEp~yNG*b+C}RIa+wg+rw`g}+pLu~j{7HASsptIQ6SMy+fw%-oIq@As3!FQNcB zxl@S85PsqJ>!zNXn}2oJT`k<44m}I>fPNG*2?*DxK_-IzK!hO=avw0l5eI!25MenC zxf^T)zkt2K2vr7jBV0S6i;(SvG{P1SJptr{o)|O2cm(Y+XlFtiA>9Q1Am|H3XtzUJ zz-EvGQox7d9t^u=^zQ*bKpz5(6gYss-#{)n1VlKq)OrG;sr8R z6_jmH(i7wM74MF7PgoP9swCc_w`5lLQB;A`tAODM^?&7vV=lOpU(+{whB%}JBV(6; z$&gjFKfZC>?3vijAz21V6n^ov@e6O3)o)0#FSRewQ1}WZf0^~{{0>2(C1>#Mwh7^Hc1GyN)fE8d1 zFanUEm!3d%#j~~~{b6f-WICa2#_2QC?Gk2G%ao?v}fH9j4D=y2lB(-~R>I=NqLjPLHaEI+{)za&Em-9_OaEA*YDw8q7f0QXO z@SX0O;WAC0TF(+$7he;HpME@2rU$#)eeh*5viZZW$^y8`$lhbnjm&k-R--H#rRWp6 F<{wTASq=aI literal 3491 zcmc&%4Nz4@6yD3>;nR2DB@xIZ5h^tQLVe(0ih`gtnx#XQnx&SdrX`v=I!zY&lV;^q zPAVdj0;2qhj}Q$Jl~lyE5=$|4%Ch{)8p@=*VBhY2_uXex(=<&JGau*d-Lq$Rzw_-b zFvfU;lfC%OwTS(v?Q8kZPI8B?n!2Rww4MLrq%S9i%#i*yC$WS z5*CY?>rTcS(KjLX_2l&@?RpkfPrTxiLw-ZoITgb;6jWs+R7aaTDfaTmA*;pECbZvB z7;lEXffUQ1S|L(!rV)!CT|G?ripIDf+UC?h_%Zzp+LiAf`^$pQ?VQjx^3h5Ws+ZB2 z!#A=QA+x@XUOv{xSf4*4aw3{*J0YT!4%&+4K>Y-*9AgA?8>TpqWgZ+^Ht8`8ZcFTJ zMW=y>>g_xLgKHKCPR3{c9cIQNulnVum!qo%x}KUgQtr7mu>*C@l{@j-j$|#-)x&?e z+)FF89cbTOeCi~Yz*V%<{1_ieH1pQ@En>BNB{*8zo`zi}b!luI zcgn6GrntJ?EIDE^))S-=ceRL-b!&qRX?4%-n2%BiV_1kr>*fqeku|#n7OE)WQe$t~ z4Asb184@FWy_)>b#m^NP^hoM|ONlY>tw@$TJi10~zAaYzDY?dZ7Ji#XO;JW(J(yVN zfiu}lL18;g8HQ2stbIVTTTZQFGmUcJj?Y*4D9LPlgoSJL^bxH{>_YEgvC{!v5kMru zN6!hKH2Z{|-vR$>zr=ZmV4{ zx7D54*Rx7WW+7lOvByWR44eYDx8?Sjp-DUH?fNUkqAolm zXFE!rrqAmsr--vMEF{+6mAFUDwvQrHJZo4=?CsR|7UDeVD=at7O7HEtA42S> zc0onSh)uNIA_|!43Fu=j{Z%W&0jn&Tld;5e!`X80@)rS##t<9XwdQh^6m}^<+h*Bi$Yt6Qw z>X&$QwZz(SKPzCdwe%y@?ZG()lgm-8!5fB%mAR~m*U+FaPr2VDR<+`M=@tYWvNqJi zicKb#@nzaNv9cC)tRXQ+^6*?X_6jeoes7|uh8*8z? z)#5CjzP|i~L3M%^kV~5rJwhA`G50IHPp}hj1-xNV(%!mSXSQT~2JkE}9he0?2c))S zHXfuZyp7tF62Qby5O8Ss<=zXbPuppAN5^V?%xSwH@1^hyHa<|{4K{xstWxI(ems-D z4_8l+>W$(dDlN@Qj?elT$2Lr*^Hb8gh&17Rw95EhIDt_>M_?%0onY?*>bhO3qj!7NPiM>*e*RMWnU_8SHIB*qqsF7wK1zvGRK1<|@$`8|ecw%o!#k8a9dvYOv*b>< z-cUW%`xfYd-Urv`h0xnr@2%#b=nJEiCyqgZ!4ArMFh1fDtZJB~dAGw-;CA@sz+qr3 zAgC{a-3*L_FO*pWe=Mx2&}_6n1d0Hm){kH-fns1Aumji&nB{WAH_KH9U#NK(tf}Z6 z__;tWV5<87{6e4bfT4Tux6 z6BegLxL?Pq`8Tb1tmeA&h3M{y-zQ>l2& ZYn~U%e4PsM&xa|6fAu;c&wunn{SLnS)Aj%W diff --git a/源代码/.vs/ProjectEvaluation/stgsharpdevelop.projects.v9.bin b/源代码/.vs/ProjectEvaluation/stgsharpdevelop.projects.v9.bin index a25a4cb970ab111f938731bb8d200242610b4dc7..9c53931ddad0278f391e464543e4b054a0fa81da 100644 GIT binary patch literal 1090677 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 z z62=)JJqA}1zdEdkS~WgA8zK`pxh5pImU3MeQVN_HlBzLW9}?U^fj4T3Ni>dbieoZK zHwV%!B;87XOeX2JDAVmk?=TcoJjr%uu`+$8r)@ z#M6_)cE7I)KA_&GmVao1CHcq@`W+lTrktN>0juJ4i&{;>r(wiraePj~no#&6jxR}A zYXn)~SBA*XfL~MUH=#gFyIi!t4TWIe`5hMoMXU>j<}s`%;rmc%P4|Biehh^Tar{KW z&qgS~FGPPe6dU9Cjf71`D8%nX|A^>jqFW5b);Q86AQZO6Q9wdrDCE%J>S=cr&kb&X z$jwE9grpJDchm@Ae6GK9$(ZLXO%ta?Ex3dun(S>N& zh;}2|J)%8`o)poOiS~@B%zH{idlBs&(Nl@`2`RPdG)_+Eq^}|9my70nyo{F_2THBJr*m3XruxFr|2Qobo> zB;vMQ+)lzBIs#Mm`f#VoAiHH+NT}SqLP9Ci4Z+>HxQB|l*OXg``-t9e(hKka(FYAJ z#0;Vjg_Me#84{{wmLZs(i-#%n5$)BENA&{rm`Rtb)#HX>PA;CH;3thBJ9BPG@D!yz zZ7AmDVm=Aage|7vXT#LzabPEVm54aIM{*hIqbMv%dOaI!fh)Rrxr zY~>`)2|_}pZ8HP~xscD3auVsusy`4*AfBL)_@R(UAW1^X2(mSKoaA%j83OtWpHKNp z8KDrn5iK23YI+$%uzLb!DYcvtWF>oq1m!7h&yZ4Dg^*A&dxeBj_BI6j(02$a-@aOq zb5Wk{ek4^gG4fhgPMAGVofxW6YSl#g7Tp)s5~xl>jYN8i7U+GI`;$=12!%L+=z$Tf zO|*`osGC4N5)LwgJgfSK$R{6ipV+_%h4fuP+AbJMe>XrQ5)KK4LlbCBLX%K9EP_bX zd?=idKzkBS422E}bR?mZ5z^DpnRpk|&9W1^8iH;Kbf?rFp>R?HCzH_A2=Wr0l1NWi z7oZTmD6Mx$si;#!LVXzE6)LTKdi<;k-opel47zzy%}>4}}p4Tu8!2p>S~mmyj?r z6fRBRG7>Hig;5DyLBi-ndPdMyR}vj#D8?o*j)bd>ke-dJiH}dDXX!>vNZ=Y0u1%z8 zYvH;CCX#S{BK?RG3UC9_8x!eAb^4?PZX#i_7H~7Y(dm{1ZY60-BK??-xh;X)Nw_1C zew+kMP2|&eDeoj@TBOKMzAKTQqjOA8;BHF4#|Uz`+-nG^y!$Bi{!n-zfd@&LVT3|F zM0BR1n3ce65*`kPM-q6HgvUbR@dW0O@PrX^@FdZ>hT^FNo+e>lD9lgb84{iih367j zK*IB(@InF$Nq8}leoCLzO9{M8!lF=kC4pB-c+Cj14_;63&*_UTwj{wGBQ53R4MXG~ zE#IUv-!eiWJtn3ba3cM@YD6L4q11N`#j*t6BVl zq>{*^hkl=?xsU&tIp>!yeNn&>r%7#KYvK=O&yb)w8_6!LsP}*L}^c(Vo z_NEpPRTeJN(YFbn0cqzNkPCRYj5=n_>82?bU&qyW{akQ#={M$}BE-_mnq z|0HTr>H*30Ct5f#iP|L82?ctaQ9Tk4N~Tw<2)R$L&q;%jP{|Dq!NEy1qI`!W)AR?N z;KA>qoHW+NSjrz})222(+@{TJ+T5lsY}(SMt!&!brfqC`giYJp^hlc?Wz(Z=+RmoO zL=?v+aUAv4@yRs(b&LAyKjeB(dm`KQo}P@^uJ`o(ZI@i{lNqk}XOR6io$3(nTVIf0 zA7>Fg+fe#zAI>3Rs1f8HXs1o?=?_WJHus3fs3&m|&E!D4ILWk2k{C&~T$-fsw#c~4 zDDLtkMv-DPxluN6J-6{l|{0^&}k6C?-()HMCZ!a<8RwgPrDe zfkx$~;+U9>mDMr&?<3bosW&8XBb719lyQ?>8YYu+a~LD%@GTa*HDZ`Tv9~dPJMlY0 zj;Tr9Ny@ZPDa2jGr$?N+{O*Y19!kA85qQXWiV1}P7Pio9quLngnYGKNjy!;yhxd!#51Hk8!68v zv4E84Lxn!36JMC5cMQqvO;6gB>DXAjM5fv~|BUl}RpmRsLK?%rFApEc!;~2Px-5y0 zlJo@(tW4tLBtA)ERT8U{_%um>Yo(ZdzXO-pF*t^ z4oKm^6lzNs?`+ z_%W9bhe^~_<~UrUX7bRS9NAl>&{E=45_D)KQEPchu6vT2HqE`yEVh>4%u(wP)RUZ1t!*Kf28%~qxbb0725B=n!zdVeWsRJY$C=b(V zx(!NUFkug8s2_QbqaVqt7qU&jnW@S->h-M}(w7e9Z2z1(wH9%@^NL#{quFc;H-0DR3|}4 zouux1on{6yV|6wIUyABvj%I8IGGlc%0~fhwAgh7RKz9vn2C^DS!c=4z}K90mh22%nH=Qr8S*HLw}zu7S-!R>Mxuz!I&h*cn*jwHBFydh^0+Wi!y-t!xIeZe=s@ z4SwOwjqgq8a4gwr_m;EHlAU&MJL@c|X{UEE??iP@h&C1PM$>MYbJ|gWW7@qJ?qJl% z#bEzp_MogPHvimJvH8cU+UfaMqE!_;|4O`8=lo-}viaxkRyO}wx3c-S+%^AJL}TP1 z+jze3tg~e2-v`b*OLqQ!7}d$S1}xF4ik*KYUaNEdv0B;ub9XD7f2*P^$mZW_KK~}9^cwxCbBufzt_l|8zWx?&#=e=i@t!M z9!h)}efFp4X>tfCd95^dPb$bBmM~*?dMaUz-RT+9x4{Q|`XKb3qX_o7ixoj1t4tB} zA$SKxu#F=tVo6lQ((M$X9qQS=j}<{%7SoD#x`?O)bUrp`S-zD~K3Yj->x<@N*OBF; z>1XQW`PQfKeM;BII{b$eehj*nI($O_e@fwJQy;UN-rDapz-Q%kojz?jRrQ zPnM7R)8zY=)weN)-!ji{QwqOF=l4edH>a@0oFB`_&X47z^E3IjvV3VdfKx>W@PugB zO8se`3n6-1xh=dYq9BDr(~4awjd|F|^2{w3@jPc~?3`HJ=$uU3SZTRCER9`BRvKN& zoiB~~%(HPwot4slIJLkcSnIhHJ&Ry1Dkg%BqGBT0{3|Ac%`_g7p9fFbA6gI1>0E?4 z7Z$?Ws(%ug6$N)+e19?#yr(hPyJ{jp6PL_h9%W zhW{I#>=X3nYcs9}vvWCv;jF8@9!ptQd)*H=v9U3k;hP!Gy4vf$%DUR?e#pAo>wfqr zUF|QY?>MPnftTMOtb=NiOL=wfVxDz@*Zq^} zu`IhS>jF;?80m3B)&*WYUa5mTJ$JG$@Iim<7xYIZGM!^y^Od93rb-Y|)sDzqkFqZC zL7z4YdaSwKW0@;d$-BVQ6UJD&K90^uyL`D$)|Hb_^ATibn=>CnX0|!=QDkPDGapB0wmI{WWM-Q)A4|#? zX`1Ur4Q%;Fx?ItA4l81jps$c!G3Qo8p9gwAZe;&2VBqIxyUk;Z7R2 zK<9jPQN_?ph`Z`Sa>(dNN%ZTD{Bo*Xl6t6NLqFq?68(UwehuXsmi4x$oc`OX6?xN-wb(d|U1hPWEjHd_6D)QnJvWYOxW-Dm)?(LLY@)@k zx7ZC9yU}8kEOwK{CR^-gi``_Lmou-HQun`yCs+JF8jRl9MVf7)X6EH>X_&sgkPi#=zt zA*$z14GXNa=PmYv#THuZMT@;;v6n5j$YQTp>{W}sX0g{Tw%B4zEVk5QZ&>V2i@jyB zW2~Nd+e&-KV((h)SS#N$EA2gtEw|VTi@k5L4=nbf#mK#dRvUB0R$A<1i+#cw-Sx7r z@>y5;tgHOEz^Oj#D*r#^Dla#A%1XMEwvwh7c}gp3x!ZHda@*&S<^Inh%Z;EzmODa+ zEVqUZS?&=XvfL~>WVvf}$a4GWkmWwoAX7Ar)FI1_sY8}KREI3Lst#H1Ssk+6ygFpLi*?9yJL{0;zSbej4X#6$J6(q?x4aHn z?tLAy+ypyhxf^!Ka$D?><^I?q%Z;)_mOEyLEVs@MS?-}7vfNBNWVx$$$p3mn_)|Rj zdWBwrA^fR|^$85&PgksOUpZ0{2;{!(`y~b#~WuVHpIhOlAUeXIg$-kY?!u= zKTi>39e;shfpz>w`V>6@#yb8Yl~mL^ew&K9R9nYyP=s90l_mV;D#Ivk2|rqqD~njd zk5THMvxJ{Oc_T~s>kRu_Ea7|7qa~*$d`p$!u!PqM4omp9Du=@oUUrt#627_0VJzWg zQzA?FHS{%~&=Q`u+Y2$>!`);tBH=yKcV0evT9|`-<*n&H>XgVN{z1k5H74;#F_U;Q zZvQ8J;v!SI_|y~$Ba4Z=~=IzbIE@577j=c z>GyJj@5yQ-UA$8~6+|ycBUiVbw~9wv#NXXoZAV`56sAhvDYJMJyi;!RCb+`R*u|UR zidnySbvYU`%g*${##6l!_h3E5IJh6m)y76`!qvl!n)QoUHmK4s-pr{^ysJAKGvF>< z?P`3zyK%LV*Q?=EF_83tGT5;ylI*Aakt&!sWp4j`O*_VK&>MeXAYP?pYe-@qWg9Nl`!lBN=))cV>b)%|oQ>MBTc`Wk-LiC#G?|7)G-Yx+f;==b-t zPV{tN$vV;hH79!1qP3V-1M;F@C|836{rtb+M!zL*M{e}B{q330(}z#ne4g$Uw)s5W z-0q~MJ2IaS?sk#+{5G*8^Z7cyZ9bn<#C*Q4Z=25-pdR(mLB82v`H8*xvJU)6mdVhlBmU!HB+*pJ7B#H<1_W!uJpkMvO(k+zXMnL7Jd;|`j)gu zAg|2GmA;i<#Ff6a|JPjU+xSIX>5uS>xYD=vi@4Gs>1SQ(v##`i+Lit&{~vaxKic2E zD}6hEmtE2-@A-Bd?fcN4fch$Qw3pZDG(Y{Fe5`jm{fUFdMqfrL zwI8EsK0VgEUo{Bp$sY)OV^$tmNB%xC>yl>=_EQ8#{%BUdi;&s#MU!y51z58VdA$tq%#O8KDrT6YZN!leI88$QPg= z(f)>FfRBMB3`(ZA%2p31cX)b@{4o0aA-Nhu*FnNS8l6LvMi}H{FbQY)fgrmQIvnTH zdDA%z)4_`3JgVXRWV#?|!39KzM|1?y3zPc!>Y4O>^^zn;l5}Yj3FTOS8MSGMk5Qyu z5&7PaPU1>Z#ze~4B*u|)RWjW{p32qw0*q%A6Da+fz~LR&Qn|tI_PWsZ9pu+MF&QgM zFVRu0m8W)nlzKxFH&PjsOc^&(C74Xg&0&npaf`)njToj->}`zSPW+CLV`>t2k}@q+ z3UL?l=@F;Cy*pyKhf?niIqpm1eo`KYln0ZTLCQm+BCpQOkb%CaGmFw^N6J|~9wFt? zP?2Z!81txqoKoj7zJhl5PcZ%@rOypHo+6)0Qsza<{3M4)Pcv~Kt(qEq6N#gJr-j%sp#d6V_9`z^jUJ_L(ZFy2Uu&vL2i64^qF$rlt?~%QEJTRXxOMlv?Mr@Gv{v;1S%fm17@T)v* zl!xEsVUs-ko}`};C9ye)Es}1PhqOGL?bBhKL8sLn(RKO&&_i!&%hkA#vsY3J0Z7 zKZSWze1jAkN+d7hel=u{RD2Row_d}8)JXI$3k%!@OSf3`*>GJR&bG%=lls~i`svYl3)BE;{ zcf6NhRf!z$-={YX(wFg!<-LMg&-=(6ej@jgpAZ;p-4I#M-x!5Xa)sU$g-(t_Z+3+; zclxa7Ju^1CD>AhsLmuOC#EcI~b(q>^J?|qIEO!^qj7;HJ7tV@ovSx=iS#+}xT)T>R z*=0TN<@*k5fnIxRM&`VzTS*N@W)7YWI*^hd2;g%?`d60J494R4g~;NO@=Ocz&^uVC zN6=9x1?+mASY9ug+F=m(fQgqpv?HikcJ724F z2C`ajj|PjoR^}$jYGrPcbHi~dchy*bHR$bL<|tI2t}nqLqf-14%W5HtTsG zEu3ryy1S6gK-PsjnD<3yVAk_q-vj@y8(-G*KHN*N;mOR|w=+ETz37qPUi6N0CQwOc z3$ZL(Om?{{x$SY@0ZY7A=lo-}vOA#rT-hCvbt}6AF4uQJdqcJ&>P>b#pqJU3-X!SQ zkdeCU8#1#A%zEAjo86UB-?G~tGooj=y{zZG@%?7^KeziloAseB8T!t@K*g z-u3J{vV1gTT=|%HJ@Xo8Uh?$t$#}{C#JuELKKALB<)aU;Cf_gaeC)#%%eQ2Q`Pg29 z<)i*I_5I4~+nDvdFASc7AT7s8s_1i&3DNz4J^aXe-h<6Q?r5LLLo#q{XETjQFh_ef zr)VN&J@2_^z44TP=6}QUz8k$x+jwkuXSfH$Coz07!#x>3h2bjn$3jzPHHND*T!Z17 z4DZiyErt(Z_&|nhGhBz^x(wH2_#lSsGu(jTh731i_#AeQLm3{%@IZ#oWq1(7gBd=9 z;qw@7%<65z@L>!$W%zK0n=#y+;T8tr>2^@DU8RW%x*jk7D>}hTAcG48zAV zd>q5aGu)ox6B+Kna7TtaG2EHqE(~{NxEsUW8ScUGNerLNa8HI$VYnB=y%|20;XVwX z#_;J3_hq;r!~Gc^!0MU13}3|X#SCA<@JNO)W%x3NFK4(lYx5|kw_*Ab43B0pZJ9on>Ejr_is7pn z9?$RuhOc4xT82Bbx~^mTM23%KG1oKw28M5BcoM@mF+7>!n;E`^;aeG=!tiYj-@))y zhVNu}8pC%nJe}ba*?DzjxC6so7`~h3?ZotZn0_zA_c44w!w)e0Aj2~leu&|j3_r&3 z;|$MX_z8xeWOy#aPci&7!}A!P&u~9>zWo^JQ^}@MRv> zst+@D@KqkZ4t#gNp=&o5JmiGM{Ecpeu^S~wj+KCB7Th` zK22Ed*ce3o#v-&Uw`u97AmaBZf+`8`hFc zxpfP@C|&UUevn=&O5csAmk!d)MCrTp^s+&ExhQ=Po?bpk-!n?Dz|&X8b^GelmwIK&%b$)p6Rr$(_04Vt)l#`dHHRE^dqA5wmO}b8_OR(bJf9jc0}f? zgYWH#%vA>)?1;=&2fx@6nX3*q+7X$n4mQ~lnX3-|up=^89c-~9GFKg>?TE}(2ixq3 z%vFaL9IMwe*B!*k5R3WNXRbU*+7X#+4=p=Z8JVjOd^;j@{XuCvB69^oSvw+g4MKT4 zB6AhOO0rjCXPdbW(Gp}uWUfTC2w4%CYY{C&Rz&7%gsOH#=6Zx0c0}figj#k)=9+}s zc0}f?gnD*F=DLIic0}gNghqBm=GuhDc0}gtgr;^x=K6%@c0}e1g_d?i<{E`Ic0}eX zMXOxB);LO=yc7B&sa)d;Rg9Ooe|#&9rdPlCsvd>MFg%vwaSUI@@YM{DS6Kc?Xo8Px zIJuUS>o}QcNZ?v8b8FjrLfW^UfWRbQZ*y^zuWj!8wVDd&Y}aEnR9t%NX(7QiuOaK1d3Aq-zY zWg2}r!y_V0buBD|DZ0F^WpJB9^s|*RRb{pG8?`dHP?lSRK9!8bMftc`vP-Ch$fN!; zi(PK9Q5L(xVxujl-Oxwo<5F3}?Nnb>LofP_9`seKv)El0n{KhQ ztQzjN((bX?0~UMGVlyoEki}+NY?j4lTkK(rJz}v(E%unj9=F&Wi#=hnCoMMDV#irM z@sySJw8iFG?075Rd@Jo4i#=$zm^COpn1?`Is%o;KOQs z8gKN+EcUp?=2+|ri#=(vxfWZbYBx3XQN3i?X%;)(Vy{^FUbWb37JJ=di!HXqVrN@5 zEVa_!u-H2md)H#iEcTwomRoFv#oo8r2NwI#Vjo#-rNutB*e4cSWwF&3`_y75SUvHX zmG-&C)>y2)mG28H?MsWTwb)k{``TjPSnOMieP^+C7F%zz?>UqA7qYCtY8vAPe=5iO zXEZj)HO1%o^1eOppu_3m*cvT;p(T8oFU7T5{3;N?R^m5W{MHh`)8aZS`+6;YZ$8X6xHS;<8Kt!dEvoL=rlkTV z6>2F*JB6#L7}>8mkrofJA`jJKV=JNxSExHEyQ@#;CD)jFygN z(s5cko=GQYslAqhX?~&>I|QO0E^_DR@YnjNy-Jv(H%jdsX#Kkbm^#@Zpv9kxT3TWyCd_uLLyZoVC|+=V-2 zxgB@Na$oL{)CEq8azJ>2q1 zZuw-l+|w=pK<%D@ULJbO)%!=q`gk}^vJHy$_0UhUpA;M5VW4C`D>lr-xn2yvD004s z!Z_Wze^qR_hY^%iSCI>Yq>YMQ?BNnm{vmNf4n}%8sISyZJzPeljv~F2x~$(6+vMYS zpI*PB$Yx)~ZBb+^y}MM_nO1C+hbz3?pxsxh@}gRxLdNQrkUSaVJUWvA;VO-%kcz7{ zo+I&idA8dq?_^x#;abTG44bIqrs8@JH+XThO~leuaifQ6u^cLQYOH*YEMKKhDkh!G zxMJx=xXHt0UD_ht?BN#bx&k2+ZuKz5Q^lx++rk8LBI60SQ$nH2afh8_DkaEHT}1D) zvU1!>3ENbT^|~n4l!ch4n}XvhlVW$tlP**&rxaqPh{a3EwEI0gAk%Uco8jRheF_UP z)1%klsLoY*7Sk)~ho4HH&Gd&g-i${)e4%~_v>A_jc#KXSkJI1<=6HBQO(W<(K;uax z&*k#Aw&cm=;b{-^JUrv!Sr5;7Sm5D#4=;FF=;1{VFL`*`!y*r_czD&rYaU+ru-L;A z4@*6~;o(gWZ+Upz!#f_{^{~vtdmfg1SmEJ)4t2DFD9fg5uX6Nn4s3M2%Q^j?2~ zJb`=xkBoc-d~)v**iE3cKpBDE1=xSAkbdm zM1c-e8olmEpp!snfi41F1-c1zr>D&Hd|BXRfu7WY1Wpm?CD2>oRDnJMrwN=c&{v?J zK!1S&0s{pG2@DoEL*Pt-Ap&O!oGoyUz)*o<0_O^xCvd*N1p>nbMhILeaFM{p0+$Gk z6u4C2GJ(qlMhRRYFk0YBfiVJO1;z1+Evkfvy`p`4+fI zV6wo?0=Edzlo)>sQV4=W^ z0x!{PzyuZvydvj1zY1)mp65p$SyY`#G`-npJ$mf=bSm$T-R%km++E%CK8GI zEB-j=sPmSe)8~WBC*)^!ZL)0QH^7~oc5=k%P zB!)J5u`qvQDS5WwB?yyViSzb>L!Nx?WzvLKTJSPH%|)>Z&n~i#?oH zEw(n=umi2@G@UnMRQY}VGd8jHoV8s?XA20ArYgX_Y`*bfE+g!!+vh7`#^jefDYab`kXv#~!U+5>=x8Ut% zyZ3Vv&0p$y!!v%%6uVnGiPj&DZ2MG{T6K#3B|V_vwe%};pri*WYE`6_lbCtwy(bQ~ zvpQH(X4T5i>JUkpRVzEI)=pyo_Vu?OX=l|&QfAfK&#JAY%&N7W)uFP|{`spDY$xeq z1@BNltM-z1P}DlXjR>g;FLMN($f+0Lq~ zlen$l^Ap7tv?|@rNvu5h>P;JVa{Z5V5+5gS{ZzPB^K_S8?kL?okCyZpO^=oII8Be2 zw1=iAIEnN3nts!EzcMElyyN{7JW0}?nw~6aFHL((dWxofBt2ErzLNISw7;y`X}V^o zOL~T;10)@&>6uRAjzM>oKIr$(L7EPB5HCaDe5XG(ZAP;so{Rpj4gPhZTHnqVz4_ZoP&zp*Zi}4 z+&{aobrKgZ*mF`aJc={F?w?a%?Op=#xvcA-}N_v~7w@W%j z(>t7j!|Ll*#8ll0r#VkfY@q3#1@8{OvrKn7^fj?}X?nNwMT_xIhj-6=3f^=-c80TU z_#{p5EqHhPbf%N;Z0LOjZ-!52Im_>>)G55L->-9+?F`vq=mQ0BmLEIES-r5HuGxb+ zcCPc#wT3=a@aFij4?7PI9oZ>d8O$qqbA3AB`ElY|19zkgoO>1((?^`eA05;6=ga+8 ze^lr2n3H|Pw9ez2E_B9L>f2*wunu`b(?w3Nd?Q`oCpCS_S=r^ivs;f|r&eB17raG& z%@)hpXLRhdj(h1c9s69tTkOX!an^4iG(T+h=XLB0PJ^}U^h)MMO_w@@Kd#dyJmZ%% zec9=>_a2%qD|k!&d|z=IOfhRL6Z@*OVa1?v;T1A;xs$FxSkn~+?^QpC*PQKxO-q{C zm9o_hT_sm(hOTxl81uwq;kg;Q#%W(|ji#>`yw!ebZ#XR`PwlW{&E9kxEH0*Rv9!B% z?ArzJO+SZsoNA-Y`q7m3u5;jBf9O@^dj;Z2HayJ%%>QvH7tcg`Y_JX~Em*=kS@NpKH2F(l0dq zQqr#q-X=eXuO+9+ILelM;79=eTDH2J6kxXjtSUhET+Tt0*vlcHgywu`3 z!(DRoAp-ei0i{XRR48X9C~p!}uy{qoD_Oj<;Z-cYo8eV0Ud{087O%kyRShas({k)? z64bJIZNux3FWlI49n|U(doZI~K}L1y=sN9y&`~dP)VFeKU~+0`@kZqSq6vFiyfHIs z7?jY&ax{$`&FC0#M4M&P)KJD=Ca30Bg1rrIVex%@ULN}qHEGYw#PR&EM-nISzY~)jfT44V!_+pS27@Wje>~?2sphAc6d4mZ(M~ZW$ zI8Tc6jlfXmcY&4|mc)ew!!=L^Tx5ik#KlQ3&(d%S>xoMldRYW8B8ibimnXf?{2F0Y z5~B&mL@{N!g5XL4+$63N5@YGV+JHnE3%!Po6r3W)(R;1&mg2f3t|uCw^lAr1-jKwN z1UG5m)x!kpiAk?+5O8x6w-8LyXNAd0+)8kp2I`z|Hv&`WyCafQDW_@a;7-cvTH>xG z?k2cL1C`Z`q}L#*JjK0%2Q!1qe4j06+46o{&bH+PwwzgmmJiwTVO!3#<$PN% zNP3Ob`6SBl2+#G=@Y+y5M)|n8R6N^-K`5R`(z}S>Cyf_RQ9d1J#jdoN@)<2TK=3TV za}q2ecwPh5urEmQVj!?o^~?4QeJKPlCrhy`iC2hT4bgH|hZDn!pfY%kN$6b}c!MFg zN{ZD+u&=JsLgo58)4idA%H&Nc-jd>NBMM2pll0~WZJ0{pUDJZ>>hGBrVs7u7G!$!% z;JJTb1lG~_p^+3H8NtByQf$xy8_&n(~X2r0Ht@cF{UlM(l^qTtp z7hfmw4Z*h>l;Jzd&9?kLl3VEgA(B5*{uIfdDSwINR?1(s#BWLbPVk2YWqjm{KaIj) zbpCD2ZAQ}P1?Lf5Oay0%?W%7S=;ep#?*1v2A;C6JI-vyT`V>Lh@lFW*Y{87NK(o12ACWxJKlL=j#cQ}Eyz(7 zP?fTpkrdUXs9^+Z(zm;j6t#>%ZOS^4+=H^NkvyS#S`<*9z6PNz<(-+bk>h<5)D(MC zHg>$>lxX6VQlqJptP%kZ(`Jm>D~KtSs&U(#U~dUjM2j84J_hinyDua5bG%_evAjMl z9q(daV1EY((0icc@m^EFL99h92L}@!5}`7*CTQaXV~W?fE#;w+R2{Ef7=D=J-%{H< z-UyXphd_1|5{EN&rx0{zfk$uwK-4uv-H49lDuC!HfsW=If-DYT@01%b9SL<8iT4z-Xt`n~pIgS2*4sropasyy-?< zCB;}NuGRwAI2gxFt~KB~2iFsf*PskHP~I5HnzVgy@klH<(|>O(PE zid&7qZOr0!lL}KP?=X@#im660`)OL>P6yK&dY9wzHpvd--Hp4c@6iEem_d23%GHrvL-~3n-=KUml5bJI zZOeCzti!v%5qOWG??-Yi^-w1wpJgykS>F$p};7>L_YyOuGR^o3hu+4$Tln4N}JG^NX2+B-EB84QE z3Qj7#86cHHnjoWr$}p>i`dC;(Z>a&C?2loFIRnC_s4IcGrR5Fi!{-3Zqr3tAlc+#Y z(SS-RR3@mRK>@o_R@D;KQm9T)LxVEZq})A{wJ2+Ai8?9lK~UF#dMVT=Xkb9Y6dDoi zX+Yx?nh-SAz)PSR^jl74_+b;ATMlTC%A4&fsIwLwps0@b_bTT=xs-2}c!U$&7 z#Rzm|s%~21$P~I09A&`KDI7y^tO3WRa6CZ|15QZcM1qqvC__)mlOx%SvUenVv;0$x zr0Ams*OfSx!F>(j!m=Mhe+>#ajq-FYaYhOQ2nK4PI`x@GU=V$SwZvH|oJ}w!csIA13S#B z-faZ#p>IYc@1>j>$@?g0X^Hz&m`(7224$E-`Jj=!WOKE^Ln%B=@4Qs_#HI}MDHmwJ zx-C8;#iK^xF$O*!$%T|p7|H4{GJ+*OX#{h8N((%l!eXX-M)yQKo5FJhOM(bIAIuLg z=me@+UNnOFE;WLlm$bmkDJ)|)ujqWs@G9kU?Jr;jH9!StV`iTf{#pn8NA+jH>9wU z-j6jX!zYxVM)EVt&m*~s@{34*N%@tL%=v36zR?2Trtlp@H)~La?TKH+bDT6Q#-{zyL7r?*qu@fxVJ>Y;^t5~5a#CumTH6B&Gxmi!_C zJqb=WpjR5b2~IJfPa3BZ^fjPg8vO}QGvM?z&L9||K~Uj=>F`5g8B~SO)DnZz7))@M z0cWQ%gy0+l&Q0Syg7Xa+n#KhL!wk4Ejo}0rY2Yov#nhMRW>$@GsTQ~_jS=*YG~n_y zMiGqGKwY9SY3~L90`RK=`mQvRSzToW1IJ2nwGj-v#t4jK7T0Q-z;%?@Ygxc}${Vy) zh2JQ}O;SuS0u!0)=1AT`IY~?JWlW~NHSH}8dJ(6-+X!w?doKrIN*Z?%Of_Iy8g~** zH{h-`?k2d$fEj7rOE6OdZ#nLxo|X1q4f4D{joAbbq`l<pn5G+c2s|oOAy3|{Pr%0ZTh-$ONX>U!C z;+Zs_rT;k%)YV_21(@IS^uA!gi)kz+cu9jYyiB=FOT3cCs|3ppSdqqS1S<_#mBwm< zH5w%FI^`Q$;>|SPB6!rNtAh%~E`?h59yg z3(NXJgEBro=8ZV*t@rCvhM(yDSxfwq##Vw~)8?V>Z2L!H{0$R z97S-n0mo!;EWvRZZ<`;X*2~9B(ZdMle1aA@F@uwsu4l&MH#^K(m3y)jy#j&W!I_+5 z%RaU|)s}s2+0T~!ZF!n4Pq*b6wj5x~fwnx;mV<0L*p_G6@@!iUi6qX+;9R!Vc^Uqa zCb$geXE2oH0uIxV49nm`lHnQt#)UDsC}_5eGyJiOY2ZsNb*ZH;ixm6H2%|7EgUgxo zsEBZpG@4{g1{K26`K0U$k}D&^2Xa@Dj5VYTS5se;L6sm)0pqBzH5%7ta6QTROz^g7XK{v#YF0xjpp})xP@erA!;6&94g$Z#?5W?-=0AoUG5a>JB;SH zPMAtEEra?h0(Y|9kWH8Dt_<#G+&vjI^y6kQ?%oV$lHHd?un<9Vskk>@z|?OZ}YDSdzi>Brh0Jh8L-qMw+euQl#)Qy~~WoD;c~> zvOFRyGI)(-r6KCNtujjeqGdJxYa;S`25*qOX^1+bw=!rRw0s%fruQA8)h+W~q2Htb zeWS59gAYj7MdZT_J|bBkkqsGaB>C77euk(1G=mm?sSZBNc*$$=d4}KrV^fAdNcut@ zzEp>=)Pak%1in_*0lejYlTnYZzs=yg3^r%*J%22OE$Z-tI{c^(z4(KopECUA5q?&w z`Xy8R!4ZDRU~7gyc5>9C)L%3BP5FLThdrKi9zD8EnhI%K#Z{&!CXu z7qg6Mz7+G%bY5yLuGZSq7J*MLsfOCrViEBp$4Cg*34q}ENUrPTOI1C!yf8TR~_o9Lw$8< zpbibyp^-Z5sSb_Rp@}*)RflHku$MYaaMJu@2hFqCJBt=s?4#hm>ad?W+{}7TbkI`S z`?C@U@Pv3~ymhkeS0pnnaZnbmvN$-4L$YYC!rG`qTXi^89onhGVd~Ic9XhB(M|C({ z9Xe(CpgPN+sqhQtthyLovgn#cw=9m#qI(ucF<&Qxqq8_Bi(|7mE{o%{{NjfnGP5{= zvo%gs*_@;fJ=LLViieYx)k__Et3!n}52q-rk4kZ>vihn+KbGD-qr>M%kbMv`8h#VBQuR);!HswKu`)#N=PW6Ud*>q>RFN*(S{eSNI5 zu2zR@)M1=DT&oTbDera4x?UZYa?Fj-;s)9-Zpr@y|V!H8opShH2TPR}pt+FZV=lZXqZFvd!d5G=)g6bwg3(U*n#jpjIa{dac5+!m{{xgASb^=~DtjxAwLRKn{)2`nIiH%w7)X5C$1lxnTF zvUuB+`p*AVsqe~CpDS+G=l-o(--~V5_oHTAYnl}wWUhN;ie`-;fn0wVkHD{@Uh;o70>6$ebJvc*Z(_^bwIlG`s7x^ezl%oT=GYNP z8Z!dFj~jua1Tg~ROAsSal<=QN;4Up{rz3Eem%76U3>Gh)` zL=+|ZNPJPEkBFlFb068IMeVeY?DA4$`-mu2^pW^x6@A2suHer4NU9`widV%kkC4(O z=CePar>QRBf9B7W@Oe{a$44~T5|sFlVw-{wnMy;G&yaGV$qzy<%^kB4pSwgB{8**4 z;D_LU$wDj~MHZW*EWZDTEYg03#Jx{s!6l2XMZUzZMO6DBofxws9j98Ijx(vM{f_Cx zbrk71{NmD;D?#~^pgi$_uR;kbhE2-`uN0b=pk{P_yN71264ch`C(?=Y6X|$tbxX_xu6iZ@^H4P-)Gt8;U5o!Ew}w$}jiTK4jL%J+lc*cdNk6j^xi$XR z+{Bd>x$#Q=_uQJ4plONv!ozyd%*JY_+d@Q$+V52o8zE}6lL*m^b`l}R-%cXLNRtuG zOR#tBxwO#dA|k}O@NDBE#JPxwj@TzGW8V_&$Bb3ewJgE@VHq89K(_B7{_i;Ts#fpFpLp=Qx5G=49)C;Ssf2cCVILvvF2e3A>~6w7QrO*veUz||7WOg1 zK33Sr3Hx|q_Yn38!ah;hCkeZ!uum3tFJbo<_9?>dBkWU!-B;NCgxz1*rwRLXVV@!F z0m2?A>@$TuNZ5mgeU`A#7WNQfpCjyZg?*l|&lmPkVP7EZVZy#p*u#Z=k+3fo_9eo; zRM?jZdxWq@3j1Z_BFyDC+us5eVwqc7k1-xGJ?AwJsMc8);d#bRf3HwfAPZ#!G!oFMB z_XvB2u{-ITU)ZyS{eZCN2>U@{&lUDV!hTrT^MpNL*b9XHh_D|O_G7|+ zT-XbR{e-X=3HwQ5KPBv^g}qqV&j|ZjVLvDACBlAQ*e?kCMPV-$_DjNkS=h^j{fe+( z74~vruMqZY!d@xtRl;5^>@~uEUD$63`%PiLCG59_{f@BT7500=eqY#Yh5doB*9rSW zVSgm-^}^mD?2W?ySlFKk`%__mChX6Jy-C<#2>VN6eEGe-r6%8v2_>{=KBXdFbCe^0$!weM0}fk$*qw zZyEackNgKn|28M+QT&Sm-J|$yNw-gX92llQC`#WdO5Yv_hyFt%e{1P)6Z+dm{zIj| zUFbh7^0$}%4xztee~ZRqd-MtYr$+w1GJU_$-#_x77Wg^c za4I6vkuawRz&fvgAzNUc-DbyM-ejwqgWu)7^mJnL}6vD&nF-rHaJH`}0(nFgaV~QW^q3w<_#gF!i>s|kNAq~ zT>O}?xX#6o`ikpZ{J2lO<5FKQUcI&)`{C8|ukXn?vlN5;rSHiYT#B=TrEhPXU5X(= z7wCg?N^!2R&lC3ff!!BFOL2jp4gX|oSda<-M&Uvq@oy(etN2T5qKo`)!#|=>h<`1# zZ=-}-Y!9o58vYOYz3CNkNs#O8in!ERmlu|^u}a$}7$)@WmmG1e8vx{?;I;$UDY zW0ifiu&)vJIALEa?CXSmy|Bj%`vzg(DD0brJwezLBb#k9yW$@HMPdzaRyE|C+Pqm6 zaf`C~@;+lvVk*ri3;Wi{<{wBjOIEC}vg4m@Rm5#7kBgYcblhHwDN5bJ=oy$=ifKyS zX{qU!y30~`Tk0N5&9KzHmYQj)`z$rfQukYGwxu4h)ErAaXsNlDddN}_TWX%A=38ok zr5>@=qn3KiQjc3|p{1U%)FMkgX{o0y^|YlHTk080J!`4wEVaZ^&s*vROTB2RrIvch zQZHL-nWch0@k%LPRsC$a?^{ud*OXdmsa2L*ZK*YudfifQSn5qny=AGlE%lD2-nGSIfNVyRCp^_itUx6~#}ePO9DE%lY9 zzP8jimipFG-&tz2rM|b+7EAqLsUI!%lcj#P)GwCWDwUc|@hjhGz+R^9-&K$MgHf|v z<4^xaHG7{ne2ej40s1>Y*jB2b7eIt?yAKNiEVE!D=jWKrsoUG^Fu4=JR0xCQ=>TS| z$ZP;htjN*;=0fP^RF(1pEN3MzAHWJ0tQf#b7OWh=Dj^K2v|9kH2GDPgY5}S)P>lf9 z6lnJV)e@+7fa(aeM}X=IR4+jF1!@qWh5|JT(4GP{4p0+;ng*zuKzjwKd4Ld{<=z2o z5yE}^=G-@c`-#LY1GK+D2L$Lqfes2#D}fFU&>;e~4p19`+6L%Qf!YP=umGXGU$YJY z>=?qseb_00ovp|t0@%fh>>9vsR^*WZ>~2LK6~Lpd$YTO{tQC1&0FMu055Gz$1n@*F z@}vOvwBX4B>}A2;0X)UZvrhm|wIcfx&T5T*IS%0dfqj}EFw5_;rw8Z^fd&L4T?R!=clEu&(vx_8E4 zwXll8YK0Yp)lw@4t2I{)R*SC~tX5$$SS`n5uv(YJV6{Mt!D^)zgVmBP2CKDO3|5P{ z7_3%vF<33@Vz64@#bCA2i@|Ee7lYN(F9xeMU<_7^!5FMog)vwy4`Z-eC&pm4V2r_P zwPXxdi^>?RR+lkYEi+@VT5rZ+weXC=Y6TjD)lxJDt2Jp1R*TaZd@d&f zADS|wIlfyWruGQ)~rLOnY_#AG?@lA8SxGBfCG;`@O!B-P=xS6hM z+)j8dZV6qJeAnb0Zq2D5&d%k#0&;xGg&%W!4pS&9`QnO9kk=i4f~h%7%cXFqFQ)r( zQR=&VdUsF)@j~2_V+}(KGXnc5QrsKZYm_~cHtu8Eg_xDY{YuT&>VY8cS^U~dMl8wUdDTQO`0B+Rmg=-G<@oXozqvPp_RE5| z_usd`)a1(qf5o>^oj;Gx@rziNrtIZ8tYCxSHCCUmPFR`4Dpe8M!I!jHZ5(SX$9BG8 zvH%ohmUetpTmY6HsayQtx!ri+Cs?CzqLi`p*gxY)x*T^IFS z)OXRqMMD>jT z4t8;fi`FjMxM=I*P#5i79Ok0Eiw-V2x;WfLCl{SvHFS<}(Zxkq7u{SO>7u*42aa-a zw2Nb09P8pZ7stEk;o<}rC%QPvMNbzeyXfVjw~JF;^l@>ji@q-Ux#;iWG#974IK#yN z7Xw|K>0*$J!7k2Xk}S@4F~r3=F3xpvo{RHc40UmVi(!16=wdjFNaG?G7rVH`#icGT zb1}ljNEes880BKLi!m;)aB-!Jt6YqAakYzUT#R#Zt&8hiT<>DMiyQa?6&E+TnBZcf zi<@2C;$o7E$u4enahr?VT}*Lthl{B$rn$J&#dH^UxwzZKJuYUrxYxx@7x%G&T-@(s zwu=W`%yIFci@7cya`CW>c`oL=Sm5Fj7mvDl%*ErpsxF>zvB<@fE}nAnw2Q?qo^kQ4 zi|1S{aq+y17hJr^Hq2nDi|&XVS6sa6V!4YIE?#r7(#0wlt6i*d@w$sQT)gSx zEf;UQc*n)NF5YwTzKgXkK5((l#fL6FajOcS-dEMmNFT=GUk-bb*^tso_xOB9TWj4=0aQ9_c(Xd1Uh_$)l9}5asf4 z^WhIV_`b#bza(Jp{KhSp=i3Ovnx+*x}1r&aZGyI0yE+(xRPFp^Y(#5^k$u?BJ5E|*&32Ujt{eEm*@8C=;9uIeOuZQkV4j7>?%Ka zcN1JoV&+`a53cPz(8uiST1TJB9!{$kTlFrdhSrt4vKm^?S=)8gsPg;zZBf7A)%Ejj z;I!?rcF}9WuD18OG?!at$Wl8#Zatojw4qptMlsH>br|6V7ihWo>PY{46CyRZJ|4eYP^XZN^&c3uFM2gT#!Grb!Mol*pBtUTMHNq-FmorTdlP5uL62U)Gxvml zc2AUL7oX3~|LnfSNhBZN`q#XuYU+F@$;&rcU+P;Wy-m~GC7q(_9nQdE_4Qg}s_ul- zoF^xmExzy6TYOJf2*wuwZyX(?w3Nd?Q`6 zCpCS_S=r^ivs;hm*K-N)>4LY&Ka0gO_8A@ftm9s~OvgS~@D}^AOPuxF2h9)L_jw)r zg41B_I=yIlQPZW);E(Hc3D4psO<#68?Y)Pl%L?97Ki^lJ22;#(%EZ3vY*;a9+>V>k zFL%=Q2Wz^b;JxbS@S3xIuxT@s!%Eq{hOUweGDBB87mRu0vGCjsUE{Q`wno#}3*KtK zv^Sgh5M-Bec%_j-g$Yj={y_saM>t_ z;m3NweIn_ndUyBFB>h~|O_F}0>6emzRq!_Xb@*D+Z*=Upl76S@W=X%-bc?(h|DgA% z|54JPH2qo9UkcujejT<-`m2upP14^r{X^0}HT_G{zct+^>+9+ILelM;79=eTDc|lb zu-Xd8+vs0>$Kol&(-zMdp0#+1;iVSO8Sav|pV8yv1!^`&p6|fs7rUz0m9r9*Hwh|O zyrSWiEMD30Di+_(@TwNCW_Wdr*I^YS>^8W>hQ4 zs4g8{ryUSF>P3!*R!)tW(@?)D_Oy6oCTJMs)WmW$jU3JB7;r?JWz+mt-OJ?E+)A*w z;Vmq_kI&0vUv445O?i@P2Z;mxmlz+!Ed#hw0MF+TZV^Tmx0W zMMm(Iy%%%m$Gm#o`z303=}Q@VnINc|$4Iiv`3%~x6JO|y(F9{e5I4Rdxl$57=xbD41!szJ^j{nKOK}}Hz9Ac*^lAqM-@xx62yW8AtA`2H6O&%uAmC=c z0iR%!K08e2zBUB6X`s&ib|Wx_zB?j0m2#Sv4(_C!t|ji`c6J2!XrQv1k@Ok_wWqi@ z@L(oek@7xU&a&nGww!It2W&aVmJix;t}P$3<-@j|XUqAvTo7)i&gb*h_#Ev~eRZh0 z&nX_)+CRaC;hyAA@Y@o;ah)&NkKEvfRCwCt#xeVhadNDHd;aoU7Ozoo*$9>pJg z{=npqbxir8krW>p!4p_7#Re^~k#Fl~=qCnzngoY1KIel{)(4yT;`T4N=?~FYd=Efy zExu0T8-i~&CK}C{EjyJ&MSK0B-Q-a;|TlT%( zoN$_>-h;8V@{z7eT}}9Fv;4Y3*P-4cif43<$jb(+9x2qMclSusTUV##=5l$|XI|01 z@QE_sMH}dVgc^1AbYgBA)R37qa=cH%cG;7%aj@q-n(!|qxeG^ACt1ZCPQMR0iq(E` zdj&Dvr-Pt5!QK+6h!#77eGF*NU3wX@pWZiJ4YQVxcd=gwwGYDq^d9JVyh#;s5Npve zkAsO0iBJKJc$RHKuqW@m9D;`m$t)Y^gB+R!cjortj`tmcotryG5>4~y!u-32s2huH zmPdD@qXgP3?{B$$Y>19yRP#J~FzN)y-_wbGl*OKCPK!;wN7m!rO>Or>&+x1_NuAQ( zL4_I!=?{Yz`M|$V;6KR;WLV*S^B(VV;m$!l9U)GZCH9h{cOY;|aL#>%#Hp-!UjbOb zenO%@{ilVXGtYIuJkB5*AkaVuXA%u^yxY}z4GuOWKP!k}-#FXB5c)ZEG^4p6`E-mSxx(@8Fb#U8+$#PmDaJ~1wHCO>!8m4etpV3LxSn9V2HdBY^2SK2 z-PtEZl0WR{<{e@uwOfqfrI-|K@*Z@Y$x_^E1a4y%x0_U$LV1Ug91v5DU{{=`1@3e( zouPL*;RcM}-ME|j9vx7I8I<=r-b~XxGaYY6AXvBij9?kFw7|i6+|P8g9gj;WwRhGb zdCVbrPy=rk=2Aao%3-Y@HfKXIPm1|QU;$G-Vk83}HKKkJj~Ri-8MrWzc!Hf~k%K3R zo(j>^M2j6fL-cHv=sC(ITH<*JFA%&KCRxgU#-9jq*MJZ#)8Lg5yh^}!SRTq1lx(Bd z9B)?8VBEZgOOZ&fqFfzG{;daIkK`MaZ$|Ph%C~L#j*)e^&@ck;G4%aNuBH6INY-dw zC>(Ci!k;^o@~1rO8MDFh=9tU8QSVQ$ZWA9%@re|lYJtxje9lZZIo^CflLEe={L=9j z1YO`O2VWC>W5Bl#z9ZOda`@iC7J?rP_>tQI5&UdG>pa?UGT7?)Tic;6|IYPS2fs1q zcgN$3HJlRv2n7D*1z_#}(&?4>TMParDmL)d^~7P(XXOP=~x;f}$q9yK8S5YEjnKQr+(MAgF6VM=lx&8W?bR9!&_E8o;m6 zn-T1#fohaax;S*sV{dv}7%$I%A0rsLuMza@Cq+vwa6}#lFp~oVfP+&0EvFUH!8)dl z`;YSxKp4>`*mS#Xzz=)0!D#PIfolFj_YG)~qFoIciF#=tg zs+*SR!nFdyQ3iBnpCCBafa6j)o}h;T-SRk*;3N&o(3A4yNcN)a9m(D-{}dxB`e=cg zd7R4Nz6NkL+mE2X1_hi(dAgQ3BZUD312s_B@=PNzh`zyE;;atdXqK)lys|#W*c+Z3@>h-SsJtA7jHgXT0|EW>4RZS{85<|>`aaMS>r(iT;3HFC2Cp~X4JmA-_hSvpa1?J9 zpGNXCdOwfkCdw}&`6cC7M)Ks2*0a8<)7QpB@r@SvHihq)ZnFku_?~i$Eq^eQX@4{V zKQZ)YEx~Q7w-Wqnz;7x1PVk2We-iv9!QTYiBv20>Ai;Kmf&}W3Q$p|ejbs`Qf6kUl zd+KY6LMeY)oTkp0fNUBi1f_ZtcjVG=3Gy1K-d0YE@<#AdSI{DXicD3>mX)C28r2DEXrO{?O0l~UtV=B^YD-Z^iam^AZgsVQS|PBk1_m6HM8;L>+XDx|SWyr9YBiG|<~A?Je^A20Ev41VIL0+*#Rg5Hq^T%N`# zg3%hNOEgArcF!*==)2NLW_6Vj3>+)P)kZMv8Y3`{SzN1S0@qPquVn$_DR0nH6@H@> zH%T$U2ux(Enb=mob_8*0i@Y=vJKiZX>uo?Y$g;DQVn6Fx7x*Y1~OL-GIB& zxSQY}17@UgFTqR=yydu$dRE$dHOTY+G-eY#koJ}bU``qj63k6|ulb;WhbSLTdn*I~ zyfo$$EC>J|;c$60jmL-{PkXC^n1yLPL9i(8ttP;e=~DhA_$iX7Bcj@DvDw|e7e6%7 z|C|Qu>Mzj(%8rd*~aUPQ7V4H9^r z@(nFc)80ElicM*JLGYyps*%1*i}k|SM$q$3T6}c>R*LV^;kAC1#nVgNtMmlEVOP;KQJ!Tyssf}V0xln(?d zs9mEgGLuTuTRG!D%|-a!wTdlwvt`vtqFM&knOThh1&{7(W;}lNQo!!PF4(8#19^I$ z&)#b>xVGGf{*1i;h$DEKSx0*?Adk8Xt*3!H(}6Oye&9g^wj#f8X~^J4A=;DWvMm~i zvI!&3jh#%hxS{N`mk9`UDGvKT|_9r+%166~Ajld!Fwa$3osuOLa+EjfI zZyNy|nn63p9A=WRO6>!I4nfPDEl;SU31mT?v?!o6GdV&_49Vjhu4T^+QsTTkpXHoS zFf;(c5gcs*-%NG^b2u*JZSy14BKLSHdKkf+ zPtXFx@;HeZ^$a$#4=&)zQuK?p`-b&#je)+-Pak13&Um`VsxxvMO zAUHpRq0IAwOppsN?XV0kBpIIJZ+rZFgKow@hA9`7dWoejwbW&iVre6c!pICRXU?M{ z!X?^hk}(-n2=WFW;9Ws-WkmSU?JAP7hVXAPsjtbPN|2_2an#oujmz@5o@9I`_!1H~ zaP0Ek`M2_`#ySpv*Wt?=heGhU?!2A>*axmy(ZUl9kacC`X;%qmlQq3?6453w0h( zun;UFdD6tF6i->|=}2KQW1kWFS?cGE#*z%4Cwak;GQ3E=G}7!YFGUJ3)4R-QypqAI zB+DbRB7@gRRvMxPz$&BEZ+lkLza}DAgrH~o2}R6rYu?1QnI!> z)KP~k^E}j5Ry}p_x14XUPR8GjzP@5F@w9ldU9;$x#Zg%tkwup*j?AKa7JI6I#_G^S z9h#~`Gj-TY9rjU&ebr$P!_GS{4EU*$)dH2 zZlexu)!|TeXr~T`sY3^K=%@~dt3xNwOP$rO;u##B#W7hNo5gWi9G~U)P5eBY#R;6? zaiR)6NgaBs!^!Hf=*Y~8R{@V9R{ky znd&e|9R{nzS?X{$6AsDZ9A%%Y4vSUl^OW_Kvd&l5P<6OK9U7_wSl?k;T&V18)M1V~ zT%-;cGrLQ&xJ=nssKW?#7)g407Ne9sS{>>*sg@X%#f=$E$QbiV<+@58?ofSutg^0F zhild0A;qp!*7fSJl%r^T7B|r5U$FYSO?Nw}UII7y=4}4idWL^d%`fpLWa}pU_g)8P zI->sDiUOKX6;$lREN;%KKYO2BXzKr$$1T|eCb1{v`Bv?Xn5_DJf;SZ}sNK{O+n?rZj``cdO8m*7|JpfaPUWAGV;Zxph&!{GuGC#r zyD4?IQuk0*$BZoQ4gTP~Rt_^m3-@I)OW61OHtO=;q6+lO2*h;%kJ3ZWY#H`|6mz6_ zP>Q)yJQRppemTzv=MspfDZkJ_G?ZZv`@(B_I5$*MZ$W5^`Kr;>HE4T|`-DmM3vZ&tCnpJ-OGx!+pTtoR@svjzD_(O!@rM!keDgMBIN1T=Lo zVZbX94SPuf8$w3+iqPC>N=@JmGS!-Gq4!_@IJV4PyBF)Hv1Rh*x%xb5#+)bV|9+l& z1d9E_#0cCJl_@rH6C;o`W(0Eo!{QMrN)R11z63D>MG60T1n$zJb~*xgd8x4@P?Rc0 zV0^QR5h$89egtx39d==X>ckKxLI=0MRI|9FnEpyk7K6_3GQP=oCyYc-PTjs7Ec0a|IxvPd<&L3+(M`g~778UVZ$cteowvZP~&tJt_ zf*%{hwS-=SilW5$i!VxyKT*_w9)G*EsGW|#U0!PJ_!Fgy@fY8$V*H6_731%>xbgRU z)JOi$#@`>YW$xPX_h)RGyLSBj6_qK*-`~+~Z(Hnbj{z~aJ#JmC7M|>&{$raR#-Auk zjKBDz#P}0MiSY+fRP?do&G6IME-h-O<8POj8aw_(sbc)aH>((b+oLNe#$Q2>zj@)O z%(B=%62FDKn4=l+Klc$)l;|VzMTtHliu%ueWS17T(>}7xOO5R#qEyjG;+s|U5huEW zJL@CCR)S5zjoS3`IbC8t`}294>H_|qKBM+f&-kWzL?iaH=TnJN|G8{a@EKArH2Fcu zrMY7k;&YeCf*-4N7W@$WFIk9%qsU@&l*RY|kVV?Bkhu4WEVf2jDbCT z-EQ&eMAM3NY}$WGC)!h_V|(g!RYiH#N>IJ{{A!e-W^{hLhi0u3)Yj)G(uwmE>3DuR zT^*5b57mLQ{v{FZIWJnZvOV>4p}HmJ0av{eeN#mJ5;V}Y_+N5s80FR|%5Bg1+{8JF zy78QJ-9&DU|1~#pB}Hz$lK(xoCM9SZZVE5jjg8ezw}prhwco2GHbT^BClR6-?Ic2s zznw&gktQRWmtgPMb7`T^MMQ{m;n~JTh;tDU9l4d5+6gmm2Qh^^avQP0U%Y!*;6Etz z7w;Sv_zw>K#k+Q}roSdd=Vuj5YAf5)jej8r?j9nNp}_;c+}+&~wdg?)suy9m3h zu)7KSNMUyu_EEwe-9y+X2>V1~pCs&_!aiBpy@cIc*ry1)kFZY_ zc3)xl6Lx=LUzLyAbF8qh7WOs59w+Q;g?*i{PZRl{F6=XeJwVt4g?*;52MK$yu+I|q z*}@(o>~n;DuCUJ&_W8mdD(nk{Jxtga3VXP)FB0~}!oEb`}rV zE$lJEzCzen3i~Qyj}`XS!oEh>>GrAqp)uh_5@*16!y)+zD3xR zggsf<5HBN7xSvd#?ef1NZ3yb`zc{RE$qd@ zen!~O3i~->FA?_h!hS*6FA969uwN4P%fenJ>{o>Ss<4*}dxfxH6ZT4BuM+lZVXqPP z>%x9R*l!B^En&Yc?01CyuCU(|_WQzKE9?)1y-wI43i~5ruNU?PVQ&=n$HM+Z*q;jf zGhu%&>`lV{LfBsl`zv98E$nZE{jIRS6ZU3de=qDU!u~_3G4r?CGL_TR$ZCTvgG*QBwI;9#EGr__g6DUFA^{Mig&TuJdrih~jO^bwv3vqIjEf z9Z@liDBh-AM^p|Yinl4(5xa#E#oLtYh-zU(@iyf;qDB}|yiK`|*gcFW-lkkd9LBxM zgElYTq&)D~4gJMiln4F>p}%2tMH)p{e4E@F1k_Y~6PEfz%P05wNJ$EJ#{KZ?62mXUYfANOofxk`YFW!zk@V5*7 z#hZ}_{tltPcq{V2-zoHWj@tK#sD0aWH}atVT_b-t=|3{`7jHry#OE}t&D4v;coE=d-H{k?3qIh;fPdlP`enM|MqIiZvA3LIW zjzT{>qIj0#EOvAUoDu9IOv?#==uNA2uzUTJrro!Zzt!EzR5rA-L0YsWveQSdtTw>Kf&*bX@#Zd8At6T)E?`7%tuEv8q* zB|)>zu82#Gb(yh77;B`lE;rUFV~sY}7-L;wtSf2ZD)tbTGFI7F3;P;jj}!K_!oE(} z*9&{Rux}9djl#Z3*b{_3F|yfctl543HKMhL-!>#Sn=_cDeYl?%_>MVmRz=*R&V{cX zH1;Issrh7K-x}F0Yhy*s4*EmQWJNp>n9Y(E>#K74$6pn3o65KqKY>ig?WLHal-f#n z2Bwx`no@UKYPzM=ez{TP-Ilt?QZpQPHQ zW~s+5wa`*eSZa}_p0w0cmU`M!i!JqxrJl9abCz0Sspl>Af~8)x)KW{mWT}@ewaikl zSn5?vEw|JPOTA{Pm6lp%snwQRW2x6I74)80O7W`dk<0zQw4xNRDYep4t1PwJQfn;r zx~1N*m0!9p;Y~}uWvRC<^^T?9wbXl-df!rOE%kw=)>-O9OMPUi^_JRTsg0KU*ixTZ z>QhU7W~t9DwaHRnSn5klePyYyE%lA1zO~eMmfCEo?=7{(Qa@PgM@#)=sh=(Ni>0<& z>Q_tsCY74h@hjio!2YQ1-&NoIgS~2YYy9c25oY`Qp8pk~zXKHRXzm4&f9~!l4|X&! z1hCA432yw#9FuD2RTjFfv<)9=BMgh7>d3t-g%`pr=-K-C4R5ulm^?H-_70@V&s9f9@;P+fuQ1*pD2 z4Fc3qphf}OQ=rBHY9dh605ub6uK+a<5Q4MZJAf@hxR2kQ`v!17k+@}m_7~`Y039gM zK>=zd(7^#ZM4;9IY9mnF039k&y8s;)Ahh>u)**l$LwL9kI|Z<_6?sGeyI7H31K7=q zJTidYt;nMSc(fIHOaPCyB99B;@geNtSLuWRo@hm$6u_PqJUM{9EZ94Mr&xLR3E-(# zWM9Hrt#bC7}i@|DX7K7DYHU_K3S`1dJwiv9IZ!uV{<6^K{(8XZ2vWvlLi5G*_ zS}z8xMPCe7tG^hmmVq%?tp{VUS{TM)wL*-+YN;55)tWH|tHomsR;$Putd^58Sgk8# zuv%coV71bW!D`7FgVowI2CGGA3|6br7_641F<7lnW3XDN#$dH#jlpW^8iUmuHU_K3 zYz$Vb+8C^sw=r0)b7Qbt@Wx=Z@{Pf22^@pfS~v!u%h|-o=lS!=>;%rCf%D_>(0F`7 zJRTO0FO0{-_#HD>THHT@rR9NrnetuCY89(IipeDo%aZiqC5?YuM z*iVt--oRd??3uKYW!i;m1NZxtD$(kJAnsYr$>G7A!}m5Oy=O5u$6a~U+aI3gOC(hO zzWm@T;;BPX<-t`{L9~DyW`PCtb>u-iTZ|xaFwwzFLyQ^U7Dw zS1;zUG&qHgcqzvhtN4xU+b;{=-hZhC^J2_0!C&!hROfHNb4aP55h{Cm4l8*2c#W0i z`yp25uu6?2+QB!jSZy3@EXVeCeD8k_Z{+Z14sYl1P7d$p@Lmq@=dd=14{}(S!-qM1 zl*9TQHsr7|hmUjkB!^FP_$-IdbJ&!_7dd>H!&fb6a9RAAT?;N(};N^fEwsQw}W}ZS> z4txVi(uLz9fZFxv1`< zhKrgm7N)Sfi&`#f|3CK5J3wlpf8)E^a<_B4pooa{j)f*gDS}u~v7#ah2#SJWL8VAX z5xb~}f{KcWh$vz~>=irqE=pCbASz-*^04=NCdnk<-0dN}uV?wa`v+m3XTF)4OlFd7 zc5glkH56(p)KaLeP)DJzLOq503Jnw*Dl}4Ptgws1t_r&;?5@y6p{YVMh2{z^6!uVY zv{Y!N&|0C5!k!9yDYR8+r_f%ZgTmel9Thq$?4!_GVPA#)6!uqoq8y;mh1hz9gA@){ z=&EYs5QRe(4pTT>;RuBz6}l-LrEs*uF$&!kj#cQPaGb*N3OyBiDfCu2L7|UAUxgDD zPEzQnaI(TF3jGxZD4fb&k{GBkNZ~Yv(-qE8I8$M;!dVJuE1aV+gjK{bRAHFHaD{Uf zMktI_7^N^;VT{69g>eew70y#QUtxm61qu@tE>yTk;bMhL6fRY`jO)ZGT%j;Y;Yx+8 z6s}g7tZX{B z;c10u*oO%`tFTDnIfdsHUQl>Z;U$Ha6<$$TtnjMBYYML`yrJ->!dnV&E4-uduEKi? z?<;(u@S(y-3QH6|R`^6=slqaaCSyB#KZmjbsrDieg9=K^0*;UWJ^WmvGU_qCeP&74W;W z6qj*Re-z5gsxDano)?wU*dbjj5{cAV*skM!!)7o1^q7O!FS_KI#Dqro9`^pk#UGrs zdCh|5>nb(uKa=!gfyhn-AkL_r%(5V^C>FH~tan-sGPu>ktetS&R1h4oRn{)hE-I(3 zT_^AG-O3l1Yt(Mqv+e5E9X)-_Z4KkrwAwWBQLw&SOG0XWx3=}+fn&yGnmOgx$=bD? zM%1<1cl&VRD=q}Mo+-D!Y+3`;;D*v|WWeK%1q9UIC2Kcy%H37Q?&iV7cjsNQ32&8A zyD1^lQy2Ymj?n zb&6^)T^7|gTvP|yXy^EKtM-;|$E@AKDXNon_t9?X06WV@`$g?5T^7~ZDQZ9IvZ&7C zqV|`K_KP||x-4pcr>HK{Wl{Twi#pJXTzkS(SBf(jYV<)?WbvLCtX@{e`9Ii-tcXlm zC9-w*bd^Ky5HmavmF{82JzTm+823o&b~El#65D%p);`iXz+zHrOg7g>>E^BYWd=SS(nFW&OrmspYarp|fZJ*&>%dVX9g z-OIA}CE??_+=>jX*lW_vG7k3&Ua|Y%cS%{o+90AjeDJRry6&fb@JJD%zgQKGYD_69=g&8p5JJI=hLlydi$|A8TV%E z^Cp)*;@v)PF(CCB)}|qojeBd>zS$XWGp+dkzI$8Np5eH&te0-vZarJMWT9y_IcvY&YZ~|Yto^K0?h97kss7`XAN!)U?B)I!dgsD-U$WwL1{n9{to@=>!YkJ1 z0e+wPv5RH@`tGapfy{Sbv(6g#;QijQ`R?mhryXB6?i*SAHK(>WttQu8zfZ}Qy=B#X zw6yy+YrDzBzLT}za!PpD+Hs8ksOZ=Bp4IB6U+a5)_I}oWSI1(8PC#BPx8PbT(f>HcEeU#0t-aW_i$cjIo7?X^vNA>GZ!%}Te}bGd4`ur;2?Uanir zRa>PW^Zj_pPxyW^4OLg;D24+{|+G~fa)+({rKMzqyq52Zu*UYg`S>IkH=1v6oi=d^V2q_PP6QFgL+3o{@U6-DQey%mE)WhbCTxe^ zrBS=OTkvHh?9jNv7smz-e$m=O@ zFw(+}l+%sGP2}m(xWyQ{s2Neau2ZuXx4Jo)$zGzoEi7k+Kgh4o7aG4B zqgaFae)E-sLH|80H~Eq~+U{|Sau(`JIGH>F^XpqaSg8SJL(3k*($I*=YVs}`ThU5^!AYc%aJ#xO zBx2CmjmGZM&=E~a8cltJ(1K=+Xl^j+dX%@Y>|t&n6eZD;xveal*ZeG6vlaDAUQNqH_a|BawD3$5yx1r^k7lVifrC=yc>CUONe7-ojs&D&J{S` z1y}bJ61~{;-ojuLPY@D)nBUhkbT`#Y<0M-BgmtooQ)uP+#q-~~$Ua*a%qZQ1J9!cH`DDZ4Fx-<3 z+y|Wzu5{1;NGV1cVNb(o)-=X)88Kr?DxZ#VbjDluG{0}plMwmyrI;Ya1x8?^g$r58 zMZR&dg-d8$Y78QLDK8JC=C)4?B!4(ha)#ilUF{1V_GB0T?vA2sq?qChT+1S^^Y_A3 z%4xo2XI<|Lj>{X2z>OBBGxR3Q!!g=7<7VnxOh7SaP~K|UGyU$FY1uPe!M5Gz3)V5q z2<%ye+qvIt%jUz4reS%;j=s?_jX8|C(-`(F%%#4|ub9oe+dn*tc~act3(V(U_xh57 z_xYku6!-fA4=`|nEAb$Q-9ifw(R$dk9-;N9g~w<;9_;i4<&#F@DGN{2c*fi1Sq@8n z`OUSgJmYy|yx1oBnN*8<5uuD~0Ce3SC6K)y}+ zPFTL{%Nl$x@CDvy=m&xPkn$s6@-!~-ghikVzsN7-Z%vjmW|?Kr@z48mgR$2a+Z9r* zlwy?;_|(E@EM&E1-{TaL#pje?SoVB(OnhnKD;i(>#y1w$&{*r2@U4Y)G`{nV?}_Z8 zvEDb@7NH$46dNpuZin{#Tg;y<{LGkNESnFP-sSRFSKv3E0JeUk*5y$ZlQ1R&T<&{Px*%Th^nNaZ>B}QQH2i# zEF=yG-lJd!x+VwLwTn!dCKM*fxBY3o4NC1hRKS1DCe7eec!xSiu-(l z`x*E^AQw#mkhh7|Fj6qkPquEb291u#(q}z#B2V$u@&jMsL*{*CB$mYRF^y0B_A+>>pSvuE<;-1SjA9(Z zo5`v`e#+d>0=b&<^FV$<`K2#;aEF@PfNs-Qeh$UgM&O$m)^NYI#wf6vEl}0g*hyjKp8i&PS zbH(De{th8q$RE(gsS|!cGL8Zog@yu;R2+&%kumgWOG}aQ1y6MaBO<8Cy|xR>?Tyr< zqLLAOZNSjVMqXYz*C+U8LAmirtLB?r}8Xeoc+Rn?7Z8U$W^fj6fScG%&Z7F?1!ZeStR2 z+tZiK+shX$rmZiS)6NLAkD~+k+uJqJk<4-)Z6{j$m>7L7JNu{pV16sW-2LMALT7AX z|2Phy(Isy4?WX>$bYL6@(Ky%`#pp_TNFWcTJj_TO9>)fos%}Q;*EjkB^C)8! z^9P}PaxjwLL!dj2V|`=KG>)Tjyl?E4MlTw@eWPs}eQ5Ocjdpx9K%<{A+ywcTJIXgk$1#S+SYzl@G%jvG?cGnuGw(cKvZ(WY!N3VpT;L0aP4opWWDyq` z8NtPrml&DFrIeQ$sVl!+iYug;$PUQU<$;<%sI19AIRH)cT`57Jl|w_l@y zhvJ3&MeM_L9tj-XXOG71*WEoj@y$Q;pD>0#`%fAHmiH8MpZ1Ms;&_(EB4ZTeIm+ja z#0zn}NaH2ncsY(&Xe{=PebRW1#_Pt2;0?+*jYQ`(-lp-6Z@e4FdoerYVDvD`QIPh%yGRmQO2!>81r#qD?9Jyyr@IgKxjp*!izxOiUp z$`{P}Ixarke}Y@qQ| z+iC^RRjmAdb_&ttIG;CuO1C*NsnWZdtB_dqL>3}pWKG(()=5dmT7&ii4 z_=9QY7Wf7~>le~U8AJD#@&(6FkuR8&mLlT{RM7P2iY#P1nY(?$c^mA!dFGy#!g7bO ztQ<(}m_QX4wv%hQZ~LkyY<{1T#m+9xx^IyyPb}h_{b~%ZZh-Z=`6o%teGQX?1JkI* z(Avh(p(o4GIv#zyE_;z*qSRw>ea~vZdf68ZJ=us62l0l&h+R!_IGCU3X*BVTu4y!* z(cCuNLZ#aT&dti!tLAb_?cQmeLJ=Y~r!?a{7^)#Wcr@q0PuVeX! z_ND}GrgcjK_4F>7!KNLN#!Py*CD6!g+N=a_r!zZn?nqz`ojVim*Ee(Bb8?rExSRR& zJaj$oVY%M(?|dI;ufOuVHxb<)ySVk}!@DoYy+45mSjGZV#)GT`3+X)M$LKvC4yi{1 zg-03tn9z??KjCXUnZQ$Yp7xz$JVX6#pgCL?1q#nG_jzCAg#=!t^HSivoWLt|7W-EDfAx2`s0x!gq?Xl6qBwt32tUXyMZY|G?;cd`6cqkXLI!{pWh~h2DIrH+(*f z;47VK$sauNZF{RIzU7abuugBj)0^-0rU!F>NbsjpSg(Umh{pH}Dg2ngh6H}q&O`jE z!fy#IymCLZX%IiHRA!nvZRuWzR}+v`mwz1cx; zD(lUTdQ(Mjb|N&rD$y!QRMWD$-qg^W^NP5srBk)_=3Kq$q>pHbPSw$yMLf1n{5Cs@ zgOWHTi35`8lElGDbWNgx4rr)1jr69m-t3|`yXs9-y=kU5&GqIgw)sj6d$27nd9XZW z-j>k9ucY{aHi@Hng~!pljAQhsyWSkDH$C*` zIK8P5=jM2w>ZyZ!=~QpMIf1qINusY#kJCXX>eNYk(@$?s)|*rGroY|{(3?~BW*~PQ zl*DN|eY)N}s`oxar@qvwGj(dP-kha3_4J0n7RA{~oTJkd^=6LV4Aq-qEN*xbBXoMa z-i*|nQFKQqF-E7y>P-zR)&k>_xIBSL2|szB&N^Rjrs+{WL8mUzn~U`3F6~{cQ)PW*a;I72)b+1d};Linze_a$KWlMTB=1EvD$R$v<<~HS)IE64xx2Z?_m2wf0_ zKA0<$aNPM2*j*1!t(=K-nuLaz6 zQN!y2F8z%yau3V3D&1ReOA7tF9&NGQYkg1F`h-U%6txPbUG8obOgqu7f@$}m->vv4 znS;FjNq|87I2a|w8!hq%0h5M^#ef$A*Bd1fEb}~Ozw9NK`?W?8Kr9V*cty@S%NIeq zDrcSLg&=ijpul8_8Mr#=Tfr_9GmvhM8A$BkV)m|{+U;Rxpr}F2z}z*687OMl>KRzB zRh2md%e~f|Gf>njW?=4a6*EwDYwj7y2h=70IW)83%bX*#d}rWSIqNLn8TfV1I?Hzk z3Jjf?fop;pxHh=Di5W;Y#|->7*9;Ujh#8o>1~CIg4O=|}%eAU9XJEP4T4DyemrhZu zn1Q*wRm?!qtzrhQlPAthyYF%i$MT(a-{-8ee5c(HIqNL1X_s;yJ=X_y&I=wYa+A}= zv=iiX@#y)Jc$VPDsSzfHUEAI#>ijx;Q4FLI?H$d{g$)N@|}MhgF40h%S}!f^N#^JZhIs)>jzH`Q0H|< ziTNk067w&2Rbu{$s>J+*s4Do_@Rs*!tX!)qbN-cktvTnPs8!6r+}$eX-{#;9iusq7 z^KYK_DYH1|7|Bge7h{A0+dM`@Rbq_fu1bs%QPozDk#eo7%rR2#wdNcnqE<0Ra(Am3 zBUW$*%NirG0=?#CV^p&A&jg%gyuknL&-ZD12sm~^qr($UQoObh2zS1fDD*(fe20|s zlKdc~m@HX@_}nFm;KwRc1V04-K@sA?Q53N@DB{~K6yY-E#l24yu^}j;s30f9Ud&ms z-=<(cUP*Q9gQIrq6X#Lv7cKCQTJ9$p_M*cDQ=T2Zo!86T3#Po-PxP|bkG*X6+adRU zqHD!|?AkxrPxPnQkNs)(t1Rjh40~~Wf??0&+u1w5YJy=e_7le^_T%xH{c4E)wuM$- zE1=ca4*2qQa?|QX>*oc}z-+yFnh)K%fXyCa&$smQTa}S-*z#@4$luf3f3Gs~+j{wY_H6FWpiuqoynH?n z=gc>3`K4v#oAz}G>JPE&P5U~Qk#E}9sf>KnzJ1EbH|^_OM*bRJdiAxpGujg(g>Gi8 zOvlahQSGka42tn%lM|Jt7rFn#UoOB|T(9JJRBXslgd{no8O0x&u z{>k%E-K$QXkLvt_qbnM@bl^N6)$5NAUVrRe$m>l&3od;<%JWgZ9_!)tSe}onpJg0w z>NfCEE2WEY6wwjfHBUB0o@~lbd4_CS{w&j@`KcsenQDgC4E%MZ%43|`JyIpdf1X2_ z=Md&OgtI-iVV*nMXk>*1(z9{B7yN1dO-1oEnIyrU+j zaG_Q`jk;K?UXJn*X}uj`5NRhk%0r|zc7#Es^>I{5MB1*7>mkw_IbytrNbBn;50Q4F zBRoXfNsjOkX}s@j3-PQU_YH_=CmZ#r5YMW!w4B7Vot%su#4|S|2l1?`vqui%neL;U z#Iq_+h9REmrUb;Z1B}W+JUhk7GsLt0jw(;$8UG%j7XK7Xf1m99MSv@&JMc6wXSVYP z0-m@-iaAo;DaBkV?s7#nr=F*r7rFd{H(hDtm{X}M>dCOXDgFZ*TL*{6mPfJG&ZF4! zD7Jq&ifw>{V)Hp{gs`2OCWj4$WOO4I=#=d+X#aZ#GypMFK{4i1GgQ*HYjbi z9$u#;gbk;qt;ofP7j*2sR4?#1+|39JD;0O;dk-OkAGMR-b=* z9<}=gSEq>mkE64B*UCJdZHsKTJe^H)^73@HS$F^ACY-BmMx`HuAp$wv8$YY#Ut?*fyplux)HfU>m!cu{v2SN_x$@m3~b|XbN)TRwh0cfjW3Y@ z2-p_$fNkF-wwc-1k#FEhPs^j*^5{1Hjx&#L`^TW$#%Xlhpa9*blN#NIsr=d4Y3T%} zrMd1iQ@B38BY|;DwW{U*AFIsY!rb76-Dtw5=M1~a3%l8b-I6nGh8K3L37eTS>^3iK zmI=E(XV`2n><$w)Cui85Uf5g{c2~}@yS=b^ChVS^Ve`GPdrjDVIm7Pv!X7YT3vz}% z=!GpbVGrdDd)Nzm#DqPXGwd-h>~RzJM9#1$y|AZD*wZ<~p7Fw-HDQZ#hCSznJ#WHZ z$Qkyc7xt0~dpT#=D_+=Q6ZUGZFfJF72M@9b3?eWO9&C(t!7|&g1<*RWhFu_l0(tOY z9z1AZhg|yFEP?)UFmC92YU5Bn2w1R*}WJziCr>H>;(A+hM0V-

r{gd~G^Xek7;PA)z0L!xMhL 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 a6|frC!g|;Un_(O5fL*W`_NC+6_x}TsDd#r; literal 273924 zcmd?S3z#I=RVEl=TgWz+^{{2hvShbQwq;vVR%N~VAq=Xn>TZ?Qk8)LYOSV#yqcWqa zQk^g5qq|F%ZH#Tq8xQN{=~?XIH83-VVQ0Kxm}P)v29}3mm^BP|X25F@<^z^x7+@F{ z=KLq(#=UVPA~P!D-t^43_#>2E85!rC|D1c`+;h)8_qH1y$9eIZzcbo<_S*8|v(8;7 zN6l7a)vNFOtKH7fYjy@3UVqs1T5I0WbFMq>wFbU(%SONZlwTj7Zg%$key`u`44nrT z8`Xt{WAlrR#^U_3rQ^q!s`X`mp-TTZ*YM{X4Zq

>R6B8%MpRouy;DUiIiPZ*KAE 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 diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/24dbea97-4e44-4cff-bde9-b5bb8d11c9d6.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/24dbea97-4e44-4cff-bde9-b5bb8d11c9d6.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..2410ce4a2b45898bfcdc0de12387bd8fa2512059 GIT binary patch literal 846152 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

k684%_y6P)~ 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

Qs2rW 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

u)cJ^ZKU_j#hr;vgK1L!_@8hQCPP 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 literal 0 HcmV?d00001 diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/2ecb2157-6d69-46ac-ac04-f2c2c406bcb1.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/2ecb2157-6d69-46ac-ac04-f2c2c406bcb1.vsidx deleted file mode 100644 index e8a4f2a3ffbeb4714f072d7d57fad598318a3abd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935953 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

jUh29+ihN`2^&2LgiW5Hw3*VqUKsmz8=$zgF($0 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≪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�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Ν zC@*_BWoV*WY=Q%vKy~biFm2NBLM*8Q12AW?^zfDF`3`45F2ym7o`lBZJl z&=9Q(%55+aPL`HT1*vFdu6Cq2sj&(lyo=t(#^K~S4*ulWI?O+*-BYNtw2hNDx2i>z z24^=AI>Vfdl?zl5R1+qVExAUw~{v7mplG|yTLv>rVfou}bXQ*rVsESZ9n(=m1iF3iF)<1N4wWa&)2nSuFpwHRi7 zNNhZ^ffE~#1hRJ_(Ug-5jx7xN`~?m!N%kO690%4-I)RPHdLs{K>q>g|kT}d2go6R*tb7L?VSE@L_eA7_!2 zha@True=HEi}@yGa7E&Bk~OQ258*K~f!Wj1&UzKbtwW_#IuohXA6bx<9!aBJ-eXu< zg5JZ>J3{fj@`kI8_mOFZv?XD2WgwT3d0UDfujJqT6Y&;K|Nrgr7J@BY9sfV@mR4o? zcmIpGaR2-tjJE_06^-OE-RBL}t;mcxS*83rNtbH$s(*>!QNrqff4`$bV|nx*WIJTn zf6niynXx=Fj3eQ;)ynuCwJEbaY7OBC_4+cuqmW7?rTstRchsZI@~8{sUPy;uwmf?1 z7yOPMF_uSn{`dJEB|P^()$gdfD$!J1VWC|e{D!4F6&CThVCtD#t6;5%^)9S!us(qG zA*}CV1;n~mto^X+iPcc74Y0PrItc4aSYN|B4(l|mi?FJQRY|NGVx@?64pypIX=23- zktl05tT$n8hP4yc$FM$!^&_mGV4Z|@3D&o;{9;uQD_N|{VkL={E>?nAK_NxNS_7*9 z)?2XNhP4&e9#{up9fEZX);F*!id9vt7_ls|8i-Y0tXQ$K#A+;7GqLK6RRn7ztoLE< zfb|iqPhfot>kC+iVf_H>46Gxts)>~-)=^ls#InV@MywWMorhIhtPHUliA5WhLRjy> zdJooiSi4|-2FoW_v{>cD`juFQe`3`YtBF`G#i}FLZdlD=HHVc6t0}B3Sgl~SfYk<8 z6IhL5wT6`j>v~w%!DNdURyM3#VciC+C#+tu zZim$a)-AB^fYk-oy|6mK>I&;_SiNE01M4nW55T$))`PGff^|QvhhYtX)fd)4SoyH} zz#0nc5mI~}%SfgMKf;Ae}7+7Ig4y-3(O;iGmH38OmSYu&LhBXP+H08ipPr;f3 zYdWkMu;#&<1#32}Ik29A^(?GKuolC59@f*amcUwW#IVo7dI8paSTDj_0qZ4LGhuxN zYZ)vT7K4UghBX(~LRd>-Er3Pqn@zAzz~Tez5$iip<7l;nl?$sMtjA#uhxHgNuULi$ zWxWBb1Xh$-`(W*bwHDT8SdCz%!|DdBJFH=_9)&eRz4EMLSc75Z!J;DR0<0mtUwr&9 z&cXzfTg`RBhIB$49$SS|e?oY@ak5>9ZkrL@gOR5&u)N&T)Hr}q7ugjf$KsX@bbDRZ zUIRhTGRZaOT3l=Fb4R2i+PvWxg!gwE>g?+fS_zpji=##w_Svd`T7bo@s{$-$t;Vc3 zF>CYx!~ly~NB&a*78I2I-xOdm>z4y8X8p?oEN1=V0T#3VH31eo%K|KRUJ0Y(LlN^rFAv2c90QquBXcG~D zkXp%|Ar7?sdaXZR3*uYOp;B;dBE_M&SV#4Vv)Mz%<9rf|`HL#aoEnlCFO(VTz~Uro zCrAfMtt-l$7^!EZG1-aoQ!PokM#z&S;&De!nOt6K62@uai})|bH-!NSk#<` z$y1T|6jG*u>X@oCkUdN7sVB2pTZo?)paWZ7`cOuk*&b6x%*T6CwHvB-$Hx)NsSEgK z2)=19grpX+O=dex|AcGw5a)P(20uBOEoHP81#?JiS%oZ0X4Y%WT>dtVnM?l=`QIZW zAoBo@y4bm%0R#nM}kxWbS8%TO}$&8h(EJKXBfR=aY0MnQaQQ!!#>}m*CK-wH$D_!oC97=7zeciJNalIGURz$vko-o%XW&91 z^4~#zSn$1GFl@u4X<9WF>@Jhksm^OyPsp`@^dt1F256Ay;)=C(r-k1Hu7)Pn7RC( zNbiMKx8v0wnl$(79Z2tjSMNnu2V`|c=G{o|jn(%c|1RV|fXw?eX71I8ka<5cA4VpF zF#00H#LT_k2N{nbpQ7?Rk!fP)ULB<|bLpc?W9IT5jhV}uh^%qQoS-ptS!304C}R>b zrXh1GGM~b#Daf3TtQp9fhkO$=mpKQoJ%jW`NPiaTi;?j>(w|2D5~OEf#ByXjr!jM{ z&PTq9nM;2O88eaf6*8A0-$gzdurDKjE?!-TKQ2Z70%Vwss;m=Wmk>#sBMmmaC9-mn z*$bs`PGj-iAb+BU%-YFUr8fqDpc(q8wbu%|}Wq${9-k zA`-$QD7c~`^Y)?v&koXx)y)I9nYo zjmOeB6kpVF|0HS*8Pt-Bf_R+e=ZySJnL%Y7IfqoD?M1b2s5VTQ#>CL*SJS@CaIZZ< zV0zH;4kn>ReT0o+TKmtHJxhsSL)xa1S3{-J{YoKjKNeNW{L>nyVon5#tgqpBc@f&P zVQ3^8Y%M1a^$CL$ktP$HZa;L>BFAQ)5;F*9lA2rNA=Kc*!&oIM(dr7R&Ynfer6=d= zvl=S)WHp$(64RQJD5#bWbNTHeW)TrfimUx7t~R5f69tz!&kl2H{A@-+u(}?;`)g|j z^T2ZmVb`ot2Gyzh$8YXsMp(uGZAsUQG&!!biW-x z>?X5CMH~|;5^M{8{WBq4rV{@K{LrOLaZeS09YswqQN@2{>G4#JD3u~2M=F&f8l{Lj ziBsU$(U0FQQ~I1W(u0Uxv5xZ3xAD61yKtODhB@iw85*X{H6B&Q{qB2(`%Q(Qp?~ko zz&`T2$pAOj0UWLBbI2F+QM`%^!6nIpK~K+Bn6myC=eZ@nJkND5A~Mg7*u=T#=$xtZ z+#+M)LhXa|X6ZcF`S|b6b6+#_+}Y_eyKJ6&Y0ZC}=RSEr=egsLmCkeDF!S7!vUx5I z=!(re_sOf~xy~=obDbkP&)uFVk$LVHW}f>+**y1j**y1X;oqL;I%b}Gp{8sx^W51@ zWRsca9^Gw*xy^o_=Q^$av3aiZpP1*Cn0fB_E^zKGo##IJf12kyeZhII^9%D_XAqpf zHP590gf@L|jMaJWb~Df2V$Ax!FlK#U%s{c3=hEEf!W^7_2D8mPclKhu_B`COd9Je@ zPhK_8-LwL;UqaDLT)JwW8#eRYqYHnY=N{dJ3x7G!9p4fc%I3M_hyOg!_5XwOT&HZF z>s&z55EL~RCl!wIzP2-9N5&1z$*Kdwr=!2d^(f#p#L7bcr#h{a(L8U=Ln_giX1K^VV)sy9yj$5M|fHL(4#wg zM8vA>YU}8sZ^vUp5?KGR=$f0M=YDjAEFBA9D!z@!jL0#x9+z0{G{q$zh4C01Au1RX z?8Iap8Pf`$F?n=g2+>z_ILfEuIrG9l6FxeEmA$cYFJihOhHYbno)LLlvxNEb>&+5o z?5S*2g=X#mb;4&m88qe1^`=H$w@N*DkCCr<5pRB@*)B9G`m`yI-K|2)lLJsP6mRy& zrzN<4FV1wsnPIs8ELs=i+QGOs53M=|m7@4|7sGQneC2Sjk2b3?_)ofbk>cpthUhYiV<$s#tU$g;J(<{0 zrka?)`CsDggQ)a1JjZe3G)7)TqDe40Uqkkqn7lL|ieovN z-TkE2Z64Z|ehWI6-dI8Np8A`-r{r{Lo*-REByYu7SK#UFOEhi7c7ZSnh2m`|C^JB6v0;U?`5BkJRIohI{wY4@XRTDr<_hi4Z&pW#-YREU=M z%ZcY#!Ukkwc{yKKlAFleE!A^)|85L!jBK|u+^=d!&j5_m-EE6Z`Op*Z$^0aIVZ+w*bL3N(KS@6W`@uaLM5QHJ6; z_hpoui~S4He<`9CpbOXdCY(J1YDGQFefSQHyg1PkXLCUZSI^@(Fl7wbvn_`^0&Q-%56TCj3%a} z?`(FJLG_gb!>)lG<53nC*U@O^MFyCPX)5$pE-kHVV$>=eT91o{U0nHlM3YWjPiT7> z+JFXSjN)=%>qIH$H14{Hi&cb-;>w0mTzC#kOgSB)6JLB2tv4&3IQnx`{*kd^C_0Jp zmvolIg%;rw7a1;bVY(EOOKgb5S!G1xqB0_JTSFvfpbUw`ld4Klj8twQg=H*a8p>U6 zCcZKjaXCXF4wX@eIYNs50nukL)2y$eL>YS&(WDR?{&3NGjHxYcc=ZZPCr4xsSN;rb zqb0%_E;5|q;<{33IK#E;NE^c$=GbUU7Rr$=oQVcaanW#wTQ|nVHaasZN<-FFoZ-r4 zoZ-qji0-6ho*lQMvKbPQBwX%xw7mswuObP1t|AFX-=z~Gxew6~BF2z}i|$t+&hZ0q zS6@UA#LRq*>4Ruah=$^#8J=z#1u}$}L>R(X(Ss{bK;`k6G#15^Q8Wofe@zcI+~A@) zX!8sTpGDy!gchUdc@!=|;Z?-o5Lv-1P-v>+EhM%PMVX5>3o+I(fw@cyPN1la3C!^d znZO0PkbWp44VYwL!vroglc2&kkVPgi`M~?oW-l(T#qrA+)d*SXINl8xyQ7UE1CKIf z;D?G!xnvJrAp^%@$U0STO}R>7NMrm`fnh{lNJSw{Vu`rchu;VZca#YUbGD(M@ukW6 z9t#6Plh2&}YI0k?p-kR@&b017h>l;P*Vo7~Lc*Af*j7dSmE>FviAhmw_l~KOlO}<9 zNg*^;CM4{%6T3e~&gba&BRcHuc`!MWS}KE4WxW^iJ|pVmKD=*3CR2JM#tXhbq{vmg`5Y_`93T(Lc*B) z(fMI??u&&35Hk?{^6_pTEPMnxL$U2nbncAUC-BZF#12Bo(TE*`*f4SAiCM9{@+ z-~^l-uPF>WCL=Hj0ppq#^AuvHAZEH6eEH`gXBJXsqw^e0eg@?iq5QKbzZik%QT}P< zEJ1mqdCRfrImEtz$@7u(B4Ssd{7VSTg#RmaUWOc3lTheLnKKvfEX3BO$XS4`{SnxN zoD+zlYQ!Tc-=VWe`IgAZMdyBqc^s@BQyxQ{S7^N(9Erdi*jj>qG>zYfclP2gBP1-} z2wRPi@UHH7XBhfDit_Z6Cs)Vn?_)XYo)T9wOhMn#$y> zC2QaakAtZ^SvKfQhh^}0q_GtsVGlya1xuahxo0**0-fhG)hC}6L=s0mBoFi8&cJu( zxK#e|UT6S8WZYxUBZ8TG_=hZ&= zr&WmEfGqNjFDi;CtmqD?3#)o%A3tOo zn5@v;CcWBKTOx)gjeD`L8}^kEaU)$eX@SI4Pm`X?cxdJVucV`SQrw7-87dpD#1PTcY_ zDtwN>j|lvPz)1v{VEZise%V?<0%p(YpCo~F2_#4$D1kT`L|cyn1l~gY+X!q$+dXJ| z0D(iObPR!S5U42A%%0QAl0X9qRF@6(&&-m5$*t~GU)B~Ouo0>6qrwgZK0@FVjj{@S zfl7z5)fBW-k04M@mLy8xC<3))jjaaqM_WkXJf_x`K^YQgBmr~s26)%r!xP)FWETRT zA>flhw9G6gTYn`LYRVJkWl3ELG?73{sZd9z?M9_$tdS5f1#K!_Qd=Ru1p>V3O|Z8y ze%~4anu=VHLD!*wTT}|6Z9D91k0)-xl3$}j4sN*#6*?hsGXfnExDkPDRJav^+fb<| z0=*Ep9f2OGa0>!=pi&o9x)*^CYS7g7ZUlNGa1XZLg}?&{n1VL&5CZoj@Gt@l^X;pC ztyA+cwGRR&)wkeI1Ue(|1OlTllffvXv2_f#h7oWOcoO|5qW?Iwnt%%9F>NfCOvVzk z=R7eLYoEfJDcCR_M`zJR23}V9+xNJd4001k9cjcp8Bv8r0Rv6trt!Kwv%s zFCwr40kh`}`U-(%2)GE)zUgHI=3?4H(9Jur00FZE&YwWQoYW=XfkA>J8B39iKtBYA zqvUanG$(bdk!bY>0wuUNN}B9LU@rn|5x9&%BLvbB=!QUd1cu?>M-do-CVxr!E*V0B zm8>=M;w*yyD@(_qdy?>R93EPa^mT}%c~n!KUcH=wII}bCGy{kpWbl%SU5H9_)gvD} z34u6OEJm}?jVwl^hL&?`uEK4H#VyhMS$UY1ibNVLlh(^WBw;ak82W_M68tQ}dFsl- zRlJi`@j*PtZR8vETy5GD&)uy)t4+B@lwj5{lT<}kNvi526mvceo{zL!$>DX2N43|H zm?@J@Dt$r%9!W&dR{?>mVqYV63$f3`t}S+k*p0+C3*UYR_It3m!`=n^GuS?{qs1;K z_OHaQDRz0Wjp)*DDRv!cwHtPG*v(*P!On!;6m~1vEnv5S-2`@H*sWow!M+~$b+FsQ zZU;LAyFKh1VE-C+4(yv?cY=L0?2fQ+gq;ohR@k?}?g_gW?Au}YfPD+>J79N#eJ|_| zu)D&(8+LEl_rSgj_5-l*gZ&`vhhX0i`(fAv@Je6U17YXG?gM)$>_=eV3A;1wCt#0) zJqY$_*kfRaVLPy&ggp_q>16Hku*brl40{snX|SilehT&!*wbOpfIScPEZDPQ&w>4n zs!i=huouIA9`@6)m%v^QBES^u*)PDJ5Bo*fD`39_dnW9!U@wF1!hRX{T(nvUdnxP% zu+6HsPr!!Q9A8^KP8 zZIpWUFxZd69-%0-T?~6L>^#^PU=QJ);w{7MWChbAtz~q5RHAT$st0N}C_{*FNK7VC zb>pUfH_H#s0Vx^a@{d<7Ouaa)UWbht*vJ8KGTw^EiO6DXC`IJkHzL4-mPcy6S!scH{ zQT+3NK1DGSp=g@)%`icVSEndOA{6;GO*y1f)JTf ze)GGQm2q;yRKBdkmJDn$AEtoOjmetw*3<|k_OHVw7J)4GGH@x9G0{MG)bJ^&N4;^D zP)2tgdaOf_3{{c;6bBCVRQgRy-gRoV7rIXKwkRhdF~(_1L8X4S_u^nv-NOX%Q|Pq2 zG{T$av7OGMavmyQz@#CV6s!Jb0TXy}i64*Np%*dhoPryn%_ca8m(Dm2g&)zlmRW<; zgw{tDHlKWt%o~n*vQ*Seegf0}Zy| z3&Uhh@SjwpM~Y`=eI~1h%TEI?^XTT7hnYJ+L1VoRWDl~{y+(5-_M0g=zbS{{CA5WH zhs#t6@dNKhP2&SulX9L6mD85&MM5_uoJA;4#p9)jO{xZ9@#PYSI{zS0BfkvP)LxB$ zBcSH|zadZ~|Ls6cZKL4+`#{b4e;H5{Ra^?xL|p-Dl5j2wod{Q&RnNqVzJwN!WB!k7 z|1$0KZr*6BdsrD`oJ3*eMU}- z?-6?(cmAk$oqRXHdAB?7N3btq=}a40N8gve56x11eUa7&RlY}VU*vM0QZ~B@n`y{y z{(I=2X$&3n|Zl8Gu+XyyGBJX6%r z+dD%&y~Aw(xopYgNdiZ*Y&n^T*M5ZR=7Qu)5K11d;m9gKPj`yx`c zCSiXPKJrL#xW42M=7row4xBm?Tq4g;Y@2|Nh6AZPIB%j4+NNlAE=yV)s|XJoXQx{b%`XolwwYh7}y^gQCGWT^p&|H{9{qhG|J zJMv%I4kzn3qKWj;Q`pfTJNWV>-Tb-N{X8kN&@^6uDJRtY%LV?cR1?7Q># z9yEbjYxpLnl3_c*N`@-e8hNN;;gAV_<@@WWvasKTL4Od3-^44Mh_~iTN>ER!ww;&V zNmW4y&kF|n%GcA2;5Du(oZS6^_iL3} zFP`0wlp8cFgwPG2w31i!d?(Ps3+pBSip;AmXm>r@ahi}QJjmW!s98~zd8Q0O3L`2Q zPQh34Bbld^#=;%>uMMOtgNc)HCJDqFJu@^Vil;VzZy|A*^;&=>#S5otgc^cd5#9sl z#LP| zE%$xbNK9=xQBIgl+(-4@7=%?VD0?%~B z%z&31VB;5hVy31V{dN;PEtP!e$36RNn8z$?@Z*Za4QNcO1&8I))FRn&;Ux> zqDu&coLh~9cLL(Zqux{#+c8}?gv7a!O6uoNi*heh5MqQf?d)1o8&QZb<~W2VAaOkWQ&GiiK{6d7 zIxM}5P$d~uLmiL9mGy;_VztR)~erB5cg(w_;5>>__dIAQG$7HjcB}`Y_ zknn7T=0N7^XUMK7A;zj!mvBugcr|D;d%Q*)%M^rbNVt-OD(WzlJ7jnqg5%+tfY4Ng z`3#grvWBnG7ly~{_mY|V;CWUd^e*^XnwtrC+KMLNz$C!ZAS=v0c7pyq>Dm5S5QZ1b z)qPvb`-;N9=ay21SL-oM=JT1NB*q;21JKgvi1zi=JXc}KSBztW)iFEBN1BF6bVK3- zNtd)ptnCU=1E+*N4yNm1PAYcsXh^~VuJ`(wQ8jMDz_FELajx_-_LO$tVM6M`)@J*}k7L5n;57G`HKAR`H% zMI`oD>+5MFObP_uddY$)LC3xDGstq7*8;Ye@yEGV!hGtW-%UCq*nvN%CU;r%|Rv>yN(jzVkOz~hPMtk-o z+|SW487YxRi_ZfehGJ8{HJ2`IH(39$stKxPR-0rH#49kU7mqV83JTbFug9VNXje%t zuuM9KPvfO%9gZtLBFj3PAXRh7aZF0myLAZxln`@h$KY*o^?naee9cVM$J9y0L5f_WyAGSWfUSIjoZEiqV@ug!&1AAgQ$^x}1aEKJrP@R|v-%=Rn5o5v^s=9+ALev>%N2 z&D9or+$tR4Fi!&xS8{sM7Hr}LRSzkiCb4T^Haz!1ltOd$LLN* z_Yd#Q@ZO3_ynu$&wc-&C?X5CaZN5sT{jJ0zCf{+p?vHE}9?@_w=B$N3UH9HO!_bg$ zO>^p}^q~!()~G=mDCMytjW|ORy=pAM#9qvAjBh{CpAwBx*?gfpz3-Aw`jHk z`ESAN)sKY>%Fh%Gh7ogPAuWx_%xSdSg8&Kq1Z2AEh@>3}{G^|ecxEB9jv6WwEos98 zG!BWMgN2-a*;^I;3$8cej5VZQy!45aKGh{BRyJ0X_O)c=HPW7mx=h>Qw%k;u9DWnB z(|#Hlty}LYY@C9e>1aO#8)u=HWFUCN9lT0jHtot1Ie$$2a-9+^NwJAZ>4$6W5KW&OS@s|2zVpRy({m} zX7V)V5_xN?Ssruw=Iq@J*G@%t#gM^D8jL=Tg2?wGV7Qsf?XSKa&*(@77Ewe3bOTVp z^ZM_6Qy%w`dbqjtS%m;y6U~z_)jS4j_``nxG%u-A4mQ=2O10&cUr7;vOC6~@Kp)-E zQ>Zjsx9C^qqV7U$;y{Xltu2*V7u=&26z8_QR$fxANUS2@#vXyK!LNj;18WJ^qO4l^ zXJxVS&->A%2YM7Eda#l_oibV@4|o3S;8kXsv&RggaspZ;VxTcpY)A|JAK<-DS1xNg z{<+G1S`Um$((X8s%aALGjVfDjW*@Tw;jW&9+CgL{pmQQ-C*hMgG`y%U^xvoPH++*S zKbTYt_HL)O*NYmUy&mz9&|vNCN@vG$ig2d&SBs(CQ>6x*PQ-AAKf~+B5i_q6r_7Nx zW#L!c26^DpDU{tP9YNW3dL=MYCu00z))K)u1rkH1f8_7wFXcxiwM=a}S(urZvrX3a zHby=ehYv`SNdeo3`5Tc~P1i1SXqSZJ>;YMXv$ZiL!AsROnvh);pOCOgkJVy( zvR3nl8PPydZ3den99x-9U(-^1rHkXMe>%xj7JjAYRQU)*m^G z&394#k@+r>FE#uW^7|t{PA{f@DT7+@C4@kU3`79upWl;j$amur5II)ZfUx^uiNYm7 z2T>DMb~$npA_hV9-lXv+Rj6@TdkQ`KqbF;4R_qBHQoy!?%`Eplwyu27);ugKnP7BN z%y_Fy6&|bx|B1ACESwfi`#BGtJFvg(Inm1!c`z#K1qt7$jSMdcuS4iR+%8fg=nA((mQSC)IXr1ol&Q(8l(x~kYn+e6?1mqBJNyH?UuW=ZC3dQ|VTuFQr;7h@{ zL`>mGn}O*v7U_ z(e=}a9)Re`Hdsm6Fw$#|clpvE;ZhJvWg<%{l15J9rN{r&2+H58owNT}>^0ae{kv3Qd)&%;Z>|3@g+uVWrlJPHl1n)GQB zr@vHPRa7sn1fsq~_y~%6A>129_;wWMHi6FG35n$z^-X=dkBs^yKJ`nNYlX z%_T7o3)g9ALVGj!{3;cf%qT~{4vi*QO}&fYw!aZ;MMY82ZCKRDLB}n)Pj#{i{L$fJJyQT zRIsmc6wf!YR;&XbLGVrlJ0tjnLP=~cf};@}gJ2jzM`Nub$P716LU{>ev1&4clQh;U zI92;x28nXA5S)SFJcR@kXCpWV^`6m8tKcF87bEyQf=`>~ce(bzWC#RbKyW^SFCw@? zt5AYDxnCi;3}3nGt95M;LT;BSL%;MefsaM!_f>JB~l&9p<~&Wga^&v z&pd@i8L9za#2sKO-s55q;XMn>ld;WMh%Yqn&-3)}XyOtYiqLg%3!)A}zJz?uFjTFv zS;-5{3JpNVcAlgoNfk-cUWq%#6RRO_LN-HoLOzCk4l#6hISIK0`4+;gK?2{&B9%pw zD5@7p5D5z5Ygq#!hVT~TZL}loxd(CpatLw^WV{mvm8yyl3oUgTh#34tvP1}oH4~{X zLZ9;nCbegkm5Px~N@gIo)_3~2-* zqSp=5-FVJF3K@YvomI?PTfaQ@m6ajd1D21+ZAn;4hDkCWWYkVP+EQ_ERs^$I`OGJ> z_gsgyn-!G`?@(6BQTA(@NW2bJZiIBu`l=Mj&A{6J;M2s9tQ*2(@I*;?FWPoP+YvfB zEzCnk9|bs<=Kx{>WQbJ zcsA(hs@hc|uP;xd??pw+S&e&Gb~2>?94Z@;mxt3RbMQsIiE*2M7I{Veh)=E(d663D zp~x#qULrEg*-g6Q!ye;f?^%QP#PN*Ci&c$>@Wp{rkyn%vd3lV;%VSA&1M!%7lP61< z>FF^dFAvM7jfnqCk(cKxkr#`rl4?R6+hast9^+&0DHC~lG9)^pxHqxFg!He7ygWYf zM2p9WygW746@elzPZRMNk(XyTtuWvr_Sh7jEW~HR)2dYDHLi_{yrNpG>vH?+QSCZ- zI1Xs169LcP5_x$#{w(r}y6rDSULMY2d*GEWNHo+q7OR1~aka=R%5Y-8ydR%DR4Vf7 zYeZfimYqiA z=pb^Q4x~J@;o%tQ8F-$>ON-zky#G8rPa}E>Jj<1y#DmZC0z5CmGasH6@Vo@iOnAP6 zXIZI_{U2XO^jsYZc$TVaorHr-3(qIg=d7$4aXG2GgzmGW6FwWI}XRzA&MJ*SDj)+u@hkj5kWo) zwkP6}jorzr8@=#n%wa%@X$iS%cplLvf(}S25eK9M=@chR3$SYsUMh1yY8NYAH=8kF0?gG9WqAB4+Qq^62J(qdSf50|5yR6g< zeWT@fm0xg9W@T7~ZP8~s^Sa`koYMSnI45WSf^%{TsaALYUFT$WYJX*(%nkTw^JIdn zM5Rjpu7C11KMP%NsiVR1BpZ-ZL3~Ure`;O-h?lOCyZW}l_W^t#!uLJO1;lr)RNSv} z*C!jw%nj(U1(Ocq^p`02HGIcW^E5_ZMExq_GdZ67Q=|jM8mZz-lkM>`*6f77H{sh1 z-%j{GhVOIueuVEQ_)fxi2|ki){L-O#3+Xdfe=;@P+(Xzdq_>A23Nt5W2)I>J76kkN{+Dt<|)@P!F5eOV^1z!vJ+Q8QY zzQ*vihA$1i>oMs%_}ao3Lb-PEwTJHp_5l9*Bg!Qf$uK(9)RyYlzR|0AA;|G_#TFD07mykxq(Q^ zhp!LH4MqJ&;JXv`JHz(`DvrW-BX{+UL5DDW4t!6-HxWKF=VGKO!B|55&rO1F8lIer z{ZC>26fBsIf*CkH4;5!&tdYAGJcFcXk+cX;E=Jz-=VC;A{qU)daZ@9IN(!B-fU5T*K0BvW+fl3W!DdXjq%QQ{Gm4aQ zmbAX9k^w$2AD-<>$G1c_SKahL8&;r z5@N^?X-(NcDQ8Tp!TJboKvmA)c?-&mHxpGkVIQlsVR{BCsKPiH2En8fmQ%7>~Y5SQV$8wSPTgwrLjFgrf+b2TN0;F)?l7ZwD`zhA9QZgD`=J!CEtw zBT7JuV=?jvBR@~)xgOp%4#$m|B(c6AbCb8Chz;)g>_HS$2F3N|U z?n=Yv6w=H50`4sqXX48GJ6A?m7|RI`KN~;cHpG4a|A+8@4}U=X*9zxHewu(a6#oXZ zln%mAp!I9`kL$8JauI(g`Ikx@|C=T(btnEOC;w7{=eL!dM%l0bJp8rApCSH6!bZBwa-!OU+oS*2##8qu_&dSR+N>k|H^QF{KZ$v_!QT`9Uhv-ze-HR?f&UH- zxgeX@&-Rn!@4FTE_TK~lUGP6(hHekS|B$-F`5)H)^hjU$2g08Ze;)*f!v6^TcmDS! z|FYfizX1Py_+Ny71^h3;&l%8H@Gpbk)f1K+A^$@7mnsKI2UVNkKLJ0%A&>aK10f=R zOZao)?+5>I_#cP=G5EdW9|`{(@N*CR&n5qIXxMNt8s;IUY>`ej1*fcn_j^^cAK<9H zK{qY(>w*%ghl@-fx5V4%~hp{14(lU*zP&%f@XVyxn!e5+VW+0r6;(eA{4^lGlyAlNUA-lVh zC;}$!G}0VhBAewc_}NFBC(1*b$|jTX#|@J;0I}#0f}3z#OWanB8iP^8P`o4=v1N7j zZqD*JlIEvfhfYV-28RGF%Y#m@E73Y6lJq!|I9A}4JXNF253N&6jTj597>AUKEh~}J zR7gwEY9tO1tirSANUFM%qZ!4wJtPe9ZI9}y%B)W&8F`GpIM_$~S+8LnRpm5?NDK{Q zc~5yChr|0AMwDqfeqW3i2jj&&{JxAHpGkR03dF+YI{3jboPX{SR$=XWy!I~KZE!z; z`yt%#;ReLLR^0t?>xtV?+zoKIz&!}}OSoUdJr4IYUc89kR1vq5xHZI05%(Ncriz;; zZoIhb@a<|GdK2zuytWgEK8E`_+#lio1otG|OK`u1>le3zxXI#H7B@-Uba4~J4T>8l z?i#oSaNmOaHr%an_h8upxQE~#gZmABQ&HTi;>L(;iQ7Qj>f*+VnkKld+_fxoEz&(uDet>%h?h&}v#7z|UD3;X{*B190aa)Lc9&T-MGsJBq zE|2v>xbMJy5AJp>+XeSCxIS^CHN4FImAEy));F|EVm80Q~fg6VFzg~)eG2XrxYOazfIAQFEVw4T%zXy#BDl}OT@3emHM?_{z|Fw7%i%r; z_XW7~;l2oW1>Be5&V>6F++}cGxLh?a!<`FvA>5^K7ig>xK@#@_2xk_1O?ioDno zZZ6z@a39Bu!}0ZFDE5kLS_AhDEGvN ze6Jjgm8La_XopXy!dZ#zrjl(ov2t<-w<<Fk)9Sxw?87@A^$|k zQkMQ1{maHaQ~pvfw&b5=?DOF-8~cp<1-)3wFBtpmH=~NHjeYh%{q>5(Y>D`TH? zWyU_|{>s?rzT#57*nJJKqwGv%0nZ+Dd9w2G+3wL#gDaO0Gsg;4-`sT$P1z^DiImkK zXdm1|lv~n1Mfo$zrOf3zYJ!x;3VL&xTfVEZ6msd9G*GjHn=aRUH-!-*r}G;Kt%bJ{ zLg}h0Q(yW9gww^tBFDIY^vgg$;tY{?n=T3by^%^LY_^L`A-b#bPx53o=+^WhiG`;W zjW5d7F8D)I@~(lm2C~asa66^o0a9yhcuX+#-pGl+5-~&}t~TSUuYv6A|AdgS!t3w> z4t%fibFDYvE1mY?{MJO+BwP%xck@e z=HOCCe0L)b^ul*N@zL$@+=7%l(6t9zcfq`S(V#2NGF!8j;?@PFgY^L?v@&GxpZc9X zegj)#KrTx9X_WcE;Yc;ZJ{G!Pk5tfu$PXLajJ>$j4VStjV;D+Cl!hv{9gMc-K_z`X za!^jHp^wwdI%?k7CKad6Vo{KJ6>c)H)$oJ*oX9yN{obq;niL*hjb$8f&~_X!ut4th z7+!{DrQCo6J=H=dm**OJden&oIC<~74m)_{6)3i^xKJ}C1$DiG4rO2mnQZ*8{QFcCo3G%F!~Rw1 zcTTN8iU*;P4ohcoJP*eS8?K}Y4BfYI`5bZvA?GYI^N^VWUmXLpuf&Moq23>G`c+~b zGUCbwsi~ZNGV4lyi)`Wy6q{^QD4_0sc0I+J9~}R6yjA9(E43%!ZS@ z8ap{8-HGy_t4q23q$B=2DGuUDk%Y8ld4=4eH8^O-h~&=*dzL-$AHd>6hCIV*ewGkC z4A+;)xUkVDDje{B0smp_`T-?pluR`}QMoZMm@&OVSZvSPq?3cR9WQ@|DpVnr6K{Fh zR#!qz#M@G;>_)Zb+LCkp*Qk|}UOZIFG(m1->}&(}E!D`%v;AN+JXIzNpJ~dw{N^ zl0JCh5!^WxIh^i|(rvcZXd{v`b3HF>imTw2+Tas8Jvu{3B^|bmT2*#F;0HdxrJ~O0h@UHR7EHP95 zh?=;*%F3eok_O6b3`ZEP$!L*;6NJvVBnc^>0+|&-uE7Y5Y?!W5>y%^0^M%g;&t~A+ zhKhR!jf9rvZtFdWJ%Sot5!)Lz4A6aU9X4fPQ*}(H3bhXU8jekg0U>z>KISJ}N3E`S zC@MLF_QZdvD;bFPoS$YW`;jLjJLRhfd`HWUMbDMk1xr5zKaxK(wM@kdvM3E8%ngSV z`4}#iLE2e!ub^!L!P}~Ns2Ul4lK&h*?1{R0Q^uDk@xqC|#a*$Dmo_r_rtHPjr!a{T)DEd*=+%l!l2{eROxkmiB35d2^Nz%u{9 zcmFN?1C#LM1=JX#>er9IMkpxR-?03U+-4G@-sf)6^*2PZ&(p}Ak8E4DjY^Z|&cg}F zYPGoZZ$yxz-YlhM#)K5J^+l#96oJ-J^V@c*xc17CeGYGP4_u9|oCTa=(Soi9|EHVZ z+uRt>;`?Hp8;o;#`2GSm55eZ^J1ab&3O?O)Lo5oZz|s}{5e8D zB6Jd=ZxK$A@EWB<_hLVC0HH$&9Ycsr1|ydak+Am#LWePn^mTR+i4ry=lJG7S$=+H= z!iG3kE=|cfy>bxli14il-G)$4gnDW8bBOfydsSBNxw{lfoyF_?fGRA)WWn8!(8CDz zMK~YfJ_rxh5p!sqO2R2O;O)3I19iVr=5u%mr-_vt z$={%^lP6joX}232L&)xejogiA;Ko@vF-Pa5RXE8aO>QQ-%vDmoY(k)=dd+!gSrB2- zUofIt!n_1<%rW6mwh#eW;y_RD*E8^XoOCdf5APtnU*J(NrF|DY&8+b1ig%W2?Bdzt>8ubo zR^B`C3gLZ;(y!os3-36*6Yx&Ly9nVOEG&PrMr9C5YEryvE|S5HBcR2;K+qK7;o;yzTII z!225Bckm9u`x)LDcsi5FOBU}KyjtSb7f&-Qyx-u}meQu;H4;@)7QovCZwtIn;cbJr z3tp6X(c)DQ?^^L{iWei^_2Q+8*G9ZL;_Xz1pI%FN&EPeM*Bagp@LIvU30@k!#_-z0 zv*ERacO$&^@Enw;!|MR=W_Y*4>w?l-;B|v{8@#UYI>YM-?@oAk!MhJ$FL?LDy9eIw z@Oq=P2TJ?F>jX~&CLYt2`og;(-XriHhBpx2qwog68wBrhcn`sQ0^Trq{o##(_awYN z@Vdi$3f=^GL*Pw>Hwj)gyc~E>!+S<$GqI;5vw}UHHyz$Icr)SU!kYze20YEI@Sca4 z2WEwM&!Kc7yqDm;2yYR*CGcK=w-nwA&>D+FAMa&&F1(fS^5MM-Z!Wwa;Jt#<l?EcA>m~a}Oe3RjA+ldW_KS)>$GH_Di+QAoXR4}<28?5yVyuBf|FW!N{)I=K zMQr3ck-bQ_M9O*8vi~xVnuRg<&nB8jJuP0+G>UMe$axO^7eZcyyz~b=YA!3$JnBv>FY~DD{cshJI_3%7e;=B6z!oUpeg-C8vP7*xYlJG@V z!+j6#$8a~p{Q~Y*xIe-5i+i28dllu+Z7A;ha5uu;4~AU02jS8$>onX8aO1>{l{J*~ z)|I!2@gdxgu;UZByW#GGdjM_`+#lgqk+-Xfs}Cl(p13uHNMK28aT|-< zLfoLZAy7=}eg^k*xZC0GfcrJv@8BMS`!n1#a1X<+E_;&Y%rUsNWKVr@2@1l&HD-yQB#a3{bW0(TX#?lW-p!L()y-p*2L z+&$Ca&cu#fl+MDQa+cGt1!4hnop^14@2{OYMSB+@o+s+%_o5fcqHS zF>uGi9St{9-0^VNz%9l62yyqo{RZwjxFv8K!EFNf4!C#29fkQL;f{k_4EG$|p>PMo zJ&!ZPai%4oG=)D@<>W2_d3Cg-*QGkYrltzNhh-E6kds3~4v&)el?0$8i|~WE;{s;J z%a$bBq7RFkX)Zws?jlB1l!}#v?g}O=@I+}wdc%isKEb}-XuS`C1F8t`RztQV$iNm- zEleujj=&B?evOLXse%3*$>JPSVzgP;$im;y@)Y)lImQ~he&rI=xTXvw<`yG6Nru^p zSHhIzW>`j5U~~9dDVZVLlbhS2BP}o5t4e;K-m72frX~>t+2UBtm+QzJvRr!Lm7Zw* z0J=ShH}1zB10ciDvcJ-ZjTnKM-IZgHf;%RmVvfSlcFx4WTx^+zSu?O@HWtpoz&vcx zsG5Z7%K0$oq8W)OEKU}{VV$3ey_B2yq^HQhF&H=&Jx60c!8DDeMMOwODT3c%Q3(nf zA>s}!8in9U6pTX#bCJrq3Z2R$fOjTg60QXgd*Kgq6rt))Na#!KZ7LK8v7e92rNA5vid_Vo-7H#p+|TM$(3qBWZ*978*$# z#5ZF3#Kwy4PnhL(9&y7}Q(&yeKbqnn`Xed!rlCAS$q_wN{#+#ylA?B=57lN&{-R82 z;?r?L5qmM&lIU`!$>ja;Q8Rl`#R>UNBl&_-nk2_c2dy+A882EZO_=!L(>}Q%;o9BvmCo_);XAHa@gO2=EXQANxcN5&O&Igu+Ubp+)eqm98Sm zT4^%bkcfK9eVxu`VWo+m6qKNJAVcN@bhuh+67gMGoDgR*RGRp-(uD5ozFNGnDo*H1 zrAdU26B@q>$pwhm@_VJpGgl~0O0JjaH0e;TH1V}WgjSkFv{qR{blT@*@8hKACM0v> zRvsrb`NlG($z%tAs5FV_dRb}WyGtoelt@{Ra(ulp^d3y^0bf7(I;lHOrHK+6_f^1x z?-4Ef9ta<0CIiZpCdr)XkkL8}KJsuzz{fVT&t;{_GeZzP@%KuTCx1w?4~bwAtc#ps}wCLLTv&}T`zuluypBw{&ys}M0y z$xQq@ONiF%7eD_Y|qEEQWPow3bkV#&BPee(#S&# zQ-8I7;o0h{vn;49v>An8;Nn&k{)7#F30)^2>oTUWp=@S~ zgia0$eUH#Vgnq%+(>QSf2jV28=amfVD%8q_kXA16bYLT}{~d%15&9AvzC!3*6dp&R z&JPM*MCb^PRFuL>5=xaLRV9=n2b;)gQ$7tyVWOOS7apnIy1x!pmLfwo){|q}P3uH!+1gmXYayYa90(!w0YaZCP5q(m*ti3sukrDB$|xrE zGd7&T0qxbZD_M>m1HDbo)u+3!oNpx|ouzWVsT4L6&VSiopWB4c7KA=UXd6!K!nP>+ zSSuGox{N7|kTNPoqCohua5^n*}) zgwj#yU_%FlZbs-9C|3Kp(_(5s>1Iv|ldE_c3^A9XQV3``WDtKo@natnx z{i)2~EUyv+r3gg)mCQddvP|Zma;{9~pK`uj=HCF_ldyo+Nr`xqBm}Y!PGKRb1>_ZE zVj)?wfbIa(lGIbI^_O7>a&tfl%KN-ibDREPk(hLbAuF~AB>y zKAP|gr^EALGkIJ;LIgAa0V$wWOB?)Sj3PM~G?&sfh$uzD9xVO_+)-PHQ=;|0aM1D$fe}wG)M%xdL!u{j0w-_hO zAJmiO4v^n+Vjhn!takKRxk@s6UK%K{EBQNO-$u?qu;|i32~x_` zK!Ua$DyMIe;nuzo`ClUID+Iqq{&B21f&7!mzlf|ONUJFMl_Wn^)>M`J6lv8&TA4B? zAVE63y^Aal`5z+q5%NF5q20*Zhu{IMDMIi^46Pzr)g)hoIl+1otRY1SlGR#*jipr! z$qGt-2>DvS8T=e++Y#J>Ltm>YL+}vNen#3E3_XlDt4mR`v_FP7Ye{K+30@iC}XCn<1?=4&8uYE9BpVU>e#tMyZXgw#aXXLpLJ7J@OqKO2?xekajcjZ$+>R zvTi}J8-jYu5bTU#M+EOg{#^*(hvHrc-ix3HbAr9GrU&x-A*~bAdLruq41Ex9_C?zL z$a)09hmkfA#g8I?0M-mb{^J<>5Q?6_&|zrRA8(F8>66IP`prX6Avgi~RG&>m{v_mQ zBbbByr;+~*^2?_TSy@WISu_p#Gx2Dy0&_}dplCKq=OF8O1a%dZ^&G}5#F&@R>P0-d z2y2!g_yU4U5nO>*e5w~C|7E1P2(HATe6)HMhv+w`^_#)v2y#`fLU102E-d`D z^j60B&I{@QqWHyO2b8Kf8)SKnC7O)D5&X*se=r=K*xS z9}jjy5oKFt$a#S6*Zc9~UmG&G@^McT~?UZ7(01jC9EHCTD2W)u2|EAy9*)0Q*Ps7$eDv>sh0fST31laHGyzj5{;@gsUw@I- zfA&RE(Sv$Y{p6ft=op{jwdg{!#3zh&kqj~=cB*HUhG`ResA$5Dmnai!P`ME*7ehUS z4NyDGf9Bo4fNFf+$k!zfMwiH*3hSu0sBG0#*7Sz9t6{$f`(xOfVSfR8D{LlT_{F|X z?7grpvFRSH{lx73u)l|W5cV&yPs6?dJ5KCavE#+AEB0B~4aBy^P7<56tF^G-fn5mu zOW0q*{ucIe*e77q>iMEd*03vzT}kXzv8#%mB6bt8O|b)FCyMOHV1EvKJM0}G)7$?pCL z#jYUswPM#)KJfPSVyB7SMr>W4*)8baM)^7HX39*=z5#YC*f+sWgWVW*Ti7=2cCc@R z-5$0BI~}(6m$Pq$-39h7u)D#&4R%-9ond!`eJAX@VBZJ37wmgs-vj%0*u7!*fZY#v zC)hnJZk4#Z>JqnhEl+_)oe97_95z!R7VvKlRb`PaZvChbV0Xs)Udfj8hU`L;03W(YPNk zCgl(3lCUHNCLK6eD?Nfk++#DGFW_v2^AjAuIM<1@7mihy74B?=!;#JRWxOfpG@J`? z;>3v+CtjSo;*fvaKpdMfsX_>)!&*4+C`PWsg8wU}TUV^A6Pj3cQE{srZuphNNma*| zlOj$Naad*q#7R_iYsZ7biO)xB=;Q2$^E>iYH5FIk7~<4Zc^M85xYj}ny2IijC{75@ z2MAXY&UU3Ra=wQ1onmS^v?@KLLe_X7I(kCnP^DF09L8<566ZJVEZS6@M(W{lHo+-S zMv)FZC%3`b1t&_JXmKhCjf-iY%dwHe;Zd46ZIlzTvy)c;P9&-l5c@)k7%^#y$_8~Y=z!?UozqX-x5>6jD-Qhe1XM!?| za3<X1H$WiOe9BfZx{Y#siyn(OhK~?wDM9uq z5K+kvuk;4WfVym%uSU;LFvtNL-@MVtTZil>$kxFbl8V=oP=(IM^nauC8x8PTme-{R z6aulbjQC*{Sw{cBsaQ4z%W{>Cqy$jWM4&FBlU1rqd=-hWEDRbTQb)J*ijy&QD&nUg zex~w34lr9GfPksIksBr}*WbxpxrvfpMJ87ki)%_7Nll)D$-LLR(Q}bqiY|07AB8UC zl-p_~of%TgM4D{v1Jr%!-6?l8ayj7O6eAT*l5*{sw;tWOAv9Lc1F<7J1>C6P2=A;_ z>ZHJ@iZvSNXx~o4BWsY|NE;@zP~^xsJRs&Qn1f*E@`T5}mu9=9yK{!C%h!Vb%2adU zzm8KcjZn#i*B@yL-DY?T=pC_N$u=hxs@8+r8LoPQJieVO;D9A@#SUtWMac{m6LI=s zR)#8JfU6kQ2cx>7`kL@?)0cu-skop|ij916W-8G$T+4H!kAcS5Y$XCz0X(kAoMWlJ z(ay|_S5PJWd4z@|#Ehg=b$wL9tfRW8=*=pIzuR1)`Y~L^LokJ(p%_C3V@M4(!HK8J zOix$qQiA#$=nU3{BGX}rXBU}?F3siRdJ4NvVQLr~im>2Lf2!{|u|1%a@7JBeL%nsf zHj_~F2m3A)4_z6eouHVsVxX?>p4#b=E}s3B4HBr2Q>P|h3^_SKv; zd;t0E4;(nFY3A7S!x+jOfn<5}m=gICDxm`>p%VE`IdHyN&K#r0r&0lg8^x!PZIE3! z9VIb(U?h5A#4}y4V2*KMBrUZG=MBshK%3T@Kh_GQjnyNZcoQmV=9t+I^KL{VT3w|p z@>mtkMiBPJU66juf5#lV9jALk?m<=$NIwNUN>9iGDo|-?UsNL$`N$tQaL#-PqV??3 zUwM@;eiA}tvODA{#FP(=L|a`+4my>K?1oN7))XAff-rYrnqrQX=9WPvrG!eJN7Niu z6j5i#fzg{}j=iMGV~ge+v>ubpF&9xUU**6_s6<%%E!P0%DrLgCcLCm9 zrc5}qxH>c^Q}k{uN0Bbdgp*K7I>}>WwGSt^zrnG|_tVrJNo z^HTGer1G#B1orzKGQ2&umes%8A=}7p+$8^<9kNujwHv57l^Uri(Tn~4u|TS>i?et}!|2cxiC30olasN8 zAhZ4q@*ZA~m5SWi_?jod!|V3l;GVPW403kiL^HhZ;P%^bqNnndYxV?k*d|QXf>XZN z9!$L(Q}rYF(@^}R(Yd_g$ZN^GFa>DyecPvEB5|a*wH1|q$66PVxgG;~n?@kBDF*5z zfKNB;oM&iG#R`Ydd?~s`$XBD#Z5+O$=rTp!!N6;}f#QpVuN%WAw1avyK?&wooKZUf zF)JrgRSUjk#PiQ7u!Bk(7E_3OK2-Ws7V6yPa&Ay*ME5vwZbuHcmm!GRgY3JNku0C^ zz)*FM_+Y3@bXFa{+jnUf?jeeIw7o8}lXav!BYqNbC$Anq4_}tA!z;tf60SOum2fPQ z>bBL2t}vahXw5L49%$#VZz%Th67jT3QJ;3z$H;q6DLAS&7XFN{J@On>U4h6jDdHRw zhAQ!z*%W5HDxd0_Xj&KVC*v$FCQ?;n$j4I3jTbK6R{0q6FXx@?g;>(&kC@Ut?;^NOoe%?trQ#yR!neSk0p<+sR`jhkS51Gy`cU!Hdx^m!+TQB9wBWJ>?*c_&w#cXIW4Cs8bgMJfo-JJI<^Td$X@x&J4 za^6Mg^NzGVb>8u?8*%x(<8X@4v-}ZLdZiX16lY=UAD(wS?4DOlX`XikOJyOd>hrG6 zqTf4CmocSRs#8x0_v=yJ^OaiDJ|tpX}RMn$7!B)?aL3N_UBPFoKzNNuf!5JBT4NxQcDd8-fe)N-&QKo zlJZipJCk8IBX1)HoJQy43|`-FJvS1mAB;D$6pv_ouW+z{PeLkgir` zr4HzQGqUeO^u5X`EV8efhsIL+#0$O{>%s>Lzi$}Zr^((qg!voRdGsBQzAfbyf*#i( zj>T#`Nr0#yK)v$i{F9c_7i%d!SM(+Sned8U`cFi?he;p9zZpHgfPX9eKOxC4{_DiQ z7k);wH5C8*@Na~FKPr8Xq=V@83nrb$br;mU&mXI@+c@uIhWk?u#BWo>E+yQ!*5dd( z=vIi#FLCQv@PCWfk0bU3Vo$1wRsRwAD~i98_%)xr__xEq z1OBh!{|?;_A?ar%oxvxEkyKqul7)Q2BwfTZ`=+Fo_&L#19wx)-_kz<)dZz43St#P)-~6Z}2V{sB~a5J`QJbU(U1g4lMeG2? z4pLEN*FA)!C-BKIbnB0#C*dD~(msgo4*yf=HUa)2cxod2li<&WKL`G&;eQ7H$?#8w ze+v9r*gG91Gf^^4rOJlqeN+{d=tb?%L&>x7KZneP@V^BAi|}hcq5lQ=HJ`8>AKk_9 zzYM<%|4R7t;pedLRrr5E>?`muhhLjA`R5^4Qwsg_K}sQu*xkRvuM3#cqhM0O_%_&` zf!N33AB)m47_aAj^~a{sa-#8YG;S$-8lVGb8S7EKscP7{#!DNj((Y+}_BqW6=&6QOt(5n1%~|BFN6|ZY zW-a{h;)C5N_yB&b3S^6VO>1?RpJ}Xa@drIoFa&vIxe#CF*IA=JST}8^-7Op`ctvd1 zLiWyKur~oyNe-!noVrLb&{X%E7YLaALm54leGGcQevIh%6o7E^X_UlC#s%CID-rS1 zBuO}8J4X*0R?b9sD@s9C$w-s|oGoe+NZSLbTm&K~IUG;akk$;L)3iw+8Mf6Wky((n zR2k7SyMh#4D-ktiSd2`qBP?z)ce{dm;)ZsSx3eXON)*{D>*asdegfB+kUJTr`=5f6PGZ z+1RJk?joK=#B+#Vp(>wqb1~o*6~05lM$R%leB6Njr24eM{;>!|3RU@~;}NGZv8kna zXpcgZ%BG)pBX1NQVk)$L092R}AAkh*4yvg?QU|}KBDVoHXlu=Nx{_pBmHiWl0Ox&= zzZPsL$M0bXyGK{gkvyi zG!_=4_F$DDT#dY`R3z!t^7D)q8It=$;C+={UVXiaDT$)mSzx!m1U@*MbDgY{u;JpMuC+tzKk0f93-nLDC%4`2)0e zEVsT~q(|pB>6VihoP&mvrYH%&0_Du%J){ASBx0jBf3DpWwZq0W+9~eoM6^8*YdEY# zv|5h^O_fDtbP|T@W`X_4vh|od1k0E^qdhMEJ{W&b#MbxGF$`cfN5?RR87bYyqZ={g zM9f%^WLinnr<#!FdWCR0e9aVeO2pFj=+hK^l2otsRFVp}s>%h+)yl0kN%>u?O_i&F z+ap&2pH-4)$SsMH_$^v41D59m!mh{?a$`pO@}?5Ff5qhDbapBR4BgB;R#n zk-FAU##)lR5q+ zk=#^yLkkS61*BS{oTM$1Zv6ko4xI#{DzdP$3^F94hAc^t!q!5E>e!%6{{Z#0GKL>x%hk*ie_NR zY`i}Qh0ntxZpm)$ITS5K-b=`R5y^}2#uCK5fP@u@U92}QCW)`a9*Xtm;^fO1`zov- zlzZ^Ys}MI2MGG)}8J?XFy34ZI>qoN$pHypueq+JR`VEnism+lxISnaAp9ra3KICd$ zf~k$voTznp$TbpEN1@L+MK6gwhb2R?gaFHV{MT^&S4%0bK@psCt*`jDdcui{s6B@j z)M^ZV9}byXXVotHl!q~2qxUIXY=JS&)d;dTxm!cjZuZn$s@Nco$KNHymwgGr3(rti z!*@Y>ych3QH<3YIgaT)H09vDAMataqnA=ha?EJ!qKWw&nX+`fw&z|TRUd~~3 zj%&FA#wOu@e$ET(ge~AR86!y})a;`m3rSq~#n?X>`_ChCxEjj$FHgoSU~`%X+faJ3 zH?@9^rzgMfuGKK!gYhwp%`m=zu@%NoF#KX%C&peFmKY7icpt__82e#-591(=UtpYu zaREl07_nl+i&0mMvoIQnVT+L@1|iC|Fy4Vt2;)l_U%~hm#&H-YV4Q?;5ylZ16~(Be z?Dz~lq%fL@VTutDBTt(+GmJAZ4#TJ}MzR=M-fq+v;~Ftq ziSZkZ+F~>nqmdY=U=+aE1Y-*f-QO9zU_^-#Ek*?~t`(!E7%^g8FGiXeZN#V}#!eV5 zV6=qM97Z!3tzp~%qZN#sV5Grl45KX!8%8@AH^OKS!-0_wqXP`x-x*zC+ybK;jN4#z zh0z&CM;Ld)xC_R8FnYnb7sfp>ZimquMh_VMV041f6UGBD9)!^shPK%>9)>Xx#-lI> zz!(JMaTpK5cml>S7?ihAJ9#R;SVN8WF1x6N( z=`g0jma4+2*_8q|*El=0`BK z$A!5M<^h;RFn?4Y7iKjvD~oA}Sx?LwVkU^$TFk~`wh%KYW(ej7Fh7I&In3=acfkA_ z=65g;DFaXQ49vqYtBaW|<}sMH#H=soHDb0B^Ea5a#cV2OBQa0G+yt`#<`$Tr!rTUP z7tAOzqs6Qs=Cxwh6f;K5>%~kHvyGT_6l33P39|*vW-yz>ya8rwn5|%@DcIH|c-t1H z4YM6g?QvnI!*pPFfO#{_TVZxV|65>ogLxawt}r_*&5n5|%)4OT2eTK$_3PX1m?pq2f}<5<^Y(3(C%@V55ar_<}jH3VUB?LB+NcA zyTg16<^&}xFek#C1T!0E4$P-vJ_BXTr>dISb|tn6qKdf%!bl zJebeId=BP96%=T`2y+q4B`{xrxfJFKJwaFu^JSPTVY)E$VZN$_+vX22UxB$C<|>%; zR4%8v4CZ{8nJ_oN{1u#BnLaU(!W3R!m>Do1gEtL3^Yy`6j%sXJ-4RaLCkub->EQWaw=1{1r_&m(vsx~$`D6FFfWOs!L4+qhmgoiH? z`6KRZtj3gq-*FzgDBs91?cvV*(VZ9$=ar;Ah$!oO8sLXlxBf5t7d9hHnLvFC`!caF z5zm}L%}f;~Q#G6&a2TNn5#kzW@4!-FEwaBN8&e-l&D>w-HT{q`4GnENej` z(oSJ|CZ-o7doZ$D@P|7ECbDr(S4Wjb9*bvo4VQ}N)tLXDVya(YZr4T}Cjb&Im1#xD zhTwbwyrhT&WRp| z&@`CdygwuI;qs|2y~XxpG2x*5u$TZ2D@Gy=gcnK`9;GmokCA-=am+S7jAreT-4{6z zqS**_?huEJWcS4Wi+vW0Pnrp&DA8Fd-;p)vPkQi8t7Ka`1|^wqeHfLG!M6>8uIg7R z^OFoj9987hk1s|t{S#hQhM$T8+EOAfBJxS)jTs=gLEB6kX6m~?b(fl2^4r~1U;uHY2<8?Xd@=oCK8#D|G!%-r)+h<#jnCd4M< z!fDJng$s{kMkX#0*x@xlt?jHIS1qCH+LF*u+tcyy3DmH=clh_kiZ;(@et!~vQeE2pvaL*Ojt(51&Ud=taa2N|A>7fiyz6imHzfB7!q7rF8$4YW&D6jKsw+g|;z zGFZKSvm_L2iQlnPxF!?V=zOc|d5nf%#K4|9IG>8%8b7(}^(m4iOr*a~k^VZIq7rEO z?8alD9ra1kh{1sHg{VHkV^t)uf)h~-NtsW*hoJIxx zGZpmDj2(=zyshCmxc;cTEXDezI_Mwkz#p?zl|_Vv_iIS`$Ec_OwVr;FinJ3aaK}CH zcUPO+aw=vdVQ&grUva;N^A7U=29-8MtzAE$NS`MbuHZhY9@4B&A#7%H^VHpMtF{*cgCC zf`R`0RQ#!+95M&qR@5E7DgU)>7fMo~+=MX7N@S9U%cUp$eRLoua{*Ih<*6k38v!@s zGl_Cf73o)5c3lE$YD;xqu1i==9Z7DE4u6Q)jKI{%*fj&@r!4~Z|G#Mado-`6wQ6QA0ai6f5fBNqK_Ej%+mA(Hj0&^nXe=;Zd5j1CZOwb&Tp8#c zxTJZH$D&#w+!~RJr410&o4_Qln$_t3Plc~e{}{(NW6>AryA?4%;a0!ITqiL^TrHW^ zP;%c#uZ>u;A4T7z+d=gC1-nn<;ss2KlP=|A;qGT~tbu}ISCx|o*1dyo3X%0CCVr*d z>1Q0rwoNXhlmFip0!k(fHlG9|4gX0*WB=IBL2S8G(%)pEC+ zP&W=z+9;XxItIdZOP0nD`*F`eOY3=<^6-9>$=7*sXKuz8!=c z9>>LpaO)Fze;DTW$LAw3=}FA!gZkak?J3+o0Y4AHv5A;737=&nCI?-fMwe&MWit9` zM$k}gMzm-eC^@{4tH=YiBweS;1HV0w7)>4^j9j`94PQdT7cpxQ9$SL$FQDpDR9*oN zut*-rd>OeeZd-{h`DptpR_UdYnW}mzJDx~-C&gVSt*{dNp{c6Gen`PbTrBIs z0*0s3Bz{O;Hq=M~M~YlTtW10#Ulkl5w)67sh3|^sc;Ei3?7VyzlnnOD;CP?5^9mot z$)qT7NL_e2INo>skL|ovYJAG?gX4YPRl)JTePzM%K0;4b${cQn?^gJ_z;_FLlvm%T6xP1Z z@O6amPWbLpItX8{%XVHq?PB5U2VW;$SZWB)*Y{8DynJlLNQ4-s+c7Hmp1jJ=ix8i0 z;_vOee3RkRRg)Tw{<)o(k2Te^mxJSdFT%&}c!>&*XOHY#q4>thi{X12zLkFx9KQ;_ zdCJa!1pVBoVhbM;V68}uV@2b27HgfHx|AzP_uZZ#*Z)a^12imPk#*G z6<%JYcWWy3NchGnNx1J^S!6sldf}GbmxKa6QZG1#H|q$?xq^ABqIt8 zR|i=dYYl0ZPL_Usw)W9`l{fp9{2WS;ImYdOiJ3!|b)sZkV&;_7a;O(BxPq3GKpJ)} zB>~PLCx;uz7Fwb^4Fy4js&ogG!Nw;6U1}iC!n?JU*eb$Ag}OMDjH>k!p-tC$gNhqq z!rKbm=KU&4#F!wA)r!^p7aU`0s9ZD^mcIWgO^sYA;}}c4NL`_(<`TzP*d45eyrbNh z5Ah@X8UTsrfUGvAp|xjxjYga^Nz@SgNU(M+}jAA~i%3R4k4(7HJ_8 z{3}fjQ6tWUFv#fcRwR=iks#X8FjN3k^3!CDV%Ev$E76~g)w)>p8;g>@X(30Nm# zU4(T6RzHv$R zms??VfprV4Zm@1s92l!Jtd6kmgmo9J`(X8gbuX-YVBHR@wt$Fjtd+3xVZ91#u3~FgufSRkYZa_{uol2t25Y{`O0zb=`W3{> zEuUCNVF@oUtPEI>!5Rx|48qI@Ydowquu5T3e6$DFH=qQ`DuLAqRufovz`9$-uUjKw zje}LJIPKO@Sc74m*DSS`e9{mZ2F=bYCcK(oyoJ8aWiyYM)wqFw8RlKk?tm1sF#Cc( z#**ndIQ)2{RcPsjBveg71C|gZerVoow|FTyi?@@6I1+~%l)4`(>zDxfv3di~ z2!XU%dT~sxE(x_H?;2V58<+s{`n8f@QzCCrLE&+&R3%BuP2e8ocs%tH1hkPw+>@9( z1aIqum8!RbS;*6S)Ur9qcozA2h`RmlH6(#HZq=ormdqx}frCq(avo@>a_)Q_ z{7px}OayXq-7L(WfdoC-=iyEadEZ>cv{8jzgiH;~l*p1LR7+p?{X8Hf`;a=GBABjT zM|$0-IH*)Yk(66;1+wR%7bM;%_lWSr-!ld|qY)pe)qJIhj8H=9$Z?8_lQCTB0eh|h z*|6pcmA*QS54#%}I;IK9Ebkpu=z^TC$i7dxQp=4(XSwTnHtQo3|4!7xCUnFJ63_B-0IbsiPYIr zbl!uwZ?x4?2{JT?mijp7Zp4j3=aI^E+Bt`HL$QuP{dvqCj=5oiw;s}!w&Z{h{Rn0f z$xKob?DQ2#FUF?9*wg?$lh7dv)6Z(1U_H%;)N>gQM5fa|=&TZ$1o+TWU2+PP8cpRh z*&C6x{TTvzMlsLXd&)P6zXS2QNGtOr;)_sYcw7QqCF_oXeV!75-rO4Ae@++YN9=S9Izp&ngmT z*Hen-#E;Z96FqrikH(BrOdqA@l8TC{Lk}Z|DC9glMP+c)x`faC*#;=llNXLu$`D$X z@%oh$$#G?+t&w()B=m!3UUs*3*x>!u(`WXQ zKK+4<={!j{#YlN!JYFzVxYaHCrff;Xe2VK&p#gRDnP^a~d=Y0bx+N@tO~s@JFnJxy zHB+@(%kvx}yror^&81d7rLT-+%%6VDJ`8tKL0qppf@c~^z>*55ary$5pG6cuULh)c zsa(oAm2R6VIVm!|i4^ces3-e5**}Bj^(C#596W`S+f+bIs2QHQQEdzC?uiCxlf24n z^*Byb-#r4$hal=DOkar5i>R;&IZLshU!0@=d=$K_tVa(nLs}+IZa~jA=oxNHi*egI z{5llB4#sUHA@l0Jk8BTxEl}88QH*#`IS=Af+9MG=^n$GzBece15z8gd8^MuNBo97) zD{qXzl+6rZ*iazW5WpS38@0`~GxD3NS7x5{FCFc=@y zP_dqlo+Or};!PUPzpZwD_10X8LAz71dOLgY?W>I7~?dIzL;LB+24g1&!uqT=l;<(8bl$vqV<@O9b%4#VGc zf^+O!N(d94?T+y&jN}k|*fBUX7V)D=dzNfHA@c3PvJ$0OUlum)A$E5T*+bPdeA#d; zBM~KDPM+l{EQh%HB+7R+=H$lxHDTq#l_O;oF^yvIA$L6pu>ExqEp z1sY26M#W9yWIS3sx=?VsopASYRnNyA;ZY^ann(qcDiw*_tttBS@N6tCw2ddHGl5UB ziHw(PwVBmUM7C6v%kAydRV5(2iA)%h=X)TMFfU7%0jeHIcv2DOqx&eyBqtim{b>=F zy`UIkE%?3iQGsNwmr?u!{0qvgLCb_HEU-&aX%AleM*An+jn_t@l9r??uFHAtvYv{E zQZO$89Zd{OMjW%2v=0DL3$QWQ7S%D`JymZ&~WSdyIJ6_&PlA=U8R70vI$lU5m^fCP!IT|Bx)Rc~O#5WapXW@jvvG6|=H{VjE)Efv*M9p>P^v9PHEuXbP{()Jm8)3WeHe(Yqv$vHX)aTE zS7}2LVq-}TfhK`mkI}7ECUS=rNPb1Z`_XJ_+9&`&W4vxpScsCo*nqv5T5AKfV|lEm zQSsH@<=d6xu@RdudmKgi%hK`0lJtfWqw(1E{fPNqQIzEu#E>L*0WonRTAKRl)p+dZ z+PZw+J7`dds6WDE@A@M=)-D*ggqagt)M&~(rd~gJ~`J*dK%F}VQgp&Thx}?2LGD%VMiPc(+4J^;bkgP_S{{Dn3OqJyAYvX>dzuU? zOUH}iv8C;xQ$`@>N!-<^%;QKV;91tI{~vpA9$iJ5b&czLpL?MJJ z*kIiNBH{!z&LV?|8Vv%9A}T2$XcW{E(FPp2C{8{4H7E!Hf`B-nIE$cyBaVO?2y?!D zp303lw6FHt{rl(lt>t3Hn@Zgpp5dH*_TJ~FU+9jPT!LhS$8tIp7(90SZFt#$3@@8r zPTOZI9=q`_6wE@cxhOE64+Z!C)bnA!!DCbIg*>934`dG0p1t!YKj5*p!DHDVFD0&c zEEPk`*C55hkVDQ*FJ&-co;IY@Cj?oa&`d8LjmJ(ofGOiJrJJ;%5S8q*C`r#z@>^y^re$oOg@K$P+?TnrrXy*k z3O{MTz$`e5f20n-QW_tUpt=hGH4 z^;%4glIwj)y$Y!Z@a#BMU*49ET4vYyCS7ibb`4kN|9H!of5evY&7HU*OYdDwoWp%t zBNpl$%kUv@xr^4aKQyVaawgMpAN8 z{QTbCr=H0Q_e7TwJ#&T%dsNF-#mW!W#FP?~v1Y=UTt+X~t5}#23fD1OIkCCnz%1Nh z)=yqJnY4UOshLVj76)0*ri>v9@U39Dg^E0`(nhj*LL)=6w){ zazs9!n2WYtky_TavCo~v@UPI8*pd}?mD9OZkrftLz;SkGP&mdR| z7OMJehLTS@YJAAWq|ZR4u;f9wi6>tId%3y`+H_eonI_?`PS>K7`I(=@voNczb}ry{ z;QRwDXhsi*V}PA0tballWAa~BH)kEB^i@=?`5uBpSoy5_824)`Px7nzqEl$Uujar3 zLxu4ebv0I=hJM8;4soIx08jFMc|8QR4xr~aChsakj!=%;D?zu_frs?z)n`i83j?p# zz_orv>~E_fViN7SGEkg_bJOXpqJekgJT%^CXiMbieyEzh?G;MnXEL(A5Y`8%GX!-i z(WMAoQju&3u?%>Rk9 z>=7NY5iw8%5o(c*X3Q^+93d+(gB`EMiH%?NMskS(bUCn-1x>k)M^Gy&N94*W0$)jd#BYBCUn6YFoaTYWbr=<*cg#an5 zhpBuQW|Lx|D;w0lbs*nMW7*4UNQ(6BC~Gt2luabY>rOP|1UL+OeFQP&_f``4!1EBC zr8$v?zN3+3aFVK#=+C*v*FjR8@fmou1e>Q}Suy&SswMtj6E_k~ZE-tN@4#5I{;!JO zc%u4Xk>O*CanZ43s&PKBT=lf=?7|5mM9d#wl|!+^qTf*qJ1L39?dS!xckw zOhF+MfUtH@6%hld*=K7N6T@sV%LS*lu3C$gV>6s`;H~=brsGf=*^jO@ z{Zro17qPeYkNT&SxB6-Sl;OTMPpOK*>8%KM>}>T_-g_Quny0)nRCNT4F0byHGGr{e zMh$ImRK3{Nh)gp5rwvoee`muKk0RDbe%dglsd2;pNyC&9(=esvT9jKdtc$Fkgke?q z`U9kG!Qep{JOpVI@O35j??c3)+8>z`7=gcIiW-3{K{@JE^i7dIDFNyDn%Oj`F!N~6 zU*K7{iToKN9U zd_l+2gK!*i>Wh;~*EOMOwv!_iWw0v&@mn@`aGrs~0@Leo-h%TU944pV!XfNzQdH{7 zoukCb7Uvjovc%~mobrw*4l~wea8|+L#D7lbK1ZFiO$|$(ou=i`(c&}^r=GAah0~6n zc)~UZPQI{$;LxGBjf!!cXW_g8XCs_9;k*s!9XRi+*uBaH6Q@OE8P#y5|gsbD5f@RL40H{bq>cp4otFg>bRwZlfj%Z!T>pfpK47e~nUM&+@16&P)-AqawT4QHUmLcr)Q z!h%TYKK$(}&{U)}1IvsWD2>)46_`L@kwQ!$Qf*K*PIFd3Qp0aOc=&>KtF~y?5Fq!dhfF-hm&+%) z8|xGXnM#bu2AhnVi<1Wde0__;1&bNzG4=Q#TfbT}vk(Ii44E+$Z zKl;($LH9iF9p|OW*0z$qw|ejBLNKZfy=X%6j5a8l`1%ifM? zJLdh^nIv4Ldq?=3?j6fFqrtWx?HzN?-f=y>O3dCtyOOu^CAEVzGkeFJ)j!=kQr|&? z_kY+s!q2g!q3mfXbH38OgBH;0WMcM?Ttk4TnaMvZF!p)fKGKfZI~v!Lb7^d1_6`Dr zG&X5WhZB06n7yNF6B>0x8uyNTvwfU^urnHVuiiUyX?4<5M^0$mPA2+DEzs>_dGBA? zI~x3K@0fjV_1;l+CK{ioue;H(>b;}Eg}Qev8Tt!*2hCC%aN`)Mdq+4{8rN&L=QFNi9$|p#B82?P{9h|^gGE>84`#jyDW8 z673zsqP>H_$aR_{zhTLwNtm=m_YRt?H2nYrw_xCp_l|)>Fp$nFX76ZPiPVI-3h{)< zT!m<%Ww6Ih8OX@Oh{gYvsv=jC7}t|^|9@?z!4&xaRTa4=Gxh%0RmIp5RmE7Msu=rU zR25^1s$%T7R27>mM~l&d+IBsGMxCXR*&zPGJ*y33%smgPr-wp_>}9q?i8stH$+(z7 zBe-{z+QdkkCO=7=@FF{%osKzY;KhNMagm0v6H9|OM-hoe1| z(2DWVV!%WAi&75@vJhcz-bl>{b*g zX_X2;^Si23B8L!j$$UEH65OK^6QfqfsLgR8!57;41ZsB{B2hJoiwu@;4T*(}EF*2RjuIhv$_f`h^^JIo`v-atc|eVgk^lm ztoKb9r*A-(UBAy^H599*SYLsngOc`Qu_oAEto^W>ij^nU@kZ6lRQ-9>-T>=mSZ}~$ zJ-U`ywZ*C<*0Iu;^vD#kT8Y(>tyEQ>z-l$CtF*?Qov#RaYG+s{!0Ha`MAYsGs{^c_ zuySGbQryEL`VmtrGpjeOKCn)O)gSdvhBW}z>58LT{b2Ql#bVzd72>nbg++wqECord z^R)cUiY=vW)<9Sn!nz37P*@khy2Lm$jD~fo(%vHGk2Mn3mFPDX)(8bEYh4ZNd|0Qc zktTU`B&4mp3D#s-0jw#oro*}!)>K#}u%^K(2Bj0$EwE;QBu{H5N^XT^3Z~XSogwu1lD7)9#!U{^@&=7SPNi1t_YYl z2Uc8V7X+n=fLY%uThC&E`Xv~nT0LM5hjkgOiRw&ZT?@++YZ9y_u&N9R^8;90U@eDr z7}oKyI#pMnm7IBv;b$7?%(_bHYUH2K9EX|Rq{L)BjW|K}7~vA9Nw%g!D>AUxR0Pzy zg8d>H>a+S*f$j!5Y{%}9CX(--sO(?74;!z-M)rbi1TU3NjB0aqVJ1Gx#)cd;ds<1Y z-$bs1jd9ar?0gD!=%M`rw!VZjzsAj5v9Wb^2d;wkSpOl4Kf=kMV%RR+Zpw>?99dsq zHm1s&wo2$Fh_^aJSX(@_6o;O{A*M^O;jbu%l ztjU*GI>_O!GQEwgUyb$8;$&JTzNsy@*1v;|?_=0@JogQ5-h+*wD?GcprBr=|n_XGc zMAmng)%$U{sjQ^w-18V#j$s>6^)k++x#+tnuBDx}HrA1i$I9x)vL;0iw370UvayG} zpDBkop{g5(b;bHFD4>OSK2AOX#oe*KBMx=Ip%XEzCsya;KrgIk4(MZR0nUt}xHqc$ z;LQGbZh#uxZ9E0#gK_2`G3*=^pNo^vM)8>_J`crbVdEL78iuI@QFS4TFGAH&Ja++x zU4nv(ar0>0PS?jvv3e8=F2|ZHAR}?}mDo5IhezP%t1*lfjq_1(8rI*S-L*CvG;-r) zY@CAi)3N?$te=WAOR#Yo))(VIDOTTt)ibc>HmsS6HMe5T?O1;Y)|jH<>RDJh7v=Y% ze4er_RzHaH`6yqgmZygv!1{-@sn$kv^B%?OJF)%~6p&4KHxAE1)t_*fmVKrT3M;)V zscbZDP^x->I#9MjSv?UOuS1n_kS?Eu@+H`BbfCo_;P4h4T8_%YxaoN8?}W-hI5Y%@ zC#Vkert1|q=(DdH!|ZbaQM=f!&6Uu|EhCnLemUwK+q($8+v1;@YI@0CiRFfPmfE3w z#s5vmrq+rxPi-a1bCEm`>{2)NINgSZWMXkPdYTX-;``NXLuqB`Qh`%988Levx)kD6 zRw|3Y8s+M!agy;aZozniTOPML^8+X2{0wC`DY_Nef*G_&GBAP^CLY76gR6?cH(HXv zMA{NJdZMX+L%k=_G(&AGa{q~mL{nclqT?!$Bxjr4<6m!D`Ydkw^`@oyxP^>mA4xG? z>OC&qQO8nV#$;{8=8?lZRUtT;rfhBUZH@%rygUAN_th#SPtZV!MS*J0vnd;Kwc#BR zD0rPUqs0o|vi=g3>B{f%OY?Niv?qW*x?T}H%5XB#J`0`ODlny{PZ?-u{(M0qs2k4O z(0B}IXv)QwD{9n@g|yx_Xqch)i5}0KB)uo1cQkCek)(>VvvBaBekqG+`Y$7*9EG@P zPdbo+B7?n$FpwqYeQ10Y8q>9jz{?^%j6q8hai?^=P=VJ9wOfSr?7Xy-i@{gVLQTxYb@#7ZMETxog;QGyGCmJlBG*w zKLdLmN=a;c%W&Ivz&1jD`w;9eVB2CJB{rMD9wT;^*qy{~A+{%EXj~3eq`R(Rnx094cVyB6nFSh9dV7C#Q1Q;Xaw>QFm6ZYG%-+}!; z?Cr3>fxQRz=eV6ilzgzS*i%MqcGYYmc6YJ&YXeO?Pn&Eq;$;QRejfG)*e}C=Lk(K( zT4L80yN=jKYQb8A-Ae3^V)sy?guMxcU2&)zY#KP{t4@SMew!qm6Jd9R-2rw_*mOpRT+uzk8FQR z8w!WPK1mrq_Jy!7!tFz0UjX|O*cZbd4f|5qqhMdI_-EUZ>Pl^og*^iHc-U9NK3}b0 z?Hgd_(l!X|Ohouj|ehBuxupfc_m>N>qcf$TeEn)2iAjiYL zTm8xHxDw|G8Z+9lzk>})OOpG)1l5^#57@(DUj{;R_g@G5TBOm$coOU-u+2EPKY+bO zYuxr>a-X!!Z4ZJyL??B0=f?@_muV$!CRv#L=u0Y6cJ8b{)D#F(gevPoM zgv}(RhkR=ZkCSkvb_NMQR7?5rQ-r$^(pKvrLPx^-5~fPnR_OB_=17<;VTOcd2$v#! z2H`q{uOoa5;d=;oAp92L_XrOm`~smZ;ZYK1OL&ZgSrT@Vu!V%4gy|A412MqRV1VI^ z>Sz>hL-;Ymod`cec(jBKB&;W4a|zo?*hs=O3G*fFAYoSt+eo+?;j;)|LAVj&n+V@V z_zuGN5pGBL4Z=Mj1{gM!u%(1wA*4L2y(*-_?h@`t*i^zi36GbMeof^FpGUX>;mZhV z1otk&TB3GvbtEL$rLodoLW2Q@JtWMOkkps1wB|Z@HB)s zAiNRb7=$+=oQyC)I0fN!gf}Ccim(LXG_|b@OA+3Ja0bHL5YALNSa>_aI}pxB7$PK- zXBI+Yfb$dv4DUzyAi{eP&PSMsa3R765I%(PUWAVzd<@~E2=7Gr3BrdFE50h`Mow%`wGH1dIEQnL!Ip?4h9r*#+be zFe5Pf4&oJz#8M_A#mI|@I&L+-&0CKQEq+T}@#{eaSK6OP6#vU`;>bY4^gwU=1Y2$~ zH%A3Kn6qU$ZOsVp5TZ%Pon^?+Lw+`{G}Q+N8>~M3v`gKKztG3C|L^JJ*+1&P+2~)k zLc8}MirJ}zZ(%%&*@7hE|Cm>>aw1mp6`0t7tTdjCQb!Rq+ox8bRUulXBe_hYWzxXvWr4uL(X4mp=mmFOgn?Zo znbm*Bt~tsMVy?=7jlcDBG`P~w7pZ!baa1I~Vz$dGoJww6YdyF&ecRHptpcwW;?*{K z5@L6>984<&W2DD;!4<~DJ_oPyRFr*H=#Ic(Y^^arq`e_kPTx{zM12qwTXT=Z^t?iN zZS}^tkwch;)#+G84`G@H^CVg5orS+=p$(tUdQ%YJW3&V0; zPyWxxu)zc`l2VT03ilDLcy2hJ4e`Mk0;j&~G^=x+#u)1}9%5cL!3wz`Z+B`jzq!?!5%1qmVMv6p4QQw^>-usqr<2 zkHqlk-}HpcnRR4}APk0CGscQDu^=0tnK`nZZ8hjCnXm%!tfgkC4;l8By4|bZ1CwWm@0>jCi+tjp4T-BBB7B;_2P8d zxfZ1_qRnP7PUw{;mv)fd6h|9r@bb^Gtf9P19;qRatTOD8FOQc}KBYIR^|{@Tm49$? zBm7Gd@g__;0j1PU_fiH3vA)t6+9ZU!DQs?ahPF-QUc79m+DF95Pree%uh6KKw2j5I zE;It(?vz&-BdHYcnwH0hXM)VtUbkb_9k?{ar+48Wv+(6Sq%OqnJF%1UJx+&*QA*8n zToG)>mQ$&HNs^&#uF?Zjufu_f7)lk4v5<{TLRA&+NtW!x_-+F3xdz`|kL*gUOelF* zCc46v(hW5t9~u@Dv+vp!_?u~M%+4ufomDWrGT2dD>u*3L6@=tWH zG`JZn2%H_V7=Jr}+2b&~iAo3uX5emfs;ZaJ#W0a_zJt_etPF}}MohVitMH9NZo>X3b=V!p->;KHI$l9$A7g&&eT@uA*+?{hRK>b(W=<(S$D zQwJe#lIU0XEp&Xj)+7$h4*2A08ESk)TS67zxf79lt->;l^P6O#8F!o%@rqU0D`Y#j zGiK=V4KXbbXB6s|G>ROO zbQSpqc?eoVJoqi}SzFX%pNPMq!#{A%lemyK^?%UtpU7B@;=iIP>5E^ZRWs?e9#cO; z(ua8DQ(f8ESkpg<)%9g^B$g@D`a;1{G-NZ)_i*A4bRj4CDCx^C3@xPCle0{Jy~|$2 z(c3hep8py89<9LU=;m^5B;M&NInSbMI~sk1s?YJIX@9x%D=dfg>9&xgz5Jr8e#O6neZ1Kzv8+5fXk!vB+@NOyQA{tN%l7`y^_ z1PS}#p;O`YSI=;70KC(U-*rEDec=s;_ebrU=A8@gY<1-D&Qws5$e1_m-}3*w+Q4_` z{}=o}=fS%V-u>_%gm(|T`MN#P8N+)39=ED{;XMNHG3_zo-3jj#r9*oQ;646R|Idfl z!21p!7Y|y9dnFQRDwfB2#^NDpd}(6)%@95oJ}j zsC*S8_5f4GLZ$xhO)tx_nOGirZRzc_s7Z&q=`0`ejTNErWBrs zq_a@P3f=kCtDv|9PfbI&Qf!!kez)P!OuTn1Ubr1Y@4&>n)T4OSEKHbNO|8u3Lu2{u z5%hjcS(G1VzYWik>v#-;CJD zNaZ?4AO7=@I#3J5JM2{t%qg9Q{pFJd~omr>m<2jK&!cl&?U*+SyA8UPbVl#@j(%37Sc;mAilh zR0pg?d_95>5qyMzyZkOKv`u3(FGqs<@=~e)Ko( zpdw=jf^QLguhNX*3k0?VM+s#G!7&nKNknK5Jk@>%%ha!+g2DfD+QT~7j9?prj}h!d z@ENEzc&UK|_2h}>610<`kpyWH(B`6p1YIR)Bf)9}&mwpQ!A1mcB6u6YI|$xKupPlS z2==Jseb7*XmJAGB`T1}o@-I5U@g1l_ffB4sbZi3oZk$VJdgn{fxM zP8NXDhM+fsKH7F6=#SuJ1OpJ9j^Gpo{Sfp;Fj(8~(k>=A7s1&G&O~5D5Ci~&VF*q# zmf#oaCLRn$z_{oV1Q#P1jo?zXk_awWwac`T2(HA`u?R+}x+l0=wGzQ;2yQ@dqgGfx zyh*DYL4aTig6RluMlcmml;EXlc&Qkrr3h|8FayDDrcK+e2yRzjnqW495W!stW+9l1 z;64q;g8LCXh~ORs^ARl6K;qE{5Ilt75d`-lc+7|??o>TR@Gyb}+RCur}P-?|3DcL*Rsk_2BO5I$i9!x3DD;5q~o5nPMF63v|_Ay|SSS*BKD#Rr(WMY)>6 zVbv1_oe&IC&G^&_SaFSd7EP_h-hDxih z`%`0jKT7XSsFjaGvoTpc5sM*4SiYYsGG?9!_YBk;raiy548ycZD0g)uCNY|z0ZbCSvoZ+ZR_qaMS9v;iv$-`Kl za|^sdn)MfzVL=`i@Wt_!(R(vPno)|IV$>6%vJK~_QQHIQvma3OeZX&h!gGTph)B?f zLZ0PokPC?!K1r^jk;JItsY1Dt@Wc!SjuM{oO0?gHDOYLfxqT$zX$}@i87EgJK)ln< zHfOJ>t|Z#8{>w@t(^#81+DAWB677Sy^~aUO=Z~l)GS9W2(MlqF_xyS#vHdSq5>r-b z6XcpoV!p|JezB5BKZKe}qTN+~VV~CjCkS?mBf@@T1h1CZ5P0fRaX*APyKC`#HftOdg2)hi$#^hd{arZhyKe- zqCK*@l6c+-tt8%h^-n8_&)@W)tR%KiR1)oIwS3^;sU%*=d_PI-A6F7DoCw=g615#_ zqLOGQ3oD7YZ_)Jd$Vws&jc=a-J5fpeW*_=rr7d;7Ie>%XaFAq6F24kvGfd{b7+HiS z4k`o|-y;ERly)JS8LZ*Tzbjl+A?q!`brzQjG&8%A8V5=j1* zg-+>MREBkVSeJvkq~r-wl=Pc+PP8`95o8z zX7{;@bab10*)(r=F3Ba{qZq#08(VHR#=M>cpR)-yq6^7V>PueE7f zmyO0bxXfHnxmmHty{?qY@A_*vJ+2VnvE<5PYlceL%Gnh?9UCYQCpJ#o$wCEc=zk?d zR5Fx|p*3ihnTpgA&LP&#h`kcEicpIPe3^ktGH^m=wRsvL`n0{M&uYaO)MvG#5@|(9 zGc<{{=@@PZw@G`9?2DxtvSKRHwn)vK1Afk5t5 zDEOs8P4wF&-XrBLSNveZQq_a#p(!FWC_P}>aT@%Jk2gk;$85oG<>4)(UgRFf@<%mD z#UJq)I#D9pu^w86Ij zgV;ZntegH6gwfFo^kaau9x*Ph2Qjg}{4>?4j7?=tmr%2QrW&E~31>maqqCyA5 zjHD>rxL?Ky@IH(9M)YBrv`0~(5yqgH`eFv~6az9!XTRpdjg{>n`5J+f=g^P1ZU-ec z#JC(WXYZqtb}ByzoP<7%l#H7A@$uRvxoRr1OYl!4Q#xGA07z*D zbfF1uRd-)X?P4rvGVowPOHuHjKz28y*2UB~h+M;v^*UT*Y#$a|^7bUWU4^1#>0;QA zk3`W91E(R%(kZ$gT@3IjSLwhb>G7p;c&VH8G;fDRpNm;zD#XRn%i?P?(GH*X(saZl z(H3bQ{4Y9yzvZjp&(S!c4(LVnZz^@EPl=)bEUhb5SAw$C43I}MWn)#8PcMlGHb)(~ zSQSRcnyy764)x(#nz06)8V2FaKH`h`$r6^gUPRv*xJ2kxWnoXv0bDei=Ew7pXrSbZ+)XcELa66Y&sBd0J{y7!>6!Noy2!GDOJ~HCcv4X@l z^4X}*H6Jc8-_kN2t=l6l9c`IGXK53keNkk{N0fM0Eu&c${b7ZcAbEu>FFuxzk8{w& zoQD^j&t_r#ne0$<5&1}?MKwbefAvyiaWNJjK;3Z~g$glzO6I9O&&0zFBMo;h`YU@e zT14J=#v#Nthuoy;#h6Ywg6A|1m2%CnnOLE1yLV;bI3qLU zqYk36%~(Cc-Wg_BDC?MUxRrRkWJ9rfLWsV4Nb_nFYh5hyUVeU_W)+I7^rZOOe0BbB z`>TKF+xdQLZp4hhJ+0xiRWt3W+)dgf8uPW&S^3l3G#fX^Z8Gbv?X>dJgn%%MXc@?> zc>?XUoV}j&h{q(P5Km>{?V1O|3PP3+?CQtD`^`cV;}Y{PpAW+TzU!CJo1sDhdNVv= zCTQk9gKDjhb1bdUovyqLcYbcnJvt-pBBYE#c^>ZMCK7dO5ZQGdc1<+h8Iq-Z3uF-F zdJWol6=Bx_OdY4K=ef;Qa$Hs7$s#;yv>^ool_?3wRGN9VU#zS8!RG&=z#b`pK^i!{SG5i%8pZG7qe--{~@V|y%SNvw; zZ-w7l{Nu!534cBO58;0V|5Nz8;ImiPLHMj_)E7Th{I=p#tCAyruJ{?^n`)Q;4E%NQ zUx)t|{P*DRfd4K0@8KVU{{?(o{G-Ir7XKLWv&8QtehcwE@zcd$27eX&weX*V|04X& zDBcGDWB5Dae+K_(@f(O=PyFWMw-djS_-W$ji{C-~uHv^5e>MDP;lBcZBm6hvzYYH# z`0vBt4*we!)cA(x?Y9*FEBLPX?Zs~*es}Tr!*42np7_U$Ux8KSSoJ*o4e(!v{|5Yb z;nxzsw)l0#KUVz4;-`q;O8k!E_Ygl*{7vw?!taJvUEp_ypAY{8_}$^32)`rz4)A-z z&xPL${vY7`@MG``;P-~#2mYz>`@=sO{s8!=!#@RnKlpv&4~G9o_~*bs7yjAs&w_s@ z{PW!kBAA$cE{72#63I7xL55r#o ze-VPm;ol8^4*WR$KdH)T)f)KU!8bG*|4aD7Ck%f${LA292Y(`bg1wgbU1Y)}_)Fkd z!A}c1~uYrF({7S6a2mdPgMObwJ{y4rYjv{S4%hKd1 zvm+Ffut9o8A_To@FItU3t1WN`!Hpu`hy+3cKql_YMz83v($SQWDiutOR1JqG-_UFt z6rll=3#JtmTNUeRBLy@AR3a_guh2+odlZoHGP03v%)=k1ZQ~wHxe`-o&zOOu_9C{& zEhfw*&N2wfAWnM!UWp2sXfd>R_RMX4FT+C)}d1G&I*efu** zeLewp>?JLh(LVe3R$^L_Hi6}i@6lc$Q~i7GEVOun@hvIMxQ*95MytSTC6tAuA|5`; z-dRZ5iv|h3OoPPdmvE!ux0t-9b&+~9Pl~8wmAIt{w`3|}#xOo$(Vx-6yQXNxIH4^X zWa4E8mQSFnGc6GDa2sulz;ul15XL!{L&L*78GcOkVz zYKs`lK4~n%3Drs@Vc93lZn`Bb`%chIM>=b>@8ph<4yKEWvFwvxsPzX3SC#^_h@n$& ztnLFj^{1A7wfaH&LIy+r2ssCGuCeSp6LOwPAce`%Fvv;OmVI)O@!P)ua*63L%o6#f zKeFs2F@~0XGD0PyG9FpyLrz1j8x%a$rRJtzu1!c}(?oyN^X;LN&ZFY?zJx0x}>--4t;T5ezzot%y1%rOh8 z1X=O_%zu8#{KptL{66y^x;J!7*#2}e7C_zqwfT=RaL`Pu&wtbW=Zb0rhidbm@y7q> z{QrXa51oJJ{n-46IU2-DPwS3C9;Z;)mB3hTH*aM2dkpl#4WWAXmYilZq?r-mwPv(*%UeZa^%umX^fJ@ z&d$>ue^n(8@2eKd9X^1{aj5Jj%sygfGfm1w$82mg=X@#x&*?(Zk$9NzYyB;*i?^BRiRQoOI=x#G1KuZhIFi??6vP+p#R?#4oSY8-t%kgZFEkDAhr+u6-X-uZhBq4C zrSL|<GU?xKnRg)3 zFE33yEIgBm)x@9@8^l01Ia&et1-LK4eHHF&aKDCISKMaeZiU-g+~dSu33ol3eF*m> zxS!(eU2u29J&1c9aqEklDsEeG_rlE)H&@&Yam&zTDcon^uEV{r!+i_xd)i9L{TA-` za1Y_^FW}nZ9wlzJxW|Z_C2l8iTZrq4n=bA$xU1ld z4aIFK?pJVKaodaAMBMJ;?uXk{+&poQ7q%)z~ zEr8n_ZXdX(!tD?DWVi$1o(}gExc%Vvg*zDTAK{(@_guJV!#xY`nQ#rM#vKOtB)9|N zUI_OhxI^JyfU_@wdokS6a4&^B3hw1_uYfxe?v-%I!W{v3Jnp?3XP*!EG`Kgwy%Fvh zxHrL_3^#x~1@3gXH^ZF@w*>AqxW#Zw;obsw2He}=&V+j_+}q*a0e3ds5bj-YXThBd z_ddAu;NB1SLAdw8oey^*+&naS0PaI@?}hsa+{fTP3inR9pTK<>?gF@v!@V2s9Jq0~ ze}Y?xCTrk+2bUc_ljPnn!9JgE54gkOUIup}?!6A~wQwzQC&66;w+e2uxF5hJMzkF6 zVYtV`?PTzxA#f+ay$0^}iXFKLV=ngq+;MzOLO7a`2mxn8A1p+2MocDpoPZ_>24D=#!u?HmJrCg~{aP3OGQUns| zKP*F?Jk-fVA2apl?!}jTP|n)ul_(#BFB3J6mPJ~CAeKTriWSUSqzQ4u%Ft2~|E;Xh zvUROYJoE%pY~d%wsAm^pHl0*yu$jTysC3Sd*VAQYBk7zbb6t73iHvS6b7x@gZRk7` z58sN;w`24jm>c5tJ2CT+Vc+pQ>F5`!u4pk$06bkQVyy78JRM6{ImSo|_NmIxR_`EQ z7^^nJ$7pAS_GG!RCQG84t3?C`!;E0BWH9`+UJp^1cgXN>1ECetUX+lH8CCgdi!=r$ zk1E|xl_p)Jx}we6fx+8bW#G?QIFpsEs1C@UU+EYfT_GQic_1Yjcsv5l_(cZDvi71A zL(@IxwX*nlrB=N=MWx9E!as2wCXzppgN9Eq^HL>6atGjOh$KA4T4Wv$7UJUwrlX>%X%9YyV1*XSllX+!VK4c3iTd(Y?X>d(EArw>xk(((JVC3*RjeBS0efT0 z(YVr`4yAqQ<1ZZYK> z7Eo$+k^Uy#V6kIkYpv!GkmNBpaLjMUmI(zB<&qQ9iI2A2Crf z`O!y}*j|L~(eZp8BrsGWDAK=enT4+sIHA%QC^=!}rKao>u?w=mn<8cI)pX=lU~M7R z8laLSgy;gOxf{+KBvQ9o8=Ub?agbBY$S>ln=ha$c6hBn-I34uKInm&{F?IlHWLzV7 z`HB zkWYz~^vUU1Sb=*AaSxB-t4SP_Uxa+-zvjc4Jgqq==VMYEEzYjuyr9X9`R!*F*jR{- zm3XfR@39VUKHS5KX9X$?Q5k{8{LuLB@*WS-AtxGpyi?O7mEZe?IsVB)JV_%p<3P)I z-Le7?7UIDS?5-(;W@s;}+H570f&O#_p(?Gt#F%&z{h&1LVR&)1-ko_7W-dc47qNfn zTvesp-vYwJ?arUhG1JisXI6)cU4rQ>DAx!RQMnOx8xyqC-pNAy!$L6cW7TXvx zYW3)&)kDo*=!?>V+W}uINfhMga2?|;=6uOO0jCUsK^k;VR^bn=NYtS0b5)ZOc(1$E zub(HQx3h+>9=(E2;;yo@@sFr2%aAwn>6 zyNavmL7X&R8 zIZSGO7D7(OgSc(HQk8hi!`U!}T~X3;T^Z))VJL?;$f>~2$c9n#)t57Pfm9C`}u-NQdW{2phY z^iI=9$KvlWnkx?0hS$S*HgkMQsJGmk&Vf-AZ9Z_`@A%=@&4YHJpOb@soQrHM0WZ=qTXHfyeHCS?U` zx56!z8(Cz$z%A0;2$!a+b`s-yHQ%H*W}4Rwv$g!~5ldMWm)4(uLhr#WLkau&k)(I> z!z&WZ%%30d+dm;Sj_ag(L|;_k+rlIK*32#c&)0dxm3N4yty#FZC~-JZfb5z7lKAf; zy5&d-e=xi|FGHi*w&@0Jr?rtWqGvp&19&n1%J;ZmHQfPUVmGO8J`AG)K&|?Fs5@A> za5U54@ftC%7zTtuoQjPq1FzyAQ<0CTCnNci`cdq zLq0>@MzSGIMt7A48&U5~cyFUO`(u6u;^8x!$lU$t#>I03i1j^8+ksZ*z)@^CM z)yHsCYxziuVVlA09v+|)QG#!E2Vw|2W?q1TlTdGzmR7qN%z4Ju7=Idi7h|)r8rU!s zGjGKP)8K4$hz-V&wt#KR*t3km50_|$(n&IeRpskYdm@Hhi$#`r2JB6)f@cI%w5Ri~ zQHQq$S7AXEy>}B1n0gc~($1H<#q0GIkdnHxOc{@vc_=SLW+ss+b?0ks_;y$?s8FZwtAnk?A43!ngl!%=1okiXBH`SlY^80adF^0WfV~- z>NjnM5T_^8I_BVfk1H9&9I@$eK~v|GM#g#OX(grbnCcH}0uN4bUFXq_ob6~0jNB?r zHpe`RPbrnM^=s9>Sbg(Ib~UrRn72cbd#ZHEkaKxQ>$tB;yR|B9W}EwKh=!4S>B{*{ zgj%hK7{u0*64Qlb773Oos9Tq3ROf4M((QHDZRju)=iiEJZpU<@I&9Jr;@nwyXkj&x zxZT})B{YgG@1fbv&V5L^3Moa3rSpL>a@M!Wr&KeT+iGe<_~Ni3W_0N+T}(KqiwqtA z)}ws4($sZo_d@v<+KE7ypi11cueug?4-Ei$a2ZxDHD*?MSoN|t8|Cz5WLRvL3#MtD z<7ABJc3+A6i*&!wxKt*EGQgPL5=K z=^7-QmxuGrZR)mCWjqy4P+bybh*2^URWUL^(=$y=Yi@**Go5*I;F@R4&zV1}xNj+r zBl^U9?11AU0LnaG0ug^N!ru=dcbrCOCoWclnxtLIvi@)>25(a>YU~@ZUY5jluLB03 zt@_Q_#ad|!Mk0wT;Rt;cA9j<{=GA#C!yArjvI082hh`sZFkIOgod%=XdDvr;sYi?O zs99!tdE7Ml=X|Q$%e3)&PmU1A1{u1^ay&3iP9mCN)CbDj$-KQFzRD+)XLs zSBMYA-H{&xRfHq7H3rXIy$&~2*XXrW5B&jadxMIVU=o7p@lpWTT95qLoSYV^ha=lb zdN48%O2o4UqpFK z+36JUN?f<^zO;spSLZl7{>`u-Zr;dnllyaFDK#+?Pof)^X=Kl(hJ)?zFMz$b7(%m6 zlF;dhwg$8^cv1bUsWpz88O4sY`QjPqEl^uF)REY+LY59Y4FzTmw|c|75gTqojCM)W zf3sgGW%ZQ7@~YNgLJv%+G=`t8QP)5L6O1=YU*6PSd|!qgq_=Uh7>3*TdDy`z6D7_Z zEk^rBt4}VZ{dqhS#ufjMN%B)BNkgth{|1w!n`tA}`3N!znIs(znWV$d+DQEyOcJ`> zoM)Ozo$;I7Nd1IKa`k_$jnwaFk~CZZLYJhx{*F#kN0LbhQ%{1kK{3Xt zY7DQ9c8g#I-+2i%-KAC~=_73};C-qYT#P*h3>IDW47{ak_`r^Gw9;jSOmK`X1CrP; zfRe6d>Isv?sOdTNi1Rk9Yc4Zx?=#R1MvOr&ts9bz!pnLaN$lN)I){hdw9^0K=kDIXT&E&})@igZxp1$x^`F1%g}={r6gqe%5A zUFoBKw#-%4#`auT=cq|b)W^*`OHKQofofpuu>yX9n%1&-M9Z(()haKIou=+~3=*8k zjeiP~ro*~f9r)!I$U+3%xgJr0Io*CdBMnPR)SZbMIz5nNc!thI^^BDz@YpV`3S=01 z%hkcaJ6_GHf+6rGK(0||D#t{FNmn6>(O|?-B850d-|6J_dUuRERI^Ee#*+#gQk{`B zMhDV`wEJVJg{W*cb|v6Gj-1Li>f^y(Zy8GlWf*d_%wrSJb`o!?$?SYa2!z3>;?WW; zn}&Jwb>AN{M>E{{+##>iIPe?lOxvMl4zdp*X`IfEe$hCL(uWr)8IwQz>XiOx>O&(# zDv{WA>P;O?0QHG7PHO?tW~~8<(e=l&aja3+v#dbmaBKvO7&LoUl&KwY``Yl!1dyC} zv|?bMuKWHoiEdy2W2-L{9W~U4Y`TWfpR^(xYLCHK8!k8@ZQSgN93_=7rfJG3P-X^ouzs1{u z+|LZPg9N8h$j#Kq(A$k`uD~^a(`GBNCsn_h^r70Jutm6>qZS`>x5=z|7*h!zX>bhf zM;Rz4#*{?=TdJMZm_#$omS-79 z%{GOq!mG}4(iLPTp3J57Ti#%VawJ?a`M+90sQH|FWTVKdKCC&`n$Z&D0mN<01&6-~ zyfCD!z{!O;ImdLdCrWIfX5zY%6=^9H#UM`bdz7Zy&rfn`~G?%8_D)dhl zYXbUTucbFjw?>36hu zLu{!owjP=6?6^wjUV8KL$WM`Uftl1Fo4_U;+gbW#oq{_89nLAsoukIuF(&wnkrL?# zDOzM{m{un<^h2UF1P63kqsa72j2@2BrmYYA-KfPkrCz3RPh+M2yd4JlsaiT=kl!-{ z^Ni|E*8~IR5Xp({#i(^CWqNLWpGcG{y+CW$qh_c{sWVr(vM~ZC5gFAKU)Iy@kjpHu zkh7S8l_@T;7V|2{a0U(-{h-YXJ`dpd=LML5r*Py)m6s$*idIXC;1;WhHR%P=fPx#S z^C?bSr^XQ$5t7d^m}1F|rt8fHByCEVC-g=VT}S%q-sBKDIYZ45tP3%CsJ4$eZJ}uk zI8mk6d^^GCsC^M??=zIzZW7cCfaulpy&Lp$IA1;AJ74tYn0gVW@);g7^yBD)8NEac zMReHD5!B`iq|`G5k4ra0Db@;mn`~V{7^ck8hXjt&v9ac9EkQG3!1L z6ygDsczP8EA~2ad_Z{vp9OPW|f(p%sxQ4JU%&JQBLe;aBaIrGjP87)T>-4>t3VTv( z*~XlxmE_OEwzFWrB29PTL>3$0FO+^9fYumUu9__hO;$-CaN!nr%jZr zYH*~ag!1(E3M?zcvYN{{UV?|!$TwE=(2-YFgy&82nEEz0CouL>!EJp2@ z(C=l`DnP$Js70|zl9Y%HpNNv{F#KBVslw?KaQX`NenRcfk#rG~sI=l&EW&X9%hiDF z0**RE9ihGRm3g=_9p9AUOt(K&e#du;R8m_`>&h9Q~*cGce$N8>zE4J|16^htDmVxW{qW2gz z4K7Z{jqFp;CiSMu;H^Uy`@B$3{RHW|Or=q^(%^yV;&joDLX5q+Ft#W{3$`dFG`9$^ z6L>evVB}Z4nrssWmW;0|F}z3t3gRugwHYyWc@)x{aaAjdua?h=kQPHPEYf86KQZRFzktajni2s z`vTrKIQ=VAsUN1i<F1k+@6#2LI6V)i8^-Swyd;B+ zUHG<6x2g`f@H7(!^BT4oy^KMny5*sp$v!;7gNY}`**Clp!zni8GpEMz3XOJ@8DiGe zIqB$Ffzm>hMpy^8iFc54y4vWmWWZr5`!&yE7%42-WTU^ScVAc2A7K%M4nof$X(?V@ zhEDr&d`F$9FXp1tSRB6uvE>+YJYtzyr@g>_W}g zybrKs2$n=FwJdyLs+Qm8;oEE_mCfd8F#~Lx$&dJcSp_Dygtk=EII8oEtriVlIGrcK zZlZLct&ymKf3*Vh%5ZqIF-4(gLTAj2Y!ir~na9{-kQ&v-NRnauwosQu-o6H(8Mu_& zZjRdXt}4SpvZtcg!Rf|1&YvSxEz`7*F)5_?1(Jp#>3p>Q1g+^!F+`WgZM9RbRLhn=6fnYwzFqA!`jaVEbbHi5#=_*uezkpiY5->(s5f=^^YS-z;00{H8sp zL@(9~;|z6HqwgNn`5bj!nZif$Jd$2kIFY?4W|Mw)0@Avp?}fzQB2S}EZD#(E%T9Hgrz>5_YJ9}2EQ z0VT0f%GOOjV5$|3)iT|e2~Du>N!w?xbq{@{L4ul>(tC#y1-JfeE#4i>!T{1I>dPZ0 zbG++ld8D4a*-i!$mZS@rfhCzazFC4trs0wK+8X<=Il7WdktPv`83Hk`VDR%9V@Qep zB;aAF!?ox_^|FXXMcbO{o>^)hU~!GbuRJ`^9BnhTt1_Ld84_Q*81WT|zkv8lh`);X zYlwf1cwLD%llWG|TTA>niLX>E%lL?SF%r*`cqfUskhmxD zbnP@9UxoNu#Gg~clQ?~_w;}#9;yV%l4Dq8S-az8@B;H)&92Jcuo+j~p9Uk$n5^p2% z)rdcf_$z996Mqx&w-J8_@%Itmj`%l-??L=?#2aeDPAki}EAjRcZ=%wh_;vFU4L*khd-$W?~;$0E% zf_P`d^VLfy-W~B15$}k22gG|Ko{M-d#Q%V}k9Z960>pbG-Usnh5&yrm-3h!-)&Kwf zbsYyOQ$o&(4suKf8H)->GE^!R%_2%grUo-dW>Ta2pH*;*dT&q`QZ7yO8c2(wFJ|-dt`-UmDU^g>)9MTg)dSXbA4e9YA zJuajRLV9vYPYUTxIL;9hRo*UAShx8pGeNW&$mg!j`-6y2q z3h6%smnPB~sr0WQ&1H%fA>AXSuLq`P(l>?ljUhcupK?p@3F!eL-7lo~`k|Y2yjzUDRfBjI{6)Oj@d5XK zaBQ5dci>cIr;ruCdn26RIGmsCZIk24tZ+-x`I#O5t_2c)Y#l zw|EIG>6v+5FNHqzD%jZL{SkJ$;OIIy^jg?hu7$m#&KW+RG=|S7#a>qJ?%C0o4D8r@y_|e93|AZX&oB#Vq8=Ef)2mbS;jl9!? zk2a>_M;j-_k2aP$6VYzoD;=tg(mwUT_av0!s3cF0E? zM^{d@V$;1e^8LBSG95#)Gjz(o?z~Xu{E!pB)mWVOb;Or-9Q;-z z_bMMK{8nSJOGD08dSJX*?@+Rxztxz!HjL}5Z#5RXE=(U7Mqd$%-4JrF5Bo0BGvn{Y z4>j^6-GBK|W0~=x%(yVAAnf_S`%q)6d;jMTHCFzgKGetwNaZ_1t9wF0{7@tN%_V<^ zH{(k=KK+$G_tb$FVMz}?8~)~@A8O=ya=5;NZ6!IrB=6<>(_N!=#6k9)>)4jxsq?VWQR^m z!X3@R9kuleph`7E<9JE;PWp&ADq9rlEe~to3!`_29lLe=+<|w(54=(BgRps(cCsDf z@#pBJVd_VrTjSeqXL#0xGuHOmU6lC2Q0e)=b5-VnIV!Tnk#Q>jWrL&+hbQoJi8MNfG0jtl0O8Kg>i zVPaMo`bKEmIJC_QWn$k8+qxn->Wvvwcx(6P^ryuhR6d8qK{5}COzEdrgq1ni+sP*d z$LN@3%!N9UFZ*ps@dAW*;>{bm;ih`2{CUc-Hpf)ip?OBC>d@F1#CDat0+Mb479tsP zj|5#DoFpdw37mi=of{l!C;bVWq9)xMoYN&&qd1G9*MiOpuGki4RV2xWW3arC%ZHre zIf%Oo~L;wSVuc>KF$xH^Kp*ZcVXaukIeny+2O~7cf_&f%nrXD92z&6 ztUUjaLpn&tg{)z8E2D;>G1{$Sl|hRrl%vTh&Rn_4qm zmZ$G!?8*&m4~|Up#{MOpJjO=Yn;VXa<#IWI4jd{&e-V`#OybV?xJuu6t6toNEsb}l zkp6GacHyn*+;Y%5=@X9KBL&Gl>e;$u;h#90OX6%U`JWbac~+04Sql4dJv)3pyK*XH zX2`f-A0c|Khpu06l9fTPJ1a2%Ppy)^xVYD5%~78fZ;jg#D)$MM5BZ<`WbNXnj^xDo z;QwTYXSi+tJ>8$oEoU63?Qg3C5`I3t_k!9%K3A|5UKN(hIevG?0 zS>UQA*ZX#bCWT$xO=9nHK4&p`p>bUQwH9&g%>fU`IUMQjiM{B_1txB}=Q%YN3g0@f zu1k$v-OIcue))P&s60U3XrnlJjE}(ZLtxqUr{|E%UfewMfnI)_pRcYb4xhFjyk_^F zuJ&dg6^@LXN`5cyzlwcC$tnB^yFA1@d_wtrkx|rC0vhmy%#`g>3lj3S}`=xqX8nS$O0|QqFVpqWS?9^7? za+Z~PtyJnjN!>lZy;5p#xl|{<$8>b6phD`U33}t!f$@6l3tvv@bW3mbCrW zP;gt=J0onJ9$woM&(Pzyit=mlJ&E`+n)m{%Vm1A;Sz2!iJDNrMfK>isy<&9CJA6+( zmEtP%s!+aisyL659iy8q|EQ8G+BD=h36oC=sg`;JeI+RCMqB^+p)KLw%&<`-D#9K<3n$<<3PD)(!Ta^aqR zUMn?uODM}E?54T;&z_nugZBz$dxyKP)a1pOoU8D&!{ie<9}iuVX6I%yVMJcbwAl%y@~aVRN-`pt`QdQFO^|p+474e+fmm=$^gI?xAQe z-Ktmr%FrE`NTHoN$k58p+)r}#ojkw^8dhlb_#17Q5^??9|@Fbk|BwR;mKG_!e%&##Ks{E|+ST zY{V+3wii#8J|=Zug;Y+J)S}j5YkqiZR46@KH-Y5DjoX2^acg%=$e9|J#EsjyxN$2z zBka9BoHsLUpB^gQ5f;4_GFoW6QLdlnmkq-8Ja?IFX5$M&>9VWWPcKBJDaPjNdohfY z=3*8pRYLI?j^vFo*?IbIm>-I8b4#}{_wvx> z7JapxcaLOD(Yr@7Z_`c4Jch=r$aQ2(1(NIdEO%DI<$6k`EH~}64rB6l06+t>iRd4< zP6HT+rODewUk#ZJR7ox7R} zQ~!={HhU|iT4;XR26E0-mi-Prz1$GU-h^A1xn#@_Avs@2J|xO7qDX4YF#SfZ;Y#pO zO}mX{$Hyb+S*2UGynZhv*5Le(w=T0e`hV4_e&{W!ABEb*QvY_RSJ4xQ2fsX9`{KfH z+5h)0^vVB^KV;7uLjO4{Nj&@WhwNGCi$m?EIzOt+32bioF`h?EiN{*pNSw(YaBaxw zqO%XyuCnnhxLI-4W##D|U)p>xZ$JJy)V@5_E}!C2HI9(0%?#C&lfi%DQ}h3Xs=R4u zaeNUFkC5bshvS`TRpVuysxgJT4Lfo?5FeT*onsQJbSD?lXx>`t=PA1?+}%0c%{rW` zj;t}A^>v|Qopn*H2FsN5yNaRg%laNG8x~$a(_={Ju}Fsv`Kxp@7?abjk+CXdb`F`V z!uZZ%JTE#Xkyjj(o{XOyYVu)9J{cMJ3v49)he~oPL=CA}GK0y?CYz%}e)X-mqDpP4 zXVvh1+!L`gI+k{3t=pt4fGO^-VIRj4Z_;Rsb(J4y;c0R zvU#W3OXY?|x$61n|7nd5d^eCgJ+_2h-PBRT>D3#_=`gD+{}VUVW8#K-L*Y_pnQB9w zT$YX7|5>?VKF=fY;1zuoyuP5e_PN)_?L$HQm-;`;$t?SY`l*bEbWe*eo!2R|WMJIly_2oY-J{&X(J0lWZmLK9RLRFe7jDvcD3nZdOIxZ)-Bk7ZsnZ?^MIH*L zrFAzN=Sn*`+KCrgSdlpF`HT(Vi6N7NA2xm5dBr7?KH;;s!s#u->738Ls7)(N{F!*7 z%{n%Qi;qq9?Id<*DUN?AeR0U(b2E+NM-!Ur{`s39i%%BE^U92@urH32Nqu5Hd)7~N z+7Zra8ZxO^VTC)TL(e|p9F`-`H7{15z&lOVW57Ie^woxgq8*_G$3=bgtS-l0V_DmG zgmO)Fg9LjA4mgXlpm|!8WzFN6+)k6N8{j$oTfJD1ldo~JKxBR;Ph?{HwW3~un_Vo)4SN2>JX z#JL_5?-44#SY16_Dc}tWX`WKt5pS~P*f{Cd;PPwX2`mqxt9vB&XzlEyXSW*`RL>cnpW}d76ex#&IcAZ8E1mJZ(y~zb|~qv~+T&%oR-Tc!}?_V9Yi< zLP1|Wd|D8^9F0qgYQki*Kqcr>sJ1 zc0TSIAL^%-zVD;g{;Qkl(C(uwHLn(TY#H7aK#%(2@p-Q0JHjJ2c#a#YS}0pLjEgV#C^(py+zXc%p2*VUV4BUUA+x%A13Jg|im!`z zk~oLLky)}%i5m*m#$|Ee!TNJ>%nkj*h8pTp;Jx2mpH0X5{5xSzxF@C*VUnGC?3#7v zBGwsh65v7X_zQAYmBNuVLhT$~LqCx0q2eUp#Yw(nl9=9#9>wHK+_|~~a1Nh8=99-O z^v%jtdwr&a!`CJ8ccj}Ccg6Q6qfanruB)?K*RI$u>NO`i<8N@BL@x$HmHziw*uR-wrZIK?Ff_lgh@3*etaJM`sBG_S~Z?ZCvSoHGG^HR3w`N>^}juD%ZX34&1Zg-g5p+} z#?d;@ZG?Hcp0(uA#!0#>bHliJrwX<0!3L^Ic$#mp9$KqfVcZJ++_*rzoL3ES7hiI- zN5`vk!YnT3 z^9F`WVLT6c<>->cf|`MQ3I1IZ)`i!125t#pLwcZVc%7T)`|9C7US_^^c-UG_KUJop zGlZu~Is0QB(;BiO-jx1n>_cv^PaJ9k%T)2su4;Mu@DO9RX3QPBuZcY%n;=y?u1K}} z=<^)=cn3&q3Vw0x`szowE{^{xZzJKhx5E7qIq1y;g}44Ds}^<0FWhvqIn}z96-Kb{ zV8_8@Xa~z>3tvT#8&eQ_u@s%F>@MR_y`&;9ycS>EvYu^YPWUMPxRM!Ma_9}o%rbvC z^kr+mL@$xp)lB^-yW%QQH7`7Ouvr$V!I(?olO121TA&dXAg$M+tidnzkDR@e!= zDY-j3TaR_HJ}?(-?ux`VtQMapqr_o_OZJR9dLaNKoG~YMk{7Ng1v^65K6(;=OtOKZ zCX5y{p?97C*OskX$gi$n4Lc6)Vpw64Jt;>oh3ge77*);ZxUMiCGE{T17fyb9IiU#e zd#M@9T-$IX7fU=UX3MkfB4+OskA8nbHCps`Dy2c>yl}cdgg?dyhkgpkoO;& zp4^4PwuOy+d`%NaK}!yn`(7x^ev=${#)P}{c|wF8D0Sd=^h)6{_EwY?cUZ}efFnlL zmXiyX&N6+AhbyXS77&xv(GkUzxW+Dxcc^OdvDA22wQ%3Tv^N*7Jpbz+p=LOboAKhB zKyTraWbWei4jr^`8zHyU#y(sBf|3!Ey=P55ILQuiVVqny%)h4vaY;)pluLGndHuq? z6H-g#krHbW$LDO~TG42XnYET+PMP(>borj1QO>-ZDgI z=ACh`r$wI|&dt)EPWwAvde0YmcnJfY8`bFZ*ES((TV_YU;$(Jsz&TccZTR>+UFlN| zc|Qh2k4rV=6&d&Hkd+misrW5;s%-sWIY?u*+{nQ^$90DcV)fISSzX7~Otmf^KI!+) z5o1m`iqEXX?*%ZZN>*4HPZ0P?5^@?_Ln7R z4%yMqOIG{1(zfPHK*_u$vsot;tr3b;4SChV@Y-QNJ&<)nc08ovScPW!cRRUA+eyBF zJTrFw#X;%e7}ew(x5^oNlP!JGO>?BfCPUe!5NfDYD{hA}+rD{6Jm| zHI~GWbvBD1>r6IEaiP$~lw8GI$J`~aD&nmsywZe22qsUOG4?8OIC=^{jqLDJZm7xf zS{&MNyDuX&4Q;r^HysA=U5Z!$t4n<53bU$h6(90V4b0H z)@7tB3=I_qYqjB5uS19$+Mci-JECwWrOCMrM+d@x>71lzlHBN3h!0qOncODFhezq0 zjJ48MJwCL>@0x|qK2Dq5!ra(EwPErSsdn@`aYj=R+A$SZM(E9sJFlfY9DVTIjj0%! z5qN7#(wR^@JX}2-s2f(2Cp}!%!Wp&0>(#>~o|>tt*N!DWqNF(1u_dKb^|MoSfE-pT zRib3->vE|!6;s-$uMA_)4r6&lj>C+x;p_3C{ zkl6uogv^N{M?2FSh3SQR#^Lc1fD&wqtA*Zdx9jS*3a082)7g(`M&g#iwWWKRyR6v- zu-WGTGQKQ}rlU0mCvURi|8v5)q{oJ~<^3V#@Np>DHk9idE5L2Tc{;~zTR5kj5>iA3 z>UQvylS4alhzpksLrMN*b#)x`>ewb)2jT(JlU&n}bxzK$*7k`|NZn-#~;qTHH#86#JVSlcyKd;sc=9br$O zuqW1bY3%#ey1^uj&+Xq_YbJ~@e@lMRZTf{av~&E<+JXPvUvT;Fzwa*!4&7f=38%%b zkGqrKR8}}~N9f-t^sf@?#zr`JMEY-?Sy={$#YIw|4GW(!PJAoZKHf^l;){EBRw`Ba z(7Om?R@IX9WJV6oQC6r|Gn8k-WaxYG{(%yy=XgZ7AUww`?+FtI=;LKQ^7P`tq$!fa zW_|CbrY?siiB&nS=JIG>m>w_gbC|?})=4YR*6j>aKMy^Y#UqX8p=!s_qi>i>=9NOx zy5WxallNLd!|v1}E5G+$eM9jA9e1&=cHt$c|NR#cpBkWa7N3@NYz@L^c7%z2bgK+Y zZ3!>vi<@6nFQ)YF6MD1LFFfe=c__DM#9JxY@oB|d7yjYOb*#oCT)*xb{wYwO04qRd zJWbgo~UYHl6j;g`Y(=vaZte^Z<_<)5nu4cL-seU3-J za|)MQQhI()m{~JW2lfKVf=klr21(TjB{(37_o8rAprO3OoU@@%<94HcNVU_}kJ_?L zNP2-ZZPlR7RNO|5tLZoF`S58`$k-SjXUF|_JXUO?=i?sltCz{AV-uR2%F@veH0I26Oy0J{gVIHXJsU&0(9DZZ zlVh#i(1LwLvXSS8sMv9F98Unn-@aOdqT|XlEDq9wtC6ajYypaU($2zcg&?GyFDNnYI(`??F_B>!%`N%e_2-qUxq6Uv&rZ@4(5^ z72f3FpC$6|{yHDl8DGJ{pARoteIsoANHC%yqSd9UMWy59>=U|F(h9#3O!Ngfp9dR9F9 zK8L=2I?yAVu&SjaNgsSU++-Q+_1dx zvm+&Q!UWt{YmP`pnlp4>q}KN#JB%uCXL@?Tz_#xYgW z8J?`+@t!(1#hjnkPWCJu`RD11*t3Vs=B#+_z92U&j71ltCqG#;lm3JfsW%J4o4Mf< zCgBYjaZglGxC>*AVpGiHRBXPQ(=SKG;%#QE43l=KyQ2vAVn5nXAK+}yM-Uj(}yjRBZ|w|vXO1l37Paj z#(tZodFuC0Gl;Idq;o7!=O*1_N}G5C=aKQ=14ej|#JHiGSGdwH$iCfA6$z{iEW%N|8t=YfoB~}(*0tm86rXzGrn}5R>MK?qlCqN9K9f79 z{r(7i`u#l z9-E~HRb@7*>cgQ&(jZAwBvobhsW~lA<&#-Us+}|%L%FEUP%hjb+7vZXJXT+pOZiK~ zn3W;_1bwzOKi=b=F*sx-HwGl{2B{N{tgV-P&P*=KQ>9g5V!XCKF{w;a+@S>}OC zY1OzcrPz$5Qkg^4@?0pVef*wezAaVx+>D_A4vYVWph$mH{4K)Yviv>Dae36RijI%A zm7Jb!E2G9~%wOfx#5T3f>x0 z&0cQ1+aC4`+tc>4SK6yk^}E{fHTGJk_jP=o{;uG!#{Z1JO8=6-s{hygRr)uMzjeII@pq2bU`hV|;`Gg^`fPRlhvS{7 z_4FV9D&PI~fK{T(%|K0G%<*CNaMb!%7B&ABP~&AeJ;&xEe?m?E(eS#C^K3m-J2pY( z*8)}U$*B2ng%$98r*}n_cL{1e?T7pc{p|od&<;Z7cLS=N;Z7gn^iimC#yI_E$KxGO zuoF@FOtw=|^_cGAGw>MV`HmOZr|i@A8B{*cq1xjm)O;`W@HbHTzKNReuTkT#w5#lQ zb}jNJtm7Z$v(f3B>@Ucl@GJjlKDVHj`%YB8yX+p!Bd$TB(rfaM#%q9@t`RayXl$FH z+VdpGCp$hBHDB$W-U0a&PUoKzcpfUhu2>p-q4K>FkH7(r2cqU@u;U?iC@TMvjz^*D zIRQ2PEy$m6EB`3p+w63w-;S#HJ*e>?^zb>Td>(WBII5flsBQI9)V6sg@+Yj~9}QoN znxF4c<^6zKew&>BD{8)WB7edz{?UG*I1_37!%+EGMh!pKR<+e_4b=F#wkF2qn z5S343$4zWgRDGL!_(@Jb*>Ow9tsLjuQ&H2kcihpQVLREgZD)I)?Sh*ABFC55%k1U0 zhwW*vw7u;$wvWBe_O}C3?K8+;Z*Q}{xeOt&+fKGX3X_D*}3z1z;R_n_)~pMAhS zXw!Bcs(z0+ehgLq-~+8s{ciTnwB z>_4dS4%iekp}2@Giki=2sP(F}<1)4^s(mUtJ{mP&*^ZBKe5~UfTh&%Wm3N%Yb$U%( z%jtD&p402u`nG{R-Zr$2Q1xl*xEZRv6CF4A@RJ>%Vq4l)wl%8V+B!bXwzKVR2iwt} zZqKl1qRKzZ@!9qqr=RQiJbS*=yE?wWUT7~u{)BFhFSp%ME915oS1K*!fRzQOTLjtAQzcBma@hokB>((x!e+7_Ue*I38n98YvS$xcQcuifwX z0Xy41Xy@28D&L1t>+2Ivf6~sk3+z+&Y1DFm-ti0eMf(zJeqM3>Dr)>UkU!x~{?YKa zQ02diI$rqL>7Sz7bp`S#e8oSi-)dAo>rlhjBY(n1{!xCLQ2UW>sNsLuKRtYh{mbq~ z9mi*qxu!3Mny$Fx5{?hIM>xHd^# zsCJ!?+TOi@DtEc#&rtb%X}>|0x6<)yRQ_w6z7}W_7+rr z)9kIN{HCMk_fFLK_n_)=KazEriyH4C`-puEHQtk`eCOK*_9^?ceFjy(R~^4*U$+ZU zGUYj$5L} zZ;e`?&vbm2J;$DlD!04iD^U6Nw7pR6(i=6u1CT#q2>+;kN1%p}Mom|MD)(l`W9>Mn zPe6@78MT~l_3+yq-+`L`E-Z!fP~|-8^vCU!PJbFz?lbmT4}adi==7Hyzk+J7MUIzv z_)=6meB$_1yTX2ks@E5&`h4T`mG)b^%C5HGp_b?Gj?|xLiY6Qh8RJ&w4E^3RR#yiZzk8pZPztY9F(Yqn6tOR6U+?{DOzSXkW4~ z+gDKadd>0ccA?W3*(FY2ipu{j$8UT1yBL=nYW}}M^;I@vW25|=poX_V7C~r>`aO3> zwZpmgJbONBx~}#@r(c9xulhLdi|S*2!ts+>hxiM}U!v->2K9U1?DXI47W=#1iYoUH zWER3c%)?q#R`slH>)@%xeH~winy$Ych$?rOhYz_|Hb>oMLFsQFrm%4d;>FGl@t z-gW$*ecvuetru$?ueIy!diy;p-wk#nYP<3)s-D}Oz7v_{kfO0vpQBLoT^_aEk9J%M zm0z~wV?6v=Tg~a!?Qyn-%|)G;H+9_1o?uV3%~A88k2=oi>hudx_3VkN*Hx(Xt1qfv z{ZRGpZwJ_csQJFh@nAayHQg{&y(T+-3f3Zi7HOKW$mxqQn|P(;Z|y3(8kOG~RCzzx zO&3(qhqy5SLjGFEj)Ode6eYgGF!}nq}hF7N3Nb64{)cSrB zs=St{@>)B+BWiv-q1vH~z06+e;n$$1>x29WBlzc3T!gCEV$||mj+)O;Q00E(;VbR8 zsCs;d%5SaH*V*;PSpBZh99-ouZpO89&IbxESqhQ zv6XEVdn~FRRc&=!12sRjQ2E!kb!=VKboCt9w+-y^wxMlg8`~xr_amrsPH}om)N*Ts z%D=5`XFH(k(-E~?JEN9MS5$jkhMMkj+r#!m<=Y!IeqX2eL$&{4RK7!;KFp4A`bgCD zW1K$Lj(7TG)bvwO^_bz|Gg0-t&(1^5_v5Jfo{ySt0jl0lJATGKYo9}n{~~Jo*HQIZ zjGAsKDxWt|<-hNEImY$Y@uzkLYP!!+`F`d28~ZJ)-ru9j*@znNXAl3?{)RfwEkb96 z#w(7>w*;Ptm!j6!o18wx4nx&v(taEzuL_n zz6JF=`pfCNQ1kJ(hwpRxKdALFgM%H-cM+S3DyJB#TwcT;hacheQjSYIE^Esnt6->s z>>@%_RKCsZ38?kBm4~10^mA-yRJrFlKHqUyq^f!)OZ+_z@bH0lki8x?{f(%44|V!5 zJKT=2Bkd?V8nxWVqw<-EYPTs)pYHVA?H%?mI}0`aY{zr3D)AE3e7}b}-dN+|>rnOF zfNHPpsOk5he#d3mxvKo5Q0-VARj-Pu>9SGVmuenf-5zIapr)^d8b8l*1JrWLN9Ehb zo@(3L(@@iObbLCh{4-Jcp6$3ZQsrY*c+7v~!$3*YQ02kbT%bVjo47 z|G0h9>GSOZ`;>j!K7*R>Ir{=?zFzV0SM6&~U*vePU1FEoH&N~Uw&Qo~yY@Z%KC0Xg z9Dis(vLB=JS%Iq0mrno6er><8EA6*-6)OMl9Ivr!?K%(t-tiBPe{{Uj@g~PVJO0)2 zX2)9`|8BS1ZT1gTJ+|AOc9-2__o9~nKF9m5e#A=W4S+G9BBbxh2xX#$@Uc6(zdd#ZN6<|Pql6BX||nhZ#&qI_H=uOJrmVVXW4V? zxgLI=J>Pb*UF`+-LVFP^ze^lnYA>_h?B%w*?P0I5J#8<0rM=4bwpZJ0?6tO!?Q5^I z{cL|bzz(#7?Dh5rd!xO{4z@$=P&>>Hw_j^WmG2bC zQ|&Ewn!VNDW~bX3_IA|o{Z3SVcRRipb=>fv)6;gIeHgWUcpNqTe5XH!`W^61jhNrF z_IdlFeHk_0EB00Unujm6i=4jLF0o5Je3|37?A!Jo`>uV@zK@#E4;+7JKe8X&Pwc05 zh5gKaj>_jt$6wj6?Kd9&t>aa8wf)Y+*E(Kj*W2$se1qd3?MC~PhyU#O7yGN-Y=5&` z?C*A~-G*AuJ01UJciG)`4{Cn*I^Kuc?qzTgqvcq{X4;~*m@RJkphq0Pggx9IVN2Rl zwlu2TvW}0m+M{hHn`N`@F}5;lJ>w(#(iZA;tQwm~hYQ&Ib|E>6DyHQyJbmS=a= zcs-on3svq__G%BmM#CAgFBcm%ydP@1{&s-V2RXjp@r{mevV-jqI~0}QaK|I;NIS}o zwgss1Z$|ZN-iq2T-R|@|>|J)2z1QAvXQSr-A;*uP=I2pV`#ga<-+CT3-m9o`-mpvU z+o<}yYu|VJM~*+SE9~d?OVs(~MpU^!*-iFm`wJ@n&8T|)j{5y>clu7d%kHsz?LU^M zv|>KInIl>RRW2_=i55lW&m%o?IG>J+mh|vamKSuybRK7k?ZGqcG3HU(n9tFcXHjB0 zZ_$bA$5`Il9NV+Hhx7h`I6T*JEf25n_;?R*XdBta9?qLyV!cmv+`_|8ayl=Hh{JiP zBbL*~^2ke!+uGA?J5+mjaNN-`pLvPn^Y)o&CwmrZd7S6?eA~tH-jFz)CwF4LmpQ$g zz1-t2%rcJ8v$WAE9)1gIy_#lkwYPcr3_H`_iTYjLgPQJMr{8a9JN-e&X~%Qz zJXF0OLH$nWJADDFJ)U;VquDWj&c5LE7ahNBUv)Zft%>=*;dqfb(XI$npG?t9euKRW)&!#6qR$*wrwX1m4m z=yJ?=8)|w!4-(@Y9{!i(U5@vl#@lCk3@eVW&PLUPhnS)~6cy8pTAoXa={)ch(|Lbi z%!kM5VmdDhiZRc9#rP=H{PI{>j4PtrA=~N4IL<+xPt`*G-s++1cRZ>-jZpbCwoPnP zRDL|48mDXN^j5aD(@#U?)86vDSB%fFolxa>L6y_hUSKaom2)X7pKeaS+;&G@=jemV zhqv3td~UEeqNX3}nCEq4J|i6S5Lm1~Z;puT`6Q=Lwo~j>dyAchYNzRTrql1RccRL@ z$ML<6XQTFikD|_NUqsdW4b<;!nd1*o*QvjB`YKd@YwZuH<;ANzVmco)2$hM8^YDS% zsRXK=a;SVNqw=qgnywbA+~YmGh2u7;a@sjQ%kjCW<#Qe?|1OTZ+6z$aaWQK8ZuSaP zdA%L?LDgfR;~VWzJJOCpjW-ch-ejjwbNWojcia0=*Wn&>JRddRFFAhAF0yahcTn^7 zu6@txAKFjt7xo)ez1E|#;muI%Q(M${r=iB{fZD#D=k)VYzw66T>-)8+`QiN~u|C&(_y}A<`k6dr zp!_;v4)#TzZ}cZnKl*5_i4UX3dj#pa3$G)mreOst|F19?|3pE_ZTAy2?(pzH-9EzH+33etbzq?WSJd7&uQB?YqsOjgU(x1ZD zuy?g2{c7Y8Jrv+6xDb`ka@6=AVhTTU{E6dF?F#!D>bz);h~vVIqr1&UpR>P>gq{54nmzrjzhJ_6ine%RK7DY1MfuTcMq}%!YgkO_oAjx)kxBLTUfkak%elvTB!VLqn1-MJQI1x za?Ee6hmXTJKgg~rJcMe$XD}0AK>a>mN447$RK815^;+imE!2ASITpdMJp3Ef^lKfj zNBu5-LFMzS(|@zSVJ zV>?tnr=zCl6<^UaZ6{QD=b)}f_C&2O100V_RpzvuWv`>E4cpw`>9j@Q}ssQPU{&F@B3zQ3UAvDN8+*zKrtb~yga@h-dD?y-N{ zy{PT%5p|MsN} zqSl{`ddYa1sP;M>RbDBK>l3Qna!#*cE1}vg$HS|l%B$}9I9tQ%HBtH1MNQYp!yDTs zsO?pAR6Sau#y{0@M^rsdw`bThQRSY6s&{95zSFzf3sKWwWG}Xt*h}qYwwt}&cDFt3 z6}Bg;{3}uG<8`R{806vC+Z#~z8;rV7aA^G`9)TKv461%NqmB>nLFId&)9<$rpz@jH zIE@-_9%_AFfNHmAQQP$oJp3b6{vX>A%=t?PmL% z-C}>YTkSUchy4?^od0sX%kDHpaMme1SA`O?DE{H1J$ErMEqs-V`#rl{q8 zGM2;+sO@uS55F2Uzt^GW_eRwCBb+`4Rj;wA^ivGwfZca^|3>pNp#hJXASPI(-4g-=&8?hdO^)?%^Lg{Ug+MhBY3(6IIU?2Zcu< zZ$yvfRYc`~tkdf_y$Ndk)~NaFh-!}uQRQE1yW3v&YTFkzKR2P~V=!vIhN6CdBOH%H zwI}Z^jrrbzs?YtX=^sJW_gT9TRj>C@%l~84@>-3WZiCZ*K~29MRsVgcdg~@{$tQWD ze4Q}LtI?umQTbFt)i)be|6?3iLFHS^aUIlhZHQXV%~0jFvK>79Y{wVc9!|g7@jz6* z!%_1!2361Tb~38nZn3x7+fn1sLe=vgRK4%B51{f%qo#idRlfzOc6`;ojmqZ(yTX2r zs@HndbibhHcN=QC>_wIL52~D0lfn^6TOBKB(yiq4K=}RsLW*%#O4LsO2^uRn9cjbhp_VsQJ1RRlnJe=c3Aa z9F_lk4}TF=zs0C}y^X5pr>OD2wrf!3tV2!zgWYIxUpwMUiH(dnIRXWPYIWG_SI+Y>e2l}^9LUgzQ0 z+o5)}9gng7QS*5hs@`)v{1H1JmH$(y`aWl0vai`i_Dxj2%Td#PXg{`}qRRQ!Zb0R` z2{qkT)O_tk)oZ^k-YhxqD~}qUZL6Znsg7E%xwbZH`bMbyn>lWUS})q6rt9G0XQF=3 zog8;YEzhp@5~pA8xR>LrZC^XU-e8BI${FT(l)c$buv6@9>+M&L5)}4<~qHO<9haZ+t@a<%~AC@$#F}YZ`<1T z_H^3`HNR(}+TmQMcd-}ROKdmW!}hYh?X~tgRDJq89%OH{L+o%n%8o%Tr>Usl#|(_? zkB8rbN0R=8;|2B^RC&*#=I42*zvTF3`wD8j*X%;O$io-gC8+jz%kkUx9n}8sGt}?= zTh#AxJ?eM*i{ou}7b>5x8OzS5*GpJiHfby56Yz^>N(K4n$2q$nlMK2&#VL z98W|ozgtlGOh-*O1GOAx+B=L4SQ2G9Dw>kX}`={OR;X57w<#@N_J@#+A*Y30b*!}i^4b78!rfdePKAE1U(P(_TlNhb%{}pI@Qsy#}=&{e)_tEvVzJ-H!PxO{`y0F5+l-NmM?^pz^Pb zs&9_1ZgXvIn}=%OhN$^(>hu%sNvQlzM%Ak=YQEdq4ybx|MvZqaW?>)Hc-PtfsQM2> z9gj^yXN8!G?psCw?O zJMCX~7sm7Dlal%uw19geDBMO681GeMZganNB|+HQq(2@_O4F zu^RDRsQJ1VRqr%v{vNWA+9&J+`wYf*L)G^sr@v|!diYXQ{%@m})4Ps8K<($gL{0w{ zs{X4{^Rodp|6A=|RQ)nePRcEAOQQ0r==d1a@~??1w=Qaa>f464i9Nx#K&@Y=qUzJu z>FrVV?ug2-lkM#E^RO)GJyG?z4wcVMsQDO$YNxTN`J3$cRu8`mHD3=neJ-lL58KD= zllCe5tbGAh?jlsZ7o+OA3|0OIsQf-g&Bv!6{spRDD^d0R9yR_isQk7&eIKfRMYzbS zgWL zcoR|O-s<#wQS&j^K7q>rDOCHvfExdG4`1eZx#Q1J<9~&!-zrr3t5MVafSSLJPXEdA zFR1!#cKUBl--;@Cr-$$I@ZFC8cDxt0-WF?_lv4^-emQ$IYB^O!SF z?SQK98TKsO8I^xm#}_&7hMM2Yoqh#szIr+RO2@rX?c5(#uOW5}D&GlqDr)*^_BJ~M z)y{XK>Nm^YXJ^|qDnGs*66^J-)1N@)JKyOG96ya3{{>Y27TUM$hp6`Y9990;b``1~ zYf$U|CR96bL6x)B!~e89?QXjlRjzI(kwsDMSPYeK3CD+{@+;}Mlr3$`*s}IW)c8j^ zE|02rB~-r0pvtT2;nh4m*VeK1Z6n(ZHGOkb{wF!TmDAhU)12PX@tO8)d#>$bFGSVv zQrq3>J?&NY8r#?Qw}Vjixxw*ZJIs!>1$L~RU?-#6eTw60j&F55!`@-feK4zapl{4S*)Al+0qJ71_ZWp1J*D}<4xZLRW=JbWDg2wU17iP|1y zqvkWm>D6tn)9X5}kE%}t$Bk@Lr#G`FIK72E#kRJm+IF@hD&Nx`cXE6ds@=|U+}Xp= zcihExb^1m2Qm0?$xVz&Xj(efz_Zp{PYx|(~SA$XQJIs!>1s;A2s=m|gt@buM9krb9 zK-K>)R69S2D)%AO^be!9Ur(cs_ufF2yTmTD@1Ump0G012PXEmDSB_UY{?73_R5|PI z_a45{!+*A$?eF#vyTk6Xf1~o->v%t^UPbbg^h{e6HQ&V@ALjUQ$459Wg__^8sP(%d zYPw3Oaj{XE&h6+lZQO3o4)AQR&<4pQ!2na=aV0p6s`oZIbwK)O00nX-pB9v1RR%sQfBm z8LZ*-Tw4=${&u2=w?}Oc&O?=Z5f;bpsCr**2YC2RsCF5On*UL#-~B{P;Uqg5RgY2hzk2v~)cAjU z_yJ52>m^1S?=aMKrBL-NYmc%OZ5FB?H5}JMO@BOQU?WsLS~_lx8r}g_&(5fNT!?Dt zZm4p5qRPDrHT@t|yWNDEew2rgK}|Q&@f17FPPa4dU8wx;b37Y0{X?kyA4ApWX;gbW zgBkc7YP?ra!xy9Sc?-3CK1a>ZYNxNa8&Tu`=J*fCyHWF%**2Na;`VS`3YC93R6UMz zdPP({D%dm1&~i;fq1_)^q*_aT?rW~bYk_Ab== zl}4?%b1@Si!J_yiD&GaDa-Koe^A%J(FLnGrYJR>%)$@DQd~Npd?Wp?h@$h2plYB~} z@-K_Z|0rA0X4%R%2h}b$9oIqCyROZ%^=y4qz71^?)cl=@Me!8J`5xZZwzsF-PWBvB zeb05=#a@WY_fp4~+bisq_G;S)HGY44z0+^9L+uDV+TLu(qv|oy@f17FPPa2r<=pM~ zUi*NZW9QjN?BjO6ecC=}U$n2-*X<(I@>qG)L91C2G1>wl%6Ar`mS5qdn7}ZO^q`?1lCc+YMEp?v8t+ z%DvigAKT9kv^SvYIRsU|p{RU@qoyxF)pM+!U?}~dTd#9ac@3XV982LSf%Kvev z&v*Q+;};yiimKlmsQNAP@TK-Gr@!s^J^O+E*uy_@{F(jIe&gXQ9j~@)?f3Ray9rf~ zpY1PB|IKc7`ZoKA(|4fS^)JVJJp6CF*XjEmA8?$}F=_vzsB(+h;!Z!@mU4P&$4BB} zjGu*S=VMXR=b*Odd8p;u0JS`t;$e7-JqNjg3522};Dxl`|KW&!edQ<8zK* z_V8Cw`M+)#q1L}Q9lwo-5r2eghn1+|-=U^khbm{i;|-|tes=mV_E*$={$_ti&F4B;y-Z82Ni9)_yl5spiu>RlGgVRh8>TR1++o@`ICEp02?+UDCfsQla7c1~~axTE9K?HQ=~IvdrVT~X6t zXfO8gZm8vd4Ql=G@8JXO^;m-R5spWp^1azkaQY-W#ol6XMYZ2;SORC+G^(ASM3wt2 zYWcnD^kt}eeeB_1c=&28LHduV;alzBsQfa|NS1GLd$=uys`rtO%iE)EHmdyUsP?LZ zs&`$Rhldk4LzSEF_zYBi&PPpuDQfzj_F6j-wcg#}csMGb38-==qL$BO$5ZT7RK0Jr zGf~H%b5Q3cPobuN8V|=;QROT|)ngfI_*-~5evB%2C91ybQR8hw&Br#!yHMq1o|)Y5 zax@-JTn#l{9n|l+0Um)ZQ1xtS+o0-kn&XbB@z1j7d3aZQ5vraS+e@6@&GF@quW;NG z)m~RR{c6Y8qP9mjIUa&qzeb_zGsced@Cm5-oQayR`%vxrIO;m{t4?2vM-YGL^wo}k zvVWlR-+^j}-KhEf$LXO{GQ5Z_hHCdxsB$ZyrprRj*DD}$ssQmh2NgRf%#~4((V^QTyu#@dA_BMMvD*p#i^_*=V^zgZk z=b`HLq|=|W&!XDrCHuNv;^E62zlW;dC#dqiMb&dPs-A1@_x4A-$^MFJpB<>_{&M;r zRK5Skl347lq&>@^%E?C6F9$V!9mfr@6!FQ9^HIy;bX0vhp~^Yi@wv8(z0h7_yP@Xq zN>qKWLal!{IDI&(9tDmkqUv`$YJIs2Rqj2ga_>Ve-!v-U$DIBIYP<#Z8T-6_302PP zsO7Z`RiC%)+o=3LM3w)w<29)AHlU{4?D!A63zhFan>stGM<%Mi#T=KgC2bj7&Q?H` zUl~=eDyZpmQ03>M%BhQ59!(rKN6q)ij`LCDw@0<#8K`=n=iwKk^1ax@yE*QT%BQEj z3RPYo$NlU;djl$;n^5%~?DS!Fq%E*x?F2j7-ePaFx7$1IEL8sYpvt=sRj)ay`FjXe z??>$uc7c7yK98FIMf)IygSVo`uTq z94v#EqsHrQd!X{U5>=mTQTboz;r&q453qxrem!dbhdF(O9c2qpZ?r$zO&

<6j;B=6H+at@aPQ-NSd-o%S!g3svqOyVvRa9Pf90!0P1` zs$U8 zCh9opLR9%ZQS0+HsP(NMYCXEq@i03YRll(wJ_Sn?&qA#ab5Z3yj2iE8$Mfye_Bs0^ zYCc|a{Ho*EP~|U0<@*7uUZ2`8QPX{e+K#S4jkgI^?q*awZLwSJAE^1d%PeYZ{9<^M~ zbKJ#VfU3`>sCMazDz~@obXK<~W{< zarvU^|D@9wIDQ^gua{BzEJW3J8LB=Xqw@P2wcOU)pX~3ba<`%K{|i;#9=i`UUFP{o zIftQ!A7M+QrZ0;szXGcK%Bb>dp~`RQ;muIfH}~+isB%wtdMDKKxCoW+B~I^Vd)QvK zx4jnC4*eVtL`{Faz0nRvjW^u!NIM!;ubVx50;*oOc=)XzKEuQBbUe$$@3r^a*>;Yd zi~9Y{bNn!>T^FF*?KuyB-s!KS>i>p^zlo~%JE(fTkIHX3YP=8a$EbY2Lgl;4@eioq z>u;!hw%Hx1`TQG|&puSX|JePg@={$AGg0FeLycD)wY*E)3aI?EY!y`g$DyXnb$T6C zzV)2m!0C;h-puJII{jqFEgiQ(O@A7y9_?&( z_;SZR9be`6TF2Mf0rq-(lO2kx&v3`1>=--FPP9|(G&>zN{q3mbdavXAQS<$P;|Edm zG1oq9AG1%Q=Id$4&)FC4EB1A}2(|t!!=vyk$E!Sija_dyc=*qbH{0LsAE^5NiOP4E z)BnbD#3j2X^)G`OuPkc5%Q?M*tz?g}$J%PPhOK4m+WNL3D&NMAo7v{}WZTNNv8Q2N z&m4C|&Bs}eJKOW^1@>ZlneA?S+N&9 zd#B@B_C7n?rtL%aQTv2lV4tzi+m}%JzwG!m`vz(~Tk7~N`>tJXKeC^q@>yX&bNZL4 zd{#PMZP%j4U+4G-yV2=CIsOH;z1xmz$K6ifYxmpK1<87sX^Y##QRN(gT31j%h+6-qIldh=KQkTALY03XYQ7)v@Y(i3 zr>7mywewK*ebn(|_Hp}!ebUai3+z*<@}6=0tbNWtZ(p!4+L!Fh_7zkiin7kGK%b#ecd0u?|=Nhx9j;l z=RD8zoY(99{(Oq-`eE+-Kl8;-EX*&9sZ$-(XHCqyI$B>FY9rkj(`R$zmYCnKI$_@5 zL$MMbhuQyR%>Dy0eV(Hi>Lrek#_T^9)6aOFV1ANbqu1$Fy$Q4b9hmiZnxBQ~Z?5AD zG5sttUV-_&awTT})tEll>BqS1o-y@zVCsK|xrd)H>weXp`j_MXVfHI=QsFt4#LO>a zTo%(`HOzh0!R)`6HpQ%OiRq&qX8s|V`F->#On)b0`a2o3L4o~7sLd6@b`G4I(h z^A}_K7>(KI3d}uS@AwVoryI|})VT|@?tbHkji12u^(3aRMf$Y+wS-d%su_;_@DZpmN>c4e|gNgD`Wbtsx`E>*3$-<=dvH> zy=aB$vo)rVcE;^7^*UkhsXJzVPt3f&#zz?+hnaT@=3M8SA7*}}j>FWQfVt-@jjz^g zb&B4oH)HPOPUBgazV9)<4^wXr=I;p>VETL-)7Nt27xgt=rSD+w|3l-Am_9e_R{c`9 z>kj>1f5PJ>Sp~+x9C>=T))sS^()<`+x2VA{eElwo$-&x zKk3i2Z2Irv53I`#24=?rhAup^lGmd?cpMWjY2ke}eIqdX-+I z*J9qY>oEIFHGiW{(_8dbOx-(mHm09Pji1DPUY26&Ez{>P{jG5Pb@MCDzlAyPTFmF} zLrmQ*#@ikL4zvF+=KnHZzQwa>8CN~{LL_Z zwa`}P4=`?zIbV0o{TzZ>-vhJ0k8xk)qcG?1Z+sG_pVKk>oMrx89iqc9b%$ftkHX9! zV}2}VzX_N=CK_LjnLkBu#+-Ym@x7S3_vsvc5L4$N%zZy*JP)()d|jwd=~7*$&*=;L zvc9HoV)kEUyascQca7iI5A|c+q@U^M`jvjI-(t@3oqmtm??>aG^k>Yue$zknZ~ae; zol%%qQp;$0-CZkV_NiiAU2ADw-Bb6{eYA--*OuB^57747Ne|M4^-%4F>8FqJ;d+$z z)Bbv*o}#De8G5#!tLN*5dXbLMkvbaF$K}T3b)sISll6MNL8oCpFSi@tsk3yp&e4Z- zuFli>x=^3Oym$XIepa8?7xfi=U03RAeFyWttuh6~zr@tthGp;vOr0Mw^?$*V_y;EcC+2+rV)Dh$EX*r~sZ++dyzY*fzlU)(t!cil z@t#(JZ9flG0*Ky<9BpD=I8BJ%=6!7{(Jom^KpR&4}R@6PT8m4Y- zEQWQpK4yJG%y?sMj_J3JaeL#gnEBl?=jdtv2+Ysf6R;Sbgqb%$2kMzRNC)Gt=V5#? z7G>QC%<~$JIro*A{wC{Gy;)~q=G}`~_n`Slbv_m&zW~$MVqK!o=yF|w>FYHthHqf@ zUyWJ+4rafPF!MHJ-m`6({lCM^`w@%b&zSW)G57Yj`G1Xzon4q;Qp;$0%(_Zi4T}-i z&{~*!^&H>Jd?RgazB%rCo|yhRXje?VgRwXss=f3uJpy+uxo^UGLOcI$P)HLpoRI>3m&?sk_*Ci9Vytbp_^g_$rpfmF8Dt&au{b zovzmnx=}alR{avQ|2E@q^gI1gf5Cii|H6E3{?>mSFLG|7j}n;AWoa#^6)@{|*NR#R zOOmf$LbuZmp8)44V+;~52p)GZPZH3vl4d$OeAA-5} zUXJ(HKA3rZjStr&^hn2#Ha^DqSnZFwzY`rl$^0qC1N2nPywfp#oQ>J{9370Mh=&?q zgt`CWdNF4GrFxn9(U_luSDU{U^L%d5TQJ|tcNx#d{M>rP_;F0#Co%WC1k>05%s;Eo z>x=q|zOE}V{jS2SUv0bw)6aYQA!eUXjX&4zm_Bwm{( zFu&1wljB=4`|rR~_!E}KKaBswjF&mDkgte&|LS1!jWFw)VftyIt+cJS(~jB&v%aTs zAI$F&$7A+C6?5-{b%gmbn01qI*S#9w?D!p+KJLQY(=6lJI!7PEd@dg~ejHP8A?7|8 znSUBnXQ|`Mu?+Dmn0;QyoPV{xhh>OA#?;%aUtrGj17`kjn7TVLb^g+SwdnbUde_xv#32{c2%Z+{=7Z^DVIq`F6&g9X|xKe^2v$jgQo0F!$8o_(VNLPs6f| zpNr{hFs85bG5cMN>1z~bpD~zzCmLU6JOwjvn(^&emUy=D!4oJHF2NBje3jmhtVFeRg2x|A?u#)A%3EKE;O=`YMT;Uk0<^ZpIaL z53Po&Qx|id`r1JE(ni`?n`krL53}F?+C~r54%%6}YIp6Sy|pi0lkALv^@bqN6bPb-D3)orvjYlJPZqole!8^cKAh^B&I7+s)spvvju3(T8-d z&eQq2P@lr|wZ!-tU9KziC4E)j&{eud*XlZ5uN!ouZq}{(C8m#U#^307`lJ4$zw4j+ z59Yltc0s|?x|>$k>RJc$zSTG0Tbp3|XlA@W=6SZo%x|Y1wF_o`SIp<9hxy*xSC7xFuej?j@h8uQ+aF&>AhGtu}e$FIipKiT~CdIM(u&BnK4 z>fL63rtzJabI&%uPw&Uv*Mp8fhN(B-{6c*Sv;Pv~XLPx)(3ddJ_jTiy#%~+HtM6m> z`N;SaOy3)IlYXk3G5c>Z-m0JL7y2b;-ZuSOcVN!>z44E@>w6W;k}rB;q3=?dd1Z}v z$Bfs&{9M`7d?RhDEiwDH!mMwr?X;tI(QcS~>S5d)bN)V@LG;|jeJQ-6~2HF}*+)tmGdy$!Sf-I(>WF#X-D_hI&Z2(#Z@<0o{H zF2(fwg1%{fjq!TS`VG2KH|tjYQn%|4{T|cb55_-Z`ur8s-=COs6dhXFrvxTn7Sq=r znDJVedv0jlME5t}9#gj?rr$2wO%KtY+6Pm=A7V2@5S8f!EJ zv;Jw!{VjETnLda4oWJP!%b0aElC8-H*+0G5-x_-=EF@iM#IIxYR|3eamP$ zOq~i^$^0H#)qD-Djj6Y%;|($W?qj?!rd~75b8T+Eg>g&cR@%mVTjK*U_u1L_Ak2As z8u!N3?Stv#NaLd%KgPHprjP!5BBsv)#sl?C9fYZS4rafh#>4a?9gcZ!BlJ=orK9z7 zOuex>PRC>Vnuw`0$^2D%wO-@+wZ_-!^*TkT>J56M-lWqo``ltY-S{@+8G5_y1A&-hi36(flS% z{jH9Ff%$&e;rO@azsG!@e#NZc>G&U*_5W(|;rz2%;(AyWTVpFc6Ep8z%=QEh~7h&pMYCKX$>18?^)9+a0aXKEeevzC=bmQ%X3Y2U-I%)f znxBoS_aJ87Tz%Z}Cos?BN#g~W`A-`!!QA_E#?Rw!#4C+gVb-t4e6PHZS-(L)#iqn% zE-uU~hv~Z#=DsUq`l{x54Xvehup;BlF!P)1ewcIakJ;}4^9N$;bu`}jWuu)?vI~gP5cAX-@ll7MMf0r zmB7TMw2YR+UH608w<@OJYR0v&8gWbGHjcN|1I%|Y?ufakF4|2G!R+5ddtsjIvA8>) zf$4uV=G>Do@7Il(zHY&Mp5|ftd))Xn%z0N~-kW!^H5R|5u&y*VByNJ)?*MFsCt)Q# z53_zKR>mtZ^(SEN{aQ@l*PEY$Ip2+Xv-w*v^KR7{=5NRBJIDNk`Y`6+A2*(l+4o6Z zpbK@8F2?NhwDA&Mis@?^R>ybDuhn<;Jza;X^MUbt{m}ddo*&JX1o>m zB46^-LO*3N^U4`lFs`VTwF>6^RgJ4-o_lTMx>_G|pUsT-!^~@iIe%O82WormsGap7 z?WW!JP)r{^w5Rsc-r5IquD-^H>k*ju>Qu~obta~-LB{7}>JQNi^guxbWU2ipiJ7&L`=I_+I%+E5uNAK0ydY|5} zbMygyP#?lPzekN9!}Rrp@qB#})6YWVMVRw0#mrx3{#jjaeg$UTi{@X_m-Q9Q`qz!$ z&^OJ$WxQI~m|tuBuD+-1Fz5Nu_#@qb>EjdQjhN@S)%bJFdA1vWt>5Sl{Z_xz@AU`F zIes?&MSs=b^mpBrH{%M% z6}7Tf(P~;lYiS+K=c%r7ed9f~fi`q}Z`}v;oSGUp$JE)+xTUr--&)&fTRi}Cj&|As zQ@4vAZ2l1Kf!U|0_R`+kM-RjN{OMX3G`xM8gV$ON1@okv-w;SJ~Gxbi# z?>3&L_vpPkTkpea)O%W2Vtz0C2y@OYn9t1@x()OEb{K!JKk2WS{(i^I`%C}R;-d=n zN@2#!8CSr1#Lci8cEj{>6sC_8F@2n(r|B7({m#PFJJ3U3GA7ak`nSPCVAAZ7o zAO4Qn|4;o#i(FR77uQl+7SmsOCqF#At6zR~z5orZZo?!eT) zE3)98(L8gUJEjoNyS(sw=xWTocQAF=>bv@$uG9B1eXPgo_$`)Y;csL4{}YC|#kj(s zS2|-S;*prYN1cS(=NioOoPybJYGVGw&EpHt_cly^24?z7~|tG`<;U6doZTI^D*}`L@&?_G4(IP%)8k5Qsj{p`2lyG*ZiNDI)7pM_z!dc zqD^Y*~ht%}*F1}0xqYhm(rjq73RHpHyk8*|T1v;|h6K&LAU>kh($86S^X zcO}-x*;o}9W7huUX-^I*-Uq8h3v%z?yZq}{Xkns|e_bxk2|gohCi#oX_e zSOTxX-6?SEU0ZlRAI8jk4D-G(!mNJ{v(H*Q9P3_J*sl}vR~SVe$IO2U z^ZvhvImerrb?Y#Fzpo!)-p4J*TQTSV0&}jPF?C8_UszuW^Es)9soMZcta41%`tUans0@9 zjt7`;k7bCvVd@-=+2;_<_fj8BpXZuC533N5#U}UwR%GF#8w>Zh9JAjFJRYmwRH$DU zQ@1{5pFJ`CH^Q8|6Q-}OSRN0<4tOP&X2EsS3jN%Kxz`z3hWtG@7wXKx)PGPP#_aQm z&ecctG0gnOG5apS^u1V@VETJjUoii&@f(=uxfXZFPce12V$So2@juv~xZf>>-Xbe~sDi2h9B6 zG0*)!?1eq27tV1UrvLLX&-WJ0{m;C$a3A+zW#aj_74~})OA$Xkqwu+W9kb7B%(*_q zM))_Tzkje2|DnPig>_YC7XH4pIp+6^R(BTWwbnLx66>a5&VM7O|Jxj&VSc9Gjk&*j zFwf(D%)WE<0mmQ0^f?dneE!3Iu+d$G`)Y~VcQU5lb(r_zMoisXFn!F#{5*T;?!x!Q zGnnz`FzZ%e?)i00A8%mltTtYwZ)4`K#XPT%u?<$3Rrr0P6E-D28*>lm;@)^YX1^P; z7CwymdGZ|A#P>0E*JIXg!0i7iW__`H3VjvF-H0nn0x#O(@)U{3hRn%Nz8pzFs_KHUr8%t-pd+}*U~zeb$es_ zZlW!)IB_e?x^|d)?J@gz#;iM3565D}M`Ce2#`sv{x_}VEP?yd@-hG-!rbevn0;pG9hmdnt+O$89?>T;{Vvdjx(L(%vzYIr z*D(F8a{MjK^Zy7lZwnU3FEI1I#_ao@{-nR@pZc#Bd$2ISl$OK1Z&i(JV$QiI=6UUd z#jy$Q`WzT{!<@gn9*Q~d;h1&(F#Vl?S${J2#`}yP(1$VSUWl2$#QZZ@g7`U1Kd)f! z?^S(GU&qv6X}n6`($$!L-owoM!2EjsP(RWQ`muh3S@)^&X5+1xez#%je`owNmLUFJ z|1w|Xp+dfdmcgvAfLUL~d=0IGId5I#23V4KALFLREsfh?=C{Q>mjjL48Fw)5i0SVj z#Up*3Yp5q+vugB{Nm^vpJpRA|o06kSt(}9?}gN)C? z)ER7io}RBm^a8z5hw3oBNQYzUjWE7MFV&HldmE$U&0nDtbfR9VlQ8Qh>lDm=-RSsD zn0;?HzD1|&t$G_~-5tg=F?DC@efl6~-Xr>$KH>O6%zle8@5@t;FV$uGoW7th>udU^ zzNK$t>b--h|E}?Sx(?IVdflKKb+c~8)cM@_EB#u(#nk`a_$U2Ucj{mIuNHl{uzv|H zt>v_WR?;e%eX3#ZxfYhh`o?=1?~6HCGvob@+vtJXK|5<#?XEqvxAxT|^%y-)PtcR~ zR6QNj_nF3nbg&N5p*mbI(NUQDzs&e@9j_DhDxIv?>kT?hr|S$%Uw0VarT6H4`hY&H zk7Dls3C#K@G5sxYe6cRkXLLDc-3!Jq>udU^zNK&LyO@2}8L!t3x=}alR{c`9>kj>1 zf6`xdr~ak?YSBl0Pqj3rpR&fgX+_LER5Gq&Tve-Sb*-T_wU*Y_I#`N&4UPB0yx03^ z6K$?7wY46A`FwQ5^xIhv!u-D9-}nSf-zVZeI1aPV1kCR@*I|2Hf$8T}%>36d^WMZf z*VX3Nm|v^wF#CUC{E>d5pXwG&oi8!uE#G{Jk*q_c3m)`)U)%n`=vL?RXnZA03T5VfyKc zx$hq4dzwEC^XHrsF~9eohh=a$rjJW7e-ALp_!`Xblhcf+WB%MX53}zg$Co?4LSMq1 z{}s$RU)9$zeZ7U*?`?e-Gk+as{`7%0Y9vNq&8jlsmYh(U?s)KQ7?TXFFpJ#jlW}k~NeGWH&3Fhy! zCY!$&v)}c`Q!s!3am&2Iez#%P&%n&P!~9)(kKU&bV9qnwcpm2ORhK+osP_z}{tHhO z{@nN$?s^Vbmv!Hm{~fdMPW=Nj?{DLO^k2+5i_I@s3bU>><~^&1>AMDIeQnHm9pn0r zH^97i`w>hXG#4#4z#2ByEWF!jzhKF9c6Ouh5< zLd^YM=J@Ey!Z8aA^TuK7jK}nSCFcIGT2#nijoEK9=6m4=O#NxNH!i}wmuoQ3{X;B^ zpJ6`F+cEXO#;p4mb1%PSoPoa=7xMpM&R628LR?zQX$4H3-Hj_7@1a$+s#eqLT0?7M z&RG}J&z`!M?t^W}pNKj4$>vYR?0=dL)YJ70Jri>e7hu*8#q2ZO@ryC%9HnD1_j;xA zWSxrXa~fvfn=y56#oX)N=4WB{xffICLCm_j`Z#94g_t^vjF)2ie9`zd%(|7j2D9H< z%({2=JJ23lwr$1oM`5UIcKQQl8 zk*5oN7RAgjZd^i3YAG$PWwfl8!}PH`rmrf-H5{*rmB=?SZmP|+x$dVeF#YUr+)7(( z8*Pg@S4ZPc+F83`>U1^kX53v5)t-*`(%$9|)59_6I~ud!@tDu+K+JPKUC+Smca{#q z-1lJ2_sIzJm+B}Tjj1yRGk=`%c)da==tR9zCt-eny%V$l-IzM}>iwAdbFelpH-1i^ z*A@B#rp`-P6+gh7`x8vvPj!oaq1*Hu{SI?)KNiTP)AxvtQc^i_RBSLqsEtLt>VZqSXoS+`>P_`-Obexu*%kNS)L zj#>AI{)KrSf9pS(a~1tx!IGHyr7`b)In3`}wJ_h$_02cbM!K&y!_3>?xQ!l&soUPT zlOBYre+1_Dxl=InPQ{CGmHCgbCh?D2_L;)(ht)Cpme>jhV&1bsnEnT2>Ya}{_Yll^ zhdF++Uh4Qr$Hy37u46Ivt}vc}`5wQ{_CSEeg;+}e$03tX5JIV z^D*an3iEr&a?J0=Z({m+3p0NW=6r9Pe^=kv5A|c+q@U^M`jvi-sk;Ny?~mqx(ckq? z%=i56%L@He#`Lj=aW&)W#izeSk7p2j?nXED#=4b1zy9y4zfrr#~* zf5hD1Z9etMQ_Mas%(vA2wH4<5 z?1(u}XH5THwY&Dv-r84>)MNBGJwZ>#)E!_v5Yx|D#^>mHdVvnpi!tXJp_k~TIucX= zG981tzsZhYi+K(=Vm=o$%-^neVD5burp~>XKmRU6_BupefAe?1Y?-vG?>AB4Sep5ybeDDjh+d5evo!d>4lnD==V zrk~ZAbFMS~KtIHymhl8%*E7WBUFF({GWN3gg8v=ctM~Z+%Q(dtv%- zj(P4K%y+?}#0MF7$IR=C#qbF8$6)65!~A?WAB*7ynEDs#CFVzB?)h>|f8#OhufX&_ z#dxam9axO~o#yYt{JqjcFBkHUVAjvYd_OM7yhm>tZ+84M%)NYtRao%nD~0ucV{!8T zVfropYN1{UEvcn29(^q5N7fTZFhpE#F55Pgj=V9txpu>=( z7HRbwe`kSbMygy5Ocn{nECTC^%i1DT!IJUH<-FRFrS0Ja4)R4 zvar4(W_&Nq^K4_>*75fEANh8x3iH})2W&+CRLuUTWA+_{!|+{9-S^CYX#5do{wKy8 zG57MR`7OquW6rk?Q)j#RZ;W?1{sX4o&sY}!){<{=A1o}tx=_CY=6Nqw?UZye!$?h?2E(R z<=@RDzXbF9+bYbyA7bi$q#H2%eqy{)H|eLC``Ln-_ql$l+Z_J}Q+J2??=a{3$@mw? ze>MMy@t=G2>;7%VG8_ue)gl-CZkcC9SM`Xceuh)wH_S(3)CH zYik{?i|KDq;|9iiYh!Jy`(fUXw#My@4>CR&^ZDzEdA>&)AB(xy6EN@bS-1yYYJRki z!}K%3_$uScn7UKVPcuIq^FGcrzFY4#|Df?B`WU8<`Iz@&fiA*4m&N*&KCMeI^Z%#I zF#EoMc~9TRtpC9A53xM)R?PRo4#&TB{Ci9vKV#0dQ~$xtFSV|aFOR9a8|HIR%ec1I z!OU-j<*+5@{#s+|w!^G%Z@v?zPH*GBnCEcrTg<_e{+CvoPm9&+(y{^Nlut zgzzT*op=UI&DZ>jlbF!h%iFE@TppVt+b^)F%i zctu}x{B?c9{7U0hnEl>1eg~@(e~zj1CAPtu?-%0QnECZFeeH?4uYJrn#jIZgl^wVSYxQsJ!{0D{c6EJm8GCmn|-cvFCoMC*no~!5Ug_!ljF#BDk z!}VfJy-P9kMw!3N{N#ce_rv6OhyY*hZUmw&*F#XOoo~QFM z{VZ~PF{bX*y43vtFz0$!pVt@l6@6V->S}#Q-_s8;`+R8pG3Il$8Pn%y=0Df3^lMDN z-x>d?zhKt=imCg%{^9uF`kxkCUpP-mEu-Zz>nj*n(khtm=Q_sqwV^h`^wq?;xwgdg zwLhkAYi;XzJME}lw3{BHJ++S>j@j>MOx=Fw`|F8%ik_xtVAc&X9;`!js1Dalbd-+K zaXLXKVfwh*_*$K!H|oupdDD$&=uEvEb6>NJXX_k&NayN2%zLxIc(E?gXLLDc-{*~A z)K~O%U8$?}9eoee*E-|%xUQ0s-|J79zJ4+OUH{a7w8)2r_qDi|(z2Mo z${APCN?Jv$Yb~v-d+J`gk2b;d)eQ5#v^3vZ57747Ne|M4F@1H%)H&3AFXKMi7xO)S zjPbGBAM<@b0JHz;n0esmp|Edf%=#{R5axUb z8+XTD_lo&_<_O1+)?@W}%zmdDpN`pYknvz0qC+utFESp1xu;Qjx%u%rQLoa;dcEGD z({wuK_n>=>@6!kLVa$Gy89#yP=Sj@(YtLZrWf`W9k1>63!lqdIlfvh=f>yzdSI6{K+qj-K(7m;>Hr4$w{k6nO z*cJ1=&;!%&VVFN3AF;9U&xy~)Cgg9z{Jp|$n+p5R#D3(rWBS>FHL&=n{H(?{n0oCo z_jnlQp88{L9EREVQq12MjNe?y-+{HrFTm7YjJcOrFz@dg?1W`LE1aVovb;!n;|iGH zGpd=dZoVd_ULCEk4YiT(tIf29w!)m}K;sVDS-Wa??SZ-HUYK=Vm#@Ax{xdHRM9>CVP4s*Yo zFz?kC%yao>OJV*GNLb`Y%)Y8}cZ4y}qAuZG#T z24>&dm^yo5X>4kKKP*Aq3QJ)-^BpliHx9wnI}|gox8r>=^^Y(<8Z+-0?PtEf@$s1R zo`U(Dow2RZ*V&loG8FTi?lpfu=JWKp`Hh%)Ut#L(z{a@8_QG>+ij9bm#PoGE?&=3~ zt`m$;)RQpxGQjv$%=ym1?0W%bpW%*QjM;yz@i-lisWTC?{%Z5rn7>Y^>P?PM)0;8< zPRBgQ$FLc$!_xRMrv4_(^ZpUj*Ke5f{jNLp4@|wkFzbtbU07cdGrtsOybR`Ec6Yoo zrfzkti2E2fbG(Id8_c>6#s@imFs6QY%suop-v{&kb~2`)Gcfbc)Uz=4&NDtA)87S{ za}UGR8-ZCr2J7MNn0YhxF3kLUFwbwU@jT3aj~hRUWr&wzeonq>{taD)Wy!BIUXR)5 zBTStQn0xvZ)AtvceYZKj-FSz7kNG+DA7*~ZZwi*jtlM2HYgNoX)r@Nz*V5Wr2h&$Q z%z5@P-&pr`ys0)fzn`|ymb$;T($?Ar)8~Q4?Xg;$6)#ykEuTa^IWbme?4Zu zDOet7V9s+t=AIwLyoU>n|A%>BUNrv(<~*yh9InUI`_TMGEKj@*v+sA9etyE#`3p1u zZ%mz{I|}Ejh?!pvvwvO8ctgzkeK6}9WA3#n=6ub~@24%aCFXP44O6$L`Ci%^(|E{dm3Ud$JjK9X5?+47^)Bc0`9)*1;Dr{k@2FaU-VwX7it6`uIw}#r(cl>bpW;WiZcW56p9~ zZoVd_ZY}JCXPQ47Gk+*%{>7O48;#lL3iFdN>#s6@z4;r>--NlBn~iVL>E>@Uo}stv z9Xb=U|13H!h2T_^Yi^c%>8%4 zJeOXW&*6z!2?t{XycRQl3+|4yG3%FN-lKOh_xXWt!1VozZo=Hxr@C1`!`$cRnE78C zZ`U3Az5ax$^D}1tug1UW@46FH_b>fdi~d;1m(bE$PAh07t)kU2=c{d8PaEjonCI5S zxVg48-`2RDcGNDI^Bja(e+cHi>tp^f?Tgv}D9pL~X@AV~8(=(8&(uLWScm9P%=gAf zHBua@6=g38#C_#%yW7ObH2wg@6l73b1c%00sX212u8+4;?#`N)p@izSi)7P)YJ27?sH2z16{8Tts2~7W`wVYPaN?Jv$ zYb{LOI>z<2p*GTewVAfiR+#l|j1SZf+F845ckQ9QwXYtj$6)FnYka((qyu!Io~eU$ zuny6oI$ST&Q94G)=>(mm*I@d&)_98Es5k4adb{4KvoP=HJ(xPP&Ck(?bgs_R`MOY_ z(xtjgpTpE$Vf>Q5s&D8jU88Gtovz2!`A9!DzX{X-r{+J?t>!=1FEH=nHpjold>{O1 z{Ilb~Vczc|KNt2ZhWQ+n#^ftwKCjgx8`t`!uzzi=Kz?7${Qb{P)6sWik7g)AG6-rjOk*bt;?R1M_pX4(5AwZ>)%IurZ#5 z`S)&5-dU)BI_A%b<1p*4!K!$tTvvpFjB7fM;R)7=$%(9PWWPVfMcr zb8oXSbr)dzS%LZayaDrkH(?7b|7T%-W!!^4_x_7#Oa5rgKK(HBkH^#u9zMmK>nqIu-(sFy z)qe~5x|rXC_QhIwFs9!gn06rVu4fA`@9L&52%s+(rJUxk7x5)9ujz4X@1k>*_%=3KL@pbxv;~OybKF9389dq7d z{}t+&#GJ1@rmqTG5t|ct!mR6t+3!$HzdbPXdubm`oue@Ke+uUBeQ(3epMg2gOw9fZ zG4q#V>O6yaufD|m`68>5FNQf^ZA_gy{NKvBAEw^^*bdLZ?0d2KOEK$58IQrNzg)-a zI32H7=mgC7;AGqrAHwXr#POw=em}=N$DcGG+N>*$*{=-deW`@$XAjIhRyVF`To-fC z4Ke5K=y+#Loi2KicEy~(yY|5Bd${pYSdaJu%)Uc0b%tTy(=m7keuU}oGsm}Jp362& zpF8viOn<*(_T7o8`={|gnEL-37v*0<$^257d1Wx;Wwjip-^!TpgZk$8#PqYTaTCnv ztF>_(OuYk)55)S!#~Jt65r4)!zoLBEbj5C%@0~;VA(sAo zWA-}?v(I2mKf^Ka-NTr9^Dy(C!0fj`7h~>msqr$*Jv@u)=OxU#SIobvuj%W!nej*X za?HB9nEe;(GR%I@;rlq9zl_f3=W)!rmSO5I$NatjEBxht>b#11&Z{u*^(W>xV(M+i zy|FlpVq;95CYZkW$INSk`P_AN{9wm>8y|+*=V;@8nEj76?vJT+qMqXT0L(cDVfH;& z&(k58d%pnEGY0 z64o+bSNC+h5wca0{rH#A^S=k$dAFjwe$JeQSvLZ6-b*lbM`89EZGMbij_GHj@s&CW zGyiIxjHz=yrth0E@7HaZeP&?h-+{ewBjy}iuphRqP}rvfeAl-*n7-c^~F}7GO)u@bTRJCxPxtRT)MZQ9ctl)pF_io}- zsuwMC39iOQ_#+;MooW;|KPMhVJ{m<9)hg`wRP93jrIL767wGKjn%M&`OcVgb;mrn!!f@< zpN9GTpHsiE{yfZoALWug3->mzLE-!OcFcM2#=IA^^#M%1Cop}^$DCsUX1^uomtxj0 zcl>#5Py8$9^Rsuu!um#-@52Kz`*g&;@l?l8(}9?M&cNK~*~aH!e*O+MKOEEF<=6{f z!1VPR=J%p6Fz?w;%;&4hUWNB!Z|qDw5Ub;*m^xQr-p5IM7v1&u#rI z7ITibFz^3+nEU<$^S$&7=6pNx1U#xyp`W4HkoYEi3_I*o*#9WZ`ZF;5oQwJWU_9m? zCg_!z=YBipdE9~N?=HQ^{Jog{=V0#ZF-)Dubv~x=r!jSw=u*tOXN{K|zku22Wz4#j zn9uvV#)Z$v4osbI^*hY`A2Iv>Z2X)4ftmlO@jqH*-@>}$T1w06Zdy_I&}v!}^B&g2 z?7OEn)V(q1+ZVHc6XX4~6{hdDnCIIAGq0!i!u)*bkNN&M6Z5rl-4;l`sdeT>Gu zhf^`{+x?j5@~GqUFnuq;-0xCMon_`%7{7%1o>+tV{`tu9O?V-3-zJ6k=1k1`L72Md zV_m$){B@ZAXE=VB&c-qv_>rcC^^alB`#*df2Q@3?2kQ_WiaF;+nBR*=W6n3x{3N{^ z^EtZ-)Bl~A@99S!pNF~6g_wI^q>C~4vJ6xACCs^A$L#lx@%xxQ*6T-@d-w!%j<3z{ z!1VE(@lMQse_-ktZC;3rX>l!~B{BP#GcJ$WXLn4W)r@Om`l*enU&pwf;|NmmEYi7Q=?x!uZC1!qW<2IQ0u8;9yn9sqH#z$f1_rugb&U}B&Jq^U%%eguX zGyh_}6m#yenCCiKZ^5j;8}pnV#MF5l^PCqMFT>1x1#?fYI=;&B_b_!gVc!3*G4+1N zJlCT875XWGsk1v~el2Z;>94uA!SvC|xV!ezqcQy*kLl+G%z017+|K|#4ReoY8lP=E z7_)vTX8ka|NQYzUj4-}LFV&GcN-xvVIz}(ov6!D1(=k6s9>nzf2sXl1m_FXZ+{=37 z4>5ggz|7x>InQV2w_?t*-S`{K`rk13|DXAyEeiYB#OzZ`Yik{?i+MhcG5a>bJim61 zw>RHWJDcx<>93pd!Hyqdd?=>R!!Ugv>v(_T(~M8Y^mm4y>G%-LxrgZp%zh&=^G9L& z9c?^DFW0d;4%5dZy-sh^+w?BIPanp7pUl$*`ZT7G|LL>(yuOIp?{!_R@99VSseXZ} zw@ts%@AOB^Ie#|(P5;op^*=4vvT$#uFm=o7ZkY2_Hm<5Qw6@mM2D-O4#$E4+adT~{ ztufE*K;sVD8S}il7nL0=Z>ku8P!!hed=%twc zMjBtHW6WQ!V=>=XlZ>yz)VT(8&)1p1-uMQcrqgwX&eXg0UcFx*)JHJ;JZk*7KBb_w7 zB4+-}`l`N;nYYsTEzI}d2J;&+`)|@u&2Pcn!#3k@^gI1gf6?FdPyI)Wv?}ah9MfM( z%zL(*R>AC33v)m9FyE(*F?~06e1A-zt?)oR2QzONX5PhmDQ4bC%zl^Y81t9wSj^Ak zt1#;)>-BnrPSfc+LucyUn7(Hl&(Vi;uFk{8%v+0jk3PZN!&c1Cr*AR+evf$%o3t*} z-4F8~w#J;R4QAc}+78oyN9}_7^WfolFiyp+y8(0F+i-UhbJ`T$_0Ka_W5(BDJ}(;* zllZu8q3$MZO}^p*h2NX^#Qa|08MCen<~j7l8Mpy+p3fcs0&_px^;^t&escV0%=*6_ zFLGdE-{P41B{1{L8kcjt0_GknV&0!>nDf=c%-_p=6HJ|^j<+^$qir$w*ACNXCrm$w zV(RzA)a$E9W9A==r73)JyTbmbW9FZU+3zf@#(%i1ec@iO!i-;|*J9>fhp9Ie^FB;B zf2-c6GxT;$otegWV*0xmd*BuZGzdisquc8{ab1)ZKDTZ-rp{meY%2E6Tdhamv?!bIM%`tuiQ};2b+sS z3bWtp1v6zcK#K_$SQwz)tgjVd@q+ zxUjCcmcrC4hv{QC%)H9xtC_E1T*vVSx)0`@jWPW+HEyQOG4)zu_Bp`(ftdZ;Ye(~) zw6k{6gD}sjr*SXsjkU<1fvI;ErjK)s2kZHmK8IlXxyX1pX59!(f1`{?WA>Y9JPA|x z8qB=w%}>SDy}|e<%)DF7PuE*9pWE4({qD#7y~{#-58hu;e(Y5+6rr!I;ALx4X8+4=jO~#+;=lYd?jd_mWVBXUojDOUhFwgxrAM={`PMgXi23&dx?<`cjOnMl@u9{&FrSYjFm;Z0 zydS2&19YICse^PdX59st@7qzB{YUHNnD6y#G4J0kn7*cCzK8F`%)eXj!PL7S zGj9&&?`NLDocAS6->+iUy^cB0+s11hUx!)$K4$$6%>Dg|*|+GS?8AhTJqmxnTod!$ z>S6Y8h}ox+?u%L167zk~2~)qb`9m=4dSRa55tzRRKMfn=6`1;0Vd_rC%)0?|FSjR8 z!8>~vEpjh$`(8zN{rCE=#+>g4%(`iqe~$71mSX;+y^9uknE2>Eh5P7->En3Jy`N=% zke=)K5KO(HIvmr_D9pJo!`$x}y;ZDKb1 z@UX(Vk1_jxg1M*9jJN1k^V=}z+ktr>es%meOusuZef(wqZ){AwSKp$${&&ZEV8(l6 z-q&L>|9s&b%=s_C>^~gS&&8O!m*_~$x`~)RuGZ@?b*Ex}KHQC2cMqn{y~g+H9L#fE z;`ma`&yP1Tbys8lx!X3(Ie*0b9^35j!uxbMCf^^^&*_*yFAc-&cM;}1BXun1ToZ9$ zd<65}EyV2iG^XD3n0jwI{+{tBOuf%B^S5En_cdnS&zR3w(IX1`7t`WeLQ7)Sl{PM; zWih`G?1lNfb~N8fJ7fAk7_)y5-1QtW=jex7cOK^a=VRs%!^|In4RE^Sw_?t7C#KFU z^Y`ezI@|F%n7$u0|Byb6`R4=6F?Cj8KCiDEuf+86w(+}|&%sB!+5A@h5-V_kpN}kB z7)U6Lcb`-XzSr zY36UntiKJj&mHDx8sCkTC^+w!!uWj5y*`CG=d+l)&*=(Gy_YfdUc>bBIyT3j9RCfo zZm0fD77-rv7z06;p4T<2PgKPB*?4GyituJ9MVrsdwq!m~%dC{D{uQ)S0LAb)i0` zOLdt(r!VNs`Woi_U4yx&_w+-|c|Ot2`nhhy%>Nd1-#=sS>lep&>fe}oMUO353Nx=X zrha*?=y+Ak`Dz%~b-aN#(k7UB%`x@%Gu|I_@2$era-)D!J@2iJn z`aBx5-?5nb{W0f01+)JE#|JuohWRrw>(6ogJjaJPeu42&<6(Lc=6iOuP}RFT_4sd|(7>6o84b1`)vb^LLC60?4>E;YZ*_<78_75akXFB`vN{JQZQn0jwv zem;MJyZ${L%>=J%@uu>|uwo?Q5T>5jSILr*E3yCQUy8#$BH`o7h^sLV=?d1B*(9Ee6sPidL8C@Ou?S` zHfG%inCJQ_rrvh_8FS830}A_=#`IebbMD93~N!pyIW*|)y=J+*;0 z)V(m@)6FnHuiKmNfT`2jxQia7T`~0!#>_hu(@$^A&&`|7->SD`zAx@hOvCq{#(KPO zVBtAGtdC>r&c~9BFFw7n?ths2%Om+0&M4$x#q|AumhL)G%VKN8_@N>|q z)%P~G!XBvkz1-d#+YtYWTK}-ykJzKA{3jisvZqn|JdetE!CrFzW%vJ!%6rq^vG-AR zJ#hROmG3{dKesR3|Jp`r7uJi0`g5pasQb4DYMt7s=edXD-nOs(*!H)d*}-;*9g2Ei zOhN5`x}AmE?;O;6^WDA#RsV9wYf#sF6KbEE9dAd?--(+4n_>p+ZXd4KAyoSjdknSy zX;hvwsQKqm>s>^Rzk+(c@1VxrMa_HU{->z%FHrMexjmvom>&%_FS_Gcj$_-mY#jH; zcl@?ZfVz*9p}y~>b9;JJ9a&IyW_NoIo73j9xosYs7xlg<>bRIKjym76?yrhkw*hLs zrnaSRhuVK9+YMFk2dKI}wEf&azz%l%5IfY4aQ_%oeN!BNYzj*r_D_M|<9 zIi&!Oi1V=vmv_9|+xhS#~Ze z&my}FRqrah4)vUEb-WYxd&PsO-(y@x&A*Pizn-GjeeU)*sL#)MT|=G}7@G~H?H2Zx z4mCeBYMp#;&ux{eJ-rRVOX#ydFd$Di@LBx?~tz?YTp%6pTo6L^ID?rgPy4K z`3#kJAgaD0sCh%}2=|Y4JO=gqwppls&qJNl3iq#e`+C&G2I@k56{cZU$>|;CXK0Jn+e-gFcDO6o&>^ZlecYML| zMSIEZSL`*^diNbabo>gnUeb@kd8NU0#P6ZjE93U67>z<|d>rbmi>j+0YFq=y4IMYO zP2JwiHb?ENrEP<{PF)@MK%K{j{leeVAA`ES6EO>JM6J6Cb?!f**5B&(ZK&(}o8w(} zxBcDjv3pVV9I$_)@*Y8**ICqh=iGn6UPi5Z)&18{b>4D(+x>U#ef!WpM&*5iTJO2r zU!v-d`bnrO2I_sB6184xx2Hk9x3Xgb5*6zo#+O7r&t*Ri_gQV!{_3IfHbJf1)Nw1+ z`>Z?aKJRNkwO^pd4?(T}6)MjtwbL(o7BkVl26f;3hi7G{93QtQ>`B!9e$VlJ z)c#+i>W&y3CGx-Te-D+fG$!GH)cc(C#+F}1iD*yz4t$Gv?-1T+c>2pw??u!;ZhaNz z-$vCFWoY<0uR7}d>Z0DKtx@&#L%kp7U<-VKs^=9Jz`VnvL|n&|!^59X6h!?#q8e)d z^^j#F>Z9g0blk{s6V(0O*6r=w-obH4$DJK_LEXiEJLCtH2s=pU%y$@02 z`=Q1SK#dz{2cz<6a{nH?-~NF*kHe1tM%8f)b^o4m`+0j2OVXa^+pwQ>HlxjAv)f!Y zuPtB;+hVBoOWCq+uYjtfqOF7(h&y9j+=H5T0ChheL0zX4sPjK<&!O_1M_uO&jxX9v zsQEWg`R<_h{mAh%RNhyPqkI?gL_@6;({XGY$L;ZLLe%_Z?oVM;x&Iyar$?=y*>Mh3 z9r;jo7qEqF5!Akl+G1`m;kcwNh00sj{pD>%_gAu&Z53M;wQhBMn}wRr28wdx4q*Iwj*l&uBdt4QJs8zo-Xe1j#{q=s*Zkc{}lE8W*BPy5$>Oa8b2A8 z=Nrt7Kcmif2Ws74QS){=-h;Y7{&4&kD$ilZf1~D~bo(i{pGDPu$L)9RJ$oOu-Xr@I zmFI_RDeAliq3Zp@{lnZp#{Cme*I~NbXQMs` z7NO>SkIJ*c{p(QQr?)!()&0NQ{iu0=pw9bG$A?kpd(FR?t9o*U{Zi>kK*>ffDcimIa-YMqvjTiMpA^Y7@m zlj9z!?~z}k-ak`N|E|h%)V^2R)u{Yy>{`3duD2Ud^ETSeZvWA4u|J`{ckf5l`zLBY zhf&w@BrqPq5GG)e-kSI zkErYVGise3j(!SV~rUz!g@u>Igx0nleq4Mv+9QXjW zk4LDwo}u!;!E~7R`(PR5pLC2Uy)^8rD&`^X=lBbpLHxgE;pg7ssB)i@9 zzb$IrK8`;^)j!7Zc+@^7*omm?I>Y_5-987k?n2b_w-QzFYSg)}N9EaoT6Yu1pyB6L z;rCC+F&^=y)!{luS;IWy7;D4%CqS*68kOgNsP)pJ#${R;es5iLefa%xSJd;^59885 zWJ6eQ_z$6;(Ww6p{TEceUr}}KMqTeisQM4vqxKkTKc`UjT)|BE*2XX|32I(4)VNfr z{Hg8#>^nA%eHXQ#jHvmUQSZBAsPElXP|tTQRKD8yJw8EQ&)2B>qihP#cYai!g0?WK zzZmK{D}!&5sOsjBw>GNY`lxY@Q0p{ye+yK;R;cUS88yDUOIvN^?vvetKb&Y@6%48zF*x&)%6H9|FM0db{by&6wc`l>U^U89L7aQol88& z@$K8Fafux#L4BV|k2<$3?$3cb&)ha2s?JiVI^IL&Dd+x*sOwc3m8S-3TuoaGwU36V zag9;yc5vJYBR|(rc|UM_U)1lZhq`?vD$fK|eUnko-5k_qt;J{I=5`7eA!X!*b2h{kk zsBzsLe}G!&L)5&%ZvP5Z&lvZQN6nk)cna!yo$q)NYMte%`|fvCzQd?mqa!(YCkC)r$psRjY$}odwUfAO=F%X)IOG@=C8n< zcpP;;7f^YwqOR|4)V^N2Kjw}wFBYoaIH>)+?Klx?pYNdR%;5ISsP(d-^5;a2D}u^X z993^g$E8vCQw`L-nzoj$jha`_HgtO<+t@a-O;PuGC)B=ry1kdb0 zIzDI5+kfl@d(mF9m+cjM)n2pz+UuygZ#%w&TK7Jx?uTxFWFMpMr&l({&QO0m)b&qn zQ=-l_qvPzT`ydZ$zl9x_a9j>mMyD%9IDy*#Wye?SRn$KIb$s34us7{3RQ|iD@%P>Sz&^z3 zw2%2E{C;2oYTP2!^;vG$qMozu?%#<`h*SO=-uvB9^Ln7ZPv1a&PmlO5O2lXwjoQ}? z)VNuw`)d(upNs7h`@LOim)YfZgT!s{5APqwfmu!?#iUONzQK zDN%K#LVX_QM4ek6RQ`OZyj4--s-eC|bVhyO{si@&9b(6zJ|C8#@-IitTVYqC*4d6) z=NHs{@w?-F_MkmvkD%)L8}*)fgnDjb?GE=z64bs@q3+XksP!|U=4G+jQ1xU--Cu=K zbriEDZE0K1RV6oGs$-NLYbV&r zcB-9jXQ1-VLgk(9_IY-pU1FEnm39qk-de{S>?XU#{Xf~C-M$^Q?oPM=Vt+;L_jlBJ z97OHwko*5aUGHP|G%C+o_n&k84{F{edlhxgcTv~(399a=YS;hR6aG8htf=R$80!A7 zjQaEB)~M&=W7OY=n2go&4C-_4CLX{|d&B+xH)@?TsQS*KmN{?#u@~$`)N}G2wSL@v z;qyKv>iNik+D~TG_0EmTm&fL{`D}h$z!pT!FM>MX5^gVPOS!)cs@`(8g8M6?&b=Bc zPfhpNwsqa!0F}Rq;EeP%hHi&}Rf>fD#ReU;-MFdglGV{8uY?1Av_J|{gG@@7J{=lX;5#v*@4iI~aw z!$=r$1hw7;)cTiE=W!ji-aXX0JwWaEh1;VZ3iG3(>QCZ0sZC~+qw=Og-S=rx`^o6` zEU5h1Q1xWDIc!e%=XRXO=0(+0%yDtlI;CtGx0glTe@#*MTRYTx9o*j$m8Tcx#BWh` z&Ozmyk1;50$zQbN%EO`lwWxF2h`O%(QS~1{-N#2!^N*v}JBb>94mIvP>U^&{zJ?li z-QGmazhm!XIpP9G!o1?B?^zX5_18k3Yduu{`l$JhQ0ugCdrRBOwnpXY=D54E^q^NzRM4f9oRNl;P&+a%6>iqJd<`+cOQwa6*MLG9ZK-JR{HLeXRUq@8_o{syX z=6{Io@Nd-buPz)5?H4gC?Qb0qdE%kYIf>)ssL$iVsP||^RK7~KGHTr#j%(UlwzjQ< zy1q?O`)h7npyszl-LIV;_pp6X>-DuC+K*8C{seWdpP}*&a{CuuGOeI);V5pH@JP1-D0=8f1Bf-sP9|nQR`f?*HHQY zb$knTe?LX7_uRfh)fw$XXpf1S7YnuTcy3RC%AW+azhpKAYJ5tY3YGsI$7xXW(mT#z zGrB#i<7}w)a--(wL)BHpmU4R;)cWOY1=RW#9apwhQF&^h-gk{`YunZRJy6&6L)3l$ z8EV}jjz^*DABS3Zg4@4A<(-GBdogOgrH)sj@@+(&`%cGuQThKw)%Jsd*J>@ZvPLp&MWu7wr?!|kBuVd$3W$ai+UfugIf1pRNk~U z9hM_*i`s7o)VNOW?~GcnyW4xB_TL{>=O9$R!EPUg$}<)-<68HxL!Ix>sONqc>U+Xp zsB=AuI=6pN^DnvmCMy3edmFXx1Jt<3sCu8G-b=|(h4xgad8zIH>^nA%eb=V7>1=vb z-i$W0+q0m~BZuRhs5)Fz6feuamVjDE{mF1-d1#fRaE`eQ1fa!u7w(3 z$8lZEM%>@+15nrf3&&sDp{R2kg{o&9D(^)1Pqts%X{d4EIi88CXO`nR?qA^cg>GML zzqiZWzuc~{EA1-Oe%3f%YuDNJc7y%FZbW_GJc!!IAyl5j_Nd#BJ3eVo+q3pOYG402 zzUcUp<148A|Dw+07V3NDbJX{UIHyDV+o(JVY(ksJCPvkl)NwM$DNy+`yFH7|YO~qw zsOPSb)w8Tch^X4)t92K-J$9BcE@K ze7@a281})jr$4n;tjXo zM*aN#2K94YvUB10!r9J;@wse1%twD4RKE78{q;oE(--yg-~`kZ zi|L4SqUy_odVdy0jVq27aS*DWA*gXfQGc#9=~DRq|1;{o_yzTz-HUo}+()hZ1U2tJ z%#B$thxc;<)VyLyx`^Vab>2hGEARFSsQacis;;_juV?F{&b>G4ejkJy_c`i*7~yyn z>gSqysP*RC1$H5-&LwskD&J;QzAdOacA@6)#>{xr@hyx_$Gt1zzqd?uHH?1;wa*NW zbEE1ijC#&1q0X%)ro$en{r5qg$HzDqlU-vT`P2Lx_FDoqt_&)FC7gv9QQy~JqUwH) zs`m}*{(I|sh~wC}HXdsK32b82&jD#2XTXfal~DVvb|b7`8#S*UY9CEe>or5I|30S2 zfmjFkqwce#sPCf>Q2Ts>t+CO~Fs}(}Uo9~!4n^f1hT6vj`z`8yy$1DtWG5=$F3E(w zw?cdnRnMQO-}ha_x>(?L=r4l0zU5HoS{YSm9gIz$CU?SnV>s&ijYo}}g4*|YsQHUf zbuLELxyJEY)H!WH<=yJ`ZEoM`_!q~!Q2W^H_I;@HIOO;*)cVIT13q*6e{O$`F)1Ya zy--gK8xvK>Tax~G_o*9GJP7TnQT6{1wXY0r&+PUrsB_HbIJ^6Exjm1~=l=Y*fGubX zq0ZqwRK7B(=dBiM-}P)GR6UJR`+eVW3)>PkzOC(u^@um3uE$O+iqBAa{zI+z!oEU{ zi~TU%@5xa6eg`$~UDUj^ZqI@`*IbW6y(LheGu2Szs-w=g7HWPSx7W4xP}i{u>iOz` z8rKQ6ZcoR(QTaYV-EaLR4PQJC=P=BUMm_HfQNLIDQSFS|_9UF|@2LI@sC6!(_In3) ze?CLi`@+6Pjf;31){TvNPo+fFlM1t9S;ysUdDOg$*aT;wuGd`m&qH0OMX2k%9yR_4 z)VM9E{qJL7ht~)OsZ_9X3auU)wj~KIx9SZl9v&55=VPPiObKezQ>R-`n;07X3d* zi5gkYcGS;h`%(Af71a4hM2#Bxxsnlc5!S(Y%zHmt)bP21I^V&lbNLdrzhQPHGCX3G z`uQK@qDPIaa|TA9BkDe1iW;}fE_eTGyB>88Kce=t4Rvn6yMI3xBaRj$YQ*RGB}Ud^ zN22D9Lp?9EP<78iQ z4E=FX?eS6dBu1^1-0}ZV^`uAT%V0C2?xP&2@p;^y7nQGoE$sFpwy4`nI4)^Rq4r-I zm9M<5?Dnd*I;x(!sCw$z`nG{>XdBtasQgWBb5xxz-QUW#c7I#P?QDD0_)e&O_e9n4 zq5af;Zim@1b`omdbX1-hZl7nDpw54V<8^j3>VEtMbuPQ@KKlnM-(RS4r%~^fOQ`j3 zpyu5{<$s78|HS>TQ2U4$EA+=k%}ZdDqsFH~N>u1 zf0WpvuK1|-B&fV8+@2AYFAJ*PtTvm?Zgbe2sQPlFzQ+`PE1Yu))cdVIevMaA`L3bz z-$2c~<@Vc{nK*Hr(4G`EE(K=8GN^N}Y-?c@64s6zu1gbC{-&tB%~9Xqx}vUoFVucN zLXGrm&iQ8Hmmyzu#U6!rX`L)CKymFJqhZf~N#*W8OA#yv&t z=Q(Qq7pVMi97ntz;^?UU7&fNcjv!s{RjAKMxH@?SBj^ z?^x8j6CF=-JQa0b3sL!(p!T&CtKdDy4^Vj?+DC4G;`k}*-yO)8Fq~5f)cBI9b;~#| zi~2dS73$}du8G3=_d(U$4>j)-)blV3b^Ruw>Y9WaH_h>M_s@3w0@OYhqt;#Kc%|dD zs66XY*K@1m?RFj}pvQS;8A=AA=*-@B3|tbf&Bv;W%bsPQ*Z@3}{) zI{$P3bNj-+w69R}-k|mwEos!qKi5owsv|WjPg=(rY-ZH+mK$~77IIt)_1u(87B%wE zLtCQyJD|RI_Dmk~et`P((y@*wpzf1-$gqg{m>-Xz=AS}+f4kxSo2a_(IlhnD$3s-z zPZX2rS&Gp995wz8>OPE-GPK7+#qm+=Bt^aVa-q&6AL{4UA*gX9Q0t6BJ)bk(J|FeH zc`It(PE@`<*dNQL3iHaN?z@_(ebz$NTNhPdBh z*I_?a!~_{bdotAbg7m07nNahyqt?%1bGkndYTbOOyhTvgr37kxNmQQFZZGe+lKU&8 z?xR|$`=*Keo1^lya@-a>67NRUv)}E1pyvOL`n)-rDa<>ITK}9qkJ|4w_us@;#MLrK zjr{++F%4Dcx2XNhz&IpWlqIaU43%#=s;{QRlqV?Z3HwAL?`d@7!Tur%?5rMxEwS*e&v3^h+&>C+e|?Xdw+3~8{pkLmQ2Do^ z@@%&|P<8!g_n^k@cl;-6{2|nN-@0R~EI8s&23D_8PXPt%dr$>WIqI+3j6W`TM&4Bh>nzpzhaUsQ3R) z)N{PQK-7qG#PJG-`#J;a_eezwg}lX3brnaQ*L$eXfy#wL-fF1zYoMN!Iz__%8=}tR zeboA`Y+Ka$_Ne=#7pmU=sC|EdT5pKk$DqcKL%ly{yMK*)T@wyXQQIqu=Or{mtX59-`MvY(*x_ILalYP~NV4@1>4 z0yS==*fmWcN>T|5V4*Q18(NsJzSEzry`1?JBpgalF>9v+L~!`-9zRH=*kM z(f;K2pHcN~cf12t_b${q??+vyBdGiMIO@K;fEsrdRrhUF{=2Ag4;??YPf_DvqQ*xn z9@dSC8XpJMp2()OX;F1#M&-|nsy7GfeN_;3?uBe&_ZM?q+?KE4y;1Y~IPQyD z=VR3S>MPXqIt4S~Cb#dxF2uP@g!y?<>*sS^z;QubP5VX1mr&<*4Rt+kqwa&J?tg}= z=ed39_E+|`ePbg^hIOOZsHpm5IF4y!xjhale>}Ixw{P17?oWiulN42NO82L7`#UzR z+tWGD=s1((td6tU?5OLP$8la%J^39Mumx=)R2@Za3AdMYT-ug%dwIu|Y*n{cv(;@4 z)Vj4C*G8>V&o;D8Y;)B0ecy2_$E|G}+t#+T?NNCDiuCQ=A!mL5A_~fih4daxqmn2 zCVq%||2#*1&x~3+e2%=0`refu^}fl0I+xt2`zt@{IV*=+r#vc8HPkvyQ2S}-{^qFX zri0^-sC-=)jv(LU7s={RcKNlcH=9lvz{TV+ChZ==pNIi|xRsL$_8sB@@^I+t3gebz<&`Cdm< z{?3>Or=ref4(faJva+F$O{j4{qVjA(<=N`??QY+JTJLwqdr;Ts0BZc7_An~nQF{!P z_qgMej!)UssO#{L`!71a=Kg=(e#7xi$G1`Q9=QD>s*Wd)pSu4gs-D+2qFksa3hMqz z;5Z>_e<>WN#0tdkJ8pqG_wJ~CJyGlTwV$AV{u+m>VydM`k?+^%}B?i>}b^Z363Y)NvPi!{pt7+)*((?F=|9*?1=gv z->XtM|Fx)f*4g!__r%Yr_rd|UAGCkiKkXsZxgSIAN@;`I^T<^`mZ^@ z?*3b-dTu+uhsyg1HSY=P_ow+QhjXlk`gyqnYFrmoJ-txBNBy`8?*|-SHLN!Vm1i94 zxu1$!Z<^bu+wa^y!_IX3Y}7vHq3+i;?q7>~{(rK&P~-NX-oK|&@1=iH>))`qFmk{4 z4(fWxs21Mi@vBFT{C8WsU~&cyt`Ww6ZojZY?3bwhk90f=buQ!VBs}@nW%iT?OeCdLycc(m$?0V$II<1 zx388YTvIpXU5m=Q-th)hzD=llx1#p*i`#eEJ$An&-yikDxFe`~kD}g3ryZZMXYDzA z-u`1R*o*d(y=<@8tM(eI{_Bo!*qf+*+_CrVBh)!RbNs@-wo&SbdC_ew8wYg`2~hKs zI8JHP*bJzBXGe|8jjAIb>O6~}>MiEDG%9Ze)V%7B>o{(Vn%~T}aDQ9d3AIi)RQ?Yf ze}tO%i5-BtE}z+fb`WabSE#y%xqY}DfqGv}L;X442F!rRQ18$CsCf@j`5)QGsP&(@ z|GDE=?tg9Hpz4p-Ak^^|DvpoJ_qI)76WT;JF>3v!j+3G0r$W_N$o)m!UILZ3q%CFN zv!zk_%A&4E6}MM)dv(w*VTjv@ z+7YOHBkd?V+KxfhIT`i&JHzcWQT5GpJRh?Y?{|Cvwa-87Ayhp_+<(;ZamOc6<4?K$ zENb1$sPq08Rp)hk!``&F>}^z@yN>Un=09@$*!@o(KXd%tzO=91|Hei%4E0At<&S}? zC#K`rsP9`zu@F{8ty|OmwNc~ipw6+W<7TMq(i-)>v?pp_AJp~!%<<=_al=sSk3gNz zc+}_4T-1H@z5ACrUWYpOAKbnPm3JpB0(_WK02|Cf$myFW^!&>s!8PHa@&aorx@CUARVRGyTM z|7YK|>1`&P)#k9dZ9ZGj7D0V)u8#VC+8nh`8~3+I{k_IPsQrBI_Al))JJOD^VGpM}hQ0H;k?N{7>4RyV4pw_$N_Is#2_fhknqQ*T(jeCvC8__rz74>siO4RqC zG)=;Dkr%US7%E>ARKAvuTcN(k^}&X?3-xpIp{7wI|NeivX5r`R!l>u16n4RdsCt&5 z_P-kS`}RLD9o|8$cNbOfL&uL$>pyqn&4bZV^J1Xpy@lFmT-5!Y5OvO}QS;Kc zKds{osP{-d#|2UIilOorcY7&R-qMcCxxc)vfU2{a`)j(r7HVD{)XzJk-983&?i1e+ zb$^XIuNkOyXQJlKM!m1rxP2{Z9~0{1r9-H@gd!=Xbl;?sxwIRK7nQA3}Zp zokh(%@A#JEJC0wV=DkLpSF{%4y2eHABe6||8uyM(Yctr)HXG``Dv7!t)lmDWjyl)6 zs5}i&?~C@1JK3(7h4u-k^{1hpxB000mZ0*iMCJbpm2VsB`_w_ydViqCA8~xt@kz(0 zQ1i}W;-=D>4AO4;}6V!9v8udMI0P4@nrl8JcHtO%8FY6FBVij@Ij$wQo)c4rI zsBxoE*J%Q3-ASnZOm_b)$FouO%)?xG(D5Nu{YM=iN1f{#RNjk@uetvQ>izHtwa#Pr zKS$jsu{(uz;-c=S6pmA)@}+Z}5j8)PZ*a7U)$ER4N-YoqRyoQX2Y@WpMcu$B==88-RFzlztpZky*JkM3G1x4 z8&T{3gnDjvIo^kQADlBt?DS&4a4H6e{m~sP{p2_jho6M^t^CQO{qmkHfkj zqrO*tjrzUVcm2YC)}rd#j9oGPC*eI^$~M6~v=2i)*Ax45KjZXI!|yF0qUJwG-CxlL zg!-bR?$bDqX4$!@c`Gps9zoUdH)`HV)IQID9?ta&YW=IIJlE|l)c#_95$453y$=%F zWSE1v3~IfasO#L=wn61>i>kW|s*Y}`^XQAJr=Q#VqptH{JJjvNQF%t7)*p+?Hw9JS zDz~pk<^KV5<3-1pQSaHisQ195Az`0SQF&gY>WKPfh~GlxiHmv5sVmG-}>C)OEY)_=@A} zsQLF%^*=zZ_X73aO*SITONDCBfa$P2DsLsX*GBE5x!YT!^0h);hxU#;*p9XnDsOMc zAJ{&&ul>+|WIsmj{}adk?WcACs=h&v2iwn4=RDl;2s_e_vZL)7I~KLxcvRj=ZlCOU zs-13U*x9Ian1fn(G3vZmq0VayYX85weZS+QsORSf>N&sX{%5H5U!dki9~q2~%A3rl zLCwpET0fKH9H{58FlzmBsCm`gUk6oZW7Pf995w%a+rqZAtx)IE#iTR){XON=sOxeC zGh*y9VSap!yzf!xl?C-4EQ6}A9O~z$dZ@fj-QL``u&q$%+1j?TZQbAAaR=MccCwvq z7u(f#L)Fp4aZl9s?2CFn`n!Js>iP~s)iD?~?kl$sx1;P>I{`KBYt+1{sP(>aJl%ea z%0JW2vGeUB`@LO`%DV=YcdcD#*V_%K^)@=*gj#2d-D-E(U+r$Y*B-EcqSiZP|FVbO z|F=D1Pup|$g1v07*&C?5H|;HZ+upHv?LB)RwZDg`eLX?l|Ih7fRNgl>Vr&=}4K*(Y zsy`-bUL3c_b9;Qp2^=T1iELujy2()Yc^cGp$>9EssJvNiPPgZ>xlwiGwfRx`3fZD= zFOI6SgyT|<-?OD{8Pxppjw_&^&(^5AI@qo_koXFw!x-ay4mK9*J)RylFAHiPIZ*p7 z;P#@n6l&cvsQr|4ToF}wCDi*#R}av-`W+?pTZV z&8YD|+a2~dRNV(q`}qs?d)v#X&xP(Wu`)evkS&VC96+ zzXtX9PxheZ@3s3-@8_eapKmTWzKL4zHWtG46GNO4^?Q+GsQSxbMr?;g@mth7Yf<%Y zMg4qn0JX0}sCthmrjX;4!hQA>v(TPqa;WcJ)aOE8)O9F_`uV-ulu&O297_9f)b+Z7 z+Sg6gb-d^JK5AdDQR_$jI_x7ls*YHw@$qaTRG!4B`zoE=Go$vK3pFn|{WGZZk2*b!kAYhMZO4ghQq=SEj^nhbbIF3r zn-x`WcGP+2c6%P17gbLI_ZLB(b4ApB(!jRE^u%AG#t%p3AA!2BreJ&;=6=ilf$P2t z=e`-0Z#U+_N2vKvu_~6C5#sV#jd+aX@pcmGJf@-6`^N3xq4qNywZFNJ7ozsR9JS6W z)cv}{@vo@yyRZ?ao*BlaLFIqfrbVrr33VUkb$dS4`~s-!SH|sSQTIW0R9&@Em%c%3Yj>>ln_4i40%nNyP+FUlb z&4c=Lp0i6o$ox<{uUu=A{N^vsQYyz>Rh*>>e`9Q zx7+SV-5-bTNmQOw?mzGNAA13{-WA7JQTNj`RGv3B=7NwX7HWK4$MH~gBtX@b!tE(- zD%9t9LC1wq|2|?p)OmD5o%dkW{NbqQ>1)(`?K{-(XXh;p@eAX=dumn#X8@Ib?c-4yYO~P!+CVU^z@HH z)ioBikMXGa-(n8@6}7KD_8{utQ$4dRoc9gXyj!UCAENgC6jg7O<)J?s>RjVGj*nU= zC6X>8l}(MxliqO#RQ^mh3+nSV&x(-07;3#zsBxujSyY}XsQaY_7Q?SG^8P?whqb8Z zV+X2^ov8Ep&Hj$cyVw2uQ2RLS{=e-Bdm5GJjN|jD`4{XZ)N}F}bw4Lw8Tyl=<|VVq zQTs~m{&(D-#=h(JbT$L3?#%AbVzatGJLHdElUv>XY z)P3~OzCf+>+Wpa1hkUVZd{mu@94AMeZwk~pX;9ZEoBMO4#^*=XSIq72q1GvDE1>dJ zL|u={j;q+JZm*8Y-w3tO=I(#r{Vi>4)Owv9cR}UvYP;F)wg+n6UiJgG_d(V95oX43 z9nZvk#0OB%?f)x~X?E}=lo}j+JWL_8I>^3)QULKnlwN4RKUBzq(TM9M)J;!An zm$l_=c~qWis5~`nEn5e5ZuL?58rX*JZ|t}UYFu;F`L%X?8{5{lL#@-naYx$;^?CFe zs-7>g2yS+~9rb=ah&tC}sOx$Wb-iz4dW^q5)cH1QorI{mlAzwFxlqq*QTG=|y(h{z zF6aK5sQb7D>d&t~!^pZ&-!rG8)}4d8ZVT)ZyBu|1D^PW;a=hBEar-*Q>+J^A{a zhMK>_@lMowyBzOE?QgH+eRe-8&r!#Jqw*X_?c*G3-UWNvUb8n)qw1f4nm^f2McpUgqvkC| zt+&$sYwUXWZ*aWHZn0ZY`F}y3%U)Dn`%!iMg}P5Kxcw4p{J*I6Zn^!A+aJ39soVc^ z{K`i8ARj5O>S>F5?gzMkAZnd29Dj)#_mv%LhuPtFgdK^hf3zKo zI`2u2r=ZShrd@=}zZkXurKr#4pHO+WqQ38*a{pQT59;@8mp6v@-UHP5N2okcQTup- z+HaIiA&!Ci`8)RJFg^}uq(3)mTtP{H@gGCorLhw2UttqGh5EhBwJl-(b<}K=j`Hx#x1(Wsvj=c4k@Lw$c)<#;t}{5r?$?FRdU-H3XxZA0y6 z5325csQdjG>N@}H_8X|W@1W{ zVj3#nbkz8TsJfTq25kLHc)t6i#tlI2=QGszg;9=2qt0iXorv1U49BzWJk<4E?sygI z^Z%gZL#Xq-;P|q=W^bU@zll2Uhp6-U5B2@#?O#Kk2~qVVLH*t!!*3zZjM`^@)c(t% zzRx#B?Yp(@gqq(KwO%)DgZmusw+ApQ?GG`s4%EDt_6_R3incpE7pYMF@1WY#{T||s zsB_8fI3MagQe;o)FOHMx-;b*EFlxOM?munMq3S(v|3T%wfw~@#QTNAxsO$LxRnKc1 zWiR(T31aRGKd+=l{eCdh{%{}VM%A7FKzOc8qt+{fx*k<HdX|mpWdHT5lbez*~-QV|n7de}?N>8Fha)L``UTD6HEU zb#5(Cd0L{*qb=(9F(07L_Y=2&hN^cE>YTp7jJNU^Rd4smqUbxnY}pVQjBsC^bjUH>wu zeN{%ij~k#q7e7F~|3;$f8;x3bJZilOsQ39I)cI^co$D{C=j}M^{%9GvZK-G~SwO&C~oyBb#x0gemM@3u3{k2f*wnNp~3H3bpMeSp>+sC7>(^}Md z?nl*ez#c@M<6*}~Q2CCd>N;spquvh>P}ku(>ilB;9qNmNYEO(hpY*8t8BxC{&2uco z`D_6!Kz|2RJsna1&OyK9Vf_K9`2#Tn&PJWXJk7m7g6Kx zpz=RMonwrXAx?mrmk2d4x#N_M)1c}}huTL@RGz|aFNV5)rBL(Bq4HI5dll4uR?F>m zY(3im_58F)eNKOjI-h>1I=@1l>uA)t?@;S6L_O!5?E%#9SFWMzy@9Ih4yvAesQMne z{~79eiE=8`7YlzR-hsNGPoU~JiOO>p_4#-Q^&GxLUC+3u!+LL{#wV}|Z6efrJK33V zz0;t^y^A`}?5KSfLDgBzmawHz`zhnNoa2hNimmScnyCD>Q2Cpp&aDfojvi-2e^1o& zIRdrrDAYd3q1Kydr`Tzzann)zUyM4>>bSe@X?xo~_Cx!z{ltE1KeL1E=XQww3RVAb)Vd?= zNIMEu*BHlR9glZB!A`W3>|{H|er>1PY4#gC-F}OzXQty>j_2A1sQX|E>gR@2sJc(1 z&if+j_b`u9d7h!_e{Nr*#=k=4iSkeAkA@l_6Lp>9q52b|u2(YDeUlb7E`!bN{v3)) zocjWGV4;g)elgVelBhb~L**-vs-uGAs_Lhq`lWCm)kpO=K#gx|TcYmMP8fN=pvHBz z-Q3>8aZlR|ReyifefkAze?w9AjX>oag)Q(3YTX;C@5`?)hy6ud4dbKPn5cQNQSZOx zSPq+DW*mt6du!8C>N{S)mZI~g@@Dr&uN zQ0G3!{c}<0ztH`QQRlE6b)9}d)v*zk=STN%bNhC?!|rtdZq)d_sCD<-gQ$FeI6j0L zcLcTW3CE{V_x}ad=j1K7-$lLeUSJt4@o$({2KD)0*Ks4%{n-kYrvqx8&Zzaf*siGh zx;yS+d!nAB53YyteNgw+=cw}=;r5ZJ`J+*FO~cA~2KD#po}<=#fg1P9@oTI{T<1n; zuZPOp3{__f)c2gSegsNXwA+zjKQqwcS`sL#U;sC*f1 zCe)wb=eiZf=d*=S*P}S9o>Hjq=exp|0oq zsQasv?SslY0JZ)gRJ|im`NrUIOmrvwJ@z@M>$U_{*Y~J%Tj_WeD$iQS>+E{F!Tp;Y zZ${O-1(o*~)cNdn`+n3q2k;HfN8#V3>s{gD#hq{j*xc@)5KS$lKG4F-?-a^fb zW8O79RZ_nSS9=!M<{C(5p55xEV%&2)eQ1#|U&C7#YuYlu%sCo*!y*O%L zW!+xh?UhmYMIBV0x~TiN4QhTn$9>)ZA!^-zsL$a+kHYzVg*w;i_z1^74&x@E@=kO- z1y#p)sQX|(>T_l@YF}GX`FA+pg_^$`b)614K8PB3$njtHFzP*(@=17}bD-wuw7F3G zD}~x$X;dAR-CqTjx4QdlqVA`r?r(;wqqXgbdX9RduG=S1!}TAA$}>{ZKIU22=RDN? za2jbaXC?+1Eo;cxvZ^-+FvDG8MUvfj;q<~Zm)^D-i_Se z7`1*g+rsTFZ7bW_w!z5z!gg?bN88DEwq0yj+s$^jJ#0_g3zh!^+t+^N{*P@x)O8r> zco6DbhS*_lA8tpW_Bq<|7{}x7B)3mS<(Y=6W4hbFb^9#Gv+W!^*Uq!^QS%qt#cp4M zs$-ekSGawp*@2qvqYRcTsiT zcmD&&k5Ka?o(JQh<|RO_lhAPz$4MQhK+Vf&^SVEu`wOC;m-lQH_gA&mQ1#TXwNUHU zb$>m#H*kAnw>LpOA6>9N{^R~jsPnq+_?Eqk`h0wjdhfi!`dIHph#RB!*#uQjGsn$Q z_eU$ot!*3I*0!_lQT2Cn+}U+d*}&!saIUD<6f;ZuOQls*wMXj3!H7+~q zTymn;FXZ;3ZZGck@@}tWtJ)f<{nfO!Y;Dx})<@-Uh+3}+>U>%|Zij=3|3U5Z3ZwKr z@Fi;e8~(56M~M)HCY z0cw0B$Bk_hR9(&8-@@%J9k;e^QR{Sce@YJsJEN6YfdRh+lk-X<=L`m38BCH*G!`}(nVbwZ z!31HGgD}|Gm>{sp>AQcY&wTH-*Z%MB>h3zHs;jF`RX_7Qmq*!oQtMNr%JsC~e`fDL ztM%Ef&uM*b>+@Ql-}-{q7q-5r^~J3(Y5mjImqz(>MU+3UjPmtgXt^Xc1Uj9$-|Frezt-p*a z->+JK-TIq8{=44)ed{Tw4(I>uBq~C_nZ`**Vzh7qm{aPPNXo&b2PI zUetP`_1>-bjmrOiy?_7Se?aR4qw47qef-g_kBh3$%c8EoJj%Z(Mm?`j@APN1J~OJ` zp40o!ZGB#+zp(dT)cWF1e`)W(to7xs|F@67qV-j+uZ{BK$|(Qd5ar(+Ti?|B=BW2Q zAB}1spNLjFk6J&tHtO>o|8@On_J0!9-~TeI9KVU0|J~#U!*w@{vU`iD{BGO(w~w-a zM%49p>EmZdUB5mmzl~AXZ;m=|XYcQhy8gUQKM-~PSd^W~sOzSp&bvqJbRRz!t?@Q0 z-~09cgQN0!Sk!oWS?@ow^(j&LKQk)-XGi7#oZf$4RK72by5FyeI{!7D{>G?$-w{=> ze;+k}de04q^nZ-n|HO@k{67_y-@ioNmmfvhyRMJ_B+AY&qU`)O>hoAPy~%LiX;JIK zH@j($M{j-FaNZfws`uVMJE}Z)Z(SBu4=a0rb(GyTt!tzF+7fl%_Neh@Z&W_}qs~9j zdN8WIhx_Oulz)E{Ro<(k%Jcr#kG6iQ_485ZeYy3UQTO-Tef)b- ze*UPB|Frejt$%Q{;rI<(Pm8j5>nQ(j)B9((E@@rf$5%w>- z{_|V+^zpsDzdy?Ec+~YrTBoCT%l@OI{CP}NK9B4D$G4try)^3jC-nXkqt1VFr$4Rt zpV7yk+569KeQu{eulHZj`l8mC^zlD!eQE2NKC)%uy%Yg+%c^-EFtey#P|PXBh4AK#1e>nEN5)7D?K{<`&d zQTO%Kn-Biou=OUbr$^n7oAv%JTW{0px9$BiqWrmIr{Agf&x*P)OQY;8i>jYBy+0B) zj~k5|7bjbfN7dIoqptg--oIb#{aYW@`jFO#w>~P$???Ck<619meM0M#qx^Yh)cMbf zviJNbzh4;T$4jEh_wv?PMEU*ZD8H|cdj3BgmCr|_uKQTjb)V?{e~!xkn%@7{KK|uS z|3>fsTa^9pMCJ3{sQdcEsQiBv)j$5S_0(IOTJK?QA9ehU);mPyb7oXNcWynak1y%{ zyR|Nh@^@8K``H-f@3yFXw@202dA)yr>uA(<`+NUD)OCkD{Ya-z_5N(@e5Wr&mG6>H zzfbG`iSqk_tq*Q}SXBOx?)}I0{^h;@q}HdlKBM*7tW`|oLeZ>N8t_dnSCAL;#nh^nVg zM)~>KsQY_OAOC!m{V(?MuSMDUW*@&c>iX|So%i3J{{7Y;wEi$E|NrUz|BW8c{*hY_ z>9bMo;KHbNsYgVW_mQoSYJGI;W1{Sx?EOnyFKfNL^$D#{Y<*JelcUPC*PRw+_vWp)>h#<7 z{vBHH7*+l|MdiDs_m}qZyGP}>BI>!?(CM2xeOvGEXx-g98s*>KsQmXu-M_COGkB{oFo)wkfbE3-i{MHvmmH!n{e!e=YU;C>*epMfTSCk*`ZhcQ5 ze}7cIA8h?_r++l+{Ezki$D_*sxlX?(svUhP>iVxl`StZa{*6w*w)ejkb^dpw&ih`J zzdwv_iQetj!~NeB^?B@bZ!?^?tM&Y-^Y^tL>h!}=e$7PrJKK6Rs=hDk{fk@g*?J_JRaE|e+xmB%es%A^JIbH;^#1#!^8IM<|5G3TcvOC$?DS7Z)$f=4_*YuL z+Q+}q`mIj?x7Ke*)x&>A<@dd)c5_|t|D^SQquTxNqRv0{c0)OC80GJcT5sHXlc@Yo z>;2Pv|K`1ai{8IgRDQSb^fNmB52NboPOW!sUD|s0sQa=a>iV^vzM=QGM75*coj%&S zuk~Qm^@n?ZviGNZ|7ho+v-wA61_pi#qQUt)GrM|1+(hjq>N3KK_NM>%Saj_Zv~?e=}-4 z{6+8ovh`Q3zi$0a>u+0s*ZTX`Q*J-x_XkmSPi?(Hr{A#mZ`}Jg>HX7s|Mb?IMYa3e z^zqw8eco(CA0O%C+gf)=**m{=PgFVgN0skDrypv)pwkaW)!&gQdq+EcuJu^!eCtA# zo#VZKQIwq%y?;p`zjsu=_iKGX>w{Y#-umd)$G2V{THoCI*4DSRzPou+a5>@VhZT&*)7hAv7`sLQIM3w97t=C4C`#Zh=-PZ3#`Sty% z{D08t*LC_&qOSW{)bsSaD1T2qW61x8QO9o@b^U3rr$^;`^QiTuGo#MCOO#(rqT184 z-d`DY{i@zy+xzQ!ex6fT`rO~TC_5Ya_@>_966No?oxZF0M_czt`Exkx`ibad^c7L#{p+L3|Ay#T z^tvd&f8P4Ls5t(1e>j|X`>448oG3q6MBR_I_LI?uGY2~xqmFNhmVceTGs>Smy}vK& zyn|8gawaOj`KbE2U(`D56QlfmQq=iRjebA+&^r$MkBB<{$ks2D{gMQG* ze;DQ0|Mc;ncKXkH{}-*l>hxdt{%?E#cdfr~J>^b=z3a7JKg$0bMcs$fdjICFw`#p@ z>lv+Qw%)n*tk$!m+Q-VMcDym_er}H{$L`j>t%v&fWb16FFSOpX)9(|N?*m&O-p3yk z^&CE-)1Mwyj%P>Ne@T@6E28T4%0B*v*0=QWzlo}cceGyJ$KMlmf8G~$AKxFXIHmXh zv5$Ye_dn74$<|Nx@lW^uXQJ#})B3NiUuyko>o;1z71i#45M}>|tv_nLuJy-J@y<=} zJe2pAQRm;P_13MoiK?G7djAelamc19JLh-$XjJ>2?ENEA^|#Rb7q%X6y(sE=d_Yuv zJt(T24{3dP>!YID!Q-Pf5AO8mcKVB={CjDXy;nz-<26zKyfrHStD;MypY7wHi>}Q6 zucPkIsdpLd-!RJFX;JOqR#Exgx{u#3s-4`W)9)IU|B~Kc+In{D-TL@Bt;;)oMO6Ol zI(S|8Z@pg#WKsQdTWsPW+iQTe<$%I?d0 z|B5L8UKMp;Ufued*4IXjCx6rXf7|-@sQlj9`&UPO{`H@G|I@9XiSqk%t)Gt?H^0-z z|Go7;qQ<))NBQ^DPXAeyf4`2h_q(Y3eEqu){@$SVhOIYhy>aVJT5sBVT2wwa@BLdu z<#)T@zkTZ&QFiat`*)7I?yRWtEba8OTkjT?&&sIt)_4f#`>HXJ6U3X>F z^ZS-g|Et!ww*GbNRjqGp{hKJi-qCt>)c1J)w2%L+_2;d>h^pV;M&0i}IBU3{*K0jB zsy=Vh`!{VpEy~ZEwcaAi?yaNR?`=B$cD;Z5)-zh~(8te=y6((e{^8LiK3eOBwUqwGAl_n+7L{7!#i@4qPOKD@m5|8F1vv({I3`k%MH zs`b@T<#}E2Um0cZFI(Tx`li;mw7#|Vs;G8&b??6`s+{j`eNXFqTi@6E{?-q)ez5gJ ztsjo^;~!c-7Ihy#(fgl@^7}Kb*F^d8m8k2!*7}Vof4vy8s_kZ>A@3sDS z>-SrK(E7vHAGKcB`s3E0MCJGMDF1%d`@fI!>n;2Ety*v0dYjhUw%)Gw_N`|`)zcrg-Z83v@7l-D>hz_(e|GQRz4y;)T^3dE z>!RA<=1$)d6}Rl~{R6EBTMxC4MO}9!Dy}*nHI6;7(;wFQnAXc$pAu#FIZ^fe{MHw> z{%O>GxFRZUcul8Y+4}lUe{0lz`0LiITHh8`AMc3D|LWFvx4y6SgRLKF{aEYATR+wM znbvEf{Q6>4xxe1&*S3B;s$Bma<=6LHf6<YyF=n|9;;3>(<{#<$wL9!~MNsl>awr zJ-zi7t+#HyUF#j9uD^3s`?zbTFYWYYQFd2#`r1z4*!x?e{N5UM-j1kzc6IvhPTvz% z{zFmz9d4bBy8cM(RHx6h&b2PIUKEwjy`$pO2S(X_NK~Bi_};%fD$aUl)Ojz8s^=@B zu77pZ`EQOY|5Z`>yuJ16sPoipu{-QP=%A%AenK`t{Bp?A{ixA*cD6>@+10u? z%8!G6e5&_nqx?J?wQlf`KK|IK=k%$4{AsOEkBXQ6G^&1H9#xJjdjFMCc3&5D{a;7r ze^u1F%!i|%`)fM=^R539b=_B@^8I@2wNcOYcYFVPtv_hJE~;Gr8)fIGo&Jl~U$_1) z>b&dSZ8-1LsQYx|-oHtd-P5DayJb{8{$U?Kv-OTqelCgX_tr<{vpMSeZGC)qlt1T1 z-N*4hex!A}^=Op6g{XY)+3ELcy-({Ow?3ftPg)-u)qYM!*}JsUpAhBe(>nd>QT6z| zsCN4DsQd7SKK{n2dBD4R|J_m7e=w?CABpnwAAA23t^eHm*{J-#*!y3J^5?6qUyEwT z--&83{}JW)kE6={v#9)k74=^D7Iz==yM0vpnNj)OvGq=^cW%8))csl(J}STWw7$QOf1ve)QGR_aDxZJq^p8iC_w!Ntd^IYcZ?t|Z z%Fe&Fe!KNMQP1ghQRn|p)cW%c&KdS^9Mvx@jcP9=QTc3a-4u1**4A@dclGhzQU30W zE{Wc^)9)8$_u*0P;IgRp^VFzvJU=Sm7e(27any74>Zp3ZveW;f^)Fjr-};8A>)+h_ zZ;8tH@1okt`}_EZqVoN8?|&}p{(T|J&R3%Bf3@{%tzVDw_d8K`zT5h})*tlo|BcG; zmr?osw$rb_Y`9OSNA-($jXLjcQTZ*4@@rGnb=#u+*dBF%M|*!y)O81=uDhVq4@cGS zv8eM;M4fk^sQdWHsQ&9IQT6})sP^>2sC-`1`m)w5T3^}v>ekmq`E_NKy{mfvZBhAu zAnN{qG|G>E?&F`1x({FM{Vzq?{c2QszuD>6wtlPA|Go9UqVoMwAHOc@e*8SD9KVbj zr*5=-$nUhMdcI3kJ6PW7tE2K6iL$@B)3 zr=!mQO0?Q7m1e$@Rv7?uA8ef)6mPqyBp)2Dm? zXz$Op9*gqxct99 zkIHwl_m8wrwcew3x^<>?w)JT1Tq}Z+8dbkn^!_Va|Gf3p zt*>ppvh^=p-_ZJ|*0;32HLBnKyWYRL^eMCZ~fP(=jKbj|COkA{ngg5wSK+z8?E1Ly|(pRQTco)sy_dt^*>v`*ZTd|AGTiC z`je=7_*L)!ruBE7e#2EmzBi7lkJEeq=B>AEy>(Q7ai`wDOH_I8+Im*&l0JTRl-*TP z`L65q4XqnnH%H~OrFCoTwmyDt>&{N!)%)l5{ukcs>inH({x8WlcdQ7PpK`D`UYrS6 z~Y&ztK9n_mm^q-d9KW<@>~KkA?dy z|EP$>s%`(RylsPZ4n=OC8k7`qqL(TP*`WP75#n#i{tEXf)2JW@xG8QE(?!>g*0p=0OJiw&ajdA+d+Mq^RX_4tntR~Pz4`S%bdJ`7 ze9&f4KH3aAXJ4J8{VdHfDf`Ql{hiLA{Z(%VQtqW`ozB$8Q2qzX=L6-*!OH(&9X(jN z9jtS-z@_nwCu6leR%ec-ZAg*ZSe-vs<d8&M#s-shN z?o|0URdq5|Z9ok!%|7eX)n+_Lw&gutc9n2x&UPnf>gY_BYo@HsoN~C*oj+6g&*Zz* zY`f00hJ2eXE3=iuY~?UpIn0)=*;ree^LT!=d_G#&&ei#Il|ENz9;+JkLP@E__ zs!g7q>z$(woLzU}?09MWMEP?fXX(jCi+hVh%2aL77LOH=7l#_UG~3JL7mgK=6kWAE ztpksz#~jHycTb5%i~Fh%9S>(xOXuXABjISui)+HYsS}jGFa08JD2^027DtQwi$}x# zxz{)!9;n<7Hsz_8I47k=Px?72v+ar4JSY1sPS*L8d0x(m?Wu68QjACEr1l27YC3tG z6aQT`Q|B0!Z1cg>gu^+rwar7L5*{ilou>nbqsOxCNx_+LuJWI&8gRePN!eJOFN^bK zYoWG{W#{BsVEw|})n&PxyF=~ED78E^PT{%59pTE1Ke#tso&U=+#;gt3*Y<|ursC$} zmg3gpw&M2Uu0##XQaf@Ojpxf!gSL$z%PMy~n(cj+Zd|bKsQ)-09;j{o{Ib-Pbp83V z)R%3kI2m40+m0>E8B{x8mb)p%8Ov&aS?-|i=_YIZL;30DP!9UEW%VCd*S6Zwv!VRm zuVpC-3+@O?*J~|HYgTg?RXOxUww-@buEV+92N4;rERGiU7WWnR7Y`H<77rE2iWd|o zij&17#i`tcPGBiL4NYpUMXRK1C5rMTB?D$g~Q zn<#gA`VnPcAFq+;;#*YG4VAv3tZb;G8x~-0GtMnb|$(JX}SCi*g z4Ugt2S)Qjtxr~*l#zrf*(Yk6hds4KA(P{&u)iTBTQrr>IK5C7kebh^gR;$}n`HTNO z1D^Ul)qeI=K6|QF@2PzDR6gbc&f({tYB_rTVe@xrm+d-Zzh8LG!xM~IA7F(?#{uoCHAoGS|b{|_F(yTsLni8`5%g> z%PUGjULC5Z>`>MDp}K2kG}8HbsA_wx?2eVKv6{h~@93x46%!)sW;&>(W95VSj&1G1 zd`G{g6c)*#Z<_mIT0%9cwIYQR>rHxo+v95<+B-+ z-cvr-2hcq=Z$kB8_JsU5he9>$@T{{{3wp}$@Wt^=0HCcE0NLf5m z{vRpNk5sRIq^>$r7R|-<>1yCe**#KaIa0Zqqv`8;B4R{$f2vA1RqcPO$~aZ+e=2>6 zqx!L_>H(&zmk?)4Q3F#|15@SCRF%T)Pr9<0{h<<>{h``0`@_K>ZFs8MytNeL5Z|WD zx9RdtOe;lgn;jr4)>}~i)0L;S7u%jD^GD;EJVn2#yfc;OOqF-0ayGk^F6Wslg*m2e zRzzRO)=b$l)3mKDW}2u?nrR~IGi}|tKU+S`)<`I3ld`tBzNlTzR-MmQotvvl;gz@! zwJtF^^2(|aD*J5tBkHrwAF(=m`ew_Y+4ARTd2+Nyw4>#TNPcP!*7ZQjn6w{zv~T(uDESJHVqSKgX6+g5wxPn7dq`8n75tGBtj`*YPx94m{*szn{E z@>&xUe<-gRH!A6|lnm9j83(G{`SNqV{G2a8=gZIe@^ijg@_e=A`BS#m`8=Pm_B>zy zTX_@ZDDOh$vryMAR2j|arL((Go-dT=7uHo5mJen+%hQ8+MlP&8FRZJMR}CMpvY)8? zd!n9bvwjhklA7nD@>=Ud^=2IamD&mbYT+mHZ+X7iQxs#}6xW8snx9#z+1UP~K6r5+ z>1h+4q84gChr{emX_lp@!r>Vb+bzaQLu53J^TTL7jHSc4$Cl9shtcLxZ4V>Bcx?~; z(D1|$`43OY&_aiHH{4a8ES7ATAKDjZqLNzA#EXlUgfBl6 zxm8P)+uGb^9Mbu}HunX2zBYFd`M)-I1m(ZB>Tqq^vTdHPOWRu!8v}W`BeRJWiI>)e zW}_=I`{n0(mFH-c!pi50cp!gK(2BGn*NSIQ{p_u>i&bpPe{Y>5O0msP@d>(0e6k`f zz-Z>Kpc07+R^$$;6EOg?W%OT>ywt;?YB^(-J{J2ca;1EX&d7=pc}2!z+lT8+Bkzjj zqAW(+6}iUIiSoylE3z*);}`PN2(_ZN&{1Q@ig?K@JwHlO18=*WuBCk z`L{g(&^no?0LO|G#p&WO8XT?dxzLk`uGMOAN71^tJCA#d@^qI_&gvD96sL-;r~_n6 z>2a`iVYcnz@NaeLx+2e4mc=2}GqN(JWou0xGuv93dUu{D#Tt$6bvX-pzAm-3GEW-M z&1gK0tHPa?vNLVNwzBN3vh1w8J)oszJGlXNG zt}mL?>pfS+GuC&cwX8~yysUVjcqG(*c*a}35B~;A(JLa~E~xawMRSc+Np+?Oe^u^~ zZ4otYDmq8BtUP?vH{q}?UCgP3BSqJ``%3Ff(UH>Hc7IpZ{auy&D8)Tpm3zm-i}TNW z2BY25v~JXUS^Grgv$~1qkyfbiNb#c3y2TJ%;n0FS>sDIO8pfKG4y`(@NtA`w64oTj zLMsPWU{%7^xiOzB*?(e`E4Md2Gx-bpFP&;`-Ie#hIJx=%%u}DRsWO&O(1Bjt*#z#b=s4bpvObARipOm+Ct^ho>wRJaB;jSH#0|6SK2wM zAu~smn?7)L{#zN+@1gv)e3ZjXT{vaU#RmJ>dcc>V<+qQ$$Ijv1DOGg z6(@?rjCPoV&Q;1nXq;SJyA*j0BP$O7hNC-bZ+Fp(+M3*9++P&Ittne;(hu1lFHRJX z6z@^wgJ%%+5bMgir_ai%)y?%O9d0acDsC=rDQ+!pD{e2&ho0QUzQB`f+vf#5xhPLh zF3QuBi}Lj3qC7phsJt5z7od`QmhqC%-9lD8*C>C_HOk*}jq>+gqnt-7=aIBP+xHCJ zb(EW@9{KF4N1klVQ?l5vdERZa!Ln9T4ZH!-QT@+rl?PfJoRKu`zZTVZt zMD=FgwD`n|9M+^)b(arU+Yo1ZlKCLo^d^JP6P2!Kwk@BD@>vwJCN`X-mqzCtsobm? z+UA4V7AlLr8eKJ2SBXh%E4A1aoq3P)@E%p4*5$lY(QftRs8+l6 z8=Yw-4b_8nvo+ZoDe}tP4V@|SL7rHlLS+{TdzZtC=og)1PPZnlP`VYHp}#}v)@0E6 zm!wV>=l@G{*St;jIVSUX+!2a^ab2YiZ=i?c&RLtghWeznsZaFAV{O_gUX=gq^F-r0 zMLCFnkVQQ(QvEQ>O+SqMS)ZN(y_s2`Hjny-^?CYnXYoKdc%uilZBGx3a?=B&-1NXG zH$5=QP2Y<{ZkJ@+D#Kz4^}4p@tnWoR>w8ho`d*Z?cUUOrk;-$ZBmJ%Vl8^ot9obm< zh_!6XXJh3f?y@Z(ee&8m59PC|^4V1R=%1zVXH(^~sq)!W`FIN^T|Rp3wK>Dx*_?OH zsHAM8ob}|$!_AfR=E`|<_N4G|bLG6bau)ANk@J?i<35vMTW(@Ml$-t^`6&)WxoxT3 zwp4CgDz`0_o7!BPWAYIzqVu=rA1c?@I#a~BHv975R{3wM{EZrG^WV|!mBaS(WP6>t zz0TZTXKt^YMVQW%vp92YT85`!w9@tGw!K5Ma)nB*Z^!ZCWO1rEU7RV-7LSH|DmQ(; zZP)7aQ4aci9L`+Gwof~u^Y@lr{lD!)MOW$n(Y00pkX<9f+FavWZ{^UnMhA4QF#=uX zt=!r=1C`O|n$UY8qXs&EfBHyt)&8<&H1WArIU7gNnZ^<1iP9o}4p#og6x*({7J<$` zRHe3_WqWnewTJ2s9?EBCZ0oNMW$Zo3Xjc=}u8dZ;wGd+#D(gg@Khfta*F@FBMEY{8tFD@? z^C#;}qnH$RWz7(^F=H9Jzs54;vlSTYv+|j$(s?swo99M1RI6qsD1Yy#P(I#Ip|X2R zwKn$^&0J7fjCbf-Z=DubfoIA?Xzt+gh5pJZp2MS~A~3Wi(=<{C%`aO`v^ZUy3wf|EWBroivZ9gS z3MiU2i3ZU8$r>l_DjqD37g@1BhsTQ-6)!HHC|(kpjme2c{^IiDkZyln%8Saft~_6t zr@%Ig>r(&7?z$?`x+>$k)SDD_vaZUwu4-mo>PpJdA`jQ)?jb*|+^)+r%(^H7w}d14 zk5bGrP>OMCUHwO&i}79qy#>(|p*vzkKs6)gM>TI93gu=LP+Dttd#j9kb=$7htE&a) z=(kadPe-70^vNh^J+PW`zJ3^`54EPJwJlvwi;n6i)#*f0Zu&!1Zx@tT7nJ|{L-j6y z{UN$mf9Os~*9W4b`apD!J`m-s55$E~?}zTMJ`njfS?5pInR-HZS9{P0BG2`KD7Pbd zZrpo5ct?+{>jP1q`aqO}-Va@?mqTajy8|CR=LsnbCr+YMtjv_tf%-6NYt4=Ph^DmDl>+?jN9eM}q zlaDKkJHi#UZDq&ykTO==7l)p1^hp7$#W)+9*P&?LDkBc-i^E!=n9&*@4(oQq3f#d; zk-zmboG!}W8WmcXk~_-Tx&q3_d>Z!@mCJl+eV#7SzyIheQ8o_owH!pFI7FaB{5V92 zLnO#UF$?lje~h%%YUm+s3*3fhkVl$q4UgxkcZ|$$V2lW~avl3;SZyUZq1R$`f-d+v;Rv-LH-1gEcNGd>HPHIhSodm~$Z?%(;*c=3K}Jb1vkA zPsk%5HkJBwXv~0*;GDQSJfu?z!LJod=2?vzJ`1-Uqe2auOT0-xgj5{ zyrFv7R6cAfAI#~rJQl43F1AARINL0m$03X6amb>19I|L0hb(R`i<`^h=CZiCEN(7~ z=6YJWJ8qQ^*_9)*YsQD{n(-mKW_-x5krdgrDu_zDrR;7gyIaccma=PB=(%Fo`XRC_ zFJyOX+1*-px0YRNjMCXPb3}HxmffvocWc?*T6VXV-K}MJYuPo&^dz%rrEKx3Hu~FE zQgcsKQgcsaaa&omhG|<#x0S_hWzl-36!&ynS=?3@x0S{1RZ{Oh^dRiI9@#aMMRv_( zkzF%cR8lipblvu{yS?mgFT2~z?)I{~z3gr;yXRIuX1>;0W?tdI%F3RyVg~JeR`!$? zpBu5w%AWi~R`!$?E338#EBaE$P>Fo11l8o;vbDEt?JZkYT&1(Mw`_UmZksKim__-S zn5#R`!*ZePu=L=PFjr-;ov3AhP1E&*I48 zGqkqZ+F!Qzm#zI}Yk%3=U$*v_t^H-o-|0A?t^H+df7!AEAcZZf$3`YkpZBJVqtt=2 za-ecJP}d%)YY)`52l^^?ZmeCOcnEzC2IVte*LpX$KBF%m#AEBz@}!8Md_vv!eEy>{ zdXt6jnm1Xf{fm*%U7N2m&Q}@dE9d$0ZN7Z-`8Ve%m)Y6+M3AmMUg^gxZt<6E>+?Q_ zx8AU#=)=2aJRS~X^NI56M0s_h{5eq;PgHIv64yC%yf{&uEQ*eN<_)Kdp14cOqW9KD z{gcVtU(Ri)=+56=O=f#pJn{KNpP=y>Op$?YF&;W9(!;T$97K9(-9o&FmxkW?<5Y2Y zyC^Q>0S@n_jpyD8qcLsqt?%%T_h6;SLA;0Z7w@6_rWeEEU76e#-$8lqy}`f(Mfr&O zto$j9ddFdv*R`TPFehT>}7DanvQRJIg z6!|6=MZSqek#AyA{BSrNlB6Xj5A|gd~rLRPuh)9tqB2wguh!lAuB1N8v zNRcNZQsjw<6nP>dMV@S`I`Ni4Tj7Hkb#Wdtv>q|46h4Si(Gf8!@eAt|s6!Ju* ziaZgiB2PrB$dk==cQ%(NTdK{AUA0eW(+{}BaTJBiDQv(;#lOHI2QS~ zrF;|3+UAw06~~I>#iPaf;_;%^zNI`A-+Gq#BfdrL$9RUk66GSVM7hW-Q7$@5l#9F) z<)XS0<)XS0<)XS0?0M#ixOZ``C|}!r5ceV<#J$J|aWAqf%0(7MxyYg@ z7g^j^7Dc@J4i-hci}O-tu+5@~7g-eXB8wtk9Ti#wdTWG0I-UW~qF!I&)8{3m^Hbc5{1pA7 zk{*aP;3ychega^z>O{+>qLlo46X~KVN5xjW<+OjLsArZ^*le ziBN1jeEJaeRAOU19*T_@M{%*SZFMU`Mr}ZxjB3N14pfICXLM)$%?OIwd^#6dKT);k zFGp-EohTY-inGO|MWsHGGKnYn>`lMFP1R;DE#Ji3*0Vg(qHfW~ilSA|rRfhw65)v~ z{FO60>Qn3}rd#|QQ{#re;6yV&pN_+c;#6_EI8*dV5Putl-Z=Ri9lWrp=EU~M6Hz_7 z)?b47T(+Y=xq%{6u{|o86Y9A-ipsrKH_uav(+QqRvcDh+!2vE4yzZ#y23E; zA7J~2hlR}LClPN7|JhZ zwrx+$jC>F?BOk=f=)Q=YktZT&^{#mKIx7}>SDi|kt6 zMRu+3BD-Q>?TKA6FtRH?Kz7Bw$ga2-*%kL9yW(DCSKN#2ihGe=aWAqf;?;t+Lvb(a zLqxx*4Ojt0p0I&D5&a@hM8C)rtG>t+kudHo?k@65Y>d1T8zZm8#yD2g!;6qTU3?QE zBY#98$RDvW@<(ip{1F=?f5gVfAF(m=L2QhC5E~;OM8%8mV|HY09Z4DVR91!;-_RJp z7oT=-(y`iK1=u!5T8kPh5?B5MAR$ak4m7 zoGH2s;%ywfJzm?|hQAd;o{PPa&vHjTTZKkGTZKkGTZKkGi`9|0R-uu%R-sXTB6*w- zMe@kHNFG@iFCyzAd1PHAkF1O2k#&(gvM!QG)~#bB>*9Hot4~&-x)R}|x;ju#ggD=} zni1iTBzBRfI3FE7R7XYoBgutgiC83oB6a_lXPCZhe+)BwOml zykI0(N|~_7@zKCv)TbA*xHZ)chvpt@E2sBW#jqw~!d zkZ)!UR>vH*N{+5FgFx-d+yR|w?tuI>ckmYr^1o;5Qj{PEt6C`C3<8zN+yUJ$a|cvQ z<_;+KGj~ANt;XYcQ9YYMpc*iPKpy&>6&@`roxes$b>J@qM>3D#|E1-X8H5$UliBn6 zYCN~NJ2YQFz#YYlLx1s!Gezf%_Qg`x*TwmZ zag{4=i(jnXqY>3#R^h?oa4kUsqy1iJbs0PIL=qiysDwF6P`KGNPyP|g--hqo*MDMt*sMJ>1ad@ja zymjQKH*7e(NgLjD4f9uat(N2P216;WuOlC{ROEx`9fvheK8W6t52APEgS8eMRv?bn zw)-nq*XoxRhwne)gBc$3#HVy=Vy5$Pj;{73$X@{m6wAmooRAGKQ}KMte%FzTuq z;{Xo5`_Rj}gL)}+AN5S=Zt9aziS#Jw&guzJ89h&UNvOS}GHQLOT#f1jrLT5xUZh0C{3YfIKlH zK%STjAWzH%kSFE>$P;q`s~hvjAk> zEC5+I3s8^jivN*avjAjwOW7Uj+AKf{yJi8%u2}%GYZid)ngt-cW&y~qS%5poqR1cF zGFqb=7WpGvB7by56EeBmYX;eRlg*CeP9z*dVidly7MwDpVywgfD9xRR(CyJBB z>EcXrwm4TjR#bDoKgkLgE502A`6H4o4#m_Q|As5%h)U0h|ofs0006qhZ zdJd5!P8H=QdR%-1?Nh$Cohf=mb3`#DI@2mK%GoM0x=IX*YQx{tpc?SkFnF}6?4n0B z3lTS>*vBXL(K%vBR2nfPDybL}l~gM7#|kj=M+}L>=kL^^7!sAsr@)Y(Vo3Cq`y__A zfkmsn$bz^L+0{CcU2!9_D{e$~MT|JiZnYnAAgV*LAId}Qhw`+A@)Y}_JjH%EtRBf( zbcaL!!}Gz4cnnz)k0C2!H)O?sWW}hCtQZ4v7~fbicHuBasW;;TvaZLH)6ydA+9~qE zy+w7XUU8_ip_GFcQpID)6Y&`GL?niM5Pc!LqA#2-D!b?l*%EyrTcR&yYp@~uvdxz0 z3)vEVA&a6fR9?{+vM%~U*2P`OqPPp$(qAM0L|n* ztcZ4Stazk27y5K2^36&F^3B~vzF9Lw`CBtYzKMuXtFT&#uCrQ*?xWR0l5j7!CL`}#OQ4{h<)P(#IH6edQO{fPJFX2>irl?MQzbm?% zq9$}V#Y@OTD>cYN`63Uk6Cw|-6Cw{qS;#l*gvdARgeVWu7tV*GFH}FGFJxErh3q;T z*%f^uyP_{-SM-JKioTFtD}>0d7!1{k7!1{kwLw%TVz5mWgP{~L7|LG^hH?{wp?pMQ zIGisB@z|yu&{OaT-dQscWqS+Gb0HhH?;_ZAy-;h|Q3d zxyr#`P}-K~TwUuMx;CZWSroaU8g?g8ZX!2S3XvPSBO*7HB6351irl;jTVHgh$PMKz z7j*AVR85|!yC#;C!gH}4x>F)LR2D0NsMOW~k^f>jR8nhzs8;`3Wp*HaTFSX#ZjoocRlLSt;nJN(z+a)hl#0hx;Rsu4@FiePfr)_ z4#iQ6>jk1F+jF5<$QZ^?kqAr4dK!@r4xgi8 zOSFS*iFS}J_Z8U^?I2sC9c0TpZe-CrZe-CXjF3g|xN%tTS4MFWvMVA&c11+Uu6<-z zM1<^$h>%6=V928PHprq#35VGmi(({n-^EDCt{4f~)pn6xF%q&XMnZP2S>Z5uXIFHD z?23_auzOLq#YM=XSO{4ZNg<2=Ba23IWYO4&EE@NaMPm-Ks82-}wQ*!oi$gKH_Jw?K zA8@GMp{#>_sbVDLgBS_?&FVkG2)7zw9~GojTgTvgVvM2^a7Kd84ie;Nckr=Wl5FCs#BP*j6*5G|l|al+;r z=a47HWz?#T%RVE*e`_hoXQMFk`9yhQ6t*olt0;K5I8mG|9w|;2XTnR9gKv{L82T$_ zpW9wu9JalEvQD!2d2Vk#ZR;47@4;NYS`8~WiwCbYgS`~^D&=@FAK((>>U5QF0 z5_4^F>$4H&KCk=E|bdi4Bltf4zdP5+NWfA_SC= zW2h$+8=xm%Y=Ep=@j&09AO=9Wi2+bBU{FFWXqV2Y#FtUK+B3+ zj+G5`7mVYmog2-OEu%Tg+h~q#*+RCA=E#=Mo*|27y{L>vc2q_qI}Y=$!7FXm90KQx zTB(@Vlg&@#KJv{dk9-r4AdmC~$TwpY@=cG9ywdL?fAnFBz1z9oaReBfG|QWY;*3Y#G6kEh9LxrC&zZ7{QS(BRH~U1V^@v z;K-H{9NDs#f-D-rkwqgovSy%?Qs z%gyMFa@$@l$0+RYTcjI{QJ%(Pl&7&6+wcdhk8L5#iD=o;Dl@@e`l@?^nnhCOE%>-F7n?+WfjjUKRK~{|Z z$ci-+WW|~Zy3U%3cCQ_Z4Uk2vCCH-H5@b;vgDhGtK^Co+Ad6N@kVUH{$fDH}94zWp ze7b2%-l<5p&afp>2fJq4$ku%RBP&)6w$vLPG_HC3BMRrgSOtw-Vii0dic(N+>>&@W z5+Lh7HH3T+tKdXYe`sX@XNt4Mqs6)K($s@r<69Am1kkuG62M)d)c`bF8s*W5WHkWw z;=D(>SqDH*r*#0FF3yBT|HZ!(Gy2Xa2R z0J0(mKvv9Jk(HtL#RIlk5fvaS=HtkU`8cv-KJK2eB3eLJL<`7@XaQMqJ+dNNKvqNx z$cktISrIKDD?a6dY>5_-Eztt9C0anXT#syt7LYB`063= zEinVKTP?f3X3|S!{rO5gS<5 zV#NsVFEr$4yhi6(x5t^}=l9k90`7{?S^*B*K5JmDVDYaztPI%JQmhOhkE{dW1;xqY zk>XU56~8csb48JeUx>g9i{3mK_i;z@;?V5g@4@iOxR1s+WBp5O= zP9gzhOC*47c}`INMt_vQaUbPu+&5adYes(@J`2N&7ywxj10XA60A$6JgGwX@Ko-RS z$f6hk*%bpIyJ7%jOALT)ndzfkMFPl{rybc62_Rb{0c1-gfNY5bkS*(B$f6Y~WLG?Z z?1~4FUGV_2tA9au#RJH$cmUZI4WD4qIdvV6b~SaVisgaUxq9i8<9n0 z7qY1DM;7&+$f6zsS@dKei`o&g=nmjemqW=0Yf?oB$f5`VSrj24iy{OZEKX-joPaEf z6Ocu50L=8vM5eK7R3q3qBsFr^y^nB-LGHaSaG~KQ#=~_B!)8ZN<@LY z5>X(pL=?y?V*v6>M1i~#Q6Re_3S?bGfqd}0x@w9oaRss^u0XcL708zH3E2`?AY0-J zbVOW%Y>6w7Eo%`t6^b#CMKK1lD8@h*#Tdxqa2LfGwpkQoAd6xQWKoQPEQ&6W710H< zBDz3UL>I`4>yZ`F1+pT#KvqN-$cpF!=R(m1vL(7eR>T#^ig6lQ5mz89;tFI%T!E}u zh0tC-9ij_lMRb9zh%S&V(FL+4VnDX6LLggKA&@PR2C^m6Kv($1FVr@?``A{i5I&Q{ z;(XbfFI)3vYd)#coo}@P*}7-7WN$`%hKbKUrGUJ3HuA@s1F~h!0ksxu4meR1hxlXy zP8Fw%GsW5B(c)Z6EdIeAp*RF>i#O0{W}N}`k>ZWT?-mqk*w)6a66hlww@QGHiVaW> zVguC2iw#gOsN^VTu>pEU#RjNFiw#hV5F6-;*z!GFxUMJrCxHb8d82FR}10NHgm zTBj5tAnPIoWL<=Stcwuzfa*$|fUJuaP=2BXWL>m?tcwPYD=OBWL*@2tcxO$bx{PeE{Z_b?IY`=2xMIpfvk%naIo&3rziqh6h$D5 zq6lPB6oD*=B9KK}$f76$Srjwq&*UsxKsk#RP|l(Sl(V=7<)_C%Ig1uhZi`R9+&l*; z2X%=<=?9O7tEC$KQ4YT6#k&DDY+Oc1jgP2)j9jRej4$E?zu{yQkc<1JpGT$8WBWcP z)Mp}l`b?CMc^^*aDPNj1eP`3U;$*0g!i}N!c5eQS6~~K5ipN6VuYPX48V!9Hy7Oj2 z-)eqt`rm=h@tL}FbGD;?TLGo}^&hl7Q~CG=o$a~M_j{jPe?NO}=7;;UeNi3Nlb;*^ zPlP8kquh~F=%;;ii|?5_r?|2xMc<2BqJ9sx5x>&9BUWcZ(Fm$nQ3p|6O&? zuC(EuS(}&-{UQK5>K6f!U3XBdtVHf0I@8}wAy54F>&}$?P|;DXS8VNkzYDN4TgvNq z0Z>W(Ismfb)3Bm&wc+AS=F&-}g<(VW!gk4ZCeeXYvnu z=)3p*p6>3V{AW`)=*-zVb2iVWZGL*wgv#za`B83jWySaK+m@#`iO!!-d3WWR^_$^K zGs@ul;*h?nwnvM5ihGOuiu;QPiU*5_ietsY#qr`qak4m7oG#83XNyORbH!uD`Qk!& zcG`&FdF6v&K1CLnrAAQ>%TlIYd8XJ}p7Nrj*0}r*@w!kHr!_07{s*^)qM%*%T;NEy ztxNc|Z#5$iR5OmFe|o1~@$8&XYur_BZ&y6vxwf$@KJjxtPaOI@%iWTjS>n>-us!^y z`1(rOP#h`xo08#^{XSP=d$hQxxVLzqc(6EDoG8u|wV>tk1W$y1u^QJFhhH3$kH12~ z{h??X=R@^_J43yLPt)%R#T&abc1h9q?9RVk`LAcd$>LO~H$Wb$F&xr)WhRI`(GQ@b zdUd~g$R9H)R4)AhI#WO3*AV5P{*iV40NOs3vZ4~{{n61wb-v$JvdxzMA6fBhN`6m~ z-SMXU$ICbUgI`#57yL2^Iy#Z|<~JARug5?+AE_LU)KMd^6zTd6bgdr4uQN(9rl5R` zDSm}TDQ2n^Gu4WWB~qNJ4?+3(#5=n0`jFk(a@2T)tmrXz=c!=JF9iAZNBJMC{Et=6 zdI>4=JXS5oDCQR;SzIV93w5nu{PCNS^1raoyeJlSCmzs3PS#Z?(^AgMsCQoetw_s1 zFD>n0sD93iPoqUCesAdf?C&d1hI?}S{8$|=9tpLI^YhIA>X%v#hLH)gR4MX-?^z9MMe6dOj+#^?dX@V^;O?f+BzQY@^9VKK=?4 z`7p#%er4USRj&%YZAba|);sULtRLx*&{5w|?bn=);?~}g5Bdb;iEp<+Bj?)G45~}t zIF0=If4>UlcVo;p{@uhA#Y#P}$n?`ocqmdQ! zXmp){P&4^l&ASJI^Vn%hi%uIlUfhugV`lIYUXI2N!vE> zL(hVhEgWW4(v3vOx(E(ui*uoIUaw{p)myOX+3`%E92WnnnbEQ`TKR}?rO3@{Dmve) zDLP-oi*h#7p(jQ3i!(*u`XxlnRBC^nhf3``4N$4~ReP|aYx`JHJ@~6V z>*oA1r$E>4ud756*3%v32lC2lD)Ptt0$p{WuJS98elJt49!$TE>hoaLr(Y|#ttP#> z#B+=C_ib9J9{hGBvUo6gqk1rJMP)x&Wj|Ox9IUdN<4afegYAiXeXvTZt&FC{$kR6@ zXvZvya8UkZRS%*a+rv5XG(SRhXbpKZcS6|@SN&*tw&i>{$B_@?RS)A;1HRW+iW(TN z7Byb=;J3b{Xg}uXsBH}K;&{e>+wvbTZ^x^C#>;1)rjxFI#>;=RHrqTJ&p%X_@hXei zoNeu7yy|Ma{ZzW~s1Ni`Gzy{52@LcOphqmdUzb zlT`}8G&!1Ucw&Z*t~ydzO;x`)RVA9L5=~W!rs}Gxx@%K)*QTmOR(z~$D8*FeHdSSr zs#5qpKIxt_(L3_oiV*VLZ}Xvh;g?B~|5N4pRJFIM^4zbK8eQ&Q)Q3!$pVQ^%bon`5 zep=639EYaMD>DTto@;R|s$sJRXhrFFGZ>?9@)|XCK zZBJLrnJ&+#tL4m8YcWHy`m?&Ioy?Ta))|LYA>^$X8~J9=f_(FLyQmIl$}4jj+x#)3 zLH<~iM1A{A`7=}g%+?b+TQxabEqS(ln=RjFt3GGT!`W)dv*qDz-Tm3R`?GcTXX}}r zt!H+&p4r(dh4oDlz^8V|DGx^DhqBC7{(f85Hvi|!w_|nwv8rdY$kDWwRYfh~SksI#s1~?TEpVY);6jZW3l&Q&RD88iC1TID>eJjDwZMfc(L$AI zp-Qw+C0eKwE&P8(-HBEkNz#VlYcV}-5UmZB5YQgu@dAi_M_`#_--p}(wg2&a*>!w; z=ACL$%2+b1Dk3r~6^mZt+n4zECDzI7eV3nQ_h_8F#L}1e`6c7zCD*>WfRFVlE9{bw zT{sUHAr04&yUyL-DtDh~e;r?ai{{^Qj+JsB>*=fS%$uMV%rYYzz5kA+n{h^WJo_4< zkz-#YG=9vppdK`5fo!zm4%z6vc+{u%#zcMky{!LO*2B%o=@H293UJS1|NlIW_v0JQ`Ufk4CF%@Bu$>@Bu$w<1{WF*~uFluc-t@+e3d#w*bepYQjvaIz$vaEeTvdlXpS>~OQ zEHl+emf2=xssBcvG!JYSLK4m5qHMqnE#8IqAx+H0x+A&<`x+j7RF9B8eLaRIzw0QD z=|BTysVo^;D&s+N#eGPwNCZjuOh7uj=9LEy5bqv&kDg@F*wE;<2Nx-M#QSO;Xx!>9g(I>uZJs6U1 zB^YY0&1-u0IA)g>U#NYv6{rV~a-AMUqRN9$^r_l4@~~P2^00~oHm#m>%+E*loWyS- zpIb|YbW^)Pel!DutW&Q*t*IxVPyFf(`mP-Skykx6kwt0+$fDC~16gEV6-iM&K(?4M zK^CbYpgvVeKx0)s;ZsEbdigAVK8xmOk$4taXF2CQ=bY!9i)echZB-A98`^rhBR$mz zke(_7NFNmdq>1bv=^$rss|rv%EJ5FuN24>v4X8C)r}4TKYC*o)SNE=?gSj4`@YQu% zyDpiIdFi_Tq4v!Op?;U8B0aDFm7@2r)9=^OMD}Xtj9eKj>OmPR@`=0^=`3SK7RgVM zbeSoVE;B{aZzDxiWX6RzWR$1{d7=s?+vR#V4C!+peeR>ree}7HK4z)>RhzOu)L(Ky z^c0f=BLB$ykcKioJhOTYC%?o^pz{QkMO^22>n$agnC#WgwB@-At~}5)UtdB zohj2n`j{z0`p9&U2jnB4Dq?diw#QL83t273Msh{eXe^1PKh?FNHIXyY+54VID=RQj zkBf(K5z^N8krYue(qB}J{2(euEnAa`d?GeRx`~aErQd5TAZh|9iXW|LLbJJ|Wi#d1MRBs)_eN-@OSFt)STQq-eMHWv7A}59byM*(su9}n z0=2wV`lGsth#KYPB5M3v6jvjO;%cO=h#Eab{0+&n-vyF2NXz!SaI8&l#30?wwW;Gf z9+v-63-%60T8YCy*Z5%9C_0O}KbHpDkrN{6X5>)|;&7ycokCG-=G~BuX5Ua&ZNE^I z5sKSUo0GI@y^v#CP14RZy(6mk+~pH*)1bZ()uWh5RF8Bs)wIn$|;asIR!q3q{|nOEV+P43&rF}A2B&P zM@)|Nu@)5RV=XAsN5qaa5fdX#yitNQu{zYMc2Y$0NQy`vNfF5-DI$3!MI?`;h~$wJ ze?wCG75b!z;nDg2ho?m=)UX{t)Nw!0OdruT(noZS^f7yh^f4!i^bu(zecZ2+Eb%tF zuEpEfs{U6wz6tNb`><)EkJR4W?~Uy~tEQW%8%gj~K(fR#xC&pwb*Qi1o6+cXe?r%O zf6w5h-b0SeNFvS6NaA_O3UN5n)9(QxDdrzhYvvP?C(S1!Pnu6eo;06`d?1GCz-^~5dnDnEn)}SlP9-iolBj!g|ALU*l{&!4I@juejTOmkKZ-pQ| zz4?H&wK^8*EK@*FK=}gFzj;vB;Mjl38qhsWzJR z^)J%O8ZhKNE5VTWmhqKeI5NsflppmYUVh}56!{U7B{M>@WJXA$%m_)e5*105AAPQD z$Y0Onjq{As^Ndn?kk5@$*$^6~=kbZ({&B3o?EZ=LJkO|8V|C0k?fN{A&Sr0YLg(|0 zH>+VC)Bn8wAuG;f#d)kaj}_d6W-zsQR7`0YHloX30Ti9OCU_RizU^LX;SDyg5V zb#|E}#&JknQ7IZlayq1yY!1malZ$%FEG_CIc^v8&v!%$ZWf>5#AFbf}kQcBnO(9nw=~hosBtkQ6hINQ%4+eM?4${AuMd(%Jl= zx(1J#4Mbz$E?4edu3T?Y`9zyqK{}fUL_UHmX0_As($uf(F?hoG7 zLSB;7Au0Fq_I+f@>3l+>oDNxcUlNe?`$)e}-^uB$S#cjQTZg2Zr$d&Sr^8t|4{2gn z4(VgXA$|zyCSyU~Fe`_&H7kcSe2D)a(vRlme8NlS=8(?j=1@!K=I}Y>y@%Xa&CNMB zwjXmJdyEy2vEniM%bomHkIP0;`|?oKzB#zhHCE^^4@G)fMU3s(Ir2@MhI+^R6w>V_ z{xtXGm_N-up>LUcLf?H!&zehe%vWZMkd&`E-~5iXM5OpVGwecrVf3JWm%XBU$T~h; z$1bxxK5@0aMk}*Cj>&z^=ij51JXgd(ifk8mL(d>@9U}k8e35jSFY=ho7g-_mMOw*u zk>};S$YXL|)EBZ{)EBZ{bmhu+k#D{2BAOY5vOT|ofoivMUbJ@E+|ZXA4bGJFqWXu- z7iF|EUz9;^)o4fAl`I&=>9Sx{uhgR`_OUt?Jy*BNQuJK1Mikxe<;dusCr8Gc(5eAB zGP*vj633^|tgNgV%_z#9k?k^Qq`3?lWveo1r01ae0_ir0^g*P{pnXE_AhPTmY3FyX zna@IPTCtBjDUU{4*%uo5VHA7KUO9H}_j}E#{ZT9$$J_Rou(Hj!93c&@YentLvXKwv z+Q@IRY~&3&HS)$d-tbEtR?BJ4uel*VPx7s4)dWPnWSS{MJu9ciE@Y9lugHgH%}|?G zv?9;TuTg6p(z zq=|eSX(As-a^>U5&+>63R}PLOc9Cc<&oPN|bGZtM-aJLN%hQoWc{*xOo{r?o(2;Z* zI?_Q_j-<=Pk#w_rNV+}dk#zHVNR~Vu$uh5p{A^wiNtC~%@0yiEXPS3Ie>LxhG%@=o z`{GaeK9VKhN3!JmNS1sb$&&A*mgW1XW%)k3`kaUQSH6!V+D8IOl=~xza(^UI?vEtO z{gFhuKawc-M-n|Pki`DId=ky#$t_7#2S5_d>iTn{m%AoAJWiTWz^T!D&u3(n^@jQG19!RgT`C`rjBn}y^Qql*Qe88bpq+H zI)U_8ok04lP9Xh1)|x$Jg&GC&oBu{uSoew-VOyDamE)W6F1!y}p+2RVt9}eMOM%eMOD!YFEhizRtvURUf2-Y6_Apl0Z7h zm66qQL1cTMJ-EY*(2>1jH(ZCFXd(stQ4|p%{XO@P{+=Po3inrJg*y$h!nKR6=&znO zqFG@~AzSzxn-`lM{#%6v*<$t+*{VSs_NuNRdsSDEy{ao{#Hy|!dsSDEz1}~>_MRBqRacPh z&1TgV$81+!K^{<7K_gjR1^Gc;1#d&%P+dXZI7%<8u{d6Z&!Kogr3Ll=QG9h2U-^A! z-e)BbXf&GnMH>387Ax%ag4O28 z16G)$@0uM(-&H?Bo>3b?t*M0cYxG6c{diIdaZEci#V86@4?$AYLy)%WAxNTn2$Evf z7@I6Qw>JUK^0^Ahmx^nR3h$R9xz>~SZwsg!IHrT@0n$MY0m(HNjM`T>K;JU|i_TOx zaD^D#>ISGCbpzCn)yPO&yUimHx3}@t6CCS1nFi`R^#tTAbHvC$Dha4%H3Z}nH3T%? zuG5<;3H@6TX6zhm+4^MEvYB6`vzcFXmO2CS`EA-)VQ{R?yLk96BUa79C+t#lz;Vbf z)dnO{g#qcW&Va2o_lo=6EAHb-Gsr&CvI+xgQ&j=ADF;IqsW2dmR2Xm>l4#{HlB>>u zu3T$|k@w6XBk$cOZdY?~OgEJWblsU*MiQ;sMN-rRkl)NQqZZ`#=)2YqBF)J|?a230 z|C)V9tvyCt6#&PymHW5dh>$nb0Z=>Y0H_^v)2JPD)9Aa_EFv$d6`*shn?+Krj76UJ zJ~EOevqhR)?~1X<*DOH*{0dyZVygD>S5-!jvUv{FOxyIIrFeNXiOyKo-v zhKrCV)f15ZY6wWW>cN+)w&*W41oV`#QWW)tdV;4ES!xJKmWlzoQdA6(r78w!bg3Ai zepfL-cQADWRSXt_sDj!uu!b9@_ahFhT))E`jBsq%ni`5g*0 zPv{MF6i07Wl!{_QbqN$P=@s;JQkOta5_Ji*#z$QOY3pr$^md5q1iFWr!ADl8PN3^a zbpox|R*^t`s3L)E@g^+tiMj;J&aIn8{`9spzJ|Yw>JR9<>JR8!+p$y?!ZF>pYb4^2 zq8WeWH~V2CtB289y+YjMb9+)Dua4qXbqvQ=Q??yWy^ZUbSFIpHUbRCe^6Du5RQGVq zV`?49OQZNi#Y3dUBJcB}HmxZ^ZMs@e%W5DdqAwjLF zlc3hrNlzNNC^*mu=5 z(D^DDNJA?PkcR3QNJDiD)TT8CNJDj7B*piUo_>W7$+DXk(o;19$yLoj-&4&%a#b^s zT&t9kT&t9kT$N%Z*Ef+|)ejj3iFVLJ64gVHL{$;=J*$+F#J2aJYKdbKRZEaWRcR#A zcaTI?6xj<|>L*B+`U#SyeuBQIeuAu1KS8q8PmnD26C}&oNS6AE9LYU!KQ^kOI3`yW z1<6%KL2^}5P)n*PNUkahlB<4#Bsv30v?3ZGL(=WRg}$rSAy0FTeW7G)8zC#~qJ(!v zdmy1}L_Gw3%e&in6W)gp;Zsp<1lgiOf^@V02VR7v*y{pUMY}Sf^HomJ-P;OkbhWCM zAS=8njKo`us>*@vRqH@~t(t+J$Z8kpIi-Sue6DtaeC~h9KQdILvm6d-D-T0D z%Wsh8B7LO4C>!Z7dPQCpU7~nEbcUYqVliZwcmY}DNsBBpma*yR$f|GTPjv>Qp*jQ7 zP@MtkrnZ3eQ8!SnAnQ0jw5Ob7veX3deaKg80!TXVp#MLPm(&Lw)4^}KBI#-c$UlD3 z73rXEfc$fut47^G-Gm>!;f{1WiEby+?Ie9_?=zp%N)I7FSb2_gP;Edus5u}VyvdGq zP=7%E;(d1B)aJ7O3$)|>9o^@>!;X5vJM1_K>8!$obT&7PyiGHtx%bvlzk7QfdH$;8qjOb< zkQG;z8zNi0!;WlGHA1#rMUwEJ0Cwk#3)>)V0*uChwGCyRIS`*S-eF^C-FGV`5 zFCjhEmym{5svr$jnUHR(Oh}@44UiP?6rg*KRVzrM?;~%hH6d@PHKCSOnUK}qc2`%` zriv5#M8yeNcbC3XeR52PyY!tJlw*CT28EMw8XAXp8HabdrtT6O+~uivmuJmgp0?J> zIP)NM-QC5ywyU7s;(X#7yvsGH#^sp3)(0RDvkiIJ8XM#Xbue`2_pUwiyvi8zjCbu( z8{V}?{_(Co8Wq;(pexiW9W*NLs{VnmVe_7`ahLJ0&gO~2pXzMLhxfT#sOdc$R|dERYu4sRvDqYgz6&ljI~C{Gxh;M z{;}=|`R5^bY&!!u<{7Jx%umqMH&O3+3kJzmbwsjM9np8a^^bh`6dyjthw6|%;Q@M} z)}CUQ+M{DF*Z}~w;Jp~+|5bdxiqBW^`6@nNZf*9kbmY0!aVo=&w5JnEv(+z-egAJV*cM z=>Hu3pQEh`s=v~$y|bs9>X=q`6+nGqKLIoz>~x3vMXeS2Q^gf&sN#zH(>?>J)#voP z8mwdbTk(ai28zrQ^iastltZUq{1rysB306Oo#=XGmMs zW2CbcXh=_c@FFWzl96XrkHz1P)sT^HYRE`8E6`A1t0yC^)RU3-)RR$;Z>s>;Yes>*m98VRb(NLy890xfNWG-Ht)#)t*ZP_wEZV%{>nJ{6{~;6 z(qH9?=O2BZBo z)qzoLs1A%G7j+1tYt3pRq^;FNNL%+oq^(`a(UoE+a(pPNj9D?D9hIy8-3*m0$ETqy zPR$BkacWk07v6_j^QOO*2d)}*s{S1hvuKX#qe6wgrA~#viv7D>^i_94BVT<9eM@CY z<$~W-iqM&=KuCXgRc!ZEeW4D6&R2m!KJV-Ce6F62`nInD^Lbw}rIor3lBK$ayseUh z;?U^*-Or9`$gfC4{=lZ4 zBXu6+TXi1PBkDQGd&lV)&m^@WR(K1>H~GO@j=oyd+EPF9i8j?tu$}L_>LmCS@_>3p zUum-X!m*arB9JDk4fJ!SCm;H&j2qb{%f|LOD`d*Z+cIJ`EZ+7eKJxi>?#c3E$2@OG zIOJ#RF_5L+??4je%SaRNcOad;-+`=_FC*LK%g7e*bRey)%D{ElH2hJ=H@Oeoq<`he zKGCx5_&8ax8XSE*>5&eyNF-NQh}x9RAsc0I=v%TdbbZOfQ18gC)b%z)zLF)O7UV~$ z9r+RRk9-G>H~9{dqD9ocj0R~aXF-0Di6Gmpi0H?kRS=H(Qx1YWAO}Hh%Qeuq#5c$y zYaY;dWgO^RvJ7N}ea4U#@(a|COaWOTQ$Q`#75Popfb3f3zPhRi%`u&25Xe#)1kzjv zfiz#01!z31>L2ohya0VmB#%B9lOvr);7CK)2GZmu?TD)#`<93l*(LHs-x7HuyPSvY z5_zK5M4QMK(I(Q$x&>s52ou>N!bG-syI=j+T7D}N(Ec>ubU-_;|5;BuyP*23^-^e5 ziXriBDEbpgqPMrjhp5hLbfVo)#fNwnx|fI#(Y--5h;nXmAj+=1r+{CJ;y@%z9Ej$( zMT2OkRPUdl-5kA@fLb1;<_&LU-&&#k>bsjJTCqCxbn?%%%}kLE+|gzFr$ zhsYMOlbHinh-y$@`0bSTn-cAp4a_U>o|!w;k7ngiYv$wdA|zdGgIY5ahkR(yBD-Sz z85$>_(xy1a@hId6`x+sO?B<2@a5vl!4?_Bw#Y4Sm77z8HxCo6XduDhuN&D6tqh7GC z7@cos%~~X_iGNUQ=C(Y)`N29Mq`!y=w?kHli;(`-1t9%JMCkez|KNv^EKv~BN)&{o zyR#rY&59sDtGgr3MMr4Vsq7-ptJopWs}*6Zg|P9c?k?_C+7un2c03bYVWgWsLVq=L zgj)8FFtT@zx|G_9FYa;zP@r66xu4Tf5CKgFgQ z+s!2*DQ1z76wwi~*IW`C^xZ}J&ODK0R+u3|W6%4rI0^Ngc_P$n=83TV)(A_@5FtIy z5FtI?@v-?%--*Z2Rc6iz^`JQ;WQ92+)Pvr)MHZPqLj7X?2wkCOkyOu#ew~dqo=rI z-xcGb7DRfe9WfrV*L(;1T+D{rHy?p?6TczdL~iJOb$)E;^Nh+ovQ8|A+7Zj)B%Fq> zTzlstDeCa(DWe*XdRzpE`d7Uj$rS;jeo;S1I*91{c~j)i$r2bTk#b-U+jc56e*q57&3-cK~dj{c~0tC?z`%QsI_%v zOt=W$fmQ#|{a?io*{iaLgQ7i@P&;aRs5Lb`)TUjPa4*!d-)loUh`5mVL|n*T5f{43 zL|jN8wLauAaTn?xRX(Jr=nHv6^o2%?=nGw6>U*e1RQ66%(>tksXK1CSx2#b$2#2BH zvw2%B+fTtKo7MiZeBm5bJGAeJ8XbE6h{5nQJPXZps>PvMKD9V(tr7m-RHz;6f^a`1%dbh`hma>lBj`;D z)nR0p_yp;u>VkZ0Z*t^YQ3~>{C` zU`+_p+0z_prFM^W@SH_fd!C|E?HPx3_KZVkTJwNBqweAD8ou>(L()CDmi0H9 z^zqC^9`npa8hYj;i|B`>c;+G-J#&%Hp1DXjGizu(c=95Ddh()C?a7PUHam7&BV$45Q_&3as;4B1 z@jV~WeZun*T_tv5M{?!w$hY!$)V{sZ(0&H8cx00-9(O}Nu@)EE?mcDHN1n4tPqQA# zx2kW*8&>Kfo$V2eJa1oBq`CPK|tpFz>tvuzC-@MC& zv}(^bpE_>)InhldfVUxi?7@RPX-zNE#A;rogLxU;4ryW?FVe@`%E+tzP6<|go58{M zdy4clkAw8GnipxSYKi*Yr%2oWEli$N@j#vwr6A3%=0%!Y$BXOG)hdR;W)a_tWRNBz z7Nmp929hgQL0%HEAX#D+GGtBkj`ov$Wk>8bUmtIpfO|ZE7D3G1C4eO9g^#vKqOa=hvbU! zkVGq5kwmLlkrcHK)V^8=k|HKVR$HNp)6f;?7njgotNl{7-$QjwE9+O0Zf4VvZfYh- zLr+Acr(a(}{a`IC(p)Tx^tYB3T^H7}B3rCwMHY!#(KTW%EAr=6#*ekEj+@nddsUgM zs@a>6AFlJfFr(*~H&kzsAI#sO-WL@ki$uamTX8SaO~i{N-o(#0Y5ykeTixn&?cbz* zk+5U!-&9VA{3#wr{dMvk&WVZoQ5p5YaFuCFKr`BMdrvxkvXzaT?W}mKXlcI(vfvmbt3D;>c}n; zJNll89oc2J6kRE*ZRk!blD7i_DWY`L!c(k!N>4qdr_7f6oaW+oq@mW)cg65XA9JRs zk*XfeSJpZrUwIQ8dFeS)taWtUg~rBn;-%-@d7cw5S^enqgOFFvcp|O5?TmCYJC1a- z`Vnbp^&|3|c~ayzs~?fyj zSq9QsmVtDZWgy?u0QJ5s16d)F>eF#(-cS5yb)nyDRGGoM&}e0eXYgiGWaMoYzri3cLVtA^Mc;B4 z#h0S{9v+7$MOh>|Uj-PQ&%=JdL48C`5)X@JhrK!D&F`&zzEyfU{uCaEC!uIyt6Iaa zMKigmwL#g7?}}z)&yzRV7u9#o#@Zcq6lz)Cj@O~J*y@ew^POtL4yuh>GlPkC73sU_U=jM|ac;6->Dwli;X+z^@Gk=%kg~Bn=(}F!bPZmMM+3EPfl!475cbt>{LsZ zxXxQxq=>|j<{~2WiAV?S6~wwYR6Y zCTDtH(!JFcP~Ymmh~z~bM+{sxs@vBv$dc$)z58D^4&@Ow@-Z6 zE)Yl`D^id|aT|K_nEgRAtxQI3svDv+?GlOYd|v9}pDy3BZrLaL&I)AIPM3D99&@ZU z(GO}(9Sr&3)4{J0`IguS{nh#w^jCWmqrB?xe4@(PXRw|le*c(%-bWv^RNnv83y1Nc z`j}i-JDw)U=b{$82#p!FGUR!+GNiLw8Pd&+66y={N@x_RarJMRiYpwutCEfS#ghnq zON9!3OT`JD>8XUIt0^Hrs41ausVN~ZsUsmjs3xHvQ9(j}FmHtO#m~ zbs;3(Ti&R@)Pht8Xkz6IZick-+(cK3N)fs)%y}UVt)judLmJwj0N;mg*8$pk<|3Uv zbCKq1O{fP|v5_sJE9677X2?1#YEYl5N+C-jm8nJiGBn zQRNERYnBb!rCNnF_moF^(jMvNxsUWwvqG9!n~5~Be$ebUDXLPaHTI(xRG(DqNmNrp zvdkuluNR@es*)nFieSSU-@(K#Bu;s>OyN&u22ia_3z6(KK)C`7f+?Bg}l%KV+9{1=*#4u=%@rtLb2z^#53A-44=O zT?_Sy>K3w5bqn=~8W$P~DqUzKh@FsJ`3!1P%?h=kPKC}CQ=xOzf{-UwY>@5Obr(eE zi?Wc7syE0wvzbVu*-T`S*-T`Sd<01`n~C%hvmv|WDaaygt&v=H8zfN{gCvUXklf}q zzufJZT=5=~sBVKKn(;Kh>)2c;U+YbCnn;$&5VfpIqbH0Rbr|GBQ6ln{$Pl$7GDNMZ zx}Y{iiAZx%B5Ge`h%8V)LE4HBk+$k5$UiD4#>AVDR%#|lA2ky+lGRMG3yoXV5~Q1X zOr)D?3DQut1ZgNDMSZFsg1o98g7j1mL3*l(AU)MUj9OaRVGqeQr-|g+TMfyTSEH+5 z%>?zPNEpc#4JTZx$6jeXI;ey-Q`67s0EQf z&O`SH6&TdBB7D>rB79_>2p?G|!biPBd(`71e5Ah!A8$jpi}R7~;(Vm1I3GPRt*}C# zQIm0J1@rw6BjC9_b^7N3E%m zq5PT6s7+BlYFSi|uIzDi7TY^k&lBOJ_Qm=AiqA<}o}}eTTArk3Yt)_Ns`WM{@~~B2 zI1TyGo0Zsw^N>&M`G&uW*0Cddx|Y$mWH(3$ zJDg+t+*ph@@YTpV0WQ(22QERdxq^I?DXbj7V@GNZgpo<(|g*V|{ z$Re2$8n?0`WW~q2;_X~R6Dtak4(9!l6n86hUC4}33-;hby<-n9)H`w|q`7+>`mX)M zQ48`TBv*cfJRloF(&awrTe2Q>-;mvi-uTlS0jM3h3~EQ_f?AWaAgyF8NH^IEk|kR~ z5>;D}=KhAfDnmi~$W4%M!$Kv7$CbXGk~qdt{OE*!+!b7nvj9UPhwbkR1E2d1UlmbH}I!^Akvl zDk#!fWR9#BlOubZ4AHn_|0NDbEr`QWJK}I;wV77*6f@I`^ts7B*?g;GKDo)2;_XPs zvyhkUGK6#%y(8U3??^+@JF>`=9@#H?NB<>;N7{ohqe~2rJS>t&nwt+rnv3U==Hhvzx%K== zf3Z4}B@Rd9K@@G2kSjuNSzJGEM97Xw6dNO1kMWPWMLTV2)7&CzK~#*s^;G{Z>)Q6Y z7}!|khv)b~^lM!5k~kK%DMm%@h)6HXo@r<#h%>PZ=b`r3X-!qxo?q@`YRg8v^Tm+J z&tgb4X2g(a%!nb8bTK4)Qi$`gT|ayxhD0{15+glDkEkz1kLb=Odb~`mh&23}Gwris zS2DX@su<%i6jk}fC~SWabk)Fe7GK|Dw+8mbWta=%R&Kbp)QT3@~7L8)jC>D*Txgi@xZpfdmWMs8!HquHp8?~&CjWk!gMs14Ckgu$_L_Kc3CGxh~HS)G!?M6N{ zla9u%-~L5crN|BGZ>1%Y<-Kb(9;_Qc`n&re{l$353RQ8Wl~tEWH#@1K@!&W2kX>r# zxEaz}WQer24io9DevZ@7wWErTU1-=^EvQZr#*{BYWZ1npBxDK0*u0FpbgX|T%B1=`{k-e(%$Xmqxdf$SCQB1^@($WpN`vQ)&2`cwrTS*`Yt zthRO(*`?l&d1lLPq1k+to-1 zZzm)Fc-t6h<$YY_AFE-IhMuX&KVod8t#zcxGu8lL)0}6lCdJo~PrTE1Rilj#W&w~C zPiv7YD^8=cSlux_%>^Jm%>^JmMeNwVOE>j@q@ne9NJG&((oOV^`paB^wJrQ?Jr2^x z?0}hM-nI?}`Pmv13b zkNlv*kNlv{kNnV9+o-NOHa1v}e4_r3`c(ZN{ayVZc}D#oU4!x$o@yk0%A6XC5MAqYa;B$LmBA?p>6G@a4Auq{{kZ0sa$TPAe zG%92WNTQ4hn-sQqOB#7n4u$lw8WYKqL!s|l35k4V9>H}>Lm3vb{UztC@H^&D6@DwQ zS){^`G`D6F$(4UyRs3hvi2|+F<_Ev6gKU>`A+5fr9q&^+HtJ+yXw<3gqfzI5YBcJs z>OrGUzJ_{DzJ@$0Uqhahuc0v}UqfD%uOZ*E4S7kvhVJdMHsnuP8|r^q8}f{-4UII_ zemgAlj|}drGB`T?jFf-sTC+}lqbQHF3-hcfN3&YpC*GeRQ|0+(~j&3?dv8>LOTx))3>AYwtMtpNQw*ywJG00ZOU}eh!{t6IgVo*j-%l? z8jj2JJ`vrFqwP3y$K`pSXn$NjM^6~~q5HHP2T2^4pOM^gEE-31Rekfpjf*<=J1NK$ zYTfqd@=2FZRHUzK4EaPBgFca`cn1LeVzhZ>ZK@LEBy69vNFISSlr-tA$#SO`!4MEiL?SsAahWYG1y9q*%>{o`}vsUX>#t zo#hBfqKp7ZlnWqe?wBl=h)ik6Ol0To+uZcDVh}r&_V2q zbWov1W6&BBB*FVlNN%et`ftZ<6w@LbtrD>gK+D!AqxMC!sC^ME{vEPZyox+0Mnw|D zsL0PERb;ih3DQBNigXaEB27f9Xq@zWQK&qr7>j;L6rG}$-J7gkp!sQZR!??JD{(23 zE*8ahK8a$^>qMBSP4OhMS0st=LvqEFNUj(XX>08vz72U#Jc(Mf?hm!87L8q~eXGn+ z`&OPHDI!m#xw|d$n@Tm3Zk8UK4r~#lB9EzKqY>55bJ9oDibjh$L!5;4F)xJl>1S7X zQhba0SN$Gos9uhI>v@3mRM|!St4fOWRGUP)sl6fZsj(rysahdD)rXLteGO)wcR9tYy`HK9n)F;AL(rM4)V!O#;W>1+unq% z@EZhZJlMwo*1J&AF|zi1nMa(8<6cH9@H!LPeA|W?J(p4>(!AT{JsFXBK*Dpu0!L*8)Rsl$fS@r zWKzfjGAU%~eJu3`nPWD}p^z=!8bh{tYYf>UlR_5Bp^z;!Mpl>&L7&N|kQMSNq`!O$ zjdPh4(p)BmG?z&s&1FwWf7ui2HQ5vDwTIXuGji-&mKh-{tx93)*{gXGF?kle@gwVcIVoz~RqkbfaP&6lA& zk1Py%Uhagnm4zYC%fFE4Y@2!}^wz>)FY;_aT+{_nh+3Kd7lC7P2 z+OfLHvG2MP&^fy~$BHJ$K40V$zZB`1{(Jf4@9F`ON~6B^OT$R6H#?BW-j{szU3-q9 z(R*07BF`UIB}BwycXMGbyM?WTQxDHlXjyLs1KM%R{p4wt;M4<{NTP$69cA zM(uc~61CIs!^ArK5+S=zD?d!(&d7}Q5HV$?@wVNf5Li$Q(leP|IsTg;ds9ptU3ZBHg7MV5-Z zDnFGc3_@1hr46+s>qPCyE|Jcja4L)bDr-aiCND$n%eIi7>O;sIvMQvD+zYklf5-!3 zRn(414c+ZM6_K`{MK}%hkvk32%E(3D<|k~{(@=XzmOKdgLGE*tc@uxrj$8w^;Q5Vo zlQke4{iaIBHYuZC1&3;VlDXg{T|#pr{+^FX~2Zino#GqHff_cpGW%%>vmb z-9*~xyP_ZYr_aTfNTTQwc|e6<5Am=V5}oOd0OV)!B+^q$JR1kC-p8_aCdx3m8xIG%tW!HZOo$7JuSyxCr+` zcNp^m$TQ+nWS6)U`A}Sn`a)caG!&Pjei4x(4~R&SSIr9`Z-`5gPsF9jGvZRz59S5X z_pI77``GxdjzxF3rP*cCHG+P_&1@9k$G~SFx-(@4(i;H#G-X?0ZnDSlmFb<32 zVf6@~h>FoVoy}?=oo{UzihM=OI1TOEzLggIHk0E;s4gy+Mo)MVHF|Q2tI=~wT#aPe zjUT<&WaSvDKgpNSJwnutuDPwU9%Yl(jG^%;4p&v7vuGUY%)=-a9@O|jmJaHPgLEE5 z=RtIqU-^W@!M|;;>sUOG+o3kMYwW4r{1v`04%5D9-!W}P_-Z@&e>r*&}LyTw?{*bz}63_|sauckSFT2I@%@{!NIJ%M_}+Y{J@yy_ha zG_Jfof%Mr)JG1ofEbYh_)Wt}dm5%6qF~3Tgks#(r=ZN-^MDH@7^TqkdZ(aP>#T#ON zpYVWLBy~4!$^uZ!vH;YwTmZG{eFxO0ya2Uh?#XY6`j+<{{E{fEz4hStM9~}HsITpY zgIX|S<#$HWuN$cPO~Q6;B-qir-}TArVaNLVzp=<$5~_s8k~hTBSn`YK__O#Sws@1m zQ{3m~#gJBJ$8bMn@5gEzX)F6cZOT57K5d6q*@t6eMh=2BGi)CwAnG7)6E6?*8J z@@@sXHf1QPoU}FjhP3^Z-to4DV>)~10$qC3Hiay9rDBH_`w=K$MpQ1Yg0bu zxasVQlU1RyD!0N>$S2nLAzQ5RLs#OLjL9##68)~aPxeCn{-wqsvRaOYthVY8SuJZr zSAkW3$ZC6SAlp6fkky{b$Z9i*$Z9M7P`{g16jQzl^|<%$aWm9M@G*J)AG?9F}Q6jBmoybeFPUI!=BGOaViS(3v zqTZ2vBF(MzL%NxhMc%MK0Mf+XOGuO7I~zIX6LYor8n!n7sbhI7`mXF1X)b$3-;%MK z-EqB`MMZuyi;Dba78UiNw+4|9y{m_GHm`~#npZ`ddv6R$H@k{_DE~!1lm#On%7u{+ z&8s3Gnq5Uc?B4}pubEafw!IaBzl!Ewku7Fdk^WY%qkgwC9qDf_73psl73plY6lo=T zMq0_rkydhZq={8LNP52phYr@)Ab(oDg5+8!f;=XpM;_}}M(~)`0myIieRSV2mx_F7 zE*1Gu1pxWb5z<)&0O{P%z_??WRX`)bYyh%FeE{jNK7ce=Cr0|K4H~Mnr?DFq=VeWSw^N99BCo~MbbUrkX-jUY4?j!3RKMYEibvQ?Wo{bkEooW)>KYVU%ce%cu6n3 z#M^2qK6i(-y8@D~x`Mo6&JKCQP7BEMsxHVUsxC-dwF9KHc|Ft*FXb(yxtTuH3op5* z{L-Ie-cX-GV@7=jyU>_1--mQtM=P}&$L=}n^wc`{Lwhp#M9be|m*2H@?0oOvB5l9b zzq>k*_f#s7ZYnuQ2bCP8gSDN=S1LA0A2kis<0>}DV=6XCt~o?BqEu{<_f%|Tz%3p-PqA+uT_i&FuLdLwr~Kqb$W)QPstcEzVSR zaVL5ks&J^W;C3kQS8qWrSOto*6V(+IBde>RC`nxfPs6j&GhbZ=Jrh(^&>e?VbRDa! zpsPn+1;2)RTU`ZJhE!LOwyGBPo2cw)^~@|U!BA;eVm7`Me9-V zFckUPZxh+2DuQ%Y4?(iV(P5k%SB1nUyre3EWT}dvc2q@>XH-Rye^f<~e^`Z07XPS+ zAU#z@keAd$tp2CTq+$%DgLze?gK7zCf0Fhmb>vuUleDH(n6OOy0p+mLYH&RnOdVm z2lW%wn)(T9t&8{6PaM-q{RC;HT7p_oEkP~J(}Hp1nCDeaPzx$2=(}cA(Xkm-bnKTS zkjM7x@94YcTRqqHh5M2Bt9{~~L?lsd1UJKJXq@<^38cyUx-*CjNIA^+4%6d@8Fh!T z=rFy1n3nxQl`}8G>yUJBHKLY3M1S=b(FR-8TTt)YvjUAPH5N3&)mV`JDlN$Wsw+ry z)fF`M+*^^Qsw-$ztE(XER9BG4tZEkbkgjHerrbe7-o9(h1p@`6DyOEK40Q_^#{j1pu&JMBozi^yXOb8T2%pAt)3vB zdlQmnP8rEkL%>l;u3h`kb*6@ZT{sWj`Be$fXi_CW{iRBPv`{5LI;#>O&D+kcDg%!7 zoyq|6kIDevhAh$wvPew;^`n{quES=demttTr$w%`@@^oKs{(+ec)p@ukmHMSc|*32 ztdOUpZ&?M6z9lyo4fEkL-!kv)m=FEx8uFoEQA786xjbsw+%(c{S@My8%uu7AwPzFZ zkJ)PE8PNdp$ud6q{YykXX}a-)nQLU18EVvz{jbo_M`ZwMr80mtQ4K&ks0JVps0JV% zoPqk~_ipQs^^0mi+X>sdUUaZR8+pkt(a1k414t9q0A!yv+eogtG$he}y{O;S2awe& z1IQMY0n~!^*hq6T+UP2_)>;muzvTO<1$jOCuFM_DwF(-2tKVb5`SNJgvaDG~#8MeC zx?beMNH;6@QTy^-Btf2wEEUfoxiVbTz8qGrH3+pYV?~rM2dTop-?pQ84}h^S4o zb4XiJBa)&9kJ^-nqSj=fsI}i2jANb=58|Jpu_snS?TcuT&SC*8}Ge@;x@6@gcpi{bR2@6!pGr6kREH_CxynO$4OB{1nBj@>67m{1jOs zOGUQGQgI&YcR4A#Ps&M=T{2VDQ!-Ozm;4lsfB7l$wk#FdXm%diX!aCY+AOqU)-g-1 zm_>I>ZwMmW{bB;H!*8MM$f{awK5-W{GmCVV;UaBixJX-hF49w;i}aM|BHfzbWw_QK zYtwpK6k7Y5bL_3(ud9%6dLLEq%QvwLjR7l5(bcq$&T>!3yk`$UWQ7bA z`OsFrXBr`>t%S@5}GE=0#%oJ%TGevzQGetesu05HlW1~Z6ipHwU6!n1huIL-`Q`Mn1PcjN|rKvFAp4;-T`>KZ^2GSGaGPVH^_%_aHOpq9JO!tGLmAI0*X@Q<48~WIFde& z_pD@gtY_usNFTX5(#nbjq}w>Uk?NRkGIXS&3>}-EuBS;fu~xycbEX;j)+#vW?P+`~ z6L-w+X|;j$x01p0?2pj5tcylHB3nn_lCz`UvCaWq9o9LZt3yVQt`0j!qN`)4?lx%b zSwW5Dddn4!RoOj~F2_d_?HGw9&gvhMIEzI4Mmi>O7KyV+oJFGgfX|H+RRSbktpN3u z`T)|Wi#}cSQ7iBXeN+sPKK7PG`luTqDP5#=87Ez2b&=IYRu@_B#m*$Li^O>(&LeRi zS@X!6N7g(x&eO7rfoOxCDh5cO-FRR(9NN<47E1%v+BknsJ@}H=o$=$T9D=Uxc!Etz#qE6BmtM`yf5kGf7XWDjA0-(|IvF_!lO;rWdM`{bm_K#%;>KAJ{kSuiubQP;J zpz)yEfUe^98?vZYmN;Llp_6p^60RS?d;%&ekm;&DAB4f7B&V|EfzMi(1sKMaQgDoj`Y8)d}Ru zqx8Gq5pc|_R?DNi=yCe%IM%6J_(ZF!7Dyje3#5bE1sY>27)Y*_38)1t4bXS3G(g`H zx5+N}Uj+mCUj+lT;Md@h=a=!eI)-B&UdF?!8IE~aO#^vYO#^vYO#@k>nt{CP?Qdj} zng-IX1oXa(oJOp>1NFX(oK~EX{Ek_ zv{K(dTB&j%kFf!1rLuu^@Mf1iT(qoefzGwk9%-T$f$ekWi;~f`tO_B!8-&hRe?aG3 zOMo;~i$J=Gu#vC4e~rFtmLJ(`t{;6%ERL*DsX(@v%}2d&9v_VXJ4|2~y86uNBd@As zASwNB1pKL{f$oqh8%T4N4WxQV>+mBAi3V# zK+@GZP^)Sk$aYeZ6l;^wXi@P%84tOJfmiU zG_)=T>DI5aprN$@NJF|JeavT~k#BYmjdnE_q?_sriptbjP!FoH;3V`cFxP>4(+mUB zT#X;;uL_QQtLlRE@2iaTS2IJs+1I7`RThf$m+PZ`l#wG_7SY8 zy1tQIR|&R}(t5IaOUr5$NOSKUple)R0*ycw3G`hR38b$*i;#462_)T|I~vKV5XdgG z?dVKz*P{Mai$EHxKcF7*yO5|C{JH_QbJ$}pUPVTqzEp0Cde$sFYC&}ZdFdssy`(k2 zZs3!7=*eha9@%1E9!WF{kF+%lkNm01fvjsQ8_c9T);sDRNC)rLsuruUr>P__xybX=6R!3{2 zTz$hQ`dWPh#Rlpd$lg}d_!;YdM#G=c?PqketI|WQ1EbH+wBWbZ9`f62$T$DgUmofn z!DD9ay`{4ex}$8CpV26m@1vUiU)87HoR?Y3YS9x|PWo7PkpC;n_;68_k)cmyI*;X3 zwTJ!E6WQurPS>PQ#LuYiE>1@J(B2j6yCPxKrr)4P`h2SKjIFWtXT-OtebFrPya*Oq z-DaNKlQ=h(;*qvDUE-HMRC-s?ot?NfxLh*6QfeO;JER?MP)v?dm5D>_9j*mnqd zOuUMEt-U!WYIV$qu1TcZNsV{AIcQBJ>0VEk)v#!+iU!d+;y~mdaUhZ<>O-Cp?;%;P zdE^<9p5MsvEpZ)^<+rO)kBIb;6l+tlozE_@AKH1yY!uSj`%6f!m=MYJOEO5V^{c2C zF4GHEu{vg{U+_RI1}}$*b;e6?H_5Y_K$QHc_N)vnvv#x^_TwYpyU3<}iq4Rwq9k<1i6fBJ?pVls z;#j-b&{mAvcC>=a5r3pd*Oa~5b}mOHPo~AbwRc~M=Ntx-t47= zhzog4tc83f)9_!L>8eiuz4&xod;s=tTfyP_E!w1cv_5)^Tp2SI-o z3)!*Mx6CZqvDCXqYV20!I!B!xeP-PnYG)dW*0A|?dFQBy<4(8;oo_!7q@f53ov)gW z&QX6xXU=k_YV%X|gwNH7Q41==I0=0|&*!2qnT)%#Dk!QNip20Vya?MlS2>n*t6rij zzRk{x(4Ol1{`$GD5gdi=66c`5stqEG#5PElcb(8E6x$%p#Wv`Cu?_N=`X2rr@`=hG zs-cQ-Q16IykQ5OPvPhhRv=Z$gi`wk6_}+2TNB^qSAs>3T2<;mr{;@ADxoUCfd~1Y| zhGH0WrZ@yi6mKAHMIA_6Q3uji#R+Mv;)L`Rdmug8hV=0^4QkoDGpJ253DVAQhNJJ< zX$a}#m$y;-=4esN?H8NHDrVgEf;BKmiUxqy2Mq_W|)4|&uNTQk#I^UBNS>d^f z!%)j=GJQtv>Go9m(ZTu?Ym@2VDTdnjjsw!cGsrBlHa%s~`JN-l1D+$u1J=19P24q5 zkE=+?##rIri=>OW*r#`_89?oLvmO1-J?*LPywlLQl?!7R&coes5$=V?wk-H5d8<9b ze9K)CjTZMtRES4WS2W6($jqs^@%(b=_wCI7P(s@4|qc0Q~AKWIhs2)S8ks& zzA*!i{<>AVp|=vvR--*W%~Ru9Xs<-`(b!tBLzsIkYR5g+u4j(jY0+v>GrVZcse7+| z(0p$87QGQ=e%6`~Z-SapMZd+a8iJl=Rwl3NZs@O*=r$>D*h!5nvzhi&Bi&sZr{PXG z3%hV0?uLtSFWe6gLan)nqt?ttqSnksqSnksqSnksqSnksqSoB`QJe1es7HBEI|5r3Lt$v1<-Gbnq^qkcYId{itU&z znIn=VXSA;$ecZ$QJ^tLi9s8@i39J>?mJTDH3jYSZ%qjWo{-7EFtQERnoChdzEC6-l4geHF#m)ABa%hKq17 zv?gL&_eG@JG`dZr+cdgaIpg!=ke@tjkSrMil4WfSl4WfSl4WfSl4WfS@|ZmakvDcC z(P|mTWbM>=K@zQ;L2^BnkX%nCB-c|3$@Nr1ay^xhTu&t=cNV#`$hBI=C**pk2K9p0 zktUvHvPYVDmLW|%#n8E3{X?2`k!!V#V>WumAt_y?bdlmaKGD7vGN}D|+MlQWdD@@X zSw7ePJnhe8*E~|@kur~zc|19fta)V3Bg;2^mn=_GWW{b;wz|f#zj~^oZ+Nyomp6T~ zmp1qEi3<61>7j-F=(!&~_tV;bzPq0`y~X1kJ+fc_P>|BAQsIDWwsjDL?DkjfmgLA|l=yS0LI#ULU+7x4;o)TjqJw+Gz zR1`}fS?bd5cYWJ0vZ5B$gt7gV4l1|kyD|`&5{a_H|1av^a^onXFpl$pgoKcILo^Ti4XN)ah>2e>wo_ zAsv7n<+nikBe}qLifZF2MLnSvpcZKb*fm(ObOThLR>0q6_S`9e^2vJaPxWNFQ^DBV zKSkO(i`xpn3H6YN5buS0%QuMn%r}VE?G(GWNcuQ5B02-=mAEI=EBXUkhdhL6y!?Tv zpCS>^sGXLhvGelbP;@qhzDxH&CHb*XANX?646wOLZ{wQuT;C;)QF&JhUCsV;6761b zWt>5ylFpIQOs+~_LVa^y{H8P+Gvizs%?!);O>`Snr$}{Fr}JFAE&f$Cv9ZVeo z^cIbXE`;WmE`;WmE`<6<7eejQf6yAH|Dci5f6zSBe9(w!K4>0jK4?Dp7~jp@*R)CwIBjhd#1Mk)##jgi%lM%pWq)$a)fW@(mu`krVB zEIq8Sr&i{__eKE&C2B7@mx zxubdG6Gn4OcBAXXaz|H<<&It6wf1|%RsE6X=z5XqXe^|;SQDR;-Kd{rH@c3bHfoDq zkG@4-qw-`ls+ku|%!*IRU$izzUQ`dsi~8KrEv$HHedfjW>$kvqa{iGR`+qTjVdg;w*7AOXM%Ahnz(vNn13lWG`4Y8-0sJM&D&|qyCV>XmqS^)Hkvitu)bM_%1YWPV~qdHIt;M=c2;Uw@5>tT|FWD z+M|!1Z%)WT_PU-=ekt{^$5H#F7^+9?lc$aBg+@e{p>{!`#h7f~@1qHERzmO;W6D=YJfY7VX>kx;U@vf}Z4O7S^=~ z$~jDqx$vgFvrrikL?|Z09))VN|KN4ezJYSY(%^TY`=6XQ;r(zo^cHJpPdE$b;c;k0 zYymV1yAbLXivXX5+GP>o)3Ez+nY2DTnL^K?vTLDH*tO7D_;HZ_Bw`%jh2~ov&br#r z2Yb}IS~6-e%>5=pRKIhdb@mq26MG9v+c!|Vb_sN)`0G%ed~}`|?OXN%&&~3!K8fPF z=NmIWyg}>wQ?u6AS^4NwdK#K5>lW2xO`>++SJ~UTTHb8DRrR1ZaNMiwg0mtCj!Kf( zxF0UU!|+kK439$P`9N?UD$mP-KINA{Z)qT}@gVdmuL3GRPx(bkx~GOls|>3jr5}Z? zdv|-vS(YYyTQ;8bY5f}TdFb4pR~&sxo}wABo>4w|ispy?i{27OlA@BmAN`#2eg(Hx zS{dsT#cq&^?l@H&ixPd;JC0Glb%nm`IR+@7H`{)9KU60fhu(k5mP8}+%z5#h`gWQ0 zvwVx}UGhzep{oxD4r*uufS8NehYc!{nEwAy1R(x zAl_mtRF4uk7R`^RRmmrdu_J5cuyC>OuR2fqD(o`q5r2wePH$2VpWNFT)goMmzB`RZ zi~5VMu+v8L>))=n&|Mv*3GRl6zH4NKh($s7MtklwJ!30W8%qa$%g%|u zW&cEW2}=jrA}k$bi||6@QK%J9sK)0ZOITf~U3Y7u7Fk26MgC{hBL6dLk^dRB$p4I5 zib$An!&+RMmj3a5SpQYWiw0oBEiLaKg6iI~I6;q8Dp+1PFMkjdv zrh$HX9hoJEc4!QwzPabiMK!Yr(YRQJ_%u{MxrXZRw;J2`q>Z$nj@M5j=y?5(A?uT{ z){NCo&(JQ566KMJs1=eC&0)W_tKX5(?-Jk>mTx}$et?cqYwuEP-g-}uu`cL@D31n+ zX3QxwYK!iNTBHG@5xI*HwMY*{SFmF~`c$v|S*`0E1C8IB;Z;T>GCSdJXr%5vMD@GJ5YgY^|LHc&2%ycy~hF9)jAeS&EI>4&KPySEQXtGS<4()aUp)Tx+k*0Mf}wMH}W zBEP#A`K|Gj$k8G_6Sc@^g4*IaK|SwCR_(F9w?j2gPZ0F`goQpq|hG(HJ{ctRn#0BcKGofLV1Kf)B#|&>G;ALH(pTqrTCf zQQxNfT=m4c25PtC4BF@3-UqpS5N5+YMrbysyJyr!8%HCWBEEf3)H9NOQoI=I5mAe3 z;~heM7T=0yb&C2_{}df*4#hm8p7R}{{)-|+?RG4(^~YmkuK1TwTf9u@3Oac~D_ryt znk5zlYHNy-(aIEuqGmA{sD7t5Xmr!bvsrSEgW7VMhkD+p7wyM!8Y4%YP7F|;y!&_@ zs)yef)keCr_?6`2!Fg!^=ZQfx$zy@W$YX)V$V-66$kTwvXtzT830)YqLJLNHxYI18 zwL)5=R_>&S^hI(mLq1nKBKA(EUB7bFx>b+Ux|5!+r1UgT()vg%Gjx}-<;rSzxI%RUSL1>%kv)O`xT%XtW{LMIIc=ldI>4B*qfgBM$|sdjKIt&l*ro08WA*hx*y;C`wi}EY9sAs;PWi@K^V0mC zV_kb`UaL)wbi4R{&CjNGmQDQ~g!6C_9)=<c^e7nQc>Y^p6~+347J za-LT^P8e}FoP{SvXN%4t$D(Hwq4ccQCMtQ7d?!cmYX-eN!2Gx`^!Ly`qLUS_epe4) z)g7Pi2Ki8{dQsH>5B1x=D!Ni1Y7WmrIb_H5&!?66^5g$}^=~KsJNi6{&;I!$|NS4? CvMUz= diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/3b705e44-0470-400d-91ba-30dd2533d372.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/3b705e44-0470-400d-91ba-30dd2533d372.vsidx deleted file mode 100644 index 792c78abd088fb626d5721a205d99b8ecbf24b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170329 zcmceji-Z}zT-9dOJk$Dg?1$hjvRdFsih zobP@`vw#{qfPE!#;S*Q6D^d!AXl|FFfMZqYm5qqy>wPKIRiAANKx53s2a4 zzr$vo`pHi&Jn67KXTAUJpE%jRy!z*{i{ssPe*Ra9ZTcj8P4pxm`{5zGZu2MEdp}#8 z_a7mvI%~nn3%NvJz5e~XZ}TTPaH2K2XXR1v-sVqo(8AMBIrXH4d+%3kEuXyqf#>gh zVH?}YAu}hi*az4AY1`Y$ArtM+VSl(}*0bAeO^!N#=AvWvUvR>LqZXc2yEAf>)6X8b z4K23zN#1wj2`8UY^Egw!xBlH9x^G+A$==8BdD4iOy^o)>;DjTO7e`k0^6oFM{{G7MY&(B))bR%{JmJWNCw=gg zlNK)cRQ>b(=c18kuHANPvfoJyPd@R~lRmL)I5p(wPu6XUHOM?7iErrBz=;97g8GcBwGSW z`Xv7@q%`hHwgi&&Nq({CTei*F*?S8hNuOk_qj%dpNev(v2a@zj{#{6E-0svo$vBXt zPjdP{p4v8Xr{+nH3y4Fk_prW%fdB(J48$0)pYYEH zL6ewikH=5zf}fSo z7dvrp!TqZHof3YLL0f=dbfV2ie}w*SS)%og@@rh=IEAQ$mjk? zztP#1{HGA}Jy}vea8_iWV{c*4Z?P@a(XufM~ykSL00;0la-7zKV*!r}}T2Uy&SA9Z3ePh1HL11yXY`-mgN6)~i^ zjJQkQnjan~5GN5gAWkFBih;!~i1UbZx_4@gakFe9{gtd$E8;f99f;f2krom2A$w(c zV_GSHpMP>k=w$fJIebe^I?;@aN_aTH!}L6S>|R_Hl|C(mr_}(-_Dg z!Bbh3lP70dvzx)A$?3 z{*U$W*CtGE#=??#o>c+Xx8jO6WIHgoh;%1b^~&O((SylNNbr66)%-4=cOG{8mK+X= zalBiB4epfhQo&!k(a|Nxlkas<8rNho*ocli{*uF~3}j7stQo6IxSgIV!0l}~sEBLm zvU;&P#?3u=%zdW#e_d5ZnL%Au+6+II9&(a8+hqZk#h6XcOrNZ)O?OI1)MWOitKFo2 zAjzP>aA4=637H;b%=eaXet`2s40+-`E(mZz0!cn<8rPWU{X7h1tg0|b|Tp;U-w@<;4e$OQ=7agz)f5M9yfKlDV|??U7j!Q9j%3? z!oyp^qj@~)B1PySY{Fm<2Dz==Q(J%gOo)F-bFW*)Gtjg)?1G&Fx7W7jqdB}phoFz~ zY=CEDJga+QYbCMO_Q<@e#Tq+AA?A6Qr<)=x%pECVejvWl{uKXH!u|pFPobe8?v5Tt z4jRuR4+8Dnp2U4J!(3Ymiwaoee5v>l`zPj&OA-p(N|5EEwV2zXGb!P)0EfAVKt#kZ zIw-(FDGU~5eSX0JT0&DG(L^GM`B+;G_g!K+7AXt`*^}Ehx(NP=hety6d4e}2;)M9A zho6Rc(Zh@OF13G}j|#DyhuuQ#?qPRZN%t<72e{mQyR5U1=@F(^Fufbo%b4DU=^@?& zOiy5X64M(nJ&oyEOmD>W7EI4$dJfY)yr&7%Q<&Z?j%a!Y(*sOz#q>5z@4)nSOfO)1 z5z{*{y%*Ezta{|vWDA@Ph;OvFuEj+m#JXH0l4rALR-}|ChAd$yz!1Y0!6a9k$Ao9W zR=YNin_sFrrSTpqg|lj%QUPae;+N>9)iUo7a6cV2Et4@zqt&1y4Lalma7O}HX;ez5 z6dt$Yjy7DyxKoh0K>Od>JZhJK8TwLr_$KV!gPm5#P`?p)&DjPBRoP4qdS#Z9$>T zJ6yO=5p~l=D=-lF9jlKedS`TNLI(jn!KV7^h@JHhHe0RzN%>OB(9dnD*R7@+AV ziP+7}GAl|Z};#ht)&m#dR zKY5Vwn;**$XnscBRH9zn6g{$Q2zA!ema#Iq>=)N?h(WbGFA%mWok4>c4 zs;fju&u_mzgCzm3*L}%!ph5Q~Q$$-Qmh^%~bvtdWf{%sxEj?= z`cG(hGiX0<*JcuOmocD7iOV$;Sd+v&#c76=23jzXmvoF-7{f8w%~zx}JHTuOFl*W{ zlR&N=^SB6#l!$y{jdXmAkGk-BGc7@%DxaXELW~mSD=fX~$l0eHfbFZs1M=i8)Tx{50sF} z2vE-u#`E-b%CR!M%0zEXmq4a5pr4LckAJ2SYx3yNp`RIg6XvHdrg&pbfHfKPx1ygu zxqvY}_5F%8`g<^+hCyTKMuuJm7*c04pw1-IB=MAR{Q!mQL$oLb(g*aQP3>8H4o%m1 z51tF22zrka1S-&bSX`hFDGSR%#FB53;LaT(5c1o^r4aBCRVI8SBC%BhTAp0P$%zDF zdK>j`MBS1O6Dkwz+Qu zWiix+A7v#Wx{G;M2@eE#pbKYaai+!n9MaC41^h_~j|O;Dqn;phJ1J(9TxYH=mwJ;E z8e+C5n3<=EufR3oUt%t}KFOf7jX#@n_V8y#N=EoH0^@q6Hm1lG4m9!J;x`zGApEY#CiN_a6NNchE8oY98$1$?Cw>wATk zS>Ge**VdD6ho@d}weuKsGJ~YuNVOT;V7!g}er@hxIg9;UAASU1JzmvTnHKrF+!%kdx3D)Ykp zc^GMU8N8pir^hGDQ`w34_u{}9dnl$79?WdmY(B(!9?lE#HVc(W}ex&GK)dZ!`puq3})!mGBW!v zANfeaoOpib0_3%r4v^O}Y~axB64I?93LXj}{@cTUhq%VWH5KIZ@^6Q@IL322JRf)n zLUefI)0TNy=J0T=9GX~E^%?lGdJH$buk#^;d|6@-zHjY2+I#s}63O#O#$=Jga5A@s zdr|xQ?(ImTGSp7;Fo{p1A&F*_GBjm7ZWe2Nl;a!4%-nlfWE3>z-j{KWr-OcjX(kau z?D#jaRr_A|j`G$ae(mAcA+GmueTa1))>R~G(-dX(h*U!fMtsgSwa-t+n=4O0Pahs4 z?IG=UU%oxWS3G>h?WwR#_6%(H&E1K8CGo6O(<5 zbRjaHgw8y%Wvz{c81^u1-{|bkENy`NXYFsg|4J7`=d+}Q9RuuGz>*X`UBIV}iAtfh zfYuOmJ=aF ztE+gZxY#tslT$pX=Xc}jbLT~#$1KF{lzhAGg@sNZ=?LlC=XAR^z@ucVZGV=~5y%;o zmG?0_!fYQ65gMFTw|i(0g|c`l#7Yk<%@RT!?%{B=J+nHugZ6A@SCb;yixCeap^$sO z4F%hGTkXKDoBgI>73Xclo4I%2xSnpOWKBXm>)~1FH{^|MosGM5=Uwd6S>PN`XlL^_ z_H(msIa!9O9K#@c8p8go?QiWf$ojbNHIE_h>rRmUTl+5gJGt&G=GcxK%i(GewkAnE zp|S$*eV0a9>O73uz{fmEj_gS+N;1o!SGT9Ke|xKkTSH9sFx9?`ku=1Im@Ihskn<-b zz!y3nYb!RWD{0T%>!H^@8~+vm`8@TUqok@r9OdCCw~}QKl?-8lIi8e(M3(wH$ZSL#B47X9WGiMq1_mHV>7$(SX`s+!+$pKot!Py4Wk zhkfi2VFw?zE0*<;4Pj3xzi*7FvmE<`vpt+$i!kj8yD%$@SyrcW)w+$5&c!~#JXV#n zYK#5cP|cf17h6LV^A%Cd-y)*uBUeV6E|yGZkO{t7wb@<;KPG{e$B(NV8a*TrJ_9t* zehISz%&N83H~&WCtFeZqS(DZDN6MNE^wr9&d7-jEp!rJ0R9f)19G+nTh>1xvE@U89 zu=k*XJ=S6>npQv9iwk2s&U~bTGx9hihgV{}Sdq}5C0UWjJS_)jwFGmmmSDn8TpPPY z!|Iau?ZzTjB$wyv376<Ufw*(aB<2Umj&rK=(S$D*E#7cCxIEcdb1@KK3S zsi4v=R#E9fB}65G3Q$R+(tt`Dl`JZa;JK*eQOTh~%+RD;#!W0qL0l}V6%`(h4piE8 zD~qUfqQaexQR$It%L@@+poJ4Kl(AIHH?JjdJ}{V+gql_{sGQzl3zqT}m^i0} znAVL&Wqg_eh=>uGmcX)?AoP>{!UEmMSqN)dN9LBUnK1PZ+X^o*q4~c>KZ(8G4}OwWrQo8-4eUL6yT*E z!D-nDS^8cA7@i11sSs-uNRYKlVy4!Yg-9p+!JL#CK@N;`YjxkxAqPkXOc}EkWb?E< zooL6*0?r}f%o43~gIV48TFkIS@u!_c`P13qhUA)ji$!ynNiFiEP9%jVAL}EmFJm9R zNDKB+-hhNBkN;x2R^Q|b z{u$zHWwhGp)|XIE^{Ap@kCW1>)_maaG6<7{Be~#Yk#K z@9^*rA5TVjGQ{_}!XCcQ6|3Mbo&`R00_W01Y5&UQ-j%~QxH8J+(g5V`l%=OZo=cun zO_4nR-^l2?XPy@c18;fC0Ui#pwW`@!qRsWdrTpro=nAMD;LZ-!?CiPvja;1Ny0doH zSh>E`?JV8$a@|?7F?5Dsr2V}4x=(FJY0s>yaXcS}JVUK^B_T=iZRT>d5^O9%smDZHhCw}kkF zG7O(kdp2rU3Py%1ee^`=VU#D^tQChb`+Of~L^z{@{kkNdx-Wqk7*=v@c@`si?3V*c zmHV1-FLxn>qgn-%Pz^$kA}(TiCyt5{^x$6egoJ`x{r_nR9}4gxR{wo;N9ZO_a1}9T zPdpJ)6jR2S6|q7VO{}1~ir5!)-EK<3Q*6Vaz?Y@15}2_7VHGj2sAU3WjGynpO+LOE z;hPn#=*G2WT-zn8B<{|N1iqQXiUzDmV?`D#8gXq4uFYdb4%h0pT%E#-W~?aTnT!zr z&$MDi8@}0r741U)uP9$k7FXqhQtH7OkuGnnxEs1$&c|uPCo670B2ADz`)I@odc@_v=h>6!%UalArjc> z;dSE5EGzr^tMl=3c!mG;SzN+8;d>WYE<$hmR1|A3L&YqA#*Es1Isel zw-w7eu`gqp$_5y}SOQ=rCF`Rj68c4m5$?X(58XxeNfbyhSTjLupi>Iapy-`q)FnP1 zjqqp%FLp~fexysp5^I5%$>%5WNCO^8SEp#;2th!EZ}gD2z!`YvryvW#t1i7u(}(o%UIoo)gf*KRwqOuwz>hU z(^#Fw>PD}qw7 ze44l>QVJ?rj9F!7om9)pBN0X_80p4H86)aoM}Uz8Mv@q5z(^V+^s$W?X%SCLPclMM zs|m|f7-_~x2_qSd1Q=<>NE=2vFw%~Z0!E4$>BLAc=yOJTu-uV0k|vmiF#lrO72-J$ z&oO-~AqWsKYb)Wa0lw-WP_u_-A3u%oQw!Ou-vnmMCdnyGyT`%EWOOq2SyG|gak1?6s(%P4mV zVYLTPPN1AbxdG)g%2|{fQEovwkFwTo_Gm&mg*}>4)~v0}tgRL0Hk3P1Zb!L*J&GuI zqTGvejB*dkn+G$`X&ObFsisku;5^A(TN9k6n&7O}1ZS-#IM1ogFpXMTli=K|X;fQ; zwi;<1^O{N6D2<~qhSE5Z1376N;{`!TQqeW*P~zFBj&ssD6UNj^<0ubfd@;`~XWU#6 zt7EK)g?NT}t{#?WYH=V>jTW8^Fx=gZIqJ8kgt!;DJAt`L9NK_G(^8D5zB z7;eTdv@)_!fPFHc+01UkRF+6Ov9=e#P+v^~%HsYXJ^V3+DFrDaNXa9mat?zxOthP@ zS1e+ry{t^og}Zb~E5wsY?AL%fX$)s^mmYJj1LId8WvGfL$tuig$9}4GqHd&5g*qJt zbf_1V^v9)pr`Du{0Iw?~||Mg0!QvJ@KlT)Qj0wBiFsM>3%TYoNZ z$0u}a_%;1lOL-bxn)x-ih9nTa&o62c!?>~;f77p9s$W+n5U3!%Qd6F#z4%*vz+Cc>JE`raJ=z0WXx1FA~;Zq*#Z51d$yi#tSTd|-k7hPPGILG(hW$b zv8Q_DRV_&8(UX(X5}%FhxkIxsw72X2-rkCIo5X9jw-BrEP{f|Pzv)<{yhJHaMR+QN z6#JNr7>CKE!^c4p4yvG;3z7#TDL4}y@*Adm+Xfs9zpa)sKl2uv*n1J|ejOSE)u2xqtl z!+dO__Yhz7@Wl{&d)PY^`Q_pg-W7p%rT1P zn0x9c$TKr5Vcy}&vgg^zM12yMNdO~IT#nj<-|D_L%4Al9GU6-kh~%@gWL z7?sx(xfr%4j9FH|^)XWm`pa0Rbhh!ThgThuD4dlQAD#W5C+xQ?Jygu;H;AYn1%d4!td*g2+y*Dpz*Y_nIgioE}m9iXA!~ntBS@Gcp3Of62~^+ z4Epn&l-lWOsqUr#{@Dz6r+l#$KWW3u9XO*M$Er@A4t)0*Q+mYGWUYLBDZ-aREby?v zN%!UFE_X1B#-d5A;#kqu@JWDc5;!6$NOejYqg2||w@UFzVn&2!>8%i^C4+CY;+i%Q z^iFA)jy$4;(N27$7k%-DCaH zL?30qmU&sOXI9~)(J4j&MIci5r&VwxO!=vJ*gk=1fm^_$BcbmmF^gdeqhhT% z+9+GHlO?BS^ZD1{xRtm3OZLlv%IhyMjrW1hv&s220OowJSVaj(1~@Xrw>^B@2x0eM zpC?=51kYMH;c(T#nDZe!qiFg)1%oE9^mL!6;-OQkd&&3 z)7U4j`6+!DKl88bG&E1{V_Ae{lsEI0sc_EWb~Sk7dC4V-3-4L(6>4tUI-?5)dEHh-{(87J1;l9Y`soFU1UJyMQLj!>x)oL& zCX|0mhfl9=cz~yvnMFkubWA{&sANkR>Dr>a6Sj#b_py6~-L=>6XKeKI@UxV#?#7LL zqJU>R!CK5~JusGdCK(Uyq2_PSG?I`>R<-@a3DvfXuw95Q4_(ZWnIQWxZ1yB|5gwi_ zVfz5vt3bluUCxL@T=azbdIXYC37o}2LEu`#CapoM=DtfI)rv~??XIY8X<~k@;U*G0I-Q4ve;A zw1BTG78>ovXeK7x)yPx*(w6P7&vsvbDvClk={avaF+#qEqh#AOloSegs z9!@TaaDsY?{fwFS;YIL_0dq)3VnGG}t|)SjvI@>B zDEWvP&||@bd$3wm!Q^gCE@N_+?91c8Xiv7Hdp-hxLyuRr`(3nnurNt?q{U zs6VMTRB~roWh0|Sbstyw!`kZpVQqC`tGn^}tRh*f`yf>W)#@STo!yw{{1OXxd2MQ= zUz$hFXAUQ;yQ5d1=ll`@75x&+d8BmasUVOY$J_!o&vH%d$rpEHyE1m@5*Y(CFSbkX zki>Bf*e;FjvUp1)wrjx-c`0_2&7eD7tl7tQF8kO)Tc395z;^98PP32gI>8kqFC=^KhJx+alan!761AS9M{P66329Se3-82CPbh9%)r0$Q-W9V^t2fO zsuWf=V^s;ObnFB3omFjE)qz#*SXIEPB35a>vns}_9;~XzEe}R`kUNqPW|BoT9-rq^ z_*S!^1>s}cknWI*@V9!UbDykES-A_rU``xmyp7az9hzcI;aj>Cp@Lopk;STjUF@{4 z`<+!+Ppk$shN{%h_InXszECvk7riIBt_CU zMzMOS#-`27h7#2qZ_;c#^!ge(`&5=j5@u)%jhuE^3>Q@}0I8~wCm*n)iK?B65DsEX zlrb~4_}M)6=G6<7_H8c5sZ}q?&T5UG(!K=Q`*zj7D*L^!6Z|Bg^HmHxxhIiKryiw{ zMcgtuK4n;AUknu>lZZwwB&?Rgn&wFD6XC=X!0$aZuvN)>|jV)-%%OIVy8u`U3 zT-+>k25eOuThZ8tv$XY_HHC|dXy`;^FV2ebjvidBQI&1BjEotAHxwy`N3Vppr`hTtaF~<+3cvJ*o!$jTmct@L2*dekoPZ#28(; zlc6n(I~nQN5Y29A7wP0%T!zBc;M-Y#Cz!;YyV^Kt*@}5Q>N9t7kzLvVU5;s=V=+{I z-*_Y+QrEWDA@|9azrQcS`&>0a5Q3d?m#k4U!}G;B=(7cYZ)#qb$APJV9tTzp=+=nt zqz_bAfZik4Hyxy$xPHgw;`)>sAVus2@Hp3^gaZQ{$Wayie02`YE}6pI9pG*jycCxT z0%SumTM~R^B4jGa@Q{|Jn~7&C17vhiMy3H79biI7muW#JFDF+jI2_YNNldfY8|M

ApSr;&G^UVk20LXWQ()zy71=htr30+0vx_-fM3#k&UNDLH zT92ss2DH*4`^&nR6*_f%0nhTN<~1y+J!D6fEhmaj#g>${Gsc54Wq{sHV+WV_1w|$= zFz(yoRoSrprg;)W;P&^8tb)}OL+RJ%UKmm}PW~Rn*i7?>RNio21D;TM12HzUn0r{i zb_(`yr*M_##TL0nwRpr44NtV=yaKK&%AgF(i`Vzy+dhUPX>OgQ=x&mcR}^!)y%2ub z$HyalT;t}i68K&N-b(V*zK*Dv_2rC=3OunDziPwxI`CG-!(={h)2zYHyXcw>85;BB z^IbGqA!6{lQ^LPr=+z5u@N&` zFe5K*bT?@>akc6Y-de)SKn8~r&Gxn7)DE1|juTXe&_@|eFW#zn=4v08M!1w2gl26^ zdPJouc*eyDs$02|KLolHXi7@V;z>Nz4dS4>m9FM)R-BtqN+D3e%vx1RQSj5Co3C}T=LlJe6_cBe5S*XiFw2W90kc0+@q__=oH~`+ zbc7&lLovIeSbvYTE@nKB4J$AP&nfP9jj(G4FLdKOAua}9O5hucISY;WPF~c`FMGJS z3A?AHz)i4yld4T#YQr~FE%SL*iQg2167lNTF7x>x_3%;i=T-&d8*vCBmF-kdz3EtH z)xfQwFN-fW9Fl$}h06=L+=j8#G^a4DnxHdSBMlC}ymY!^!>BBy6I@P}oTyE3ysk-LUG3 z{3abjgTN#v>@2y@r_kTg6UE(*$Et9CxXlSv3AHq+dZl~Iq zFYl$Ha}DVQ)rznnNVmqKAs3VWNBk{?J#lQz4k$GT>L!35szN*bd9br4@qLm@oA+5ahv0>J9ai)}W==6To+keNycYORg z!kh8NNA`4ElYLruSh#oA&e|Y#0 zQ!+Rm$i|w8;}hP?wl(T1sho5S75z5jyG5T-#@W;cb)Q5%TPw##8g}}d2iDP^j)Xrv zfGr8;)$KQ}Ws+4Mn~TEN*LY2Go5A`d{tlrdx37vGt)<;GDvToxB5dw%!Wb>k*>*~? z$`~V&rk_Hjq(u+FM0LJ8e4$W^=;)MQ0LBHH0c}9&2%-YB_KJ*s<5Z%MXNs*}9Opul zE6F6WCA2qdROf`uW*LogJ;#gnVrGm!272}_((Ul9*#pzJ@RU)~Y1>NpVZ-Puc$k!3 z9uM2EG4nN+n}r+WFj=)Rj@=xis+4DN$QXf&3YAH{&LF`^?m|a7(K)YCxN<;@kb@R2 z&brZ&Vgt6?_NU7= z1A1nS#ADLRQ#oKHo{ns)Quc?dCZhKmTVQWXD3}RnPN)hX?4p=(QZK`?`m(^X>RvZeYt19608_%Y5J= z9uDz0aL8wK;D8Os@X->X#cUvjrIZE*LV+%IKHSs}_Waj+xYj*+(L>Q?)AG#rwA$B3 zlN^$ct^QY<+6?h3>^lf%GcutFnSA8>t+}NOGgfWP0j1-nkhjb9Z)^ zXfUa=Y@V*qbx2%vUVFr7(;_NnT-+>m*3b!xf;!fXv&zgTa5IxcZ9^bfovAvIR|9GLBGp4Ec(e8+%%=>Afxs-evZ1}5 zHLOAPb%P0^Oc@>MJtRzM_D65V>~D}huvQmDnurQvC6NX<*Lcp)=f5>PJYJ1JRS(A$ z8%txl0wb(ktiO{bNDp^btB^I-Ro3ZhtE>C5is#l%;=aqjV%0=_nNdvP<(C-(O88lT zpJ~a7%;bjEtKjY3*s+WqyYMY~2H-mhoS^y6ThjPm7T;>bjxE?RkGJQ<9}@l%s=cFG z6sn6ecuHqwe5Va3bl@$T@4Tak?{(s-UOW}!?W(&@bI_2EI=qw0BKm6binM2)Wkl0u zSSOpow2o&@aG+KHts=I?ek(G62lex02yoPYN?W#u~Eg95O(+&(mi)5q--K^#qCcGh21ql>vre zR~wSICO2X-1La0$(~X$4AjUHK3R@Y=(=|6|zYOQz^Rl4{OsWVY4U2C>f5MGzI z9V?2E48o45VJf%UgEVGC(GEG2!!+c~XC9A`H)2SBn$2dUlHYkw!;|tx#?Z1|n)MME zFXa64)s)+@lP*5i@u^M3Xx;@(e^=oDfLrScf{weucQi!zIe|3!h2vl)}{oQ6AcQ z$~(Hu>${N*IXT_K>B?OQE2y0X|A_DpTW9Sys@U^T%BcNB8`V=O^fhDug0KYaUXf8G z4%>@*L@RwXb-pak`#mKQy;GL?o)BkvIK#zXIxglo+{y_vrcuiR9634Y*b;^VnNDBB zmM{?fK83ZLOsA(U)enOHeTa8@c&8x~(<_?QsWwK0AIxEW%wxZg<%R~Z8S%|jh{q^L zVOv%S=LI-#eC}-38Ll2g63-ox)owUy1Qbk0=1;Br+Z;zGCTTfSAXDglcV+Rj`zf7GXBWcVUf^r-?X+ zyP4AZ6yq$Fy4Bh!Ri?}k<b}Eka4m@^M0h6Y48*WH0A&>$MU$ zn|uzr_nJ!FY_$g-NmkO@xv9?#2=j9WCXHm|KWl&%0JU`TA9yb_{VE>q0-9 z2f7*g@_>-nvq!CwVA=q!Ck2MNG6)t0#F#@w4ekx>QfnwPigC znc;+FVRX6ToyZ+I+|K%fX#?i#Sw1%*gSZb=@OeWP^WC1ZzEIM)E2prV@{QyGAJ(@! zw+(BwBl5rkb}QnBPCTr9#mQ96_ti7c8K)kk zpP|{;dV}idWAg@Fd7m&?u{~V@%N9%uSYfPsgH6ZDx+=pO4vsF%?C3S-%@TMZi8T$v zFs#XnU~El`%JXu4i2Xb~V@*j!eLg-N;nN}h~VYc4(~#;~rr`6$bMHu@PKH$=E0 zgk|5>lQ^IGyS=YNUxLku_G^P|EdE^ZjQbt4jaS(drH`hp~AMl{cUhj(HfBjN*}u>Gu>rUsI2t$=e%#j%mz_ zpBeIow87+48M#{PQ#yX_WgnMCxJ+vbgJq0q9``8QY9`9##74_W|fTF&iYnsnudZANBBU~2 z#PS9#PlI{c@#`0Jl<~A>do7gw1{p`(7_AH{Q0&dcV@jep2J>s1t?kMZ~s`9-j z=s9A5V9O7a;-@%>Sn(AZj1g)(6;^R5$}o$1TG3-iD!uM|v@M4rP+ltr_tHWn7@jTgI&4Bydp@mo?!2G%n17%G(E81iFkUtHUMwZVFE~ z3x;`=L-I3tz7@Z0!-Z}F$^AuK*opt?#RWPa;ChQ$WfA>y*{|mag)|;+ftS-#vNF1K zn_MDBXDQ0)%!KQ;D*dqb8uRKls$ChBhjY41!py^D@(>biKBy6 z65sDKZmKLMHDaA!WY(`2E4@Y6Wl=`mSE+oR|T|f1)NzkL~ z;a#Uyck8%ksyX&36iHe5%^o5Qji=-lLE0BWz#q zy^jFm#AewKdha7@yf+i`|7G-?$b0{KDruhsHTuq?@mmxW}o= zriWC7CRkc`(9mP7(V38#JIHnnQkT@H#ST3Z8#9kEA4`PB$U?l$O(fnn4bp&4d?G?) zWFZ2iXQ0lF7}czi<y4Cw@p^2@~oPB&lx`?xiDv$C&35 zO)-$Q;V}+IBYnrZTMF+g;9d1s0Eq7mMJCNw_niXl#Nn&FEYZtGf}bnX7$ol!m~ znk&}#Z|9Iz-l1l5R%7YSmq{|pef?CqFCtH?N^DU0z-ffk-4X4)65ti1e+zip5e4)E z=V*_%tb^qUP9gAQHwtdFW;%g`)zU2gy;etS7Bv55>(;3{M~LHYI9l_@n&}g?w1b^C zn4>kX)#(#A>UDn4aF`?~Ng6HSu38f;WJN2}rdoDs-or|zuIJ8hxF|;4??0cDThC;; zmgXbIP*LeIMY#@{XknkDy|j{%k#wryS?vR|9G~0^6KXd8us`luCvZBo8IPv$Lo@6G ze%LGbs!+?sNpXxdAqQV**ljD}u>go=j@4(byQ zlAKhA)}r3I+J7n|vc$dEt>Od~;Kn8ndf{DJKbD7QXXV_+~vwBLWSWgbaIF=n`4` zme1rfxVS(iNwvF>Ru|LBXk~<=da{L8e&Ay{d`=C3Tge6dl%k^nMMtbXu`WOWNhKJW zH?oDSbA5^>PF6gRuh!T*_p_}p2wc837_i0r}(E4 zs{FfcqH*{xqc@9{4ll>OOPsaJK92@FUjk`$q2=5`hdki}RKMN6$gaEPT%eT9w-M}D zz+B#&>3G*UtVbBvWGX?sIMO{2PbD*{uSfX0n@w@MPQQ7X-C^$SB!1a6o)AA_hoIvz zo@A?R{qNXRldC*jRgWS*7Rglz`+C^dxL+TCkMMW94$^&s?613q%n*n%kfZFBbaQ^* z72#brlf*`<+9fHqpHTg~p3U_{WMs zh3t`L3c_~kC)1V8<#8ibm z3hvY7lgZ3*cj~V^p!M=wUT-bNru1lzT+$r5WWBmPeMUPdKW|uzFUTa0(i9e>M<=Y{ zkVqtdXs6y`W?{l>>tzfF^!aX{q$n<`I|2z1|Jo!0!5AS#k5PMS{x3e+n68)+--kp- zm8jiF0H!l487ZoY!Pz=#N_6A;J4;vy)?XtAyO6)erc~7yQiCDg)Af4t_ij;7et?Jf zs-FDz&Fjf;uhEl#m3nfmEt2=3)zLF^PT;eYj(18lW3l-h=WY6^%A<8vYj##EF{?98V+Hrx>=&j9c~QqP7LaNa!&cX@!Y8WG~;rs`RKT};Iz1&6h{5)&noT@&R> z8`ZPUe~KS4tE*srH^$2NvkSOmz?gR0QfW5Ep7chHwcyWr0U_eqn($;wy2!^g290S9 z8f%j=(QCBRcC0A6i!q%jNL=@%`6yRIH2XAL9aN9KA%En7GI50h&Y8v%>o^XE&Y6li z2eryji_;ifh+zg_r=~*dBZK2`nv{yPFW3;&wy`={feO0ZWz)>9c+V_(U1Qa(1Gk#5 zb>(oNCm1-R6*1QJWSl0CNh{j)vgz>?HNT;q8e8%M#O*}v=H-Z!iIC0v)z2&~Z*gX6 znHTZs%+j*XEG=hrDqa1|(()!VOCA0>D#B3}6(wp}gqz5>W~M+0L4uuTR$#@!j---@ zgDP<9V4kHpNWtQ=qBXgRQqfv|BD5ygQ#!Q9OEieqSmYJ7MyN)>R*%;56QZ>Wn({L7 zjJ~wrax0!YG7tPTjXSmWZ2j!(ly5PH;a^~JZ`wSIOOjBeEY%JLcNtJWuLE$CE5wFf zej%sEqPY*t@_wrG1Zsb0BTC`!*fF${0YR+A?&{C=Clb>+$$@GvN)S2P&gnS?FLCY` zH^?$I!v;}ps(*e`{qv=rf^Ub}D^$U7H-^g??vjjnSn1;7q|ERi){dm%Mhv%LIFDg1 z91klb;H=;Gm6&TbV>5po!jx#`)H@P23`N^-PJ|Qo+8R#S>y6`tKSuatO&x^KK(am5 z-a0aDtb=TF33W=z6P9C!wU_g7y@dL3rp($~x5*{cTs`YH+IT`;J=ByxXX>e>a)tmy z#6LWSiZRBs&`Y<*LN8SX>4s}2l*8Og?}@8!P`@GUA~!LC=W4h_v-z7+IMv*Bn@s9H zRaqU<_;OU8U$R&)8JWSPdjBwEoPVIcUHrpV`>LFO^VtjU6|rVqC3!jwGHLtZc=~HmvNx)$LeGQC1Nv zJF!yvoRvMI#fpiv>#lHXVl!Mr;6d$ms-$tSb~z1jSURgGt$0wIoA`~-6>+f6 z?iEE;^jx$4yFpg1TAib))lm<_4QhP(IPcX_Q zmg~1>@rNxU2IdNv0+guI#6*kwXMrf=Z_ZP5C=Ti-71)me!cpu7<+WGjGZn;New{d=Kw|YM|%(?@sIR%`h zXlGdOhPb&0kNNm;gb&waT4vni8OT~p%Zz&?rk#j^+!WKg9+0y*b=<{JQQcJV@1CMR zPqms7%~NvC2QLR9rJSHoE8*qz@(vM@oFW9{@g-S;Khhc(+OEDVke zh`LbB?>IY%R!zV_Jt4n~mQagzYZWi{b7ANB4E%QYEkEOQKBr91YZX=Y*CDhHy)9)X z=kmGg>N1_*+o#vA4YQ`8c$lo0MFGjwEMAyBo9{LJ;}GUXTix=dW^NwQP&bCka*O>C z=TK>1`A`x=4Kl@@)e1@uhFUO`mueSxnRBR?G6XkEPbCN8(w;d8cc=~QD<5i?>Fz@+ zJfJ-f#p21AIxa$bY0FYWr#JfyLkyd0m5Z2`#?Go`{f^eqt+n>=II*p+>wZgh< zr>Sb44YoT|Qlhm{>9O^3MT9HV>h99Bc}D>)?C-KV${F1WatSE=?(z9uIH~h`r z-Ed6__XfB(gS++ahPylP%Xa)y?{2uJ6LXOV?3htTFX5oX(c#T zJ5?E>7?mtvphnbWZ%hh&TomD=3SRBTQoUetsjlr!2`o)wX#dn~ANV zP*%Hm@ZSImb#YM6qah#bWYPO*sulbe_3bk!nhnJ)l_$N0|CUikt@NPRb03Yh^!oU1 zB(siRr1aWFrHWpZ+2G!~Rj1mva%`6>KnTVXS+r7Bs|8Rtw-WbO^sb7T&A7M} zFePzW&oOo`I41X*GR4)F&|FkJR6z^jdvi4HSESt+kPGJ_WVGZOi!dbOH=OxsXLIOd#f6lK!p z6g$-@omw0_5$G){5)p`UJ>?k=d1R< zgYkSzmNFg&yUnZqvbB-!^{D>r{zNLcsL`_9WO#R&uD@i6tZA~-%II0g2TtMyHnSX? zAmMsp?Dy&Y`Zc**rJ_^LqU@*8!d*vuW_7N<*{9>3L;=p6x<;Qcr@nuoIx(i&%`~T` ze?b&M6ZJ1}V$8;FCg;u8(T};#mp?@KLp{&NVByzSMp&7x?IjUBz+$dOB~tpt+hq0G zH&NZ+TD`IHY};{ew${Nv!aBHzk8l<@M{v7r=!pnVRB&rI?k?lpE}4A$2yklxmnLy; z1I|t3OIdue5qG!X+`Qbsd8>yQ>`wM%Z3IgU5Y0aKHh z+JLEPOwD3yquf0=HIJz|`Gn*2a^$J(*ezjd22%q}ZN*exKi7e&?Q#j-)FP&KVrnm@ z#+b^>k;iH0E_T|vi>aMs37Z{5P6sFw2;N0baBCB}-HNekdJ6YluV$#0zmG2AtpPY| zi`DI;-$bXzZJV$0-L^@M@6B`CB(#|}Zkf|IM5L@Nb5&v_YUd2S3wKA9V)UI(0C*sf z9tz`91P{0hot!Dw>1rl*3~H7Cd|ra=eqV47{hK*4#iEZ#cwDjcUT$vTpB$Fvgo^6i z!o75EA+hvg_Lntb`xN$4oylj}IaPzDZEoRSsxu*$=G;Qgj^5tse18AtZYC0ZMR9v8 zDtgl&vo_)Liz;{TMI{z)zv39DR6>ML)EW&sOf{d`oXa0YT@&KH)Xb!CdqI?GFGP63 z-HJ8%Ce;q4ZJD5LP3^F;FO}^xCEOR_KE?v}%TUDbL%MRbUx2NJ8P`TZ86@RZ93#n& z!v31>32H*<=hv`VfR_twzF$BpT=i(5)tN1$eO6~?RMEc9h}$ySpW$lXhUW!2J4>bx zzr(2oI@AXqq&|?tY;WPs0_;*(wSejHnZ^7wg&SRkxqC@#x z@*)2;giI8q_xh!EDh0QG0fl6ob;CL!r@3ZuY$uL2ZI!Z=bT2$X%s}UBU&-4dysduD zJlALP7U#@!eI{4u%yY;*N6l|-&b+bWEQ^1@tp+ne-k}+vmVyf_<+++NW7!` zSk+9kH7J{t-UEVPITsryW}QB;$gn*;v`ONz~Z!2vYyfo_r*0D zC)3%o{9!!U;#R5hEbhSKcAThhx?XQ?Wod&^fGZ>S2|6CkbpA7SI8s`(gM(dmP}TX* z%%iIF=P-nuP3KPo<3*F&QBu|U-(0Wr|GmpwJ90RWL}HA>{{r1aOt5pAq`FQoAJh|3wp;di z?yNm_qWi>czh3LcEy^YSTKDS*#NK+jSZ5Z$Zp1B0sj)}T%<@?^%Y|x|R2?(S{Xl{D zT-~WoowUC&mb-PHt-lNJt&!gIZWS@bSJ!irn~g?vdz#@)UCWVet`wg~=hSi2cP=3c z5UJLBXPd8OtiEw36+G3A+sk-d`Ey#`b*dWuW&^&N#&yb{-`;}9^LWa=2(6BmaI>?z z>ssah7v4zq&31gV09wLzow%+SH=EV@xGIvFtL%SdkEHa!Sk0ndyJ9tt_jq`ZW4|Br z@DN+z-A&)SnYS#-J;>B@3vV3C{Lj0`&k=QX_Mb%f38xO~q_V++sARK|O!uwmy;0_M zX$f?FvO#RVCgG`+<`k+HsnV&)w01HWA5l7#;U+W##R)S^4WxLAbg=$Q!9D2)hxM<+=p2DBY?936lsL zq)Q^qB5Xw1f{?=lRm{ecI*SYJ5#Y?R%Q6T9T&6mZumfQ`!h$rpgq;X`5ympRkKN^> zBCE*6jA}pE9b3z`?s%iw7Ow%NP>L6T#-b13o}GFj{-1~cXVY?2ms^6gVll-?urWvF z0VJ|Y34i8fQKB1iPoH_8$D zcrwD1^;sCt8W{t>X6{P0lY&0VqAl~Ob2mR};oNa^SHzy#Ns*GgGGC(H#fP?hg85VOMMd=hxLXJ z2O{N4ZMip`+z5%05*7tm@qG46okFIfpg8dNB~%+<5gvCgRnLztM~JQw7K(_EQ0__}Ola?`IZ3J|}^G zcWZoqR(m9CZjGnDv|n$H@7Gzr{Tw~2Si1Jsc+z+Mz37jn6S;pP&SW-06rofNj-u{S z6s9w-Oi#{=g&RS+KB{@v4rNrjPzmuYHr@a` zIgLsdl}7B)f=V8hoWzbzZh+-|N!2`y_a#;HEZ&z?ae0;@ir;B9Pn_V-YX~1W0RvQ_4j})E_x`!Lrm6mZjU^P0R|!j4S%x?50KS&Z)9&5vtOV~ z#8K=NIt0ZQl_~DtOnUWe5;)e~u}f{hltxUcxi^#BG$jRcM4XgPj_5ne5na=U zW8EFQN9W=f0EM;j$zQr8ve_)|Tug1(~)o?xwR*vhMCawE?a8m}X<+8#!cR zl{H~GeC_E_uH%9L7pSG#@5?7pSHL98DIsU84xyiAJ1Y$v&u{k3xtE-HX_|AJ5o*f7 zdX0*Gvb<4~47!oq6MBS=k)OD?s8yp`UM%)zE8tYMF)Ly|W<;2woME*W@)r};ZEJfW ze?eEEIEOEFpem6LtXJ2M?}Ze9VrZfMwm5k<>%V?I%5B4DjO^}qIjYu4P3*|Uths4U z@^QP((B1rEyT6vb;UsDZ21wMfJZiNS#sba+V{;{Ed{J^qz2z43tUo#DkTT~`uVep{ zQ*l>_knMe0NY%21;OAIpL~EzyRobmd2*E-IwE^tYyh`x~=~lMD@63T71{gS0mQJ1; z1M5Jy_H*tv(Hhe$1#C>RI53dFgPeoOq6DqcIctvtzm)T(mvJ0Qt&W}WjBm{cQ>765 zWJM{YQ_l9G&u8a5TirFs;T8+RalF$S)YcfVT8={Ms!jv;pt3`Q9v(DBnN#nJf3Q<&-CLE7 zw>wdEIu?QlZZxmABN4=;>@U2ylNp(HquV@o=TXnmyW{1PO#@)J zQ8=qORNrE-MkjnI*QA6`sZ^N5m&n6!kP2)0Mjl(Ag!jepGdWXB>fq+JOp5TvwZta{ zg4l(-p2*UO0S2)pB@Fj*kT_p!j(2fv_*S`AjRMkhq;XiV(H=C*+yYAB5)n}v384}j?S1(bgIsQ$NyP6Otu|4FK4lxc?oFfrRYr83TV+$WUMVIwDr&`fIx0<;)3}$P1u-@!x5qUtP_MH*# z)Mu#PefiMV>dOzQn#JnNVMZn}gcH@513g(hL1Y4lwbzDcb|e&WKF{p1PFj$W!g^py z*F31Dz?g0`gW2?@+F2uJuSb;({A^zDs1?AN5!ua#mG`m=g43f)Ejtt?{GC1yh;V>< zp{Ja%XEuLdhnmWb8#?HZT3I@Q=2&iv-Vpswh|Awhjnm>f=A2wHy#Z5uvc&X4Rs~>5 zh&ctf`y+Y>D<6`cja7hkf!x7*vPFMA!t7Z)S?}?@P(6=)ukss9*ioV%yLKXeV+kj* zaEf(Kv=D1+_zjtZ$3lO-ilerg{J2(=4~}rK`DEI#)4ji-PG;lnPO;Ph?cBZM;T4-g zQ|&L%xrKCM(qcfJdF?aNI^Ib6&&qJ zC9y>(^Z%H!+ry7b_)vfkF<#r$9qXni%b|1=$qhQs+I~q=Oa<+65Tb0teo2eeJmz|b z_{KgX^9Gv4ZRmY4+-@BZ?)cjUI@fQZ>%l2e4O9J&8JU|dTdNTo+L}ga=#BC}95`Q9 zu-LuT6+GIF@0W30mnb$lukVrsZb@Q}63CBa@!LjxzXiwT@u>2yoY!}}63EM(!=ysy zk~ZAZfw}E6)`n9x9#IaNV2O2&j>dDMXGlg#T3qUA3kr7ZXz&v_%Eo4AVqa@OQntis6{}oM?yM`!MIdzpeMZ z^6o0mUiiD?wEv#Mb;fDyxg$Bxdgx*9mW1ny__ksaa@y>G;3SP&cKzJ}ZXjJ535R7x>2bz7ztEJ zVkBkAJoUZCU{p58V35ApYNc57caC%9us%!S8Muc^xFf(FnxW663eF) zhqwltvU9QK{;{%ii#%N8ZkJ#@eLBF?Dc8#l{! zCM;3-IzUYkiEf7#Wzw3{s#zAZJLidM##GnU<(TlxRiz_Q+xE_fOioi}ew7vEIocd6 zNM-&D{I^;GpVlnUYZ1%qWM%7F!D&Si^%*O8Ll1ab4f9C8@3NKujPRdaQsQ|oorY{8 zdB&js4e-A@bCRr!aOtLWHNWbrjnWmax(kNFLjxR2zeHzf_qJP)w);)tJzS=I=R9ZmopVeMkO?)nsK5&Y4!t~%4ez_GMEqUUhxhSWkiBxUm)jaF zaHh9pb(PQNw8Ge2JawK8;l3C5o~3+ky^>U|2zk!zMzLJkEo#v~bg?-eny1Z+IaD$s z50NB9KX2k?EwK7*>oOv?*c2mTi!37oIs^;c#u*W&Gh9a?uSu>m#bBRWxz6(3*ix*g4Q@CVyj2+r|ms@+?$u4 zo{pR(h34fn!wZTjNkcz!#uV9b?lVL{Srv4R4HZPQBNM|)kB`vC__81ZoKYKYMu zD4l&39vgpm+5FQ6`C(ChSdb3up4?{@Y}{w)UR-*pVclp9G)c47MP;_{hz{d=V?kW^ zQ~q!oQ92{iwPhutdU(=tJkIW3!{k_KgY*7KI5}>3UHVjq#T2+v={jE8Z$79yir!C2D z{*L%&dKYCs6;(dU7A5u(sv zt0!>G_2a2#G&=nNwyNC);}h-385&5!VTJ}nYh8KnIJXIs5HZoekgyBkqbUl}t+tq+%q#z;gSs(-a0f5^!nde!~Ard6XG zYw+5U+CVtW{8Z|#N;aU!uU+!YvV7HULf+`}1^Fzdu1P-~;c4vo81@;>r;G>JYR2Yd zY_AGi&WQZv`|cAPpOf(gIWi|ldR*1#POlnz9G~k)y87{t%E?g$@u~ugh{dEM>sfl` z=2p3xtKyRQEkE?JN-q!V)A2g3wR&Z+RV9yKp-L6+L&5jWxmRTjC3Fv7L{(xa!THf> zwGnJEnYkWxk1CS2;q$-`G^PYufpB}uoj72tlCwt5+bZ*8$Cdb;9U(`JlcO4>qbMB( zxdBBtCpUDGdxnRH$#JBwhNl&u3Am;AY~gXn3U}q(1SZo*jXdwJB-bS>sS12`c*&xSoQ1)i_9` z5}W{s(AMTRV{&d}cF(Sy-5X(YYDNHcTB>A< zH}0f*My*cOc~-c4-YA*UAtS70_p*|FKGj-8ufEnx3|Z?;3U|Ne-P5dZ+H9-R?CXUe ze|X&bcyI}v^qGONGSDM%?FRUiW-e8-U$qR>$ZmBq&?o~Np2sfzhbG?SU+ZqS2V3;uI?%_aie)^la`F+CZO##6<|Te5lu9#de35^Z6I*0RQ1|?Q|aeXgMv(g5@3A*dH(DlNOd4z!9(cUvU{*Af2$c8 zSMwy!WdQWYUsX4jEY`Upd4tFa3 z)9Ynwn|4v3I$EZ-%hV2;I!2~;%2aCPmSie6T|utM$rY&%VILNU#SoFY#PJykgXroh zBCI-_^@YbV%NW+Nhl!Vbj9U4@EkyJL6Q|6b5T{mwO($SRqRuplI&-}e)%8jA6Ov&^a^kl85K9j7fxn@)Ald)QA zm~v+t>-E;W+-j`XIiC4a(6$lqMV(_g)A|5vY_uQ`<>VocUuS(LS=*nuSf<{!TNxS= zu3W!d!fQOpS4kg5^hBm1va@Z|YUnzZb4A?SIf=@pN&D(02cOJq>rUHa?BYjq@<{TS z4cd5ct4*In@`|9Q9RH$+*{(`accsZgG?(Kr^Wxh%IeJf^$eQj;%k%3z<%@2 z>Ct?Qp^w$e^iG*>qYj0ZlVVMy=IOmd*GYEAJbwc4Em_AITIkHSl=Bm4S{NEv=jCb! z5?VAN8#|hw*Tc2RT2T`w#R~OPTe%imPq7&smID$!NfBNGE(_^$f(yvaOeBNz{hS?v zRmdQ>)=p~ArZBoEd?BLsX>grxB5`4E` zpJ@4&$OO6r50iOOmBwT~68An#=yRtCu4n*wAS z6K6oKRZY|z@HNP1it-t++vA;_T=`oi)ieIK~Lz0JRFK8n>5Dd*}GY-}}VxX*dH!xIEe~|Ksy01#EG|%Tp z>g1d>JGQcj+fcWB+%kzi-X>%cT}jU`t6E0H?VL^_lW54Swyns5uTs|;!CBRm;6!=v zwqA`95S?+aFM9H}DCE_0Y>j-@UR9lRP!7&&!J*c2*j;Mn3uYc(W9Fe(J>nfv z@~DH7N7g@Om#R#>ra?|CYERPsf)?Lq?UvN){Zi_?fD;^V<4t zz35MTYb26bL;1*4d%oJY9V48Y{aN|m*|kMT1pP955<#j!f>OSqD8bP*#o>RFPE84h)uD( zRl}HsW#_tz+h1m#eaNh{53P@dKC4Rk68#%yq0h?PH6{kb4-*6b-V9qM*K^l&Ofc8M z{fJ6@=@ye(hDW_t*COR_(3qtlDJ)s;5@QnsmM2I;%oN$#zy9Ygy9teBm{DXH{ps zxHYP_K&7?F8&rB&Vi%|q>pV0Zs`$O(OQ*SswWtOio{EiUwWNB3bWgt4>J5^zu?X`y zaXxR%$&IcT*&;q@>++ykwdGoZuNSrB)&0gpaO(i+4P#a_K%GUOqAELD)rIxf5Wu18 zWdx{!X=~gu4Kh%afnFhd^g#1y?MdWLWS~mEXdbQo>g4f8*|SLwG>?{NkKSypw4ZF& z9<08i?bap(qvVUDWk2(1Jvl}m@08uf%inDcdMLx|E^91fHl?vpx2mkMjLOR>l$MQa zEa@!x8~b{cazJeKyBmmc&#^4>ZFBP75puO@1$`-k@4m-!<_lUuImSI@oc1bJYr-Xx zdrGr*sK;JY^v6A2_3Ol=>o+qVZ3N3n%=#7$bur#>*AQ02V>5|4j(Jj&&!#TVhvwwa z%IcLmS;G((=7URBu(XP$YaA3ph6L_I3y%;v_rX_NV_s>0I!n!Fl_xE(9AUh|I+Tqywj|6eq8mJiN3DOHSJ%f3 zUuk+iIdR@Cg8p$=bV_|_1Y$qc9G`CU_Jc8Mi(@jB1Q! z5+|upx951-vm}r9$}RSaPZf0|5WTvkMJ}^@VRRuD=F&CHggndZsYW~|1cO)PDXZ$E z7KgnTT$;p081}Dk${Kn-V-2adWRuoVIX9WBY7o^<(-?jxFVDCx?J8WQ7Tx2S?^QzM zW)ueOCe&28G@6ZNi5|ELb5ISFt?l}Nwljl5fExjMivtrWhY6F6UuJiS)ryJ3Kr)^x zpKj4CNBUa8Bw|pFmm?tzWLV!?G}Vt_kD53ajwW0>3>bub$+W~nsWfN-K6Ehh_o+qM zfR?yE9q-^xNrr>7l3_D6kbZw|Hpu5&{ek&zn|pxUxh||h<7 znwL|1RYjzVH4l*ItfozaC{wyuo1T;zeRw<`g4DNRMjwx*mzwR((%UV)iP87aMryxM zwGXm4raGi+7~K%9Q}&j7sC<;7OrlrJ^X|h|oqln(JYjWNm*A(u6=wB&@e{(~;Tjk% zuUM{uuku4y$%pR7)MX_FgX)w^I%UZCb@U@<9Z@f(`{FDjIV-RIL&FQ#Aa5_q+k0io zSb3;NCUj}u_k%?7M5a{Bgc@zuwq>Ji*(48*lnJdG-Gj{k;0QUqR?svibjw5a+Gq2j zHkm?<1iAvXGqSCjI&}N`j7L`_ih*dDF%0#6}OV387S=VlY`JZO1lHr{z z;{MG4j3=i{+8Z@@X0Y5HFKdr8k(smZ+4ifVLkHp)l4py&Y>BssL6#w%8($jAW%3-7(!c;FFqwgALv(@&5UYmA4WVe^K@?MAcUHMHH0WILpHX1$iHt?C2Y&r?IGEQ>er!NS9A!dWW&X`YeXX z>Y+4@P|7i74IeKZR%ZLBJW%{{%t6YpAq)vlwZa_mdQ-*RMX*+DugBzpc*KlQq1lj%mZsJo)ogT5{!<`FnUKUyPI%)I~%+6CY1S zRhy9Kd${p}XrxYdGm61w^hiqHOC1m9!>>vbrV0l>LT1Cf7kDgHZ$!c{w!c!8ui)*; z$usb5A=!4zZ}Qp?!dG)2OP)#nil@wEBC|ez)B;WS{-3$#GmCPjcNa<#nSb@Xn^#T6 zD*^tpsFn7=U$h8RLB4GcbHp8P)o`2jMyEr0kmT4u8;G4^A& z=UQHRXuG!Yo@=Q?x>|f*A=ab;Mt4~nuwJv2a8o?zl3UFw0$yuTTJ?aXepN0-m6_(P zOl+;!XaWzxrMCtB(ZI1@os|R?7SVxoObI_$i-}Ly?(%>`kA=oPA;>)>9$`~rrtb7k zccI({BE>x#BSSJ=P$gH@2*oxjR(1^GW6OHxTsPMWB_ID;FHf0I{(@0*)o5w#kaNe# zex33Z4U5MqFWRf{y+Z#c2rAv8nPp?t=2BTyX-&Mb*ox(tY$CRj^w=-c540e+=j3*; zp~QXhxEe&)4oU#w0Z4h%{^Wgy8eBI&nw3H{@-^ zYFhh_gs+&iXkAZ@2Ss)U+T##wjmRXL{3h*jf-#gxsX%+2Xl=y%EIR`p)KItVn3o;v zWdfcP>p|?=BlWr`bjk#a_@FIJO#FZENUq_GRGG>-Fun>ae*z1DlVWQ5FT;Wi)FX?Zzq zqnVyq!SjuK@GUC*C+-2+Kpowx7+f|=78&<|ev$gzc#`&I!m`SyMib_}crcy!V#c)w z+%2*;+qj5#<>W4>F}VHfId>^utl#Oa@R>YcrMg+EdV@Zb=QFt{%F9BjYujk*oLuj#RjTeX!zx7+nHsS7i|^tA8Ln5* zZ}kdh8fUT`nR?)j+V9veNQ2}ltzWOFG}Y7d4p9Gznd{z8*Tk~^Js%alLcPIVdt^$N zeAmYOXGC_YmMJwdrB1GEl5MDLHjLiNPp4ZoKm9c2&aWGL zx}#e5x4zG7#hwnaXVp_Hb3L+eu_vAtv8OvM&b5Ds%+17}t{bOSE}gZ)SsHt!u}kw} zTB@W`q_J8WO`V|D1aAa3V`Hl{wkQw3WrQ@=N@KICJ&or7Z)}ssQPPNB(XOgR;}~hg z)*df}1E{?N2XdZ8oM9>8Z-1J}i({uX>WMvVuLf5DCJat*Oc-V{W=o0X!`{xqqAX0& z%#rIvE@)(O^}NtTb(W3J4}O4k@&$0O2V zSxemDNAmI!oRIGKcBYxnyKHuk(Ma}Wq3@JEv)?Jm7d#l3lP|C+bZhvDuZ{B99La8c z-;ZW9ceeRLQQaA|-|Ck4=jHvDFv4*CR!Qr;4SON*5PC@W|D$*C=J0mhqn>1)*VkHE zl$CVcwvtxbMUkr|%b>Er_>=A;!+C3wK{~g7tEe?s2hC?VXs%KGLW3LC^cG|_y?SlV zGHB$b!O_Zn8f2uIjrx)cHH;%!KYONSdlz$dQ3p31$f#j8n2sln)V^)wD0>^-Gf4}KMvl6pny3M-@ z`nT(pzMRjiVQMGKQSGdhRd)oklwQd&H0bQ$H)Y|iNhQ^3 zOJ#m(;{1#%Y9^*1p$_I@(mJp{R4f~l3KbMzUmkxHB}B~Oul{YjHFY5}a-dPUa5n$H zRuM_vvM5JcN41WvS|@j#ZL6YF#FYH!stlZeEovhH`Iwd-{&etL#sAGZ~H>;M==@ zdtPOKx>L#Xa;rRzr9tE3`YJQgdhn??FMXiD5&L)ml&54Fo!TqP@^g6t1NKN? zsFf?4)s3m1cDvJo4!L5yJV!B>|5SfQ)hdm3@HfloS!e>8BD%P<=F#XgFKs*%>j2(H zc8_c94YGYvwztZeoz{`+pFDw7MZesU3VXaWb)-7f=I@wV8E+k_UZ-qkUS6;4NHspw zk!p!m&b+uN7gx$6&Vo4lnpvHv)(ItUbS@;T6MGFQ@he+RSPK@^%T44gTdkX~S#K0% z(eg1`aQ-HfMZd7Ix*qGhO4I;1K2JGYu)zqugtqswxzIoa*_n--vc50C#>raWsZW#V zO`M&Rvm0bZQC1`_hkJmljYF<;wzop(FI8ydp1IZf0}SI?Dz zfq<>&Ze+X)@QaY5C6#{aDXQ#5Q@g2teDKm4)x5P*w-!N~VR4+*qh!D|w^{3UqH!M) zBd{Q=QK9i{&@{&vJ5!~Qgs4(1_oz~Mo*8mV4eFNpGz?8ophR3C)gp7b;WDI;Xh=az zoUKX{*q@j_4ewgstA)|#Bu>loBHKbbwQ8;~E&HsR>zt7Sr)67lHoVT{ zs@EL+HCLi$#8wU{3M{PCaqQ>hbmLd+Q)L|#K@RjAE1q`h zu;LeX%Da>OGSk?Gu+yj8tnaUq6KqX%n{K+TiLldWwrCeK<|6~+q-J^83V9*usPfl8 zN=`_uu#=2!2s`~@68EetflE==Q`RiasPev44YJB|B9wt&5bb^D(W?|)QhgrA0<;7? zirw;;y!?ewvazrzAEyG=_*dkK|54<|a?96x4fJDZ+(?am^hQF5?s`Ho&ayRXqlb&G zk_By%Fx{5L{+y8h&wKx6UVceG7jqr!NU)05v+-kCN5y{28TULF<%sr5g~dUGV3AWd zU~&Bau-#mfVYEZt%xjIc+Ism$r+lM9?kviky|Q?$EbfuTU2;}IzAmzuMYCEK*T`a% zsAo0F;*qkrRTj6%9Xa{>2u*b-2tv<}tLtSk86s`6c$BbWE^e2_W`QD67mt_46nGq` zUsG3u^IOteE6@YZvc`}M{vLJwXX{!donatxS(!Ee{tlaIL=j!0;jD7}Qr7eEYVH;0 z?H!fvH8s{S**0vi(RuBS+G|TIv%Ma6YMgaE!AXTz1ig!FuZK;ZN46I>OPLY3u5T?# zT95t=Ya@vRmK}$~RrFo7+6fX8@8}}4suopp3z3jypum2?txEO6)_=#Hddy2bd)e&Kf*h2SgS=91S}Bkf z{Tq%E411wdE>bVGWoqU54td@=7|E*2R`SQHs;=btW&NKwn0&^na{uSFyiD7u|5L51 z26?$CFZWh(&i6ITh`88>ETer#$PKLB#tr^+UjA$){SR2jG9nwA#U0D&h7=1>Ey%}b zc~o%CzQ^TEtr9{etgkQpT;nij?QZojuQNiFR&8^Q6@=A_5%Pv=qv=e+%i$z#Yr#OJ zqpDiD*t1G4@Q2oPajByEceb7wI_(JBPnfkuXo;Q<)X*qvn;y(Ur^VxRoE03HX$1#H zq&{wW^ElDdVdi)_&Z1rPaZ~A3$3$5CeU#Mg@qsx<5ikemJetTsgd+$-7 zBVD2eX%PraSZk$CDcaGk@Ry?{;e?}L|`UjZZGwf-v62Xg7HKiN&zT`Aoe~S$CDo9{=7z?~ zP>&2*Y;H(os7i*aWvE7m>SV}bb3-F#s8xo{FEKPihH7QVVsk_FR#djls>Y3$p>`SS zkfAX$WbCq`k_?U0c;7E`8nyQdgdS5?Ejmd&_Xhh@>az?cXV(mxovsoxd5ra%Ns}ZU z5_%_m&XjSCqRVRHE2COuNh>~vI+>VJkPfQWC6Lp>en-9 zI=sqBuM31*1NTLPIG_#m<%Jg*$Stm!bVxsY)-x}48QNbWQj7XDtgX_zs zz;FnU*Zq2S*WZ#wqh_7&VL_=;uQHn&y|T`yC5xL=s}}8=j}WBn;rjnsr?=K-_xq*1 zd7+XmNk-K(@c%s(2y5bk~1D|`Kb|FE)r^! zQm`7NxhTz*w4W_f*kvGvU9#nFaPnh2u!0A%a2+ZOzMw3z5GOwrXua$5Qpl>uv#piM zscF&2I%Kj_Pg9Xz6&L2-K{&sFJ!?)L9d&qen&lBpGh0)zk0^~ovj&K2Ct0%aBTk%1 zrs#^XvZ6;;bg7$y1#3l>tf-b1HL{{kRy4|rCRs63RQ#r+lPA{#MjxZ7=2I zr3U$ZQHk-dp(+?V?lp6TZPhJ5&dZOD;<%Mb#X)z4QMqEAEbymfDGC;O|IKMYYD>kEF?gqOty6T-D>0^7tRmV>B!UYt*as;ZiKo}<@y@N6SD@?D zKA=-x@c<|(!{iI2*;LN=pj`vj3Vc6B?LWX&2>feAjmqemMv7lH`qNBV~ zSD`KtjFZiF6)GLV)AK1JM@_TTqLeUqeU;Q#Yn8Kdi_&^)QCi<3y5x*PZNh9iVRlCpt*|&>$HVI)?GZ9lOMV_ z&*<)hn@3Xe0$fTKf;s{r#N9+@%wBE|pUczzy5gM;rJ;Ur{CZHx2l=^Q4~(e|gwkjo zGFY*c<@JdWwnDfd~cVy>2UZ_gApdBm51K5ONYY7ER4aFP%dJ+klOwA^^VX#&7Aoh zDd8y%|1-6MEM-!&)*$OHGp%FZX!)F_;lF0V9cZ*eCAoi`d?xE0ZV)X9fUvUUk-u@A zZW)`Gu^r0pL(GoOt1&Xy%smR-Y;WX>DcmDj237Lu47p-TlWcF~3YxCEVe%})zFDAa za!F3Ez|ZjMM6Otw$Q95vDH;82uO>dD?pB$Ydc`7u=(l)=XB&@{%Fmx_mV0aE0>8}; zxnR89Yvc1%F2k)5+yi-ezzV^w!ll_I#}(wKjdEO0ep)MscF3VbT^Xq5Ri1}jt7-N9 zI4V12PHKIq!8=QC8pQ>Wy5$K$$(f)UOEQ!Yl2Q1jAou08P&tbZYOU)$ENA?F3%)!*TF!2l1s!tA7+F9T`FL4Sl3&@nsS?=SI5=;iOQEx=h0fwz>Bh+# z=}MzYM*3)T}t3}+lRR1Jrd4yrWpStC># zOKZgOc{zT4sbL3EgT<1&eT}%GC^y&|k+(EG=vbuI=26ZwRJZv}lD9NHUn5AZMeLIj zh<)LywKO%zn*#4?dNk`nqLR+Z!_hS&Ibo{oy^k=aO1rf>g0GH8VhhpJoo%i3j`h4Yqm$}$qxN?LS_V-j@uTq+x@BR{1c^rx`J zO}6NuOZ1zmPWirmcy1|d(cdCeHRO#PR4cR1VYMbNYb@UFraI;On1-`0Y|(EHt1pg| zgHm|i=bgGYdn;OMR`Y5$?1)o0SEl6z1xVGls!X=cwwyqlt!|LRi*h(hg2^KEK$cD% z4!mnOxMtOBcFZg+`cC;9W>-O;&B?Q6slqrhZ!Blo)>E;+k1skliVdnNoBc;F)t+JEmHTnb67Nf}Foj=wxvwbh4OY>?7okTDj0d zC&Wz_6FsR6om^2>lz#JURIdP8D;NsC&epThi+u zqn>#|w#~`5o(1N`x}hL?GGOus!0}-4EPSKos$9o&DN!lIXPFE?X~QynmdWs)%oTq> zZA4N~<0LFlYeKQpTCR9o>DH6Ri%x=q2N#zH!Gw>^&_F+gaYRNQHVEp0I=Ju#q?8#H z&Jt=^Ho+(5`C^+iw99*pt;EpUg<|_YU)+K=+u8lGL>PyY3;t6C{)e5S&jJlgpEcTj z5x(O0N>`?VuS=UznYEzo_9xAOxwc+uGb*zdWTnkzNEsPOXPV%80;y#p>k0H;V#EZ9iKmz3P5xAk&4}9sU7cm9 z7G6!3mGnj^NuMjq=PE}j>+(i44X1jRH4T{Cn#;CfP2+4EV_VbayK?nEgQb6?WD=fL zdG%)itIXMOnJg!h_^QfC_5hjIn>C)iGH+9utOga!HNak3oe8SmoS{j~s*_TqzPNt# ztE@I7fIxtvKt)Ibs$h$4SaO>(cnC)1>S<~}PG!f#n0F^l>tT{M3m zC4Hl%&uA5WV}!~`?yi}G4Mq78BoeMRgi?!OCsJ$#+vnbHxiBvmV)!7P%+GeO$*9Yc zy|c(#puQucYtb@$a!waA)wNKxDzz*;S2IfDTGpm#ldobTvzS5Ma+@jVx3y`eHtGTX zEBA{ovIeYf*SjWjdr@w;S;Ol?2)yo7#@35+kQ#~t%WDZ^-_j`5eoXQlS3tjo641u+ z{dQRyfg^}qz){3~=kp!c9PV7#5Uc^wRWl6+Aui)u6l zV-Y>hnq<*P?R2)NMb68~c_U;|tt@JmMcv9(V9h1SyNJ|`(Xyyr7IkQj#-dJHG+q`N zU15=EDTa4D#l>wjG-_n5FODW{7^t;IEWsmz)Sbw}XBPSgZMpfNrFWGI^2MBdF=;iU zsf=Bab90&()|8hf4_2nuga_y3U=IPfN4LwSVVBHo)T)nT8ntb-27PK}mYW_OGRxWy zmhij6nZ$fEwiT5ax5HbGXBA(u6~sfSTV>+C-CHH5^@}^g8-FKvVMCfXbqzHxETI*? z`kj`+3Q?rr6Nh_cudyF3Q0LxjZMAThTm{9Z<0Qj5AChw-;OF{#xx{01xWjMm6lCg#j!k z@-BTY@Bn#eXk1h+PQ~FL$jJjHA6EanN|)2-qg$iuXbaQm?$N2m+drR^&nJ(rt||Tm zl4kxgt)*SNwzaj?lS&S0AO5J>aG$&dgQZ}T*wtrl@KrXi`%(*r*~w$$azo__I(eq}Kg)L&bL!ui z1no4%M2DE4Q(v5h*gP_2wWildsx@tHs5P5iXnL9jTl`!TUKSc2kwb~Yx3lmk|g?rA|P|Tr0 zZYgTb9Hf0$YC7{3Yi8lCUGb;kwR0cftJKd-1a&{7-_h1N?U!A$;HEw$pNTHw80RBX zI89upraa)&VB%X|&)YKx_EcBkXQK;X&O62aLB9oI(-$46Op z+s76`9Zn|6U3*cv;*qQ6 z@2gg9+|IU;#-Xo@{Z z&o4sx4EvJuyVPcMS7BPCRf2hmp%izRMd1RUHJ(17Y=O?4batt@C|KSHR$GH*&Coi8 zCxfSgRz$Nc1VDjVqB)d+P2rcrU5rx>j~qiCabb=) z&NY>0_f|11noT4s$b3_+82~CUEr^4N<3x8cyglM+I^JC#%1I;B+nS$Ll#?p0PKHwh zhNnIDbyFBvm7wHpzSZeIXD4Ip+Lua*pO91jgQu3`WaF@eW`?X)H1keZ8PhQyFdgQt zW1^i@aHcw(cxwMia8?3=#v39}>6Hy*IkPXw^~2wtU9LJ|tLxHwsBV>#{+m)vM{?($!UmvCAXNmQY zob^|Gyam!v3i5bP9&eEQi*kQKYa*eQO)JVYmqLDC|95uwIo01akpGll$e;7AW98N! z`K6aG6uGrZZmpKPYvk@ax!g(@-a1l#*($fDc--~1a%;0(ZlZ<&AEM^gQF7~Oxw~EN z?vPu@$mN}K>v*}`qE~!*bcb3r{E??3 zvs(73k$vmr&_;E;{d1%oYHm`G5#V)!ym7mGkKu2$X&Tqu(Xwy5c6x$;a;SL*ZZ|Fs zerbPG^D+r*_@L%(v_TA7{X9~!nl&41UcJoA%RE~piJZ=BmwA;5Yx68&&Ascs>dh#p z6Ov14(Q17TiP$`59c_dl(Sv2KCQ{1^FC0)w)Fcx6ptl}2YyB7!`pjTI#_GRmnZePT zpvP#T5cBSPhT%m0mJEeneKc5-XPu~kNz{MjYR_~4uyn(3t=gw5G%Wm zJzv*cVkatKeNjd3Y-4jd^&LHpPzXvIj+9vzp~zbQHOkn|#iT*73~XNZE*IMzybuXJ!#@nf%5)GmFM)6FQ%> z8jtRlNqMzXCYF;f{q39gZ!=j;KKrssRk*W$w9%w0{92SC^Q0=Q_%E0h|D$!1s=knt zs-}7xi>C;Aau9A15`sLb#AEly6@k5j$*{_(J7r&uk8PCp(a1UrOwY1{Ed&Gy)=C7% zNJ%=_5jfMl!gJCIC*adaTI+PP9G@=A(_T)*c~EKAEH7$8y-Ic0LQMt5Y}wb2Kb%71 z+8~-?GLg9W0gHEkvM8VQbtqrRdJHwP{|HoMR;@ zDKt$Ht&6SD^vTWgy;MZ&6q9&&CW!}WoVDqc@$x-mWjxd%y|m`3oN+(jl(*sMCSEqb zs3VeR_-QyjHB0El>x-wCYIPmTL{e)A=3bTL%%?qyWy0&PdgaxUjt8|<61VNxq8#f_ zEP18Wa!l(5k)12dri0_bsx(2Q9NEDaH>ydluqZ!PFr~~`FWy}%Z!(X~%6g?Bu51$` zI}?&k_a^hj?O=YJzm3zhzB#n&E{HP&eFVZyh2h}y~o@^Be&Q7GB z_o!TvUV)p`)Fb&WIfM5ovTKzzRm)yAvR9pqZLx_-e;m;f|dDGB#N+YV@yi8XV<%)u)?-77j&CT0w_sZn4GPy@4 zcgbYChRIbjxmqUI$mBYi+$fWqWb#Ov+$xhT^uRSthF#pO-j&IDnOrZE+hp=6nLJu1 zx65S6#$#l1r%WC%lS?vroE_7=I)nIf{}umRdcx`rb9qwfKiA_YS?4olN>MB7^iyYm zh>{iN#dhdRV_TnRgRG`~aIa*?^Gl}VZDc&ZWaV%}$J?Co3^yKvYlECo)VF+5PA*E< zfa`$d0$UiBU3pr&yF?K~Bxdsp+?V zOmA~AhdwOH2ZGfD>(7txzilf@o2MQp=CeN^ms)x*x8>85SDzRX4>gI$jwy=Dgso?s z9NcT)fTM^*nDkO3;Xqf=yBHyRxavMm_P{8^3iH*0AL3^#sV>J-;(jw+Sn7%D7R?~Q z%Y;^mK8b~!)*9Sdt@JkXNeV-f_0*4seQiI~ELZGn=Xi7dX|xar*JacKBK-VMdHEA_ z9GVCAMe-l&PQQ|FnVpx}>2LMuQsbI()}G1bw`0B$uKWXe`9QbY=67LtvzS^dL+oE} z1Yx3uuem9UKkBnhHvXq`@@Xr3$TJ)wLBk78`+C7j;dxK24qP_Z>1#BxA^dnmY5jun z&SAe$trud9)#>HAsi(-ibGR;{Ci=6|@z3OCk{ahwA2qtSC!5!5$ufPd9oi~aM@W^5 zFP zy-au3E6$?H3g}h?3BLqo%*{e=rMXt-{c;PWZ(@A#7EoHc<+ys;D=)_x z&wMXNV7=T!u)b67!G6JPX^=gOvL|jddy@Wm`+1ud0QxbiW2gMMLA1SKZrJfo~{v%8!P`~Wo@*?5H)S8WQ$bR=FUdx zY?A-6vNq#VN2I-tWzE?cOO&6eU12l$SFDbfVo34TNt#{+T@f@*$e+C9%dIuC221x`3>zz zBRC!dwKeo2)=*PiFY-ttW7xG*i;SZ;^gE}cOr>EQ8h zj`+g0GuDm1apZ8OIbD9E{!f)N z8UH5*)?nRGU=3G8gFRanT-Na2IkzK_tu@x6760r@FdR){K`&N^<2md5S{!%wI}FQ2c@0 z;a`(Jt3>^;z zVY(q?#&yf5^71L-7s(gobC#luXrwHT3+;(bM9P_c4cB5J3z>2FUvH7?ZD>7bkBbGD z3A@ZLW1`nWv}ZNO_{KW-63q#xsRW&7se=rqSaStRs3I6|@<}FJ(=x94jk(lx)1xM%~IP^(U{ak(G6_ zvQbtx$;y$kvQ<_li*Kc6qY#@|X^mW0wrSa0u6AX+th5NlO3Te$X%-*HRF+ZlH&RT` z3(lk4SBbO{ce8c8mr>U!ZD`as$ZO0?!1E!9JYXGIR8g_MFl|mL*NHWTY%HKRNt2l9HaMKDK4q za9>NzBe7(Z+%;O3w968!lKs<8Su$Qc%Z3uBYV{pJS zo$;tFcPa*0egt_XXphcAP)1@wG#20u6nZ6}VabjX!9d7nOq6wxywztLH9{`6vZ(XB zka9eI;eRqCeTM6)HKKM9xIRc2oxjA!Etww zSeEPR8d+T@s~hEaP4f6iS=}mkw+K;MR=U-eIkmc5Ua6PWd3mKxU}HWqT2{BqYI2~) z$m&j6JziFq!4_O-|-Q^;?XQ;hPmny8;sjO?AR%CL-nXyu_UE6Qa&H+wQrGU%`O z!@T^kLtZjXz@`1)#>%uFIXWfVzKz`HYT2qrwyKlw7{hbgNIAMy6Uye=agd_dHp{gx z9O~t5ZSpqDhTf`Ow(5{;$H;d&WY|Ph1j6QpqL{a-{v?WTPl>*Ch zR{IiXwXa+HEQ;!nG|O3KK*HVXD@h-mRqqSt{w|;Cuz9UAur3_QOS#87%|;JH!$EVl zJQ|`c>#}(dGdAxmvDUpfKH`W zKTEvX`_Roa~D z2k!AR?!*b`Zz$4bcCPgt{3&dN3_JH;lU?^()(;l3zvY&(LdIO#2b-^wyd5N8Cx@61 zmW(-kur0}(-DUny2tUqiJfyev;;RC;Vt z#+Lc3JW{51mcq(Ys+D3Ti?!%1*2Ls_%q+FXy5-WmTxyn@zHzgUG|SICUHv$J+<;0l zYK^sLT524j)i#P)UsMw)slmRl@k3B-YVuNJv+Q~6g8Dp%HQyaGlm)I2T9I*z+;fQg zt09fOyUg=IHT%8M+)5f{7>*N>gqYZC%-mjzd;1LaQC-f{!3?yat{IV-fnG8Tjz>X$ zZFCN9^Vi8Le2w~GR0d0Ld3GjC7n%(*qsLQjyFIIoQ0Ho3 z-ZtsoNLxC%Po}W(a#?Xu%=#MSp`twGwJeZDW)71`h@xIXWHnexK-lJ9n-Nz3NSSUb z@gL2*i)rJ=;EhJzN6M+U(>=ic-d(;?M_SbRIk#KRu9=~W z6rEA&qhhE7BC?O*ze_a*r#kp&CalNk~y- zrndv5!d@wr)GMgYc_aR3Y8F{IjIu>pcFl`LdC{-aSCiyzQ%$=;))Zw;LEf2@cP4vb zrnRlqH9FnhdNfjzQq_9=pRl${CYqpvl-{8KbKN3fh}QEqS_F*s=wl`p7A8Fqz5TpV z^25=xXS{E~{~!bOYC&bX=9!l(iO=4dq0nqL*1MsLB@Ejc7qwkyRUB z!BrVEEl9mdt_At(&?^(i%ETU-*rj(dQ3P+y#A=yXBNOWcPT<5QnK)7=riMNfQ$rt& z3yi6W)>;CG%*4?$v0Wy12n~JU1Wv?@QqpD<6Fmpk1+_OvLjam4>Dh%`Osi)W`|?D5 zior>U%I4!0l;AcwuWBc9J{#rFN}KW=6gA?oFWyrl)Vnx`gHW!-94uwQ1uG0r6qPP$ z7{^L+j#=^K5$OAJ??H;zaScez;Tc_!J#w-~;yWpK)a6W?gC5<}8OpnG+Bw=L{eru+ za4r`XWcWt8u}S@7sw-L_2bZWgYFdrlrCMB?p}ScvCJ4aJcwluSLUMdaEbRr7r$z%0V>9(M37h;*SWo2JRZFKi(dTMKUmW0v)U`F3rrj zO*;n4=8R@mmb4rtjfz}8udo)Ay1IG82u4C>pNL}+j9ye3F=*@WF>aM?s*SP^vlO;C zb)7cKS`t6wC3pd0RV5up6esvt_7d!5#dc=b3S}f;NW$4o+78&`9r8r-61-57o$wMQ zFNCkfs<}1Dt3`R0no$&tDrl40DXDsoKHJ`Zp*;uQ&T_V6%3k+m6LKEWmfb$ma=U(2 zE<=2-C7pbhHSyefbIO%1PSE8aO zJ)a9wc0bmcYTYjVdMk>`s=z_)Y}mJelNN#S24oI%hdGkT%tdB;X6|`;Id4Omx$Zx- z45M**8Ar0G{ad}<_V50ZD%jA`XFxc&ii>5j@3|YO6KaV0o9!Jg)QN3AIt7C?Q@}i9 zBdm#GZL5h#yt^Z`UZof6TvjiXf2972as$w-J$b=K{{LD@Ix^5-PSi69NoPP6 z>Q*$!9e{x2KXX;?kmAN;O65C3;jY*(t*jAD2bGvbYM-DFv4>rh|G~Vs4XzKJJl2BA(KpqaRuQJ|)76K!jjqN<26uR7lL@@ zHL0?J-;3J6&NVVyUY(*H8in*x?W001anmJM{rfVSotv8F70g87Aa*v8S4C@>nHiab zeXaWEIxkC*){1}eht}U>P$~H zLVZR1tYy7rzmxs9KYKUKC({~bT9XjNn${}QT7>7xu$fjX)0$-(GPYi(p>?;(G+U{s zwac^)nKnl0XVb>Zw3194r^i&gl9)IVaBs4c{5<-^ylk}>uuam~t&cwJQ)fk{xbsUk z<#8wxjah+6V;5univzFaN+yu>GCC|+%C4LS6*IK$IY(jEC z(q^dw)b8dDl92)P3Mu!UqI}0z0nchI7385RDX|b#SJcAwtVZ`=J(S{cC3kVJ!{6(( ziaMpl-@^l-^Qh7$t>VFAmTtf%)sd5VwgmLmnZG`6Ue+6K3A<3$qX7}m$UE|Fubjo14|%b0c<(;;IrZM?=<8!zQ% zJA1_Cm9xcsMfNvq1_jO*<&C6u+2_kzvavnM#&(m9E`?M!+AC8}zHv^7T?QYiUT_!8 z>XavmbGf&?@^4+a3gX@ak5HUWFQf+fW>LQB^;?pZ@ayq;I*9v%X@VZ!Am3KPiiJd_jJalb;miF{=poL{6K0{Z~%@iQZnW0gR)abMF_1dcrHp^1H zcIKm7np#CD8K6<_X_2E%d`%+mndltYiAv|N8lmKTsm%1zf)YacLDQCD$)YVYp_H-g zF<-8Pfn-+_-Ys7poCbg?!AIFfHVyJ&W8iO@lPz5m`qS=K!sK3QZ6(6a0Aq$Og4v6z zlj8Ee*61-^XZDsf2t%5MSsZ_Ltwr{e48?K7C9vj%iBR#5I|88VbMMP8ee7rc=3GuK5x+PPIZ`qD0e-} zJa=V2jd@>ZU25SubPgN8LTVu!`>U0Qzg8YPZaqdmS3-L!qQG1a{Rjx9QMtOzVPhEJ zNkd=4bLbI&+Dpx(z?8FI6Yq4m#ix7xkYjd7O3?B-;=C-%Bg2Z}s*Kyf62px1dxVv= zB&$oT&u22cvZvAF>$S=Rnldm+Yt&tdW3$cpR5w`GRmm)LX6u`94wR(LuP~j<<40E& z<*I^Gc27yoCU(xr&JA*2QO+yKZ>aH@=Cz;E@AqPI<-7@I(!K^Qi=>IUW;a~=~tdV+h_h~XHRL~W%fFq>F2(hB)vl(nuqFStF1BC8npRS z9iU$otaaA4dYMUw8pbd_F@U(344<#z6Dh=lr<=ld(jp-5_`_6b%jbzYZyIG82^?x9D zEctMJjxVGow+C^E-Lz=WYZkBmR3WpU5Tswf^PH1cdA8-h53iUF@|&XkrXbxp=}s%D zkHFSU9=*?Eq%k98a#8d6-jkE}G{{m~)FnIUFsn)B`)8YdF|9G0NkBnr&&{C)uT>674p-XILk5= z-c^)$r8RU$xn^3@vGrF;mg;y*`b@vg1&_n}d~x3CGdX!C`77qyx_LoSx%#_PH9FO! zaOpa+T&ciyjI@&ar*ljWUu-M*V@0jf?E4381=q3BAU9LfhSmV|1;~1VQZ;)5e8i@G zrS{(r>nEuP$^_~FI5)C#?)x|I&lbR^rW^(E*Q$Q+E#4AuM`d`bZ!pssiLO8R*@uwi z&I&8vDHS74t3=*5Q8gHd}VrVK891(JNL}&QU9~Ke4-? zHl1pxqU=QO9@%-RE}uUKZ>;IMR`zX9v)Vywe`V!EYWS#6Amy81UzF?99sSKZ6V0`e z=2Ciy&N$^KQ>956unS=698D~^Am7Mon^*tlplM}QR%f7OAIPon?G$`_tU!`mKdI)obFEfax{kXS4?}j zloPF2p3OsdT`}$PckORS|4nnx4tZy)qj*V9E=kAtZw|kO^p?*l$~gsjG$)UyYaYH| zwAN$JEF4JnSF!VHw%C6J zv+O?{80y5ZKed7Nf%+Z&jGS7-5uolH9ou69(e^|?o5&wM#-zZlLH+$(1Ib^p?J1z1 zW5?LuDYpA#dpfAc**$Qt*#DlueFA3%?jLvnsJ}ZXwhxJIY;@ayIEc$lPT-GT*Czu% z9r)S6&j+3q_$5%E!9xD%@xR6&{rwq%i$LA4k5>0D2|O?G8-W)DUKBVKcuC+gP@l^c z{L$lmJMg=p9{2l!KM4F`;B|pN0rhvQV*7@`n*x6Z>hW)j?OzA}Ch)hQe*Opk=yC4h z&q)3}!5_W-@ogJYnNFNy8T z0T`NJwx13B2dKw=5!CCF z8sEkRZ|5aD!>}PR9|&8+jyEc{Nu0Lt5ehUc1a<|E1@%0o*v9>B-1kTgcyKP7N#;P#*%f2Y`fXW*`Z{eiS4u;0%J+&yq+;9h|cwC#AaVtfDCeqU@K z6nIGB2LeA7I6Lt0zz+u=6?jbGv7lZzY5R6va{^BY{A7Io+1UPk;7Q;Fes@u94}p4| zWwCu(;I{&=2)rur+kq*nTna<=FpvZ0ncwK5#wQ_qU8~jB-2QK7j`W9s=rh9uD%q9K~OHJ;#80eaFZ4 zoY?*}sNerm>>muA5Awf!Ikp#qdL37QDwlp3+kXW4U+&{CJ^sU>p6^j`H25;e|MGh5 zmpcC(Znf>Fj)RQi^8%>99}nvBw~o(=7~1is1Wt|pJA(TCU1NWLAU!qg`!hhj-lJms z7*Ma{W3hdFY@Yz?`3Au*@Eh^@1)%CRSAlw-?*{%bKEDps_xUqW&-3Tl{zrWNeBg_L zFN5|RVp|WY+eD!aaYP#8GPUa;8Ay=Qwnu^bp1MH(*C3GXpAbkUhiz{O>UGhv!nUV^ zdY&CYz0N}dPXhJ*ECTg?of&v`;F3V7y!QJG0*7M%C4mrW?e~`jek+B3S=+`c@#htYrDXd@24dOR=lIiY|Cm7RFx#f% zf+3ML!||X#p9z6m#{Nlx(CqAcTgT^pfl~wV;n?rr8Q2f%^PC=tb#B|c2hI%KEATym z`vlGkq_3F$?tsAe1s)W5NZP-q%&J z{q4XNfm95&<9$Ey2cUlcy1<{t{#AiD1l|<*v%p&de-U^asK@zD;Qt2xAwK_O;5~u& z1wH`k?;eirM+5&H_(b4e0{;r?_n(dJe*``s_+sG8fvLc{5S1OV)JGXp7jX4~%x+$V5W;QoOJ1imlupuj@{KM?pKP@mu7 zvHjt|qXLf!JT~xSfyW2V2|NMR<9s@{KO6Y@z>@-T*4p(C2F?#$0P61-#`bA}Ukf}V za8clyfoBIU2|O?G8-W*qdfcJdz9ev2;AQdo6@lLl{BGb60iZwS08 z@MnRy1pXrMw!mKp{wDCZf&UwLSKuE4{}^~r;C-Op*MotN#{NGCJ`wx>8rx3?J{$Ot z`25A#emU^fz}Eu>`lZb)P|rtQMB65yYM2ik5jZlClxh1uy*ccAkp2t{fnD)AMQUw- zDR4p{DVw%`%RmbD+BOAc4Yv+_Yaj(nZ2y$Nse#)E?ijdJ;5!3%4a6g7zn>mBBXIY? znSpx+z9(>>z*&L&2ObdkzCaR5?0I}3wm%d&JMi$p4+kCKX9k`fxCB&vaT&-^k*h$}UslEE zHw4}k__M%U0)G*B8>r|1O>F-bMCFk`#Qu9gJOOp`F_AcLMeN{jq;KsOO_ToqhiRQ1!~$pq}r;vHz&p zJ~lr8G^ocp3DoOe0O~yYa^S+i(?IA+`W|MRi^V&KcM|MfsvSf)>t&uzGS;4z@y&+(u>w@=6Z^FV$om&E=n zV*hQR-q&wHeJ{Ta{NKR40{;N&_wI@9`#?R;j`+Zm7 z`1rgO+Y>=O-egei=l=M7dVEe9OgkPaAa=jUg8IF|_jG-vISFTmnu2 zZwh=A)cbh?)cgKR;9mou4ty5W?@^t_zV~9_%b*^Y;;FWu3@bZtKDI}I>W`ZU>i4z= z_5Aw;&H?qjCxCkVPX~S;)bGy+^|_r1>T@{{)bD=-)bC#u+e3ku#Qw_yuZaCuftZ+b zb?m<;@JE5y2d)mh8PxMoSkdIoouFPf4JhrruLP2ZZ~J=@N_st81im?N8&L0KJ5Z0e z1E}}0OKg*1VfzO_{rzsSy+fxg9Mt<;9QeIJ zS~J=ADR^hc|5G4|gZ8{01NC=}3^v8LfchM_i*0D?HqVX&^}bF7_5ME<_?f`ZfqGqE z1a)4X72D^6dfk_UdVIPh*>UcO&+iPpJMiAXHK3m7q1b*5)a!aCwx0`p3Dobs0_u61 z+kBjKfO@_iK>hq3AYYL^V?PD|Z9JU_>T$ma>h;fy?XSk?XMy_rbK>)_$M*TLeKDxx z@|&@rYS;GtD?vT~uRuNS9f5ZS-VN&WydTu#uL*o8@DWgd_jqhS8TeG--$4ESbFuwG z;7frNGPL8q2I}`}csP2UO`vX5kJ3JGkNw@TpV~uq-Yw$utpeX1_!dxqPhOFIkCX|+ zcf{vA2ksI`o|MhkcY}KV_s0GMLA}3&WBdKFeQ4kjfky{^H1OkrCkB2d@C%?m$1leA zyx2ZD@RY!>1fClB)xgt1y`IIfeOBN(f#(L&&&|Guws!$_Jv=bB{|nUT@WI$VH1M#% zBS8KADY5;Pz*7Ui8hAQr?=7~^0`+&-#P+qZP3JYcpFaiO3+nII#P&m=j?X7!`>DXc zf%;x*_)D+15!Bz&{Lt?o)bqU^tOiM^Hryfb9f3Q8`nzeM9%r}MzegbLRqXS<1NQ^< zxF-gl6Z^j&cp<2A_IsdS_m5-$%D@`~e-7$#9tZXMo(y~n)OGYFP_OH?K-j6aO=6y5 zV<2rFZJX}zh8=;$z;S`Sfm;N=IdGdmdidDyw+nnn;4Xm!fx89n8Mt@get`#qdO!aa zcyR3hU~C^6cv#>Ofky@&4eEV=G`5e6?N7w^iGiO2^*POp?UO-WFHQ&b_lrS&pXY-5 z9xev;x|RlB3hMX18AwTR+x`xyzq=;3e-wCq;A&8hLvL=wn?e2lFXQvu!3k_X6QBP* z@HtSw_eyNP7D)P@9fyn`JAWOhzuyYfb#Vt!f42)b79;`9zV|^;ujA0b!vc>8JTmZT zP>*+NY=0Hh=X6eNp9|{oFO2PrV|#gQe-qT_bY*P+52(kxJ@)@D_TL%XcgOahV*7qj zpZ{aA|M9>l1D^u*_|F7B7x+>jm45B|YC8RX>jHCujiCOXMyG~tvA;dGI|I98|G2;& zQ15$-*xm}%J`B6x8G1 z4C?z_6Wfs3?DsiPKYw#A&TT(jKf@Y=kb0dtP|wpC*c3<)U)$dT z>i61Xy93nc-4olrfo}?=JBs~otH3u0z9n!QP_O6hpdNRJz@6jsT|j+4RJ*a`92TD+ z8Qau{w*4Q8{l~@j$7B0MP>=sPP>*wde12hkz7#|yk?+O!wV=Mgm7qR{)qyt#-VEw> z-WuEVYPIkED)!$I+rJCE6V&tnDL%g+H2D#qKOXobsMklTqkT?qANyT5sQY&T^}O&L zZT`_-+RnRQY#$n*(?rm|cQmNyrDT+S@8h5zXECVfCkMs8cOj_b`0Cic2Gsk$Htb8M5R5K0d!Yw%36AJ<1{5b>t8hx=o3A8}GfKUf;Vwz3x3@ z`=f!UgL+;64eIaCitTei9-VwAwyzHSUf?x>*9QIw)ZbqZ>iO=E{cAuy?_;3O^S^^S zu3rQ7`(!fO`KhF9_tymK{+2-6KiYODsMlEx><%0U>T%y3xLxeuA@Cibo}ao7_WJ=) zk5An>L%Q79=lgO`yFuP>`x!9&Vsomcx zp#J_;Q03P7v3)V9&ueMmrJ&yb<*|KbAeB#T|Mvoa6u2@zUmbX3?7ube_P{#>{}i|; z@G(%&|9Ie&flq;Yz0U+b7yDlbdx}1Y_om;O@Uhlz9sN&fo~7oA#i6)X#q&_;~DpGVm!-&;Lx|bD*B*pP(M6s@Koo25Z1;kCom<8Jx5WN!K)s*sVta@9eCNPvp#E;R*xnP=^SwK8Z&2^^{h%J_ z2vEQOk=Xu3;O9X7-528Xd9i(R;3=S9|EZuJXECVvcYbVN3hM8d2Yxd?zdE+R2kP@* z3F`T81~ED0Px1M^f%gZl3493D^F9{akH_{?fzJd!2kLQO0d@Q}P4MgM0Qp~b_Z&cFvEV@3X zWdE$LW5PX)>eE|X zy*MHEq@sLN!x=^89uoVo;_77|Syb+MMde*wblhdd)r(gY?Y}2{AzWwYuH5y)4T_F? zbCI7di_ZIwN$)B0H!S;iFN%B5>>ro?laf9q_KYGw3t}(L{$)k?>)}P^9+~u`isC&# z=@%yb;@FqPzC8SL(yxkrby1wx6_xv)qWaukG=4pn^rwsB|84lY@DD}tyb$}P*ncYW z`}d^37XCB)|5FtAHiJ69+lAW~`P(_%CF#3{!@?0o@%9$w-#h6OVo%BbIYsTZyy$v8 zEc=fritm`>n#B`hpIUT3oS*bdiu_+5UJ+hh)E?Iq)#E3zABz2#qU-&QqT^TT>GH2u zWUm!_op8ORzbW>cV{aOJ^Vn}Ksz*=KcPXw}_NeUNy{KN}VowOCgww-W;eO$Qa7nl< zJg~^$A+ZmOePrxo!sEgd!jr?(i;n+f>~mtDAN#`Cm&N{a?5ks6Thz|ih2IQs2yY5+ z4!;xL8h)>+{2vvy`#nj&FMJ^B55<1C=)65$ble}pm%_gkwf8@Z;(9&&PxwZ-(%`PV z)r#`15qq7Y@qD}3JBB?;-#hlC;@XvOR?+cuiq8Ae;=tkwMRA-S`>LXNuTA<*MfLqo z(Q$XhzOTsN1L04?hr)-8j(e=AoY!K%9{a7kbjNQ~lyCcR=c0BSQ*_*-@VM~e;@Xvd zMN#=z6&-&~_Wva54;8h~ACkVtkS_mP;W|afZ4moS;hU4bX}D!k9OJTo?{GpmsmRaN za7H*MoF6VKYS(2&aW7B$L9q{xeQ4~%!o$NO!Xv|@iu%nkqV(-zZ(kJO&ar!9?;3kp>`}4Dgu91(hP~mqqVkr9 zCl|$aM$vV6ZqjckIv@8Go!|Sy2a57P9Q)Ct>+*%zFNJ?BDrbYC-SKY<-&|CmO^f`z zwWz*3CcUSqyj@}s3rB^!hrLDl#ubfYvtrK)_e=VLMfEx?_KM>AWuI9T$Js^YpI=np ztBc~gF7}U#%DF4NC%mudxQAmu8vCi(zY3o&n%BKnUGE_|-&_!q*LlK!XguiqUN68s3$^TDVrYUihZ)E#c-x zU~7)V~YG9 zTa<4_>=TOWds*zuv;T_l>ZD&2`?~Ok@aFK=@CV_K!h6C8ipu{<_)yXxjr~~oc=$y4 zR8hQ7hrdhuAHwI7{!;j-@UPkb_wcpwpW*A_f5JDyl}2@Ot`e>mt`V*kt`n{oZcx;Y zBZ}I8_t;B{;$IdXnDkSN+T--_jPT6xli}G#$DbSfyx54dn_tPOo`OXZlDLSv;EIRJiBELTjlJcJUBe0sGf(# zK0G`kJTg40DBrQ+itwcDKRNd4vCjz43_ls3UF7H7@cg3oy(ISKMfLu2?5o0Sl74M? zT~WI{9Q)DmvGDQmiSViLS4I8N3$b4+isw(^Uz7g#*#8Xwlk_)YuQIlabG4%5*NVMP zapSVLiM?I8eYj)Mb-7Ei&6A6c?@juIqU&tGqIQ^{{fmmO%L9{sPd`KqG0uTA<*v2V@(Ulr?>?SR*_f0c1vKlYZQdTbhQ z9&TAw&Ni{P3%4&CH^vl|*ISft@1pyAR_y(Xt$m8(J0|JJC4EKF@h698B>l`He`hEC zyrTC0a?-CVs`qt8aok?i?hh1|^T#5;e=YL!TGBTk-@Tt0Rg}Ja*jp6mxY!el?fe#< z|7FFkipLfCzqr`?v7&OWD~jjlq~DeF2a5duBz&l-+(%+y?)mqPU*U{@*2iwYPPC zcP?s|QN`AdMfKb>>`nUKMSi9xeR?>fD2@fO7Zt^OT`Cn$Y=Mt;o+BMe)BW_M5}E z6qUPq(fn&zQTe+ky|?K2aYf}Uk9}ZxP5s*J zBK%cR`@B&U$2t?c@;4}I&rORf7dJ0DPump5w|&xgjNKFNn)G4eh;UTV@q5PZ4aXJv zn-ESZDtA`)&k6Sn=NIK)6fO;yhX;j+gohPZuKb6GM& z&k4^9KUZA2%DFJSIJ_jhtf>B1gx4hf+VHyYo8b-NP2tVqcZ%x&z2d;)(?#v|Tyf>% z3q|Gpsi@z2Bk3zm>iXj?i;mx>IIuV&_LSnvWls&KhcmK&PB=g53t}&cy);}FF39-a}N8Gf=T-#M|*4bMyZ=faDV zeo5@hi`wZ&Nxv(+C%mty{T~jW2!C7DFTED~jiT}9&6B(QTNbtVTZ`h_F6li<-zDk8 zVvh(%g=4aR&v0DP{X0GTXB4+6`{3Az6pf?D6y-a)xN7nA@XVs?=A5GXelzJe#eO{e zXHoz6rYYU=ZwWUqI)0m?dTkeOAMRLOwbFZv@(nBMpY|+jzX?g7T2%g_;U|myon3VN zx#9Uq|6J^gi~L?5`--ACzgKkp55n8C|E{8Po+~=;k4gVa?AKzyUUd9_!Z*T|_UYnT zt!V!mMe~;Ji~LT>{^{92Bleu4`YwvSw77cN2NwA`C_K2RzK6y>EId3sB0MrYDm

zxZ`54h<#G*lfzTP)3g7~@a*v1@ci(?@RIQI@QU#2@Y?X3;Z5Op!taH*7uEMi;ay3; zFZ@Z;ABz2G?8l0(f6t&m6 zMc2=Tu`doU2`>vT55HVg-c_-$E{gxA*f$r&`@N#_pDyzMT+wka74=(h6qUcyv@U(M zB72Quo1YaOKdQK9u{ZXzqI}E41B?6~TwJqwc+!t3>aWf$iszgnf8R{{14YL@R9v(8 zc#+>H!l#Pr^<1&VUF7F4;cH2Mz390ABz=|XUH&z~b&B?{7j94#$A}{ToRKF{depS)&*Jl4iu^$VcO8S3duQIbMXN{tA){4De>2uBsgxgb0?>BkkteR9$Dbbj{VTvYE{i~Qdn`>yc5qV|8HDBh=v^8Ge^ zuBdT`JPql%6{COkI# zFN}S0Q8`~u`dvl-?@Ri_MaMsy{eLei@AahrCwwFOx0~JN-@eGt&fzXe-!&W-jwr5Q z`SvcZTbz;fSw+Y17khrVptydeA5?VSk4gHmMfq2RCxxemXB5@r%-Cm#=Z5Ep7lxOF zmlxIds@T_r*M&EPH;1=|KL~#m-V;6$J`_G$6xUt> ziv!Dk>zvNdHbw2YOHsZNMfdO2?4Mqg|FEL=IwCwO`;Q5aEh_h<>_0W>rxzW6Rno6X z`n5@aDE7nQqs8?r|8KK@mAPHHYZTRct)e(LC@OE$q;DQ>Syb;GWA9v4{`8{wXC-}3 zk)H*z7llj0rQx!o;|`2{Q0zlu9~%4cqPSNS`8_%NPtE=_VxJj)GU?|O&5N%ps?T*r z@jjgWj}_JX@$iZ8sqB9`_HSeVq3HNE_UqzUugD%2drVP%_6)}r`QN)J-+{3Y3J)%7 z&m&?VSrq4Su~)=CwaD)oMfE?sXdZQSk^gJ5|GHvZw=BwcPf@uq6kUgZ4_BJk`CF|h z-#X!&it>*tYVQd}{wHPs^w=|s@*Q5}_qd|?PDuJ?MaNxU*ThqU+$2r2nAE&+SF!-&GXn14;i$ z_)z$8(Rq0y_ESae^FsJq(*Idh{+4~6zwL?}l|8B`eL;9^QTfLeTe}tcKRxMZglC4I zEIR($B7Z+f`t8LQf6;k(IQC=N|9I@DV*jeB9sXYAZ_@=G_biI1Hyl^wcS1NN=~H9R zC~B|$iq7MKMgC5WeO{5j^OJsa_(b@6k^eWsRTg&nS1U?iD_pP0@37dT!rhDf?-_es z?7d@8Dr(OevFC*I!$slJB0tN*<>7(Ze{k$WVjor%&)G>or|3GkB=%+DUCi`w~DMg7EcNndMGmv6oBP2pRL>a%IMdAMcx)^MAma<(t> z-&5p&RMK}(`naO{%}Dy3aDGvI#}pmEqNv;xl73n2%fl}hm3LL_t7BgqezVBmqp=?^ z^7lmeRMMX=%D2+uuK#;$k>Bl#;@CO%F5$2uKOU&ana?(!^&n$}nobddl zUl?8zUY`9|h1VAOy)O1mv2PB)6W&@B_YaE7xhwX4;ZMSci~K!WbR9h%`?ulm!as!1 zg)bDHkH5tJYf*WxCH;-0ue7xDze>1TQNFceuM@5pZVw07<-3s zr*Kd>I2;lV4Tpy#!_nbx;U3{$;n<>h-xhmfI62&>=z4lj?DrPkr$-kZ_u-=Z^;1Rp zt`8q6YQHCo^8LD~zk0doe7q9=x#+z7yXZby|A21)hDFD19Bx+RZ`N%%s1+s2xr$I!_-j zs_$7v`9D)s?q`dR`$BPx;dK2;Rgr^C;LpA9c4 ziu2MUe?JVLDY~BjuPDxcCw=SXoxg31(sw92ZlBou#(rN>`+uaU{1c0=`?HGL^@5`I z_(JwyTIBCb;g#Xnvj6L`uaEt$*x!zQOZeTSe?Pn!LV+6Fw9E zK76*Qo@>6NJ8u1=csB|+N%~erezp#`Ew*+F2Nhjs6N~aqF7o^CqVw?nqIf=BblgXZ z+VQNS{GTd1uNM^^cU#eMcgB9Us9rA@U8e&M?DDT$l)h0>`c6g1PYd5$bbdY@`=X-q zz7SqoZ09HY?<|V*!K6Qu^uHDLU#q{fD`$(Mcy}uDH>fDy;YI#NCw;eYkK$I9-dB|G zfTFnHSsYkAt?0Oq7gsKRqNuzt#J;rH;*9;3@XGM3;n#}teIxeu;kUvY!*3Ure_K&K z?v4Fm(RulGabR)4L7l%h09-95bV~;MnPG%RC-ff9ruN#e=+HI6vcCA((jFZfB55~>*6=DpDAjeXJbDfz8Joo{eO=A zYV3c6{|f&buKcdf-|FGo;rii5;U-1ree2i*!=1vxMeQ*>_ULeraBTRtaB?^;oEgpy z`-<9SVYoQlKRlqgYVChV?03d~cTpVgOZxl64`lz*Md$s**r#OwX+`xrtLXU8B>l6o zFN*zz;;Oa(i?P2HekHuJsDHk#sGPft&j0hpRf{hd)$5h;&qez;I=D;UxG3Ld;Z{lC zI@~ttJA{M6A=y7P93GA=s?Q#=_X@`r)pv4Hy!#j3NAE7S_A83x1L4u(hl}DrKK6-4 z`A-W!k^N_7|EI&xCjEk<{9lNDY52wPOGW+0jYaM9^P)JO%>G{%H!J&ZMeY0FqI#_U z?(V+bq$s}4!YzvYj4kr>ws3OMaWk|3{YA%pps1faEB2>~j{8h_LDD}TUX=7pV}CLH zQc<~ghR-Jb`S8W0uX{-6f5W2sY!Q3waA3GoIJmfa_U}}bKCS5ZeZ!eW zh-ShJ=y=>@O?@DKyl5=_u<$dDe`-1k>4*S{VU;D!>@Z;Il0Cj5Q)Z1%rcT)X!FE$RPA`oCiTJN$3bS3a!sw`#b0Q9G?2 zd)?R@#@;C0INT)Mtmr&!U3C1w;@ZU_**`QK9*zu0hr5M)gnNZ!!|~zU!inMJqH<=( zo*T{!`@)6c;&A_ByIy0zGkjOl-&=GYd@$)p7uD;-v5${^Vv(QIlK!#SXJ!AVlm405 z7sUR2cu~?Xjs3;&OW{|-D~rniT2Xn|C;eODjp4V$Tf*;#w}syie;D2o-WlFqRL=de ze;oU#u^$P4R@Cmlj{TePnWE#LEsFEy*niIcSBu*9UrGOO(fzgU`?~Z&MaK^*N}nBj zUhJcb`hnAm`t{Ew{l=o>ZYi!?ytC*&xjVc!=|3yV_lu-I8UC`UKF`K}z9`N=$9}cw zxPOHIO8UQJ4>-K5@9IV6t{JYK^bL!S-#GRbMfDq7lz)8qws2xm{(WLki#@X_uD+sv z?L9?)K2hZ7tfJ#SUDW;;B>nS6$9=IV{~bm7?k>vrP7e1e@;5v7+@d%?82jj=IFB!i>$IZl;IqYb zi(f3ZdKJZSXY6NVKOcMTBf9zFwncI8P?UeCqT{C(`JWg2=%Rcdj(t&49A7MMUHpDg z{(H0k#iIPLgs*1*zhe*hKv&+%Mfp}Q^0#i%*Ds1=ciOQ(~9EUx2W8CvHOaSTU>O1yf6EY z&i)T&|M9Uu5}p`-G(06dttjqKgr5#C$o|iV7ZsIzX;C~^hTq8k>%(t_H)j8BvA-Yt z?%4MhJ;(ey>CYzp`J!@OE{f~br2nm`T{ih(*DjldTNLHrI`+1)cL)a+9k*|hzqv*6 zFD`1|{fiqF-xvG+;RnJG7Ue&_sGJkSQ^Jphp9nt{ekQyiyePah{8D&j__d<=u8)0V zcuRO&_`~qd@ZRvp;ZMV#71i(Ov7e0n%h|ni~aA||1E0Y zZI9|Wv8bK)iT$3~?*(n^H^daHUqVng)o)`9o3yY55KYV-m&hXtuaeSz#o*zy6 zX|X?5EA6X=eF2C4DU?(-LdZv9}FJ}e;z(r z+ufyMj&xF4ZpADZ6UkqOkUkU#lzFKsCRz9|?&+6gY;rii5#q}%Swngy_O!`i- z2gM!|duTYkXx=imsNLRP+@yGPQTraB^e+^x-`rBvuD50X9Yy8cne=;$)?=S3^0(@T zyX$KGqT@Cy%D-{!&0=p6Zk6*; z`+pHW8UC^;|8K(IhtG#E7ahO;ab5Wv7TF_zxQPSd$a!oMSeb9)ZV8Q<@;Ds{XQQ1tk|E5{h8RG4KFB);|oRp zzEb4ptHpuE`-}YjID9bsA1TWJWcW{8Ul>J{$Y<;TOU$hF>XazbnJ9hF{D6Z^XX7$lteP-x7W|ye<5G_`~py z@Xn&+?~ncC@WJq>;UnSC!k>q~2%ijp8U8x_P54as`|#QD`S8W???|UanW^ue9}LX^pD0qB|I(sSoVLSsQ#ZWI{sTp|8`NicNE2OXLxsbZ+L%E z`45JVgg+0T41XOy6FwWh7`_s|8vY~vSNPv>xUZ_#kFy`S-4g9 zZ(VfU4zYI%2NfMRq-g%LSJKCZSf*!RbNFnlEZdH7`b>+qTI+3>~imGIT@AK|}>uET%F9&ln8=c?hF;kx05;l|-+ z;a1_cMeVm!?7>Ctu}9L!Cw*eLPq=TY_B+CNCH>v8-y8dVu|H5$?uUxvIWg&{gdYn(5q_$u z+)u~;Z20-`3*i^TuY_L>zaCy6-Wc9e6vy{t-x1zjRNlR@e;oca{8{*mqI^#l`T0%K ze;+;{z8wBJ{9E{cMaTU&_R1g4`3~1E^1p8E4a1F#+HI@Y+lD(7`5PR2XgD(5t!V$) zBEREfPcG`uriC-ZxnWru#IV+H`i)IZeBqeQo=IQc({ok3*aGmJX`Y=(MKOo6c&=!=P5;po-BpZ-c59 zj&YQ$k)BXGc);?~;Vpf{fFZR#p&d1`YB{Lt&fCPK@Gx<}lF~^nzw6MpJd@kD>(I7i zwb-C)ecSug^+v@rwdHXIik^q*t=#FYO|EziuBGOKORYU#6@=UFX% zc8kYVI;iZ4O||))R%`d877?c_foj`%t=xI-C}&ekb*fe8x1;8_qg>BYw4^gWsQ&9| zI=HEFT?5pyeXW$f)>f`?t*>6L@IiHj%ek<5Ufg0>+V(E5$b0H)n$}ba{r`GvYiQ-^ zX=kdZBDU9+*;DN=zq8QO&O%SMvu$ll=a#y!DGyq;r&?bg?MZFBuc`cVD=I2oi%}(N z6KdPNOnFmlx};Q1>HN~=?MiWPy4r@;)uw)Qc+*Kur!}41w6AnRCsbZKx#`rVGn>w9I=^XOse6YmXu71-okAV!d{M_bYm|pc)ne39?j|~= zDQ}Zo9)0`JN)_{z0sA#|tb1)}yVs~Z?zN#+Pk!8SRQlAG?%EhyaY%RH(b-MKGrdLP z9voW7$TPFm$Tc&xT{Bd=dypRb$~=qHqF`C+whUa9sO z)>>m&#XY6A^*?k$sr$?5=k9T>4zFHhQqwu5`U=|HbXlofbdRReN3^YxEoEfOIjZSC zb>9qcr4MhV53eZYUDkXqZ`;c&w&9g;W>Y0Due>8#JR@2pbWWv+g!YyWt$cJu(~(U_ zH67h_OsRTMM-8uf(Jod;4IkjB;dMn*B`Vn-M=6IoYDCL3qU{~o_Ks|ON4C9cJ)(Rq zD;?GLj%s^HwY{TT%IKCdx}}V1DPvm7n52kyx2iGStEoEf)=D&c8&PL@Vd*|?+vsjv zUG_=3$j!B=z0+H|dC!PC%Z@c(jA$+2)r3x}l;yR5WaaBAb>8WmQmsvUOSLvtPj}47 zvIjMl#~Id^QnXvwt|N;B>p#~6U0(lrIJ^2aGOV)*{hTqEXZ3HEL1yU0$^qRmb;~Y6m)}R6Ee# zQtd#U>7jKDRVR1esMaP_e%F%gaZpn!T7yc_uGG;Z>x@(WMZupu%Iw;U&a40Sto@^^ zHTap_@=vZdusy5k!cy%+dC)$iTKiDj`omGJm8g`yR#R;?s#=MEZ8fUmP{;0^X)D_^ zo6fKOTFI3?sp*_jtwfiVY9%_N>By#|nvQNdrs-~_t|IDKZAEQsCE9KC<_Z#*bS*=r zi-Jn&|2MvE%`0`UQG0i5+q<=GBkAbs(-)R%Pdd11Z&Mz$EtN;BQr@)c=+>&V+g@HN zv&$dld3LofT~MmcN4GYo@*7R4oW_ySmCC>Nr`l?HrHyIrtPYb}P3E+k^pxty^cf>d zT^D1TMZ16Vio3OKrH?6Zv&weXw8EsOb4s1H-Kw;KO?#V8Y&yN^!luhh$5cJ^M+>XB z<7baLzf()avd91bH?OvoxJTt2Ue~oJr@iX#7*@KXT8=KND|hF*>y2Ggn$B%Huj%}z zeWjie=#o(gme`t=zsgavJNU z@b6rVt-47ue;!wnPi#7=>6E7XG@aUXTGQ!GXE&YKbbiymrVE-bEH!f<*Eqhm2UYo= zljy{zQ=3k2I=AWkrXn@JrZbz`tL4VmKYk`uy~nrq8DH%)p|-Wj_?iREDb+IL>%S?b z<~-voj!u_UUgxn}C-9sxv9|Sc=0V-OvYX|ZHyIlz)YZ12)D@?thcz{C;)6PNVwFW5 z>n@|7w46=K+oa}yQp;)9DrH7f-X_%M`T%IV)Y?dm~6CyQdbhS`( zpUJIUqls-R0h8+rolsYiW35V1{-@R++NJY3wfUUduCJ-h^VD|i^j0sc853GNQ~u3w zCsciS^Gr0M^6~Gvl&Z_jx(=y%|IE58sQg-rc1KxdF+-;Im?u*;npxL4)t)okd70T} zoikhO&1@0Qth>+kp>)siROz!?>1Lv~M>HMT)R~=C{Q(`*R8+1oDz;gzyg*^m(mb z^I8n%ITLE1b2`73Yn9BlQrzj(J!Nfyihq9dFu!@QZsuv9hrV_eJR#dwm%i%jsrJza zQS~xgpi1ehyN4>PuhqyClWmdrwQ~E4ww;~6c6Ri)wwE^5o(ozFc&f53T2EDUaZ`Ep z%+%Rg)MEC8Wm`KhYI{9x*;e|Z=3!B*srAYUzVNw4~L2Nh@*x=3{v~%D6nCQe9)7 zdZ-py-r`^0;#}TJ(^pSy{V>)4nfufErRK;~iuv!v>Z3E<$Yded(H z(&aHj(W}$mrjwe^Y}#Gja_ZqH)-@qTze%O&V~qq>j;B=1&}mKWwc0@SB~#k5Q>w-j zD;jHTRv0J`Ruz;nqUp${qnfIR^G%gvJ(lvXXQuoc0jaxO|4h}+%xz-z)jdslnAu91 z+1kxaSBg^fYgCKrnW?h$%v8+!2xox}a zJN0eebI{(V<|3}{uHHDMS^SuhQZbl;*ymU)uyjaMGpQ-fo0+9;k+?7D)TZj?j-aBN zQmsVQbV{`k)%MX0W8Fbi zJnkUsD64kVQSKUZHAl^8?dDTxRcp#=w59U*wU+Fw z*`RGlxufaCrb>5rQ>FK{S{QR}i`+%6e7dix(%s8u?cNsjzlrkB#*+@+r|Gn&)`kaFJZAR2rB?3g;HE>GdY-YS zZWY;kE$ijfJ!B2a%BZud2bf&E*BPr!g zpFovvJf%FlyC>H%ojTUNX?;o_BO_H8Gj>mC%9_*i&uJyPAEn4Mr}=j$+Fn%JJ_RNQ=wsL<_d(C4hpXR8O%dbd`kNr=KW}%ZS4tdPw zCf6*MH*0p?^CX?vw$)1x>L_;*^?d0LqT0tONtNYpqUvsxq{`~)LrP#rOTS0 zQ0o4r@_55W#peE{6Pk)gf7gG9@MXLIt&we4kas&&RPJ{wDsNq=sJv;R-lbUKpHicK zr^DO!h^8Z(j%qr(>6oVO8LP6?QC704qpXBdbsSmkZrxN)tNK(<>${YHYqV5;SA#V_ z`K|d=`K@kJ`Sn*+JXR>_ZcTX@-8^_ZFr`xI?oIb-x@Xh=^)qdvud~MEyn8pKubJ3X zJG;th|7wKo?%92IOV`4l4k>S*y{Hz}D^k~qc`kKc^pn&xkhk_!z0Ad^dQEDrp)a-V z{F*_~ZWh3sK9(xih~!>T7yT_&_x@gA`{;owpL%QB^`Nfp{$5Qf`WUKq{e6H^+}Tv^ z+{bijQ+KNN>+g~E!?yX+1JlLzpWc;@Ybp|DQ{`Hjr0S*brOMU!n)Au8@1^qVfvGd% zdB>BIJo;oRuO66+L{Cda+kKH^USwNaSx2HgbWd5vY1`VVtB+ZeZI=F-s-4v&s(s9( z`ril7YCg@W`k&cEW1AmqK9mRjJaw!U9_l>KZXWdiww*PzE-I?7eP>q-*;e1#?P{^k zW1HvM)gMyrW95fxRpSWNCT4oZOXbdKB^py~i+4`jYXs>(mvgI@w#9EWp?uD5*Mrp_ zBQF2O7pgAvT5J2p!}idoBb&PNy>*~tn(o$gucpq6HEt>f&p%W<=;f(ao!4TvQe@j* zW41{}Yo&;48S_u7eXJKzEn~fic9CnDd99x`Q?;#LW~x+;=GQ!ns>S?v|5{VBElx8< zDmE)iR6O1wQ>7bKsdBBfQ)L-v%~6zPt%>$D)q3W=RJnaMTc*mjUQd;7_DjXk&2^Mv z+nMcatz_)BEvmlOxAe7E>T9iJhAds2eeEhT%G(yR6)GxbD^%2&Vh%u;HdPBbs8Y-g zrc`eATG(Q?@@QKg>r_+9i@n}iQuQ)}q1|3*b5V=RjKa1^tXb)09J{!+l`jWuYb&c* zR9TB#%Pej!qgRsRnpxcZFK$=M;#T*?t(3*BzKdHai`%Ge1#C*y(|NJ>MU`cBi}Gpx zYD$f-+Hh&Rs+YDBm$p)tHg8LtH*XBhLDkn90u`qj5p@Q;8LCokJA-CK)EP7{qFTnh zh-zo^BI*p97f~%{UPQH<)dT7bSUsR>;2R;TUcS7c-b9%}d7o#c$?S+uYpT!iB^Py- znFV>*ZgtJu-+k&z^&O0-jP8w)bx0qEB3X}9{qn{mzTZ(!5jQuU`w)Nj%5zUNb3 zDv!~G&aeNB2>oM>nYnGpnupWHrP_{)MBh%8u2<~7-=ag>wn*kw`%~UL1yhljb?;NH zV3l!h%|VQ0-j`^1%D?_cWKulIQZ3^S^1Q*PJB9M;exc@}i(0vh>MYw%f{E_iR1a-NO0BV(i+Urf+&!94^D*PSqr8`(@>^x1BbttCDh9KuZY|Bqjr?Xu z{cof^W4TuxYgSIh?|GB*X0A&4wC+T`B{iF)6Pr$I+Rc^J(fOmDe=TDSr`>2Q2G=K@ z-?Zy@)mpDWyZiWr+BS!oTJ0rHD^yf|S1%R0XH3ff^j1etl(rW()svawm>W6DyECf3 z-PdNmbF!_b<~&p#&3P#Q<~&p#U5iwFGuzp8kJz>fWiCY3dS;8ty<>ZB)BT#NmpKwu zBX<@Rv$tA$U#QyYAE#EVQWiBodT(zu9jkw)+Dbo69i<1RBGl_rwbr{j)4m7w zyg9A@>$JDFJ+)b#?7m2o)7u0(xvBHuzMy70o=8#lQJtXDLx`fqLM>%&? zqqdY@f9`V`kzOOWY@x_j}GFFSbFUv-@?e429 zUmN+Jh)?elsFcyIEZ@9zUzhmi!gq>B(*Acju1nkQPS*w%p`OzljDby+>`fO{TK`)t zeQp0+DgEWdYB#F%{x>$BTD+y9YUD|lcI%q_dv2w?SqY`CweE^x+wNAZ=d^8p`d5WT z>v@*)Y-QAXPfydqO?Pc-Jn=kBogGiLR9RNMsFBu+6z%3m>gAfJYN2PQ%I#*C<}Ai% zaT>{~Hkp}D^@r4ztXH(|EWdXdu3a&E3Zp!$l{v9=U)E7E`@WHi$~rie z-^_D*J?ZdZJ(2R@*@v?9x>WqeN-C!jlRD%2VJfPw2R2rE)7)EXmCF}G)0@s~x}>gF zz4VM~acT^uy`|PCsckEewA=RWsx?L`#rt~NZBK36?gL}1_i)pjE+{pt^fqovshMH7 z8b`YoeEB{3c}r*8i0Lhzql{yEK4s~}X?M3RY}=x8w0C$so7H%eC%#m7`dpgjjTM+Y%_KAm0tq?n@u#8q4UC zru&y#W$j1y}_GS+iFF%k`ag6>umPVce|e22qHxutDX98@q2cl+S3X> z9n!R0cUL+KkxHV6t$4KEeTm|onr$`pltG;-Ggzvop7g1j8q26iyzizWF{1Ua3wKXJ=9f~` z!nj5qJGaGSrBtny=zgc#$5=*PT~-(AUQM-?5sivj&p<`1f1ujJ_(er%b&+Z%vuMhj zQHJthoSR5+tVQ{> zZsshGE%knoj&91cafGV1afB+%I70a`@2ASrt5Pvr6QkPSSVKi(#G&Fh;!x+&Ga4OI zN9$L+UvtuK+moubFKQk(sC?4-O|7IFk0=jDC0~wqzi;zqSMN$4s}-m@mp6BmAL}G^ zVN<_?^6fh1!I}=`!P5j)S7RSlqCT0*X)LF5j%+!NjD7_iZ|(sn+lmL$#_=fNB$?0M#1C zg6?a$?wd90Snt}Xz50Cbik0hGK#w3=JvnuDybGn`*N4-IP1V;GM%6+uP5IPUQ&H)w z>HbZ-QckFCtC3Xc`dc%dPF)H5&u+F$dDDMV-ps|Qn(9kk#p2XA(ynJxmX_$Eqtf+q zw#2XRqWpXMraYU6Q|(|jP90@7PMsI`3FTMcMfou^r@Wb;`)XNKdN69PVctUd(HBui z>5KHm()CJIg!&NQI`g0>q2e^7>b?=AVsqD1*O>dA^49hHU5mKWr6|{(PPMH&oi400 zx2yK_zOARJFaG`V!qb%B*jojqJ2#cbJc@cpY8`+&hiXebE$IiSCy7B-7F9pJ0qrd{ z@1kRydaBklP;aRG-jV7Ny(RZ7H>@ddR!5y(M|tY+AJ4Rx?d~h=?we@&&5NiQe7ERn zQ0cw|q(ho&2hZ}J&7)}dEe6ltK~tW+gQnv5%@I|KXLhO< zz8IoPw1Q8SsDGzg)vS!Fov&A@I(kD*MdBW(-P;e5n6uGQO-DCXx)~Z(uDKaiu2~sX zu4t%I+~ZU!{co`rwQXn0DlT>9n0--4SyQKCuwG6FH`Ov$zNvWpj)jVr-j`gIU>tXUHkl|G6pOHW0`;~C!?2mhYyDgVCtr@J&&meoi) zqUp${qnhs4bdRQD@I+6=;4Lk69ePVkMdj(9y1UKFs21}!mb(7U)2P<-j8C0?GdJoQ z=&P9&)vDbuJ$%{Nzh2YLhV{i#_&1j`Gge>kXQ?>N=%`5a$W&V`Y(3S&=D%C_u^Q0- z8xpg%?kiHNcKU6qc4ljoPyIIKS-(xy)LTocrh0Fxrd{vtF9~=**Hfw=?*5*Hzmd>e z+e52WsrLj!+g|JEX8hKW%p%PD{mRAn?9}YuH{f(ZsUDIJY09UyP0F*rkt)}!CUphr z4~@G6n>tF*M&;BydAbmZUd3IZ6z@eT&)&~bae6CA9i=~^^6O8i*z_cHuck`$HjFA! zzd_wedJoEH|9gzi^9hxrub`s!#7EteR$r`P@a74Q4sNP+&u(;lQyx4wQ%89Yq1}^{ zmNCcI3-Duwlk%V^p(5{}weirsKhU?>=Ba;<)AbG8Rf=(&Y8hiJ<=H4o`8RS>r5LZM zIQ87L>$$skOU|rbkSg(iy_#)x>F=4kK0|x<-xJ!izsCAPy&RQC|K{mYw0^Td#nyeb zY5mi-a_6>d!z|0T7V}n%s-tgdsM^hI=iS>b+iK_A7^-%9NUC<;LQ(#^xuEY}Y%9fT zD(%V==e!!x^v=pPm!rJtEvfog5v4p>1yxV^t#eXG>C>oI)tgbR*tLj0&9+wRe%Ik0 zo^36!U!wAO8%~vIu4op^vwn$+XJO0Z8xl|BO7~3zmB$-%Do#(D&W9G$Q&H`vkD~JH zk!Y85VMU?0@mn~vJhMBq=ibtx<%gP~=yRwi{GsK6`r2q{%kS?K_&z|LJgHG0JeTw(dwzLDr(Q_vUN?tbfLq|%R3`Sn`n?%nky9zBn%O0=GL=#ZvEn=02_h$=-{y=Pn-Ez>97K%524+*W4(WKP5X_p)g;QF=X0uk^fOc`o`a}T z%t@#(ajY6q{`D=?5w4Q%8PSMgukpe4Vy`=q@-H9d-_=TeNu&l;&i-8TxSOcG?i$L6 zJA&@jR2#Z4+^cHWy~}i+_usv)ZQIU{(b-dzcWAC>DiYT-6}c~q=#ZvzTDzxe;WtNA zeqU4j>TY<`5v8tY>L}MUb*vGV^3e4`jgR#<(lLXA1rNvLycZHszhR8Q)CjwdFnwLCHD{j_oS3*YCfnJnmWQ8O1Xi6^Umw+Rb0p-MviJ-MviJ-P?TH{VucnoteCz=BTUK z{Z6~R+QBcb`oD}cKl$HCAVN=GbX-&3^beFz?=Yx%%u-zUj?#NjHPw4iHTC5<9no}T z(@{;en7^JtcWb(P)9!B^?Af+OqUWJv*8foD`^t;De!A~Ax~~B|ok`J>p8u(q)JIY6 z=}4+QJ+D!%WEGuu-wZBp+v?~G2PzV)=#>9%y!_u6SjJ8{eWOIhZs5bQ8hdS0O5amIyNY!26Ncr;?jjE|0lB%h`kt)l3JgRp3N$NWH1lPTfvc{<_ zeJ15opJ@glHfxsDneAVFbWW`iQs>k<9~HSZJj$op8Wp)`KJAmB85-r&e2nto2~3~c(^MXFbE?Jq=d=5^ZDpAoQf29>sq><@r&_Fk9-(yozut6c zQ~vu$S26UD6+GyX6Z0s_ zr>9P;m-A+sirMofb#}Z>rponnNu3w7FRI*bo@XSot?tGny0ocs{R)mc${HQjs@+q! z(aKCwY`#dOO7xsa9c4a7c{A@arim-cwW!7q2gr1l(^@=!Su8~i z(^?F^ytB=#6>7?luhJ;b{oj$vsn4gP($7=z=;x_;^zHsWg?8|z166n5DNsjPqoe%m z?X8-K%5xM|x-Xfjwz9fFwT%9gilOVF^qICDrEjEa)IURaRR3&R`{*ZqF(bd;lFDyX z6qm^RuXK^SMyU9mbK0Hr?rexnYtgPf)Ix7bT}ygPHqZJ->Z`e!?*WaL} z*2DB*)GE7vjJhh#Kg26rSN52DSrD*)xx)z{;H^2c&kE{;+qz#6wl_={XMjm=lD=*Nwpgn`$wC^^lHiI;!dDrem7!)>J#_d#U_-U@AgSC6ouxCPsH2 z{Dm^ggQpU|{Mn7MuT1-z)wUwTnY77&Hy^>l_YxOnC*j6uN4Rw@n zw5iCAHI#od9x4(~AJkEvJE(T>+(G%VCPR5J5>bBiI8;rIM3hhOhNwNBGHAE$D9;E~ zO80ixNTfeiu6aJ?)2O6}b!Pk5;O*^Ss}_&(h>C=FDu(_wFr^rYsGNF3DrdL8VpP(D zYfozl)b-;xiFDVdLz`-0&-YZ!Mlq@s&reiY{Z9r;F-NAZc_STFBl9)NvvpL;r%{i( zBl^dAevBKm^P`ULGb)Du^U$?HS3mVN`cN&}tu%GBd?T@6=!wTHz5myGX6c>*r1(CE zb}2lYu~YH;jT_ZUzSyB^VGd8l&^<-?drh7t`0@J)@1Nu}W2ee8SEsH4V;og4BOP@Q z8tEuMMmp*mFvd~$pfQfBUDrnD=eEV*8y@O@T+#BFu`j4IYK+pq^?%!>PqVGnd?!!+ z*4eM`sJqi|W2mQXZ;PmJo;-C>XH2c=!lp}_ipbld?k|h@j*3rxn&&H#=*Q@groB!5 zUB&L{OS{-!Q2)FYvNA40>km{^zD}p^Fze1#xmF(NZcXKPcT;zpyVwf5)h6$2=!~ZF zbSv-L-E4**&;E2`QxSQtr%Ln`@5-~+-A%i{1fizhp3rVq#HR@8;--$ZvQD+e-0Hol z60KoVQCY8~^1Cak60LGkQT4CBDA)P{b(Cj0cY;#fl~h^26{ka+^4b6V!CU`qoj2DR z)ox}|t~K8JXFa@`e^TDeJSji@eY`W}{-s)5A4Wykf8X=$EvmI(IbHePx-ji#lRXuM zXGtnWeHPY?O}fA5;O`dO_E#PJO<&voR)fD>YujC*FYuLK_kPz~kp5?Q<9mNkVKny_ zO6Hate`)uZEqdE__ty?4we9Y2159t*JR3J@w=Te^>zRtyy90fYV~s(y`wg%XyA=fE zj`z)0a9x2^iPrY1Z=gN7P@cP|bF+!=>h8WD@|Idz`XA~Z)&EfC>VK%OwDdo8T2rOy zf2j2;Gi|Ch^g^^-=@6%0h^n3PyoKs1HKX=>=7CLnOSQkAcY4#gO|6xyX)8Lu)RTf=ZqF(; zqo#i2YKBa^?Zvh2t3@is-(dDD1%C^8bW0!I(%F9dJ+EnBsrf3kVyeyie+_P4>bDK{ znk7>H%?A5_C9dWDR$OeZ&;DPGTkZ6_agmslbnmR_oVKlWeF#09Wurs`rQMdvnEmOhIb30)V9Yos37luv(8o+@`)wYU33Db6NU zihG1A%bBH9n=02?rt0ndm1iO}cN> z8BKjb;QbLbOX}t**2>IOdP_b1QQkc9QNQK##7BAXWJed3x;Lp~{X)UaMpXa%JIc02 zVxG|dS1esWw!KSs6i{f{`RH4?&bckpS|<8?x|kxU%If= z_w!Z?I#nYpIo{GM%lKgi#*ZuQf3qlWIv<7j>r0 z9{c|mr=Gj}i=0#pt`pk*b*FBx)^=@BwRUY#5xPQXx1Q?^x4K)qOSP@vC3JtC!M5)P{B_Z>rS^EAx~$Y+ z{r9&UMwB|6ORI+VdQW7IJG-eo-hKGqN*-;vwEmOs{-Q%_-DP;y#s6vrH7B)iNYma@ zBb=|^jq$_lKfl-?*p#IYq`gh;)e}R4lk-zV_w_hIf6 z-pt0SbmKJ@r%{_q_e@Q@bTR86sJ*U3Y8IlGplacZGunMkCLSxjRLtG`5B-U4#~Q_` zqkP{%#cA!AYK{MWZDCuz%w>)A)H`#^kNG*}$Be?*Fr?|IrtPqOIcvnd0B08vP_qSkX*8eQ3E9b;&?P=|Qe~;L}q*_9fv M?(x3{IAFm41J;MfhX4Qo diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/601a6295-f112-466c-bb36-82a968868280.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/601a6295-f112-466c-bb36-82a968868280.vsidx deleted file mode 100644 index c4670dcdfdc14fba78d0fe920bc9fddc5831121f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114333 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 GmH!{}X70)W diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/6f05dbc3-ffc9-4234-b625-69119aa7c5ef.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/6f05dbc3-ffc9-4234-b625-69119aa7c5ef.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..b9098292fa4bf310f1a316b5f74ef152f3624337 GIT binary patch literal 166571 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 diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/cd0fd8f0-6ffa-4e38-af84-d93f68d4836e.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/cd0fd8f0-6ffa-4e38-af84-d93f68d4836e.vsidx deleted file mode 100644 index 76322428bf5374f6d70c616826ea33d1feb93f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98741 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 diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/d0863680-9836-43d8-844c-586ad60694d1.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/d0863680-9836-43d8-844c-586ad60694d1.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..ce3b17beea2c47a9cbf6c6d3b6e2a0b73da1e0b1 GIT binary patch literal 152159 zcmdSC3w)esb?5(^t47gXk)^R@Yu>SDbeBBR=zbj=hd3#;CKq7AEis8n48b0!Gzt4F+ihPYj zP{{Vvk8xya^t{h=o^yWZcYf!*FW7WtRZJSaCMfrRGfnnCx|{#mG_v)VckH`$*S4Fk z+IiD$d-v^m%htzc?|tke|NUEsKmFM6er#(`*9&jmcJtm_cI@7I-R9m*Z)WS3J-c4J z{lYcJ1uGaqrS9 zUqAKA=1*7u{LkpzwOqe<&xRZK?RevkeQ()%^{%(<-NzB0Ue@Uaz4!Q^Ts{57KmXkA z<>G7krR{Gya~ZZbtN*fZ1=q4^+rDjEuPPV~M|SINuits?_I zSL%!|w3h67*AhLp_Z9n|^R@JycP-ntfBm&@c&^s6bXx9yZGZE=vsN@SwezEIT-mj} zXxpoA-G0`uU9yqoe|h!0w|wE)iuso-x9@uWcHG_ez1Z!pJvZ&xxozK$T|3YCkB!^* zo?dC>t&c9q}E!XbecH{P?)fG1F`-}HKH*2|a`|Ee@dCL`VzH$3*w>9TGv$>ll z#`+&$DPOm2U#@b0C;V@`?KQ92zUO>PQ9ANppPRL8*+rl{?-G{G_wrA@e@P>20^ZZrjeSZ+zY6Z98weP(=8~=exi3uPe4MFWPnUjvKdby!E#2yTQHtwr<@0 z%e!vczVWslw{lR0qglGsFKzsv-@I|feBIe=dBL7td-uN3-S4IKxy7Ac)yt~>Y2Y<0 zycXcxtz=So{=Hi_?zm~k9{)eK-MVRqeRbO&-+YfnF3WfQaHZ~%zc0(zauti&bAi?T zedJfGJD#Yu4UAJxT z>&~*?;_ElHTpe5~|Kgv~Q){{6^}F}I#sAN<*5NMG*0=xTKd!2JuGVt#5c&D^ofRt= z8&B`cj@P>bx^Bnox4-bVopyE3vn$g7S^J6pV=HYhPp#$JUAOJIaXWO$8+V-R?Xv&! zjh79CSNM#Ut!4MNoflY%)bj3u{huvgskOX#+rC@2zG%nJ?c4Tjed+ca&z~+X#en*^ zzGu}JR*YwWqT(nD)W=o(w!hxT4BZ&<%}Z-2{N=wq@)5=U?dR`z3%~zN>c!_=uH3Wh zw%zBk-u;2Me(}32kgJ`smZzs)Y-@fa_=dk)k+ociVmLqDVQcvxfAja7zO@qja-p?c z#D4GAyEZ(hYdJsNVf*r~y??Utxme57&>gmxzkT(pkN(GsozW%J9k!Maf9quruE<)J zrP51;!iDJ$Tg#@)+E?ZtEnCYaPz<(~$KU$?mGLjj)^Z6HgTI#lS@YK`;$N1nxsIv>rTA8o8#$+av`>n}zz*v`cNZQ!|D z%f-@qTgy#*A6*&$a&{{Hf{Uj0wwAKRdscE^E;X&UwZt~uwK913?0va}u=Jgl+{*0B zGfNq5U!t#g!^-%&7r*qSFW&mn9oygZV#vW;x4N`o1UGRjY*y?>N zyf0=nr|E@dLW-r6dFn4c_kaGxN%EtAe@no=7~;>cf)VB7@&*))EAA;gpv$Ti%*YEX zA5mpel~Lu26o@I-tZ<8hX?ZCHM&*sEa$Naw#e(uYZD>%qPO-RtSgTOA@}9gJ6%Q#q z>HZ#Gt#GxzzQ%p$XR4LTXqqp^-LDJRD%_`VlfrxgYhVHV)VP8r3fpfCrxk8@AI=vm z$K3aa;+h>$bXegLg}W6lQ@BIn9`{>5*spN8!c_{dSGd#t(p<(ZGB~OItqO+~PPuPO zMidRJG9|A~VNbEB!bJ+l+-ip=RmS==3h+1;3U|40=waoo@!u1OCXoCv(YNMxn zOBD_%z&`~P3@UH?P{SkeAvFqT6ze^`GdcT^N*=jU;e`9x-w7$4RCv_=-s%bWXE>*D z)_pNGsw4|wOgSlMPQQ5Om*@ODY#s)u<{13I#P4Qk-*Htxb*EAJpD{y>n9Q za++S}R(N`Q$5qW9^2zK#L_s!zkM)m_WiR{H)%;#tUL_mO1ICr(q5Naw6Zk;BpYK_t z%33WnD&^ZuK+_HGq%eYDnr^btN=%x z(ZBa;VLoQ#Sfy}<0>y4OHb%6$RF!OLgYsqiB)=lAO|>emSDYJE?QT{i zqS?4gSzfhb^;*X^vML^-PMhjg$rrh30ll0J8yF6pSg@ zte`or;IOmyV7r3r73^|eE|^uYPr-f#ae#vgjwm>xV3UF!3U(_vq+q9lJqq?JII7^7 zyNq~}U{1j{g<9Q8;t4%kt&eB))76@eD^ROUz1wX(VGH|Np;>GOL*;^FKh?SmpAc7D zy>kw&apf_~MqSGhb8CWnl3SBgDckGcyD{fov2g61tHd=tz2}&^Z|AIsAHh8Q@2_>{ zoySS?gOkp0#PJWKij65yqtae21l$FWjk;?xgB!;HxXAvA_i4Lj>9}m9<$*;xmi58-52M|e6JGHMr@L2Z&0>Q z*|@T0%9blzrEIOT^~yFXTdizZ*@&_UWj$p>%9bcws%(X_HOeNHjVfEDY)si^Wm}X@ zD?6-gO4)X0*DKqlY)09vvVF?-D?6y)A5eBg*$HKvlkHL-5m(jIi!(YjppgmXFs*I{aOpXByYqI?-;L_EMVgK2%4WT-MH|xkWJZGZlIm>N(i0lGo^xkszj z9M{9;%2z30t9-oy@_)^}n;q_bK16sX_P1Cr30jp?H(lbZcrz`+GFi=^m

u&Fa+TP+CTFXdEry&}rT#9623B!#p)mfhbI{ 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 MpTxgT|B!$G7b+D$!2kdN literal 0 HcmV?d00001 diff --git a/源代码/.vs/StgSharpDevelop/v17/.futdcache.v2 b/源代码/.vs/StgSharpDevelop/v17/.futdcache.v2 index 993f13c454056cf0c73ce8692018c6db478fc5bb..6794a4dd1853431196d39a6a48b154d76c2d7373 100644 GIT binary patch delta 215 zcmca2ctVs>a3f;?i)i+}-c@o_w!S*}=nhBal^5k4kMD3KO?G7Tn7oc9fUW-|^RcTB zCN3tsVZ(hJ^!aVsITdg#wQ)*svMs8wJHb+2C yVo6$lQ7%Z!@~e#HlfSVv>)?mwZ9f!vFwtol7GC delta 76 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 Q;;v@{qqEZI(=U(zI|0}roB#j- delta 132352 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

Cur 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 Xk>-+Xir3+7ZA<&B=A0Xf_eB2-8wL^S diff --git a/源代码/.vs/StgSharpDevelop/v17/TestStore/0/000.testlog b/源代码/.vs/StgSharpDevelop/v17/TestStore/0/000.testlog index 9197b6c360119028e0ee97c8339a7730b3d52de1..8857abe6edf74050cb7ce629e149346521891295 100644 GIT binary patch delta 103 zcmeyY+@!nVv*6|cc1uRKBdHsItlv9Xkxd!KbYzrd`DnTCH$?uvn9z$Q#$b6U6C}Uj ZYT|Z?{DaRdsa<=(@=zv7-ud2}DFC)WDf9pU delta 7 OcmZqD{j9v@{|vHjn$5`wAhk!6cZ}V0(>C%Nm$Fcdl7^y=&HM zgGC!4rAniS@;E8C0=03}swE^~qnpGL1qoWUY9d5{R*F(p4QW&LM@6A++Wx4NbnabP z+XU(#>pL@N=FFUPzVCb|uLOVod9Y}f|0g#6K4;df%@D3!e{S<{O3_=eYcHEG$uMV9}5*Q838yBB<#=B4t+`Jupq&1OF#S%j?8s%Pw2NDqmmrmC@w;NFB{1%cX z(JvdMCAgf}?d>jqz@iKt$yCKdw!-B%YqP$~9nkGQECJa!h=1c_i#mJE~XjG7YRLDhLoy@)RtMXKmL8G z1x=wm20FDh1=@Q=t#de$jtww=lYzlloTVZxH4>w2DB8koG8|9yq_EUrGEUOWig>lr zx1J=dxbw+#s21M;%&!_)yJiy3?C;6k6FSzOcVBCHCkX#~qIX`l4x{S^2GgUNA%u%+ zVE=!%ls{xWw~8Pg5J&<)ANL>6`aa!c1lh9yy=rXTJ`g{ZQo zYldnP#*;3Xs%&9C(rlh{U6rEiMtCZx?vG4|Jc+itwVTf6IX_#$Ay6_9Dzj5$fbCAE z`Xi$W$}1qv_BbfWuXL!i!`3tP-kK>DufH&l`!^pAKZRC-@VYirxeCM`WiG@vz>7jzB81x=qJ0GfEu7|j>O>d)iST1>h3%9VaAL7 z=p8u~goTHfpck`r^>v$w#83^Ls)Aw)vLFZw6--K0RiMn2HO3>zBu(c8ED%fOCX``~ zQC-kQO(U2`YJ|jN)}}$0B3`Ml+e6vly*3DuQ%|`E4#$zR;@M0udvxkyt(~kdHpJuH zH981naTq3gJFD({&kUQ_3c~KKBTJCG8h)3D;$GDRo@1kMhs}V;-MKoyk0xsh-NPrZ z<|4|?yS>oDrPt^AFgaM&8T8%pnR@5hW)Bl{L+-^fCjiBd`)LhjZwuo;uJ`a)JoAEl zdR`W){P3dehG?6l!1eL4x2bIACT~ggh{WCSlTeN$)@RT-e+rFlB$mjGnums1%451A zXdlg6@KBRX_1yZ=Qy}16_j{*)h0qqRciQ3YH|pd-qt?MR<2$rGh zT+mV8U`5_GRZ9{v)*X^@e997kFCy~%qd5|$Z;y$GNlya!X?ex2;B)CAC@^cH*m`3GP3!ZQE9-cPYxBGi{!u@z}y1=Z=9Y zCSR>bw{p-36t*maOD(~U6(d8I**BD;QBxMMDk)qp^CS?gGRlP=W;{Eh%AWDzc6-7wc3KsBBrp#I`9azKC2x zbxSv}p=-oaxDBrZ$uxCKvjo$`ie*ka76^W7^8KagTp%NQd0%ucG@t_KkIT?fPv%nZ ztI|jLT^*lUKePfp=7Gi6@J{7QROozn1zPT$$C)JfR;6C;H18&{G#6=I$$pmbW!CsV zJH3Q>yXF?nT;{wm$z{*7e80org=cYBD%RJ>($5f@PNqivGp=6GV)XuHPo!K4_>FP0 zQAMS5VBzd248D~g=w=iypWc_t|4Y7>+4mhzduIy$g{C+C1^G)0T=2uqGuwQl=Ck3+ z-nFPI553{%L*=bj;2M`{CfC?9Hbg}h6jfnd>xv@wAkf$#NL1scZW~;EbKQ##K~zPZ z3YN(zvn@T!@53J^O1iH)&b`t!`ED!P5rAzg?~=r1vJJgBecaZ8LP2M41d+nwct1%* fNBTVx3FK(46K~Hby`t_JOX1IIC%e1RFX#RblE?hA delta 1373 zcmZWpZA@Eb6z25OVxb*nG!!;)#lhIvSTAjM>AF!umqGX zL6aGgd9u7Sx&cu$6E~&2k?Y2$3v*NiG5p#dYtsz}3kY1o}75T5}w3|%CN_L+ZIfk?hBg1Xd-F0rTQnRc-)EQYrG1IWLd zgEKk-XEt6ym&Zk6^Gh6@!ZFk17!~!@T2!UNUB3$SdrO~5E{8t12FI&r$mok8V5Is2 z44}9*M|LiE@FjK!Z?m>qZ7sH9k+(UVB|#e>Y;`*M))K$n8FU0%tpT1FpDYgWr9p?a zBp}*@R?*5kTLMmJ6E=@z;P6c&oJHSOJDu2dL`{~T2NxaoSQ4RyOx8mq{m~oI;M80b zE%m9_;^H4Z91o{ps5b*Aj0Uv$>yhtCr=i}zIH<&>0h0`q(~V4<;S>W@(xrhFP7b5t zm%TvVt^g)sIvCV#U3I}8tQjgoi(Sr<#>H&b8`HA+&R&dm#IQ(s8=5-<3Lgn)EBsIQ zeW+ibL|2cz&e4mn{Ux%#6M3LkcD2R#NXo`K$^3e_OU@|ap*m>()ntJoI91-Jf2%8 zV00u4S4Rqn*~eO6_&5`)nQ2lkJ6bD{Xfx=j;r)IMNeZxR!^JvocknPqEd^}e9uj>H z^bY{0;9Q&RK<|BYJrO@RDd1G97SBv)Ds^|*(}1(%O1HFTb{@!}0RF^~*lWdHy;)K2^1Lnv zOct2&)I~40Uot;*v&Fk{EDj@I<|+{+jD$DLu>Ed<>;k6ix}qFdzk+fQz|;cGmW zr5tpUKD{Z{OD_aGafS~dc*u&8xE;%)J~?f<+zp0_K! nME1dY4KY0iWzu<(O_1zf2ZA&Zgx4M%8{0vvmWB?%)zp6h@W2g{ diff --git a/源代码/BenchMark/obj/BenchMark.csproj.nuget.dgspec.json b/源代码/BenchMark/obj/BenchMark.csproj.nuget.dgspec.json index 03c87655..7dd751e5 100644 --- a/源代码/BenchMark/obj/BenchMark.csproj.nuget.dgspec.json +++ b/源代码/BenchMark/obj/BenchMark.csproj.nuget.dgspec.json @@ -26,7 +26,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/BenchMark/obj/Debug/net6.0/BenchMark.AssemblyInfo.cs b/源代码/BenchMark/obj/Debug/net6.0/BenchMark.AssemblyInfo.cs index a6aa79cb..ade35f86 100644 --- a/源代码/BenchMark/obj/Debug/net6.0/BenchMark.AssemblyInfo.cs +++ b/源代码/BenchMark/obj/Debug/net6.0/BenchMark.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("BenchMark")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d082071f2d004b4566bd19a1a030cf06b112c3af")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("BenchMark")] [assembly: System.Reflection.AssemblyTitleAttribute("BenchMark")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/BenchMark/obj/Release/net6.0/BenchMark.AssemblyInfo.cs b/源代码/BenchMark/obj/Release/net6.0/BenchMark.AssemblyInfo.cs index 292a04c0..f4a273d0 100644 --- a/源代码/BenchMark/obj/Release/net6.0/BenchMark.AssemblyInfo.cs +++ b/源代码/BenchMark/obj/Release/net6.0/BenchMark.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("BenchMark")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+924fe6eef7b6b9441b297f211c82b4684f23d002")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("BenchMark")] [assembly: System.Reflection.AssemblyTitleAttribute("BenchMark")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/BenchMark/obj/Release/net6.0/BenchMark.sourcelink.json b/源代码/BenchMark/obj/Release/net6.0/BenchMark.sourcelink.json index b6831881..b229cf6b 100644 --- a/源代码/BenchMark/obj/Release/net6.0/BenchMark.sourcelink.json +++ b/源代码/BenchMark/obj/Release/net6.0/BenchMark.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/b207f16616b7bd967d647a809cc27e7174063451/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e/*"}} \ No newline at end of file diff --git a/源代码/BenchMark/obj/project.assets.json b/源代码/BenchMark/obj/project.assets.json index 8398023b..5606b456 100644 --- a/源代码/BenchMark/obj/project.assets.json +++ b/源代码/BenchMark/obj/project.assets.json @@ -1779,7 +1779,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/OEM/obj/Debug/net8.0/OEM.AssemblyInfo.cs b/源代码/OEM/obj/Debug/net8.0/OEM.AssemblyInfo.cs index cac90d64..731d5073 100644 --- a/源代码/OEM/obj/Debug/net8.0/OEM.AssemblyInfo.cs +++ b/源代码/OEM/obj/Debug/net8.0/OEM.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("OEM")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1ee4e4a42f2a6b8609a6fce1d36c8da7f4182da6")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("OEM")] [assembly: System.Reflection.AssemblyTitleAttribute("OEM")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/OEM/obj/OEM.csproj.nuget.dgspec.json b/源代码/OEM/obj/OEM.csproj.nuget.dgspec.json index 296686a0..c59c1fa2 100644 --- a/源代码/OEM/obj/OEM.csproj.nuget.dgspec.json +++ b/源代码/OEM/obj/OEM.csproj.nuget.dgspec.json @@ -26,7 +26,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -115,7 +114,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/OEM/obj/project.assets.json b/源代码/OEM/obj/project.assets.json index d63d4059..9f3ce1d4 100644 --- a/源代码/OEM/obj/project.assets.json +++ b/源代码/OEM/obj/project.assets.json @@ -228,7 +228,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/Output/x64/Debug/net6.0/StgSharpDebug.deps.json b/源代码/Output/x64/Debug/net6.0/StgSharpDebug.deps.json index 421e7b7e..237c0100 100644 --- a/源代码/Output/x64/Debug/net6.0/StgSharpDebug.deps.json +++ b/源代码/Output/x64/Debug/net6.0/StgSharpDebug.deps.json @@ -8,21 +8,15 @@ ".NETCoreApp,Version=v6.0": { "StgSharpDebug/1.0.0": { "dependencies": { - "BidirectionalDict": "1.2.0", - "Microsoft.Windows.CsWin32": "0.3.49-beta" + "Microsoft.Windows.CsWin32": "0.3.49-beta", + "System.Collections.Concurrent": "4.3.0" }, "runtime": { "StgSharpDebug.dll": {} } }, - "BidirectionalDict/1.2.0": { - "runtime": { - "lib/netcoreapp3.1/BidirectionalDict.dll": { - "assemblyVersion": "1.2.0.0", - "fileVersion": "1.2.0.0" - } - } - }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "Microsoft.NETCore.Targets/1.1.0": {}, "Microsoft.Windows.CsWin32/0.3.49-beta": { "dependencies": { "Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha", @@ -39,8 +33,117 @@ "Microsoft.Windows.SDK.Win32Metadata": "55.0.45-preview" } }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, "System.Memory/4.5.5": {}, - "System.Runtime.CompilerServices.Unsafe/6.0.0": {} + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": {}, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + } } }, "libraries": { @@ -49,12 +152,19 @@ "serviceable": false, "sha512": "" }, - "BidirectionalDict/1.2.0": { + "Microsoft.NETCore.Platforms/1.1.0": { "type": "package", "serviceable": true, - "sha512": "sha512-hjLTwpPTQBdseFVTVH1vf7Pbaj5ATKIM3DQN8Hup22ixyC14+r1bE4YFjtZmWfcegvJR74zYtatBTwpOHmIMNQ==", - "path": "bidirectionaldict/1.2.0", - "hashPath": "bidirectionaldict.1.2.0.nupkg.sha512" + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "path": "microsoft.netcore.targets/1.1.0", + "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" }, "Microsoft.Windows.CsWin32/0.3.49-beta": { "type": "package", @@ -84,6 +194,48 @@ "path": "microsoft.windows.wdk.win32metadata/0.9.9-experimental", "hashPath": "microsoft.windows.wdk.win32metadata.0.9.9-experimental.nupkg.sha512" }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, "System.Memory/4.5.5": { "type": "package", "serviceable": true, @@ -91,12 +243,68 @@ "path": "system.memory/4.5.5", "hashPath": "system.memory.4.5.5.nupkg.sha512" }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, "System.Runtime.CompilerServices.Unsafe/6.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", "path": "system.runtime.compilerservices.unsafe/6.0.0", "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" } } } \ No newline at end of file diff --git a/源代码/StgSharp/Controlling/Controls/BattleField.cs b/源代码/StgSharp/Controlling/Controls/BattleField.cs index 02f53d54..3f0d2d59 100644 --- a/源代码/StgSharp/Controlling/Controls/BattleField.cs +++ b/源代码/StgSharp/Controlling/Controls/BattleField.cs @@ -45,12 +45,23 @@ namespace StgSharp.Controls { public bool IsEntity => true; - public ReadOnlySpan TextureBox + + public ReadOnlySpan TextureBox { get => throw new NotImplementedException(); } - public Rectangle BoundingBox { get; set; } - public vec2d Position { get; set; } + + public Rectangle BoundingBox + { + get; + set; + } + + public Vec2 Position + { + get; + set; + } public IEnumerator GetEnumerator() { diff --git a/源代码/StgSharp/Controlling/Controls/ButtonGroup.cs b/源代码/StgSharp/Controlling/Controls/ButtonGroup.cs index 9f065f1a..a02a98d8 100644 --- a/源代码/StgSharp/Controlling/Controls/ButtonGroup.cs +++ b/源代码/StgSharp/Controlling/Controls/ButtonGroup.cs @@ -53,38 +53,48 @@ namespace StgSharp.Controls buttonList = new List(); } - public bool IsEntity { get => false; } + public bool IsEntity + { + get => false; + } - public ReadOnlySpan TextureBox + public ReadOnlySpan TextureBox { get => throw new NotSupportedException(); } - public Rectangle BoundingBox { get; set; } + public Rectangle BoundingBox + { + get; + set; + } public TriggerButton CurrentButton { get => current; } - public vec2d Position { get; set; } + public Vec2 Position + { + get; + set; + } protected List AllButton { get => buttonList; } - public void AddButton(TriggerButton button) + public void AddButton( TriggerButton button ) { - buttonList.Add(button); + buttonList.Add( button ); } public abstract void Confirm(); public IEnumerator GetEnumerator() { - foreach (TriggerButton item in buttonList) - { + foreach( TriggerButton item in buttonList ) { yield return item.Single(); } } @@ -92,12 +102,10 @@ namespace StgSharp.Controls public void MoveDown() { TriggerButton button = current; - while ((button.Down != null) && button.Down.IsDisabled) - { + while( ( button.Down != null ) && button.Down.IsDisabled ) { button = button.Right; } - if (current == button) - { + if( current == button ) { return; } current.DeHighlight(); @@ -108,12 +116,10 @@ namespace StgSharp.Controls public void MoveLeft() { TriggerButton button = current; - while ((button.Left != null) && button.Left.IsDisabled) - { + while( ( button.Left != null ) && button.Left.IsDisabled ) { button = button.Left; } - if (current == button) - { + if( current == button ) { return; } current.DeHighlight(); @@ -124,12 +130,10 @@ namespace StgSharp.Controls public void MoveRight() { TriggerButton button = current; - while ((button.Right != null) && button.Right.IsDisabled) - { + while( ( button.Right != null ) && button.Right.IsDisabled ) { button = button.Right; } - if (current == button) - { + if( current == button ) { return; } current.DeHighlight(); @@ -140,12 +144,10 @@ namespace StgSharp.Controls public void MoveUp() { TriggerButton button = current; - while ((button.Up != null) && button.Up.IsDisabled) - { + while( ( button.Up != null ) && button.Up.IsDisabled ) { button = button.Right; } - if (current == button) - { + if( current == button ) { return; } current.DeHighlight(); diff --git a/源代码/StgSharp/Controlling/Controls/CharacterIndexImage.cs b/源代码/StgSharp/Controlling/Controls/CharacterIndexImage.cs index 3757b516..326b01b0 100644 --- a/源代码/StgSharp/Controlling/Controls/CharacterIndexImage.cs +++ b/源代码/StgSharp/Controlling/Controls/CharacterIndexImage.cs @@ -47,18 +47,21 @@ namespace StgSharp.Controls private char[] displayIndex; private char defaultChar; - Dictionary texIndex; + private Dictionary texIndex; private int length; - PlainGeometryMesh _tittleMesh; + private PlainGeometryMesh _tittleMesh; public CharacterLineIndexImage( - int length, char defaultChar, PlainGeometryMesh tittleMesh, - IEnumerable<(char, PlainGeometryMesh)> indexEnumeration) + int length, + char defaultChar, + PlainGeometryMesh tittleMesh, + IEnumerable<(char, PlainGeometryMesh)> indexEnumeration ) { this.length = length; displayIndex = new char[length]; _tittleMesh = tittleMesh; - texIndex = indexEnumeration.ToDictionary(item => item.Item1, item => item.Item2); + texIndex = indexEnumeration.ToDictionary( + item => item.Item1, item => item.Item2 ); } public bool IsEntity @@ -66,23 +69,32 @@ namespace StgSharp.Controls get => true; } - public ReadOnlySpan TextureBox + public ReadOnlySpan TextureBox { get => throw new NotSupportedException(); } - public Rectangle BoundingBox { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public vec2d Position { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public void Display(string message) + public Rectangle BoundingBox { - if (string.IsNullOrEmpty(message)) - { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public Vec2 Position + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public void Display( string message ) + { + if( string.IsNullOrEmpty( message ) ) { message = string.Empty; } - string result = (message.Length >= length) ? - message.Substring(message.Length - displayIndex.Length) : - message.PadLeft(length, defaultChar); + string result = ( message.Length >= length ) ? + message.Substring( message.Length - displayIndex.Length ) : message.PadLeft( + length, defaultChar ); displayIndex = result.ToCharArray(); } @@ -90,9 +102,8 @@ namespace StgSharp.Controls public IEnumerator GetEnumerator() { yield return _tittleMesh; - foreach (char item in displayIndex) - { - yield return texIndex[item]; + foreach( char item in displayIndex ) { + yield return texIndex[ item ]; } } diff --git a/源代码/StgSharp/Controlling/Controls/ControllingIntem.cs b/源代码/StgSharp/Controlling/Controls/ControllingIntem.cs index 54f77d8f..32c7b151 100644 --- a/源代码/StgSharp/Controlling/Controls/ControllingIntem.cs +++ b/源代码/StgSharp/Controlling/Controls/ControllingIntem.cs @@ -42,12 +42,27 @@ namespace StgSharp.Controls public interface ControllingItem : IEnumerable { - public abstract bool IsEntity { get; } + public abstract bool IsEntity + { + get; + } - public abstract ReadOnlySpan TextureBox { get; } - public abstract Rectangle BoundingBox { get; set; } - public abstract vec2d Position { get; set; } + public abstract ReadOnlySpan TextureBox + { + get; + } + public abstract Rectangle BoundingBox + { + get; + set; + } + + public abstract Vec2 Position + { + get; + set; + } IEnumerator IEnumerable.GetEnumerator() { diff --git a/源代码/StgSharp/Controlling/Controls/DecorationBox.cs b/源代码/StgSharp/Controlling/Controls/DecorationBox.cs index bb0807a1..b9c906d2 100644 --- a/源代码/StgSharp/Controlling/Controls/DecorationBox.cs +++ b/源代码/StgSharp/Controlling/Controls/DecorationBox.cs @@ -44,20 +44,30 @@ namespace StgSharp.Controls private PlainGeometryMesh renderMesh; - public DecorationBox(Rectangle bound, Image texture, vec2d[] texCoord) + public DecorationBox( Rectangle bound, Image texture, Vec2[] texCoord ) { - renderMesh = new PlainGeometryMesh(BoundingBox, new TextureProvider(texture, texCoord)); + renderMesh = new PlainGeometryMesh( + BoundingBox, new TextureProvider( texture, texCoord ) ); } public bool IsEntity => true; - public ReadOnlySpan TextureBox + public ReadOnlySpan TextureBox { get => renderMesh.TextureCoord; } - public Rectangle BoundingBox { get; set; } - public vec2d Position { get; set; } + public Rectangle BoundingBox + { + get; + set; + } + + public Vec2 Position + { + get; + set; + } public IEnumerator GetEnumerator() { diff --git a/源代码/StgSharp/Controlling/Controls/MarkingLable.cs b/源代码/StgSharp/Controlling/Controls/MarkingLable.cs index 43d00e30..b334e9e3 100644 --- a/源代码/StgSharp/Controlling/Controls/MarkingLable.cs +++ b/源代码/StgSharp/Controlling/Controls/MarkingLable.cs @@ -48,40 +48,49 @@ namespace StgSharp.Controls private TimeFunction _movement; - private vec2d _currentPosition, _movementVec; + private Vec2 _currentPosition, _movementVec; - public MarkingLabel(PlainGeometryMesh marker, TimeFunction movement) + public MarkingLabel( PlainGeometryMesh marker, TimeFunction movement ) { this.marker = marker; _movement = movement; } public bool IsEntity => true; - public ReadOnlySpan TextureBox + + public ReadOnlySpan TextureBox { get => marker.TextureCoord; } - public Rectangle BoundingBox { get; set; } - public vec2d Position { get; set; } + + public Rectangle BoundingBox + { + get; + set; + } + + public Vec2 Position + { + get; + set; + } public IEnumerator GetEnumerator() { yield return marker; } - public void Move(vec2d movement) + public void Move( Vec2 movement ) { - if (!_movement.IsComplete) - { - Position = _currentPosition + (_movement.Calculate() * _movementVec); + if( !_movement.IsComplete ) { + Position = _currentPosition + ( _movement.Calculate() * _movementVec ); } } - public void MoveTo(vec2d target) + public void MoveTo( Vec2 target ) { - Move(target - Position); + Move( target - Position ); } } - } diff --git a/源代码/StgSharp/Controlling/Controls/TriggerButton.cs b/源代码/StgSharp/Controlling/Controls/TriggerButton.cs index 61c09e1a..b135005f 100644 --- a/源代码/StgSharp/Controlling/Controls/TriggerButton.cs +++ b/源代码/StgSharp/Controlling/Controls/TriggerButton.cs @@ -40,11 +40,14 @@ using System.Text; namespace StgSharp.Controls { - - public delegate void RenderButtonTextureCallback(ButtonStatus status, float beginTime, in TextureProvider texture); + public delegate void RenderButtonTextureCallback( + ButtonStatus status, + float beginTime, + in TextureProvider texture ); public enum ButtonStatus { + Error = 0b0, Disable = 0b1, Enable = 0b10, @@ -52,12 +55,13 @@ namespace StgSharp.Controls Confirm = 0b1000, DisableToEnable = Disable | Enable, - EnableToDisable = -(Enable | DisableToEnable), + EnableToDisable = -( Enable | DisableToEnable ), EnableToHighlight = Enable | Highlight, - HighlightToEnable = -(Enable | Highlight), + HighlightToEnable = -( Enable | Highlight ), + + HighlightToDisable = -( Highlight | Disable ), - HighlightToDisable = -(Highlight | Disable), } public class TriggerButton : ControllingItem @@ -66,14 +70,14 @@ namespace StgSharp.Controls private Action? confirmCallback; private Action? disableCallback; -#nullable enable + #nullable enable private Action? enableCallback; private float _statusBeginTime; private RenderButtonTextureCallback _renderButton; private TextureProvider _texture; -#nullable restore + #nullable restore public TriggerButton() { @@ -102,41 +106,74 @@ namespace StgSharp.Controls { add { - if (_renderButton == null) - { + if( _renderButton == null ) { _renderButton = value; - } - else - { + } else { _renderButton += value; } } remove { - if (_renderButton != null) - { + if( _renderButton != null ) { _renderButton -= value; } } } - public bool IsHighLighted { get; internal set; } + public bool IsHighLighted + { + get; + internal set; + } - public bool IsDisabled { get; internal set; } + public bool IsDisabled + { + get; + internal set; + } public bool IsEntity => true; - public ReadOnlySpan TextureBox + public ReadOnlySpan TextureBox { - get => MemoryMarshal.Cast(_texture.TextureCoordinate); + get => MemoryMarshal.Cast( _texture.TextureCoordinate ); } - public Rectangle BoundingBox { get; set; } - public TriggerButton Left { get; internal set; } - public TriggerButton Right { get; internal set; } - public TriggerButton Up { get; internal set; } - public TriggerButton Down { get; internal set; } - public vec2d Position { get; set; } + public Rectangle BoundingBox + { + get; + set; + } + + public TriggerButton Left + { + get; + internal set; + } + + public TriggerButton Right + { + get; + internal set; + } + + public TriggerButton Up + { + get; + internal set; + } + + public TriggerButton Down + { + get; + internal set; + } + + public Vec2 Position + { + get; + set; + } internal TextureProvider Texture { @@ -144,12 +181,15 @@ namespace StgSharp.Controls set => _texture = value; } - protected ButtonStatus CurrentStatus { get; set; } + protected ButtonStatus CurrentStatus + { + get; + set; + } public void DeHighlight() { - if (CurrentStatus == ButtonStatus.Highlight) - { + if( CurrentStatus == ButtonStatus.Highlight ) { CurrentStatus = ButtonStatus.HighlightToEnable; } } @@ -162,54 +202,44 @@ namespace StgSharp.Controls ButtonStatus.Highlight => ButtonStatus.HighlightToDisable, _ => CurrentStatus, }; - if (disableCallback != null) - { + if( disableCallback != null ) { disableCallback(); } } public void Enable() { - if (CurrentStatus == ButtonStatus.Disable) - { + if( CurrentStatus == ButtonStatus.Disable ) { CurrentStatus = ButtonStatus.DisableToEnable; - } - else - { + } else { return; } - if (enableCallback != null) - { + if( enableCallback != null ) { enableCallback(); } } public IEnumerator GetEnumerator() { - _renderButton(CurrentStatus, _statusBeginTime, in _texture); - yield return new PlainGeometryMesh(this.BoundingBox, _texture); + _renderButton( CurrentStatus, _statusBeginTime, in _texture ); + yield return new PlainGeometryMesh( this.BoundingBox, _texture ); } public void Highlight() { - if (CurrentStatus == ButtonStatus.Enable) - { + if( CurrentStatus == ButtonStatus.Enable ) { CurrentStatus |= ButtonStatus.EnableToHighlight; - } - else - { + } else { return; } - if (confirmCallback != null) - { + if( confirmCallback != null ) { confirmCallback(); } } - internal void Init(ButtonStatus status) + internal void Init( ButtonStatus status ) { - if (CurrentStatus == ButtonStatus.Error) - { + if( CurrentStatus == ButtonStatus.Error ) { CurrentStatus = status; } } diff --git a/源代码/StgSharp/Controlling/IO/GLIO.cs b/源代码/StgSharp/Controlling/IO/GLIO.cs index 5ee914fa..a0fbb5de 100644 --- a/源代码/StgSharp/Controlling/IO/GLIO.cs +++ b/源代码/StgSharp/Controlling/IO/GLIO.cs @@ -40,31 +40,55 @@ namespace StgSharp { internal static partial class InternalIO { + #region ssgc api define - [DllImport(SSC_libName, EntryPoint = "initGL", - CallingConvention = CallingConvention.Cdecl)] - internal static extern void InternalInitGL(int majorVersion, int minorVersion); + [DllImport( + SSC_libName, + EntryPoint = "initGL", + CallingConvention = CallingConvention.Cdecl )] + internal static extern void InternalInitGL( + int majorVersion, + int minorVersion ); - [DllImport(SSC_libName, EntryPoint = "loadGlfuncDefault", - CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - internal static extern IntPtr InternalLoadGlfuncDefault(string name); + [DllImport( + SSC_libName, + EntryPoint = "loadGlfuncDefault", + CallingConvention = CallingConvention.Cdecl, + CharSet = CharSet.Ansi )] + internal static extern IntPtr InternalLoadGlfuncDefault( string name ); - [DllImport(SSC_libName, EntryPoint = "linkShaderProgram", - CallingConvention = CallingConvention.Cdecl)] - internal static extern unsafe uint InternalLinkShaderProgram(OpenglContext* context, uint shaderProgram); + [DllImport( + SSC_libName, + EntryPoint = "linkShaderProgram", + CallingConvention = CallingConvention.Cdecl )] + internal static extern unsafe uint InternalLinkShaderProgram( + OpenglContext* context, + uint shaderProgram ); - [DllImport(SSC_libName, EntryPoint = "readLog", - CallingConvention = CallingConvention.Cdecl)] + [DllImport( + SSC_libName, + EntryPoint = "readLog", + CallingConvention = CallingConvention.Cdecl )] internal static extern unsafe IntPtr InternalReadSSCLog(); - [DllImport(SSC_libName, EntryPoint = "loadImageData", - CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - internal static extern unsafe void InternalLoadImage(string fileName, ImageInfo* output, ImageLoader loader); + [DllImport( + SSC_libName, + EntryPoint = "loadImageData", + CallingConvention = CallingConvention.Cdecl, + CharSet = CharSet.Ansi )] + internal static extern unsafe void InternalLoadImage( + string fileName, + ImageInfo* output, + ImageLoader loader ); - [DllImport(SSC_libName, EntryPoint = "unloadImageData", - CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - internal static extern unsafe void InternalUnloadImage(ImageInfo* output); + [DllImport( + SSC_libName, + EntryPoint = "unloadImageData", + CallingConvention = CallingConvention.Cdecl, + CharSet = CharSet.Ansi )] + internal static extern unsafe void InternalUnloadImage( + ImageInfo* output ); #endregion ssgc api define } @@ -72,34 +96,42 @@ namespace StgSharp namespace StgSharp.Graphics { - [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public delegate IntPtr ImageLoader(string name, ref int width, ref int height, ref int definedChannel, int desiredChannel); +[UnmanagedFunctionPointer( CallingConvention.Cdecl, CharSet = CharSet.Ansi )] + public delegate IntPtr ImageLoader( + string name, + ref int width, + ref int height, + ref int definedChannel, + int desiredChannel ); - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public struct OpenglContext { - public override bool Equals(object obj) + public override bool Equals( object obj ) { return false; } public override unsafe int GetHashCode() { - fixed (OpenglContext* sptr = &this) - { + fixed( OpenglContext* sptr = &this ) { return sptr->GetHashCode(); } } - public static bool operator !=(OpenglContext left, OpenglContext right) + public static bool operator !=( + OpenglContext left, + OpenglContext right ) { - return !(left == right); + return !( left == right ); } - public static bool operator ==(OpenglContext left, OpenglContext right) + public static bool operator ==( + OpenglContext left, + OpenglContext right ) { - return left.Equals(right); + return left.Equals( right ); } #region glapi @@ -244,7 +276,7 @@ namespace StgSharp.Graphics internal unsafe delegate* glBufferPageCommitmentMemNV; internal unsafe delegate* glBufferParameteriAPPLE; internal unsafe delegate* glBufferStorage; - [Obsolete("Param type uncertain", true)] internal unsafe delegate* glBufferStorageExternalEXT; + [Obsolete( "Param type uncertain", true )] internal unsafe delegate* glBufferStorageExternalEXT; internal unsafe delegate* glBufferStorageMemEXT; internal unsafe delegate* glBufferSubData; internal unsafe delegate* glBufferSubDataARB; @@ -1425,7 +1457,7 @@ namespace StgSharp.Graphics internal unsafe delegate* glNamedBufferPageCommitmentMemNV; internal unsafe delegate* glNamedBufferStorage; internal unsafe delegate* glNamedBufferStorageEXT; - [Obsolete("Param type uncertain", true)] internal unsafe delegate* glNamedBufferStorageExternalEXT; + [Obsolete( "Param type uncertain", true )] internal unsafe delegate* glNamedBufferStorageExternalEXT; internal unsafe delegate* glNamedBufferStorageMemEXT; internal unsafe delegate* glNamedBufferSubData; internal unsafe delegate* glNamedBufferSubDataEXT; @@ -2103,7 +2135,7 @@ namespace StgSharp.Graphics internal unsafe delegate* glUniform1dv; internal unsafe delegate* glUniform1f; internal unsafe delegate* glUniform1fARB; - internal unsafe delegate* glUniform1fv; + internal unsafe delegate* glUniform1fv; internal unsafe delegate* glUniform1fvARB; internal unsafe delegate* glUniform1i; internal unsafe delegate* glUniform1i64ARB; @@ -2637,8 +2669,6 @@ namespace StgSharp.Graphics internal unsafe delegate* glWindowRectanglesEXT; internal unsafe delegate* glWriteMaskEXT; - #endregion glapi - - + #endregion glapi } } \ No newline at end of file diff --git a/源代码/StgSharp/Controlling/IO/InternalIO.cs b/源代码/StgSharp/Controlling/IO/InternalIO.cs index 57ba53bd..7ab9d1cc 100644 --- a/源代码/StgSharp/Controlling/IO/InternalIO.cs +++ b/源代码/StgSharp/Controlling/IO/InternalIO.cs @@ -28,12 +28,14 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; using StgSharp.Geometries; using StgSharp.Graphics; using StgSharp.Graphics.OpenGL; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -47,11 +49,13 @@ namespace StgSharp { public enum LogType { + Error, Warning, Info, InfoError, InfoWarning, + } internal static unsafe partial class InternalIO @@ -67,42 +71,45 @@ namespace StgSharp new Dictionary(); internal static readonly GCHandle ssc_logHandle = - GCHandle.Alloc(new byte[512], GCHandleType.Pinned); + GCHandle.Alloc( new byte[512], GCHandleType.Pinned ); internal static IntPtr SSClibPtr = IntPtr.Zero; - internal static SemaphoreSlim logSyncSemaphore = new SemaphoreSlim(1, 1); + internal static SemaphoreSlim logSyncSemaphore = new SemaphoreSlim( + 1, 1 ); static InternalIO() { - GLtype.Add(TypeCode.Single, GLconst.FLOAT); - GLtype.Add(TypeCode.Int32, GLconst.INT); - GLtype.Add(TypeCode.UInt32, GLconst.UNSIGNED_INT); - GLtype.Add(TypeCode.Int16, GLconst.SHORT); - GLtype.Add(TypeCode.UInt16, GLconst.UNSIGNED_SHORT); - GLtype.Add(TypeCode.SByte, GLconst.BYTE); - GLtype.Add(TypeCode.Byte, GLconst.UNSIGNED_BYTE); + GLtype.Add( TypeCode.Single, GLconst.FLOAT ); + GLtype.Add( TypeCode.Int32, GLconst.INT ); + GLtype.Add( TypeCode.UInt32, GLconst.UNSIGNED_INT ); + GLtype.Add( TypeCode.Int16, GLconst.SHORT ); + GLtype.Add( TypeCode.UInt16, GLconst.UNSIGNED_SHORT ); + GLtype.Add( TypeCode.SByte, GLconst.BYTE ); + GLtype.Add( TypeCode.Byte, GLconst.UNSIGNED_BYTE ); + + fixed( IntrinsicContext* cptr = &_intrinsicContext ) { + LoadIntrinsicFunction( cptr ); + } } - internal static void InternalAppendLog(string log) + internal static void InternalAppendLog( string log ) { - if (!File.Exists(SS_errorLog)) - { - FileStream stream = File.Create(SS_errorLog); + if( !File.Exists( SS_errorLog ) ) { + FileStream stream = File.Create( SS_errorLog ); stream.Close(); } - using (StreamWriter logStream = File.AppendText(SS_errorLog)) - { - logStream.WriteLine(log); + using( StreamWriter logStream = File.AppendText( SS_errorLog ) ) { + logStream.WriteLine( log ); } } - [Obsolete("Not completed", true)] - internal static IntPtr InternalLoadProc(IntPtr lib, string name) where T : Delegate + [Obsolete( "Not completed", true )] + internal static IntPtr InternalLoadProc( IntPtr lib, string name ) + where T: Delegate { - try - { + try { IntPtr procPtr = #if WINDOWS IntPtr.Zero; @@ -110,48 +117,48 @@ namespace StgSharp #else IntPtr.Zero; -#endif + #endif return procPtr; } - catch (Exception) - { + catch( Exception ) { throw; } } - internal static void InternalWriteLog(string logLine, LogType logType) + internal static void InternalWriteLog( string logLine, LogType logType ) { logSyncSemaphore.Wait(); - if (!File.Exists(SS_errorLog)) - { - FileStream stream = File.Create(SS_errorLog); + if( !File.Exists( SS_errorLog ) ) { + FileStream stream = File.Create( SS_errorLog ); stream.Close(); } - using (StreamWriter logStream = File.AppendText(SS_errorLog)) - { - logStream.WriteLine($"{logType}\t{DateTime.Now.ToString("o")}"); - logStream.WriteLine(logLine); + using( StreamWriter logStream = File.AppendText( SS_errorLog ) ) { + logStream.WriteLine( + $"{logType}\t{DateTime.Now.ToString("o")}" ); + logStream.WriteLine( logLine ); } logSyncSemaphore.Release(); } - internal static void InternalWriteLog(string beforeTime, string logLine, LogType logType) + internal static void InternalWriteLog( + string beforeTime, + string logLine, + LogType logType ) { logSyncSemaphore.Wait(); - if (!File.Exists(InternalIO.SS_errorLog)) - { - FileStream stream = File.Create(InternalIO.SS_errorLog); + if( !File.Exists( InternalIO.SS_errorLog ) ) { + FileStream stream = File.Create( InternalIO.SS_errorLog ); stream.Close(); } - using (StreamWriter logStream = File.AppendText(SS_errorLog)) - { - logStream.WriteLine(beforeTime); - logStream.WriteLine($"{logType}\t@\t{DateTime.Now.ToString("o")}"); - logStream.WriteLine(logLine); + using( StreamWriter logStream = File.AppendText( SS_errorLog ) ) { + logStream.WriteLine( beforeTime ); + logStream.WriteLine( + $"{logType}\t@\t{DateTime.Now.ToString("o")}" ); + logStream.WriteLine( logLine ); } - logSyncSemaphore.Release(1); + logSyncSemaphore.Release( 1 ); } } diff --git a/源代码/StgSharp/Controlling/KeyEnum.cs b/源代码/StgSharp/Controlling/KeyEnum.cs new file mode 100644 index 00000000..93d7e0fd --- /dev/null +++ b/源代码/StgSharp/Controlling/KeyEnum.cs @@ -0,0 +1,237 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="KeyEnum.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; + +using System; + +namespace StgSharp +{ + public enum KeyboardKey : int + { + + UNKNOWN = -1, + None = 0, + Space = 32, + Apostrophe = 39/*'*/, + Comma = 44/*,*/, + Minus = 45/*-*/, + Period = 46/*.*/, + Slash = 47/*/*/, + Zero = 48, + One = 49, + Two = 50, + Three = 51, + Four = 52, + Five = 53, + Six = 54, + Seven = 55, + Eight = 56, + Nine = 57, + Semicolon = 59/*,*/, + Equal = 61/*=*/, + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + LeftBracket = 91/*[*/, + BACKSLASH = 92/*\*/, + RightBracket = 93/*]*/, + GraveAccent = 96/*`*/, + World1 = 161/*non-US#1*/, + World2 = 162/*non-US#2*/, + Esc = 256, + Enter = 257, + Tab = 258, + Backspace = 259, + Insert = 260, + Delete = 261, + Right = 262, + Left = 263, + Down = 264, + Up = 265, + PgUp = 266, + PgDown = 267, + Home = 268, + End = 269, + CapsLock = 280, + ScrollLock = 281, + NumLock = 282, + PrintScreen = 283, + Pause = 284, + F1 = 290, + F2 = 291, + F3 = 292, + F4 = 293, + F5 = 294, + F6 = 295, + F7 = 296, + F8 = 297, + F9 = 298, + F10 = 299, + F11 = 300, + F12 = 301, + F13 = 302, + F14 = 303, + F15 = 304, + F16 = 305, + F17 = 306, + F18 = 307, + F19 = 308, + F20 = 309, + F21 = 310, + F22 = 311, + F23 = 312, + F24 = 313, + F25 = 314, + NumPad0 = 320, + NumPad1 = 321, + NumPad2 = 322, + NumPad3 = 323, + NumPad4 = 324, + NumPad5 = 325, + NumPad6 = 326, + NumPad7 = 327, + NumPad8 = 328, + NumPad9 = 329, + NumPadDec = 330, + NumPadDiv = 331, + NumPadMul = 332, + NumPadSub = 333, + NumPadAdd = 334, + NumPadAnter = 335, + NumPadEqual = 336, + LeftShift = 340, + LeftControl = 341, + LeftAlt = 342, + LeftSuper = 343, + RightShift = 344, + RightControl = 345, + RightAlt = 346, + RightSuper = 347, + Menu = 348, + First = Space, + Last = Menu, + + } + + #pragma warning disable CA1707 + #pragma warning disable CA1712 + #pragma warning disable CA1008 + #pragma warning disable CA1027 + public enum Joystick : int + #pragma warning restore CA1027 + { + + Joystick_1 = GLconst.GLFW_JOYSTICK_1, + Joystick_2 = GLconst.GLFW_JOYSTICK_2, + Joystick_3 = GLconst.GLFW_JOYSTICK_3, + Joystick_4 = GLconst.GLFW_JOYSTICK_4, + Joystick_5 = GLconst.GLFW_JOYSTICK_5, + Joystick_6 = GLconst.GLFW_JOYSTICK_6, + Joystick_7 = GLconst.GLFW_JOYSTICK_7, + Joystick_8 = GLconst.GLFW_JOYSTICK_8, + Joystick_9 = GLconst.GLFW_JOYSTICK_9, + Joystick_10 = GLconst.GLFW_JOYSTICK_10, + Joystick_11 = GLconst.GLFW_JOYSTICK_11, + Joystick_12 = GLconst.GLFW_JOYSTICK_12, + Joystick_13 = GLconst.GLFW_JOYSTICK_13, + Joystick_14 = GLconst.GLFW_JOYSTICK_14, + Joystick_15 = GLconst.GLFW_JOYSTICK_15, + Joystick_16 = GLconst.GLFW_JOYSTICK_16, + First = Joystick_1, + Last = Joystick_16 + + } + + [System.Flags] + public enum Mouse : int + { + + Button1 = 0, + Button2 = 1, + Button3 = 2, + Button4 = 3, + Button5 = 4, + Button6 = 5, + Button7 = 6, + Button8 = 7, + First = Button1, + Last = Button8, + Left = Button1, + Right = Button2, + Middle = Button3 + + } + + #pragma warning restore CA1707 + #pragma warning restore CA1712 + #pragma warning restore CA7008 + + internal enum InputEquipment + { + + Keyboard, + Mouse, + Joystick + + } + + public enum KeyStatus : int + { + + RELEASE = 0, + PRESS = 1 + + } +} diff --git a/源代码/StgSharp/Controlling/KeyEventAttribute.cs b/源代码/StgSharp/Controlling/KeyEventAttribute.cs index f2546dff..d56ee7b1 100644 --- a/源代码/StgSharp/Controlling/KeyEventAttribute.cs +++ b/源代码/StgSharp/Controlling/KeyEventAttribute.cs @@ -36,7 +36,7 @@ using System.Threading.Tasks; namespace StgSharp { - [AttributeUsage(AttributeTargets.Method)] + [AttributeUsage( AttributeTargets.Method )] public class KeyEventAttribute : Attribute { @@ -44,27 +44,26 @@ namespace StgSharp internal int _keyStat; internal int _keyTarget; - public KeyEventAttribute(KeyboardKey key, KeyStatus status) + public KeyEventAttribute( KeyboardKey key, KeyStatus status ) { - _equipment = (int)InputEquipment.Keyboard; - _keyTarget = (int)key; - _keyStat = (int)status; + _equipment = ( int )InputEquipment.Keyboard; + _keyTarget = ( int )key; + _keyStat = ( int )status; } - public KeyEventAttribute(Joystick joystick, KeyStatus status) + public KeyEventAttribute( Joystick joystick, KeyStatus status ) { - _equipment = (int)InputEquipment.Keyboard; - _keyTarget = (int)joystick; - _keyStat = (int)status; + _equipment = ( int )InputEquipment.Keyboard; + _keyTarget = ( int )joystick; + _keyStat = ( int )status; } - public KeyEventAttribute(Mouse mouse, KeyStatus status) + public KeyEventAttribute( Mouse mouse, KeyStatus status ) { - _equipment = (int)InputEquipment.Keyboard; - _keyTarget = (int)mouse; - _keyStat = (int)status; + _equipment = ( int )InputEquipment.Keyboard; + _keyTarget = ( int )mouse; + _keyStat = ( int )status; } } - } diff --git a/源代码/StgSharp/Controlling/UsrActivity/IClickTrigger.cs b/源代码/StgSharp/Controlling/UsrActivity/IClickTrigger.cs new file mode 100644 index 00000000..327b8a32 --- /dev/null +++ b/源代码/StgSharp/Controlling/UsrActivity/IClickTrigger.cs @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="IClickTrigger.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public interface IClickTrigger + { + + public int TargetKeyOrButtonID + { + get; + } + + public KeyStatus TriggeredStatus + { + get; + } + + } +} diff --git a/源代码/StgSharp/Controlling/UsrActivity/JoystickTrigger.cs b/源代码/StgSharp/Controlling/UsrActivity/JoystickTrigger.cs index 621a20a0..a8d76f10 100644 --- a/源代码/StgSharp/Controlling/UsrActivity/JoystickTrigger.cs +++ b/源代码/StgSharp/Controlling/UsrActivity/JoystickTrigger.cs @@ -34,47 +34,57 @@ using System.Text; namespace StgSharp.Controlling.UsrActivity { - public struct JoystickTrigger : ITrigger, IEquatable + public readonly struct JoystickTrigger : IClickTrigger, IEquatable { - private KeyStatus _triggeredStat; - public Joystick Stick; + private readonly Joystick _stick; + private readonly KeyStatus _status; - public JoystickTrigger(Joystick targetKey) + public JoystickTrigger( Joystick targetKey, KeyStatus status ) { - this.Stick = targetKey; + this._stick = targetKey; + _status = status; } - public int TargetKeyOrButtonID => (int)Stick; + public int TargetKeyOrButtonID => ( int )_stick; - public KeyStatus TriggeredStatus => _triggeredStat; - - public override bool Equals(object obj) + public Joystick Stick { - return base.Equals(obj); + get => _stick; + } + + public KeyStatus TriggeredStatus => _status; + + public override bool Equals( object obj ) + { + return base.Equals( obj ); } public override int GetHashCode() { - return ((int)Stick) + (17 * ((int)_triggeredStat)); + return ( ( int )_stick ) + ( 17 * ( ( int )_status ) ); } public override string ToString() { - return $"Key {Stick} triggered when {_triggeredStat}"; + return $"Key {_stick} triggered when {_status}"; } - public static bool operator !=(JoystickTrigger left, JoystickTrigger right) + public static bool operator !=( + JoystickTrigger left, + JoystickTrigger right ) { - return !(left == right); + return !( left == right ); } - public static bool operator ==(JoystickTrigger left, JoystickTrigger right) + public static bool operator ==( + JoystickTrigger left, + JoystickTrigger right ) { - return (left._triggeredStat == right._triggeredStat) && (left.Stick == right.Stick); + return ( left._status == right._status ) && ( left._stick == right._stick ); } - bool IEquatable.Equals(JoystickTrigger other) + bool IEquatable.Equals( JoystickTrigger other ) { return other == this; } diff --git a/源代码/StgSharp/Controlling/UsrActivity/KeyTrigger.cs b/源代码/StgSharp/Controlling/UsrActivity/KeyTrigger.cs index ddf5b257..3988d883 100644 --- a/源代码/StgSharp/Controlling/UsrActivity/KeyTrigger.cs +++ b/源代码/StgSharp/Controlling/UsrActivity/KeyTrigger.cs @@ -35,31 +35,30 @@ using System.Text; namespace StgSharp.Controlling.UsrActivity { - - public struct KeyTrigger : ITrigger, IEquatable + public readonly struct KeyTrigger : IClickTrigger, IEquatable { - private KeyboardKey _targetKey; - private KeyStatus _triggerStat; + private readonly KeyboardKey _targetKey; + private readonly KeyStatus _triggerStat; - public KeyTrigger(KeyboardKey targetKey, KeyStatus targetStat) + public KeyTrigger( KeyboardKey targetKey, KeyStatus targetStat ) { this._targetKey = targetKey; this._triggerStat = targetStat; } - public int TargetKeyOrButtonID => (int)_targetKey; + public int TargetKeyOrButtonID => ( int )_targetKey; public KeyStatus TriggeredStatus => _triggerStat; - public override bool Equals(object obj) + public override bool Equals( object obj ) { - return base.Equals(obj); + return base.Equals( obj ); } public override int GetHashCode() { - return ((int)_targetKey) + (17 * ((int)_triggerStat)); + return ( ( int )_targetKey ) + ( 17 * ( ( int )_triggerStat ) ); } public override string ToString() @@ -67,17 +66,17 @@ namespace StgSharp.Controlling.UsrActivity return $"Key {_targetKey} triggered when {_triggerStat}"; } - public static bool operator !=(KeyTrigger left, KeyTrigger right) + public static bool operator !=( KeyTrigger left, KeyTrigger right ) { - return !(left == right); + return !( left == right ); } - public static bool operator ==(KeyTrigger left, KeyTrigger right) + public static bool operator ==( KeyTrigger left, KeyTrigger right ) { - return (left._triggerStat == right._triggerStat) && (left._targetKey == right._targetKey); + return ( left._triggerStat == right._triggerStat ) && ( left._targetKey == right._targetKey ); } - bool IEquatable.Equals(KeyTrigger other) + bool IEquatable.Equals( KeyTrigger other ) { return other == this; } diff --git a/源代码/StgSharp/Controlling/UsrActivity/MouseTrigger.cs b/源代码/StgSharp/Controlling/UsrActivity/MouseTrigger.cs new file mode 100644 index 00000000..9e9adbb3 --- /dev/null +++ b/源代码/StgSharp/Controlling/UsrActivity/MouseTrigger.cs @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="MouseTrigger.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Math; + +using System; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public readonly struct MouseTrigger : IClickTrigger, IEquatable + { + + private readonly KeyStatus _status; + private readonly Mouse _mouse; + + public MouseTrigger( Mouse mouse, KeyStatus status ) + { + _mouse = mouse; + _status = status; + } + + public int TargetKeyOrButtonID => ( int )_mouse; + + public KeyStatus TriggeredStatus => _status; + + public bool Equals( MouseTrigger other ) + { + return this == other; + } + + public static bool operator !=( MouseTrigger left, MouseTrigger right ) + { + return left._mouse != right._mouse || left._status != right._status; + } + + public static bool operator ==( MouseTrigger left, MouseTrigger right ) + { + return left._mouse == right._mouse && left._status == right._status; + } + + } +} diff --git a/源代码/StgSharp/Controlling/UsrActivity/TriggetFactory.cs b/源代码/StgSharp/Controlling/UsrActivity/TriggetFactory.cs new file mode 100644 index 00000000..fc377378 --- /dev/null +++ b/源代码/StgSharp/Controlling/UsrActivity/TriggetFactory.cs @@ -0,0 +1,102 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TriggetFactory.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Math; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public static class TriggetBuilder + { + + private const int JoystickMax = ( int )Joystick.Last + 1; + private const int JoystickMin = ( int )Joystick.First - 1; + private const int KeyboardMax = ( int )KeyboardKey.Last + 1; + private const int KeyboardMin = ( int )KeyboardKey.First - 1; + private const int MouseMax = ( int )Mouse.Last + 1; + private const int MouseMin = ( int )Mouse.First - 1; + + private static KeyTrigger keyboardtemp; + private static MouseTrigger mousetemp; + + public static JoystickTrigger BuildJoystickClickTrigger( + int keyCode, + KeyStatus status ) + { + if( keyCode > MouseMin && keyCode < MouseMax ) { + return new JoystickTrigger( ( Joystick )keyCode, status ); + } + throw new InvalidOperationException( + "Known key code or key is not on joystick." ); + } + + public static KeyTrigger BuildKeyboardClickTrigger( + int keyCode, + KeyStatus status ) + { + if( keyCode > KeyboardMin && keyCode < KeyboardMax ) { + return new KeyTrigger( ( KeyboardKey )keyCode, status ); + } + throw new InvalidOperationException( + "Known key code or kay is not on keyboard." ); + } + + public static MouseTrigger BuildMouseClickTrigger( + int keyCode, + KeyStatus status ) + { + if( keyCode >= MouseMin && keyCode <= MouseMax ) { + return new MouseTrigger( ( Mouse )keyCode, status ); + } + throw new InvalidOperationException( + "Known key code or key is not on mouse." ); + } + + public static IClickTrigger BuildTrigger( + int keyCode, + KeyStatus status ) + { + if( keyCode > KeyboardMin && keyCode < KeyboardMax ) { + return new KeyTrigger( ( KeyboardKey )keyCode, status ); + } + if( keyCode > JoystickMin && keyCode < JoystickMax ) { + return new JoystickTrigger( ( Joystick )keyCode, status ); + } + if( keyCode >= MouseMin && keyCode <= MouseMax ) { + return new MouseTrigger( ( Mouse )keyCode, status ); + } + throw new InvalidOperationException( "Known key code." ); + } + + } +} diff --git a/源代码/StgSharp/Data/GlobalData/root.cs b/源代码/StgSharp/Data/GlobalData/root.cs index 641997c0..ace664a2 100644 --- a/源代码/StgSharp/Data/GlobalData/root.cs +++ b/源代码/StgSharp/Data/GlobalData/root.cs @@ -52,6 +52,5 @@ namespace StgSharp return ret; } - }//------------------ end of class --------------------- } diff --git a/源代码/StgSharp/Data/InternalData.cs b/源代码/StgSharp/Data/InternalData.cs index d75f956a..a8b49493 100644 --- a/源代码/StgSharp/Data/InternalData.cs +++ b/源代码/StgSharp/Data/InternalData.cs @@ -96,8 +96,6 @@ namespace StgSharp } """; - #endregion - - + #endregion } } diff --git a/源代码/StgSharp/Data/Intrinsic/ColumnSet2.cs b/源代码/StgSharp/Data/Intrinsic/ColumnSet2.cs new file mode 100644 index 00000000..893bd350 --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/ColumnSet2.cs @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ColumnSet2.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; +using StgSharp.Math; + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Data.Intrinsic +{ + [StructLayout( LayoutKind.Explicit, Size = 12 * sizeof( float ), Pack = 16 )] + internal struct ColumnSet2 : IEquatable + { + + [FieldOffset( 0 * sizeof( float ) )] internal float m00; + [FieldOffset( 4 * sizeof( float ) )] internal float m01; + [FieldOffset( 1 * sizeof( float ) )] internal float m10; + [FieldOffset( 5 * sizeof( float ) )] internal float m11; + [FieldOffset( 2 * sizeof( float ) )] internal float m20; + [FieldOffset( 6 * sizeof( float ) )] internal float m21; + [FieldOffset( 3 * sizeof( float ) )] internal float m30; + [FieldOffset( 7 * sizeof( float ) )] internal float m31; + + [FieldOffset( 0 )] internal Vector4 colum0; + [FieldOffset( 4 * sizeof( float ) )] internal Vector4 colum1; + + internal ColumnSet2( Vector4 c0, Vector4 c1 ) + { + colum0 = c0; + colum1 = c1; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public override bool Equals( object? obj ) + { + return ( obj is ColumnSet2 mat ) && Equals( mat ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public bool Equals( ColumnSet2 other ) + { + return colum0.Equals( other.colum0 ) && colum1.Equals( + other.colum1 ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator !=( ColumnSet2 left, ColumnSet2 right ) + { + return !( left == right ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( ColumnSet2 left, ColumnSet2 right ) + { + return left.Equals( right ); + } + + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/ColumnSet3.cs b/源代码/StgSharp/Data/Intrinsic/ColumnSet3.cs new file mode 100644 index 00000000..f1e3fa3a --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/ColumnSet3.cs @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ColumnSet3.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; +using StgSharp.Math; + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Data.Intrinsic +{ + [StructLayout( LayoutKind.Explicit, Size = 12 * sizeof( float ), Pack = 16 )] + internal struct ColumnSet3 : IEquatable, IMat + { + + [FieldOffset( 0 * sizeof( float ) )] internal float m00; + [FieldOffset( 4 * sizeof( float ) )] internal float m01; + [FieldOffset( 8 * sizeof( float ) )] internal float m02; + [FieldOffset( 1 * sizeof( float ) )] internal float m10; + [FieldOffset( 5 * sizeof( float ) )] internal float m11; + [FieldOffset( 9 * sizeof( float ) )] internal float m12; + [FieldOffset( 2 * sizeof( float ) )] internal float m20; + [FieldOffset( 6 * sizeof( float ) )] internal float m21; + [FieldOffset( 10 * sizeof( float ) )] internal float m22; + [FieldOffset( 3 * sizeof( float ) )] internal float m30; + [FieldOffset( 7 * sizeof( float ) )] internal float m31; + [FieldOffset( 11 * sizeof( float ) )] internal float m32; + + [FieldOffset( 0 )] internal Vector4 colum0; + [FieldOffset( 4 * sizeof( float ) )] internal Vector4 colum1; + [FieldOffset( 8 * sizeof( float ) )] internal Vector4 colum2; + + public override bool Equals( object? obj ) + { + return ( obj is ColumnSet3 mat ) && Equals( mat ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public bool Equals( ColumnSet3 other ) + { + return colum0.Equals( other.colum0 ) && colum1.Equals( + other.colum1 ) && colum2.Equals( other.colum2 ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator !=( ColumnSet3 left, ColumnSet3 right ) + { + return !( left == right ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( ColumnSet3 left, ColumnSet3 right ) + { + return left.Equals( right ); + } + + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/ColumnSet4.cs b/源代码/StgSharp/Data/Intrinsic/ColumnSet4.cs new file mode 100644 index 00000000..fa7b5006 --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/ColumnSet4.cs @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ColumnSet4.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp; +using StgSharp.Data.Intrinsic; +using StgSharp.Math; + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Data.Intrinsic +{ + [StructLayout( LayoutKind.Explicit, Size = 16 * sizeof( float ) )] + internal struct ColumnSet4 : IEquatable, IMat + { + + [FieldOffset( 0 )] internal Vector4 colum0; + [FieldOffset( 16 )] internal Vector4 colum1; + [FieldOffset( 32 )] internal Vector4 colum2; + [FieldOffset( 48 )] internal Vector4 colum3; + + [FieldOffset( 0 )] public float m00; + + [FieldOffset( 16 )] public float m01; + + [FieldOffset( 32 )] public float m02; + + [FieldOffset( 48 )] public float m03; + [FieldOffset( 4 )] public float m10; + [FieldOffset( 20 )] public float m11; + [FieldOffset( 36 )] public float m12; + [FieldOffset( 52 )] public float m13; + [FieldOffset( 8 )] public float m20; + [FieldOffset( 24 )] public float m21; + [FieldOffset( 40 )] public float m22; + [FieldOffset( 56 )] public float m23; + [FieldOffset( 12 )] public float m30; + [FieldOffset( 28 )] public float m31; + [FieldOffset( 44 )] public float m32; + [FieldOffset( 60 )] public float m33; + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + internal ColumnSet4( + Vector4 colum0, + Vector4 colum1, + Vector4 colum2, + Vector4 colum3 ) + { + this.colum0 = colum0; + this.colum1 = colum1; + this.colum2 = colum2; + this.colum3 = colum3; + } + + public override bool Equals( object? obj ) + { + return ( obj is ColumnSet4 mat ) && Equals( mat ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public bool Equals( ColumnSet4 other ) + { + return colum0.Equals( other.colum0 ) && colum1.Equals( + other.colum1 ) && colum2.Equals( other.colum2 ) && colum3.Equals( + other.colum3 ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator !=( ColumnSet4 left, ColumnSet4 right ) + { + return !( left == right ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( ColumnSet4 left, ColumnSet4 right ) + { + return left.Equals( right ); + } + + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/IRegisterType.cs b/源代码/StgSharp/Data/Intrinsic/IRegisterType.cs new file mode 100644 index 00000000..e4045f4b --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/IRegisterType.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="IRegisterType.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Data.Intrinsic +{ + public interface IRegisterType + { + + public T Read( int index ) + where T: struct +#if NET8_0_OR_GREATER + , INumber +#else + , IConvertible +#endif + ; + + public void Write( int index, T value ) + where T: struct +#if NET8_0_OR_GREATER + , INumber +#else + , IConvertible +#endif + ; + + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/IntrinsicContext.cs b/源代码/StgSharp/Data/Intrinsic/IntrinsicContext.cs new file mode 100644 index 00000000..80554e9e --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/IntrinsicContext.cs @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="IntrinsicContext.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Math; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Data.Intrinsic +{ + [StructLayout( LayoutKind.Sequential )] + internal unsafe struct IntrinsicContext + { + + public delegate* unmanaged[Cdecl] transpose23; + public delegate* unmanaged[Cdecl] transpose24; + public delegate* unmanaged[Cdecl] transpose32; + public delegate* unmanaged[Cdecl] transpose33; + public delegate* unmanaged[Cdecl] transpose34; + public delegate* unmanaged[Cdecl] transpose42; + public delegate* unmanaged[Cdecl] transpose43; + public delegate* unmanaged[Cdecl] transpose44; + public delegate* unmanaged[Cdecl] det_mat_3; + public delegate* unmanaged[Cdecl] det_mat_4; + public delegate* unmanaged[Cdecl] normalize_v3; + public delegate* unmanaged[Cdecl] string_quickHash; + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/M128.cs b/源代码/StgSharp/Data/Intrinsic/M128.cs new file mode 100644 index 00000000..8a0060dc --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/M128.cs @@ -0,0 +1,193 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="M128.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Math; +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +#if NET5_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif +using System.Text; + +namespace StgSharp.Data.Intrinsic +{ + [StructLayout( LayoutKind.Explicit, Pack = 16 )] + public unsafe struct M128 : IRegisterType + { + + [FieldOffset( 0 )] internal Vector4 vec; + + internal M128( Vector4 v ) + { + vec = v; + } + + public override bool Equals( [NotNullWhen( true )] object obj ) + { + if( obj is not M128 other ) { + return false; + } + return this == other; + } + + public override int GetHashCode() + { + return vec.GetHashCode(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public T Read( int index ) + where T: struct +#if NET8_0_OR_GREATER + , INumber +#else + , IConvertible + #endif + + { + fixed( Vector4* p = &vec ) { + #pragma warning disable CS8500 + return *( ( T* )p + index ); + #pragma warning restore CS8500 + } + } + + public override string ToString() + { + return string.Empty; + } + + public string ToString( int sample ) + { + string str = string.Empty; + for( int i = 15; i >= 0; i-- ) { + str += $"{Convert.ToString(Read(i), sample)} "; + } + return str; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void Write( int index, T value ) + where T: struct +#if NET8_0_OR_GREATER + , INumber +#else + , IConvertible + #endif + { + fixed( Vector4* p = &vec ) { + #pragma warning disable CS8500 + *( ( T* )p + index ) = value; + #pragma warning restore CS8500 + } + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator !=( M128 left, M128 right ) + { + return left.vec != right.vec; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( M128 left, M128 right ) + { + return left.vec == right.vec; + } + +#if NET5_0_OR_GREATER + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static explicit operator Vector128( M128 m ) + { + return m.vec.AsVector128().As(); + } + + #endif + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/M256.cs b/源代码/StgSharp/Data/Intrinsic/M256.cs new file mode 100644 index 00000000..9a4e1cba --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/M256.cs @@ -0,0 +1,63 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="M256.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Data.Intrinsic +{ + [StructLayout( LayoutKind.Sequential )] + public unsafe struct M256 : IRegisterType + { + + private M128 v0; + private M128 v1; + + T IRegisterType.Read( int index ) + { + fixed( M128* mptr = &v0 ) { + return *( ( T* )mptr + index ); + } + } + + void IRegisterType.Write( int index, T value ) + { + fixed( M128* mptr = &v0 ) { + *( ( T* )mptr + index ) = value; + } + } + + } +} diff --git a/源代码/StgSharp/Data/Intrinsic/intrinsicContextProvider.cs b/源代码/StgSharp/Data/Intrinsic/intrinsicContextProvider.cs new file mode 100644 index 00000000..33c2ea63 --- /dev/null +++ b/源代码/StgSharp/Data/Intrinsic/intrinsicContextProvider.cs @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="intrinsicContextProvider.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the ¡°Software¡±), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED ¡°AS IS¡±, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + +using System; +using System.Runtime.InteropServices; + +namespace StgSharp +{ + internal static unsafe partial class InternalIO + { + + private static readonly IntrinsicContext _intrinsicContext = new IntrinsicContext( + ); + + internal static IntrinsicContext Intrinsic + { + get => _intrinsicContext; + } + + [DllImport( + InternalIO.SSC_libName, + CallingConvention = CallingConvention.Cdecl, + EntryPoint = "load_intrinsic_function" )] + private static extern void LoadIntrinsicFunction( + IntrinsicContext* context ); + + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Data/Lable.cs b/源代码/StgSharp/Data/Lable.cs new file mode 100644 index 00000000..978aebf4 --- /dev/null +++ b/源代码/StgSharp/Data/Lable.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Lable.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the ¡°Software¡±), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED ¡°AS IS¡±, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp; + +using System; +using System.Runtime.CompilerServices; + +namespace StgSharp.Data +{ + public class DataLabel + { + private readonly string _name; + + public DataLabel( string lableName ) + { + _name = lableName; + } + + public string Name + { + get => _name; + } + + public override unsafe int GetHashCode() + { + ReadOnlySpan nameSpan = _name.AsSpan(); + fixed( char* cptr = nameSpan ) { + return InternalIO.Intrinsic + .string_quickHash( cptr, _name.Length ); + } + } + + } + + public static class DataLabelBuilder + { + public static DataLabel AsLabel(this string name) + { + return new DataLabel(name); + } + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Data/RandomGenerator.cs b/源代码/StgSharp/Data/RandomGenerator.cs index c5e0203f..3115e04f 100644 --- a/源代码/StgSharp/Data/RandomGenerator.cs +++ b/源代码/StgSharp/Data/RandomGenerator.cs @@ -28,7 +28,7 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- -using StgSharp.Data; +using StgSharp.Data.Intrinsic; using System; using System.IO; @@ -46,38 +46,30 @@ namespace StgSharp.Data private byte[] currentKey; - private readonly byte[] originKey; private int cycleCount; private SHA512 hash; - public RandomGenerator() : this(DateTime.UtcNow.ToBinary()) - { + public RandomGenerator() : this( DateTime.UtcNow.ToBinary() ) { } - } - - public RandomGenerator(object source) + public RandomGenerator( object source ) { - try - { - if (source == null) - { - throw new ArgumentNullException(nameof(source)); + try { + if( source == null ) { + throw new ArgumentNullException( nameof( source ) ); } - XmlSerializer s = new XmlSerializer(source.GetType()); - using (StringWriter sw = new StringWriter()) - { - s.Serialize(sw, source); + XmlSerializer s = new XmlSerializer( source.GetType() ); + using( StringWriter sw = new StringWriter() ) { + s.Serialize( sw, source ); string data = sw.ToString(); - originKey = Encoding.UTF8.GetBytes(data); + originKey = Encoding.UTF8.GetBytes( data ); } } - catch (Exception) - { + catch( Exception ) { throw; } hash = SHA512.Create(); - originKey = hash.ComputeHash(originKey); + originKey = hash.ComputeHash( originKey ); currentKey = originKey; cycleCount = 0; } @@ -105,54 +97,44 @@ namespace StgSharp.Data /**/ - return source.Read(cycleCount % 4); + return source.Read( cycleCount % 4 ); } public byte GenRandomInt8() { cycleCount++; - if (cycleCount % 64 == 0) - { + if( cycleCount % 64 == 0 ) { PrivateRand(); } - return currentKey[cycleCount % 64]; + return currentKey[ cycleCount % 64 ]; } public float GenRandomSingle() { cycleCount++; - while (true) - { + while( true ) { M128 source = PrivateRand(); uint - temp0 = source.Read(0), - temp1 = source.Read(2); + temp0 = source.Read( 0 ), + temp1 = source.Read( 2 ); - if (temp0 * temp1 != 0) - { - float ret = ((temp0 % temp1) * 1.0f) / temp1; - if (ret < 0.335f) - { - ret = ret * ((ret * (-0.7811934f)) + 1.4489113f); + if( temp0 * temp1 != 0 ) { + float ret = ( ( temp0 % temp1 ) * 1.0f ) / temp1; + if( ret < 0.335f ) { + ret = ret * ( ( ret * ( -0.7811934f ) ) + 1.4489113f ); + } else { + ret = ( ret * ( ( ret * ( -0.1158368f ) ) + 1.0580600f ) ) + 0.0590584f; } - else - { - ret = (ret * ((ret * (-0.1158368f)) + 1.0580600f)) + 0.0590584f; - } - if (ret > 1) - { + if( ret > 1 ) { continue; } return ret; } - } - } - public void Reset() { currentKey = originKey; @@ -161,24 +143,27 @@ namespace StgSharp.Data private unsafe M128 PrivateRand() { - currentKey = hash.ComputeHash(currentKey); + currentKey = hash.ComputeHash( currentKey ); M128 ret; - fixed (byte* bptr = currentKey) - { - switch ((cycleCount % 16) / 4) - { + fixed( byte* bptr = currentKey ) { + switch( ( cycleCount % 16 ) / 4 ) { case 0: - ret = *(((M128*)bptr) + 0); break; + ret = *( ( ( M128* )bptr ) + 0 ); + break; case 1: - ret = *(((M128*)bptr) + 1); break; + ret = *( ( ( M128* )bptr ) + 1 ); + break; case 2: - ret = *(((M128*)bptr) + 2); break; + ret = *( ( ( M128* )bptr ) + 2 ); + break; case 3: - ret = *(((M128*)bptr) + 3); break; + ret = *( ( ( M128* )bptr ) + 3 ); + break; default: throw new InvalidOperationException(); } } + //Console.WriteLine(ret.ToString(16)); return ret; } diff --git a/源代码/StgSharp/Data/SSD/Area.cs b/源代码/StgSharp/Data/SSD/Area.cs index ae52916e..245e3b8d 100644 --- a/源代码/StgSharp/Data/SSD/Area.cs +++ b/源代码/StgSharp/Data/SSD/Area.cs @@ -39,12 +39,9 @@ using System.Threading.Tasks; namespace StgSharp.Data { ///

- /// An independent storage area, used as the only folder type in root folder. - /// Contains several files reference as virtual disc. - /// Data is actually stored in s in certain RAID mode. + /// An independent storage area, used as the only folder type in root folder. Contains several + /// files reference as virtual disc. Data is actually stored in s in certain RAID mode. /// - public partial class Area - { - - } + public partial class Area { } } diff --git a/源代码/StgSharp/Data/SSD/DataHead.cs b/源代码/StgSharp/Data/SSD/DataHead.cs index 1e839b60..1f43dffc 100644 --- a/源代码/StgSharp/Data/SSD/DataHead.cs +++ b/源代码/StgSharp/Data/SSD/DataHead.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Collections; using System.Collections.Generic; @@ -38,52 +40,44 @@ using System.Text; namespace StgSharp.Data { - - [StructLayout(LayoutKind.Explicit, Size = 16)] + [StructLayout( LayoutKind.Explicit, Size = 16 )] public struct SSDSegmentHead { + [FieldOffset( 12 )] internal byte size; - [FieldOffset(12)] internal byte size; - - [FieldOffset(0)] internal M128 data; - [FieldOffset(13)] public byte selfDefine_1; - [FieldOffset(14)] public byte selfDefine_2; - [FieldOffset(15)] public byte selfDefine_3; - - [FieldOffset(0)] public int globalID; - [FieldOffset(4)] public int nextID; - [FieldOffset(8)] public int previousHash; + [FieldOffset( 0 )] internal M128 data; + [FieldOffset( 13 )] public byte selfDefine_1; + [FieldOffset( 14 )] public byte selfDefine_2; + [FieldOffset( 15 )] public byte selfDefine_3; + [FieldOffset( 0 )] public int globalID; + [FieldOffset( 4 )] public int nextID; + [FieldOffset( 8 )] public int previousHash; public int Size { - get => ((int)size) + 1; + get => ( ( int )size ) + 1; set { - if ((value > 256) || (value < 0)) - { + if( ( value > 256 ) || ( value < 0 ) ) { throw new ArgumentOutOfRangeException(); } - size = (byte)(value - 1); + size = ( byte )( value - 1 ); } } public unsafe byte[] GetBytes() { byte[] ret = new byte[16]; - fixed (Vector4* vptr = &data.vec) - { - byte* bptr = (byte*)vptr; - for (int i = 0; i < 15; i++) - { - ret[i] = *bptr; + fixed( Vector4* vptr = &data.vec ) { + byte* bptr = ( byte* )vptr; + for( int i = 0; i < 15; i++ ) { + ret[ i ] = *bptr; } } return ret; } } - - } diff --git a/源代码/StgSharp/Data/SSD/DataSegment.cs b/源代码/StgSharp/Data/SSD/DataSegment.cs index ffa9de1e..8f863255 100644 --- a/源代码/StgSharp/Data/SSD/DataSegment.cs +++ b/源代码/StgSharp/Data/SSD/DataSegment.cs @@ -28,6 +28,7 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; using StgSharp.Math; using System; @@ -40,38 +41,37 @@ using System.Threading.Tasks; namespace StgSharp.Data { - [StructLayout(LayoutKind.Explicit, Size = StgSharp.ssdSegmentLength * 16)] + [StructLayout( LayoutKind.Explicit, Size = StgSharp.ssdSegmentLength * 16 )] public unsafe struct SSDSegment : IComparable, IComparable { - [FieldOffset(16)] public fixed byte Data[16 * (StgSharp.ssdSegmentLength - 1)]; - [FieldOffset(12)] public int DataHash; - [FieldOffset(8)] public int PreviousHash; - [FieldOffset(0 * 16)] public SSDSegmentHead Head; + [FieldOffset( 16 )] public fixed byte Data[ + 16 * ( StgSharp.ssdSegmentLength - 1 ) ]; + [FieldOffset( 12 )] public int DataHash; + [FieldOffset( 8 )] public int PreviousHash; + [FieldOffset( 0 * 16 )] public SSDSegmentHead Head; - public SSDSegment(int previousHash) + public SSDSegment( int previousHash ) { this.PreviousHash = previousHash; } - public byte this[int index] + public byte this[ int index ] { get { - if (index > (16 * (StgSharp.ssdSegmentLength - 1)) - 1) - { + if( index > ( 16 * ( StgSharp.ssdSegmentLength - 1 ) ) - 1 ) { throw new IndexOutOfRangeException(); } - return Data[index]; + return Data[ index ]; } set { - if (index > (16 * (StgSharp.ssdSegmentLength - 1)) - 1) - { + if( index > ( 16 * ( StgSharp.ssdSegmentLength - 1 ) ) - 1 ) { throw new IndexOutOfRangeException(); } - Data[index] = value; + Data[ index ] = value; } } @@ -83,31 +83,27 @@ namespace StgSharp.Data public short Size => Head.size; - public void FillRandomBytes(int begin) + public void FillRandomBytes( int begin ) { - if (begin > 255) - { + if( begin > 255 ) { return; } - for (int i = begin; i < 255; i++) - { - Data[i] = Scaler.Random(); //TODO: 使用STGSHARP内部随机数工具处理它 + for( int i = begin; i < 255; i++ ) { + Data[ i ] = Scaler.Random(); //TODO: 使用STGSHARP内部随机数工具处理它 } } - public static SSDSegment FromStream(byte[] stream) + public static SSDSegment FromStream( byte[] stream ) { - if (stream.Length != 16 * StgSharp.ssdSegmentLength) - { + if( stream.Length != 16 * StgSharp.ssdSegmentLength ) { throw new ArgumentException(); } SSDSegment ret = new SSDSegment(); - fixed (byte* bptr = stream) - { - ret.Head.data = *(M128*)bptr; - for (int i = 1; i < StgSharp.ssdSegmentLength; i++) - { - ret.WriteData(i - 1, *(M128*)(bptr + (16 * i))); + fixed( byte* bptr = stream ) { + ret.Head.data = *( M128* )bptr; + for( int i = 1; i < StgSharp.ssdSegmentLength; i++ ) { + ret.WriteData( + i - 1, *( M128* )( bptr + ( 16 * i ) ) ); } } return ret; @@ -116,15 +112,12 @@ namespace StgSharp.Data public byte[] GetBytes() { byte[] ret = new byte[16 * StgSharp.ssdSegmentLength]; - fixed (M128* mptr = &Head.data) - { - fixed (byte* aptr = ret) - { - Vector4* vsptr = (Vector4*)mptr; - Vector4* vtptr = (Vector4*)aptr; - for (int i = 0; i < 18; i++) - { - *(vtptr + i) = *(vsptr + i); + fixed( M128* mptr = &Head.data ) { + fixed( byte* aptr = ret ) { + Vector4* vsptr = ( Vector4* )mptr; + Vector4* vtptr = ( Vector4* )aptr; + for( int i = 0; i < 18; i++ ) { + *( vtptr + i ) = *( vsptr + i ); } } } @@ -135,15 +128,13 @@ namespace StgSharp.Data public int GetDataHash() { Vector4 v = Vector4.One; - fixed (M128* mptr = &Head.data) - { - Vector4* vptr = (Vector4*)mptr; - for (int i = 0; i < StgSharp.ssdSegmentLength - 1; i += 1) - { - v += (*vptr) * 31; + fixed( M128* mptr = &Head.data ) { + Vector4* vptr = ( Vector4* )mptr; + for( int i = 0; i < StgSharp.ssdSegmentLength - 1; i += 1 ) { + v += ( *vptr ) * 31; } } - M128 m = new M128(v); + M128 m = new M128( v ); DataHash = m.vec.GetHashCode(); return DataHash; } @@ -151,45 +142,40 @@ namespace StgSharp.Data public override int GetHashCode() { int ret = 17; - fixed (M128* mptr = &Head.data) - { - Vector4* vptr = (Vector4*)mptr; - for (int i = 0; i < StgSharp.ssdSegmentLength; i++) - { - ret = (ret + (*vptr).GetHashCode()) * 31; + fixed( M128* mptr = &Head.data ) { + Vector4* vptr = ( Vector4* )mptr; + for( int i = 0; i < StgSharp.ssdSegmentLength; i++ ) { + ret = ( ret + ( *vptr ).GetHashCode() ) * 31; } } return ret; } - public unsafe T ReadData(int index) where T : struct + public unsafe T ReadData( int index ) where T: struct { - fixed (byte* bptr = Data) - { - T* tptr = (T*)bptr; - return *(tptr + index); + fixed( byte* bptr = Data ) { + T* tptr = ( T* )bptr; + return *( tptr + index ); } } - public unsafe void WriteData(int index, T value) where T : struct + public unsafe void WriteData( int index, T value ) where T: struct { - fixed (byte* bptr = Data) - { - T* tptr = (T*)bptr; - *(tptr + index) = value; + fixed( byte* bptr = Data ) { + T* tptr = ( T* )bptr; + *( tptr + index ) = value; } } - int IComparable.CompareTo(int other) + int IComparable.CompareTo( int other ) { - return ID.CompareTo(other); + return ID.CompareTo( other ); } - int IComparable.CompareTo(SSDSegment other) + int IComparable.CompareTo( SSDSegment other ) { - return ID.CompareTo(other.ID); + return ID.CompareTo( other.ID ); } } - } diff --git a/源代码/StgSharp/Data/SSD/SSD.cs b/源代码/StgSharp/Data/SSD/SSD.cs index b5cc1805..30f9ae40 100644 --- a/源代码/StgSharp/Data/SSD/SSD.cs +++ b/源代码/StgSharp/Data/SSD/SSD.cs @@ -50,17 +50,19 @@ namespace StgSharp.Data fileList = new Dictionary(); } - public SSD(FileStream fileStream) + public SSD( FileStream fileStream ) { fileList = new Dictionary(); file = fileStream; } - public static SSD FromFile(string fileRoute) + public static SSD FromFile( string fileRoute ) { - return new SSD(new FileStream(fileRoute, FileMode.Open, FileAccess.Read)) { }; + return new SSD( + new FileStream( fileRoute, FileMode.Open, FileAccess.Read ) ) + { + }; } } - } diff --git a/源代码/StgSharp/Data/SSD/SSDVirtualFolder.cs b/源代码/StgSharp/Data/SSD/SSDVirtualFolder.cs index 24afdc03..4e1b9c71 100644 --- a/源代码/StgSharp/Data/SSD/SSDVirtualFolder.cs +++ b/源代码/StgSharp/Data/SSD/SSDVirtualFolder.cs @@ -49,19 +49,15 @@ namespace StgSharp.Data folders = new Dictionary(); } - internal SSDFolder(string name) + internal SSDFolder( string name ) { - if (name == "root") - { + if( name == "root" ) { throw new ArgumentException( - "Name cannot be root," + - "it is preserved for root file indexer."); + "Name cannot be root," + "it is preserved for root file indexer." ); } - if (name == "default") - { + if( name == "default" ) { throw new ArgumentException( - "Name cannot be default," + - "it is preserved for default file id provider."); + "Name cannot be default," + "it is preserved for default file id provider." ); } _name = name; folders = new Dictionary(); @@ -69,12 +65,11 @@ namespace StgSharp.Data public SerializableTypeCode SSDTypeCode => SerializableTypeCode.VirtualFolder; - public void FromBytes(byte[] stream) + public void FromBytes( byte[] stream ) { throw new NotImplementedException(); } - //TODO 虚拟文件夹的GetBytes好难写 public byte[] GetBytes() { diff --git a/源代码/StgSharp/Data/SSD/SSDraw.cs b/源代码/StgSharp/Data/SSD/SSDraw.cs index 44c6f23c..87a7e8f2 100644 --- a/源代码/StgSharp/Data/SSD/SSDraw.cs +++ b/源代码/StgSharp/Data/SSD/SSDraw.cs @@ -50,28 +50,30 @@ namespace StgSharp.Data.FileIO private byte[] data; - public SSDraw(string name, Stream streamSource) + public SSDraw( string name, Stream streamSource ) { - if ((streamSource == null) || (streamSource.Length == 0)) - { - throw new ArgumentNullException(nameof(streamSource)); + if( ( streamSource == null ) || ( streamSource.Length == 0 ) ) { + throw new ArgumentNullException( nameof( streamSource ) ); } Name = name; data = new byte[streamSource.Length]; - streamSource.Read(data.AsSpan()); + streamSource.Read( data.AsSpan() ); } - public SSDrawHead Head { get; set; } - public string Name { get; set; } + public SSDrawHead Head + { + get; + set; + } + + public string Name + { + get; + set; + } } - - [StructLayout(LayoutKind.Explicit, Size = 32 * 16)] - public unsafe struct SSDrawHead - { - - } - - + [StructLayout( LayoutKind.Explicit, Size = 32 * 16 )] + public unsafe struct SSDrawHead { } } diff --git a/源代码/StgSharp/Data/Serialize/Define.cs b/源代码/StgSharp/Data/Serialize/Define.cs index 1e8949c7..6cd30161 100644 --- a/源代码/StgSharp/Data/Serialize/Define.cs +++ b/源代码/StgSharp/Data/Serialize/Define.cs @@ -34,13 +34,8 @@ using System.Text; namespace StgSharp.Data { - /// /// A class contains a sets of methods to serialize several types /// - public static partial class Serializer - { - - - } + public static partial class Serializer { } } diff --git a/源代码/StgSharp/Data/Serialize/ISSDSerializable.cs b/源代码/StgSharp/Data/Serialize/ISSDSerializable.cs index 70b64c54..8dc7cd77 100644 --- a/源代码/StgSharp/Data/Serialize/ISSDSerializable.cs +++ b/源代码/StgSharp/Data/Serialize/ISSDSerializable.cs @@ -36,20 +36,23 @@ using System.Threading.Tasks; namespace StgSharp.Data { - public interface ISSDSerializable { - public SerializableTypeCode SSDTypeCode { get; } + public SerializableTypeCode SSDTypeCode + { + get; + } public byte[] GetBytes(); - internal void FromBytes(byte[] stream); + internal void FromBytes( byte[] stream ); } public enum SerializableTypeCode { + Unknown = 0, IndexTable = 1, PixelImage = 2, @@ -59,22 +62,23 @@ namespace StgSharp.Data Text = 6, RawData = 7, VirtualFolder = int.MaxValue, + } public static partial class Serializer { - public static T Deserialize(byte[] stream) where T : ISSDSerializable + public static T Deserialize( byte[] stream ) + where T: ISSDSerializable { T serializableObject = Activator.CreateInstance(); - serializableObject.FromBytes(stream); + serializableObject.FromBytes( stream ); return serializableObject; } - public static string GetNameTail(SerializableTypeCode typeCode) + public static string GetNameTail( SerializableTypeCode typeCode ) { - switch (typeCode) - { + switch( typeCode ) { case SerializableTypeCode.IndexTable: return "_idt"; case SerializableTypeCode.PixelImage: @@ -92,10 +96,11 @@ namespace StgSharp.Data case SerializableTypeCode.VirtualFolder: return "_fod"; default: - throw new ArgumentException("Unknown file type"); + throw new ArgumentException( "Unknown file type" ); } } - public static byte[] Serialize(ISSDSerializable serializableObject) + + public static byte[] Serialize( ISSDSerializable serializableObject ) { return serializableObject.GetBytes(); } diff --git a/源代码/StgSharp/Entities/BehaviorArgs.cs b/源代码/StgSharp/Entities/BehaviorArgs.cs index 692aa406..01cc4e09 100644 --- a/源代码/StgSharp/Entities/BehaviorArgs.cs +++ b/源代码/StgSharp/Entities/BehaviorArgs.cs @@ -30,8 +30,5 @@ //----------------------------------------------------------------------- namespace StgSharp.Entities { - public abstract class BehaviorArgs - { - - } + public abstract class BehaviorArgs { } } diff --git a/源代码/StgSharp/Entities/EliteEnemy.cs b/源代码/StgSharp/Entities/EliteEnemy.cs index e2c80638..26024854 100644 --- a/源代码/StgSharp/Entities/EliteEnemy.cs +++ b/源代码/StgSharp/Entities/EliteEnemy.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using System; using System.Collections.Generic; @@ -43,9 +42,23 @@ namespace StgSharp.Entities internal LinkedList> _commonBulletLauncher; public bool _selectalbe; - public Launcher AwardLauncher { get; set; } - public Launcher DieBulletLauncher { get; set; } - public LinkedList> CommonBulletLauncher { get; set; } + public Launcher AwardLauncher + { + get; + set; + } + + public Launcher DieBulletLauncher + { + get; + set; + } + + public LinkedList> CommonBulletLauncher + { + get; + set; + } public virtual void OnRender() { @@ -55,8 +68,7 @@ namespace StgSharp.Entities public override void OnRenderFrame() { this.OnUpdate(); - foreach (Launcher launcher in CommonBulletLauncher) - { + foreach( Launcher launcher in CommonBulletLauncher ) { launcher.Launch(); } this.OnRender(); @@ -67,6 +79,5 @@ namespace StgSharp.Entities new NotImplementedException(); } - } } \ No newline at end of file diff --git a/源代码/StgSharp/Entities/Enemy.cs b/源代码/StgSharp/Entities/Enemy.cs index 503cd257..6b5a48cc 100644 --- a/源代码/StgSharp/Entities/Enemy.cs +++ b/源代码/StgSharp/Entities/Enemy.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - namespace StgSharp.Entities { public class Enemy : IEntity @@ -40,15 +39,28 @@ namespace StgSharp.Entities internal Launcher _dieBulletLauncher; public bool _selectalbe; - public Launcher AwardLauncher { get; set; } - public Launcher CommonBulletLauncher { get; set; } - public Launcher DieBulletLauncher { get; set; } + public Launcher AwardLauncher + { + get; + set; + } + + public Launcher CommonBulletLauncher + { + get; + set; + } + + public Launcher DieBulletLauncher + { + get; + set; + } public override void OnRenderFrame() { CommonBulletLauncher.Launch(); } - } } diff --git a/源代码/StgSharp/Entities/EntityPartical.cs b/源代码/StgSharp/Entities/EntityPartical.cs index 552832a1..9b654c1a 100644 --- a/源代码/StgSharp/Entities/EntityPartical.cs +++ b/源代码/StgSharp/Entities/EntityPartical.cs @@ -30,8 +30,5 @@ //----------------------------------------------------------------------- namespace StgSharp.Entities { - public abstract class EntityPartical : IEntity - { - - } + public abstract class EntityPartical : IEntity { } } diff --git a/源代码/StgSharp/Entities/IEntity.cs b/源代码/StgSharp/Entities/IEntity.cs index 925e9980..345394a9 100644 --- a/源代码/StgSharp/Entities/IEntity.cs +++ b/源代码/StgSharp/Entities/IEntity.cs @@ -40,7 +40,7 @@ namespace StgSharp { protected uint _bornTick; - internal Func _movHandler; + internal Func _movHandler; internal LinkedList _collisionBox; internal Point _basePoint; internal Point _pos; @@ -51,12 +51,20 @@ namespace StgSharp /// /// X position of an enenmy entity /// - public float X { get; set; } + public float X + { + get; + set; + } /// /// Y position of an enemy entity /// - public float Y { get; set; } + public float Y + { + get; + set; + } public LinkedList CollisionBox { @@ -73,16 +81,24 @@ namespace StgSharp set => _collisionSensor = value; } - public string TextureGL { get; set; } + public string TextureGL + { + get; + set; + } /// - /// A 2D vector presenting the position of an enemy entity, position can also be visited by X, Y + /// A 2D vector presenting the position of an enemy entity, position can also be visited by + /// X, Y /// - public vec2d Location { get; } + public Vec2 Location + { + get; + } public abstract void OnRenderFrame(); - public void SetLocation(Point p) + public void SetLocation( Point p ) { _pos = p; } diff --git a/源代码/StgSharp/Entities/Launcher.cs b/源代码/StgSharp/Entities/Launcher.cs index 49ba47fe..1a1073ee 100644 --- a/源代码/StgSharp/Entities/Launcher.cs +++ b/源代码/StgSharp/Entities/Launcher.cs @@ -33,7 +33,7 @@ using StgSharp.Math; namespace StgSharp { - public class Launcher where T : IEntity + public class Launcher where T: IEntity { internal uint[] launchtick; //发射子弹的内部计时 @@ -44,7 +44,7 @@ namespace StgSharp *用于发射其他的实体,主要是子弹 和 掉落物 */ - internal vec2d _center; //发射器的参考位置,运动轨迹的方程应当基于这个参考点构建 + internal Vec2 _center; //发射器的参考位置,运动轨迹的方程应当基于这个参考点构建 public EntityPartical Bullet { @@ -52,12 +52,7 @@ namespace StgSharp set => _bulletSample = value; } - internal virtual void Launch() - { - - } - - + internal virtual void Launch() { } } } diff --git a/源代码/StgSharp/Entities/Player.cs b/源代码/StgSharp/Entities/Player.cs index dae08276..1fed616b 100644 --- a/源代码/StgSharp/Entities/Player.cs +++ b/源代码/StgSharp/Entities/Player.cs @@ -37,7 +37,5 @@ namespace StgSharp public float Velocity => _velocity; - - } } diff --git a/源代码/StgSharp/Environment/ErrorDefine.cs b/源代码/StgSharp/Environment/ErrorDefine.cs index 92c5704c..05123fb7 100644 --- a/源代码/StgSharp/Environment/ErrorDefine.cs +++ b/源代码/StgSharp/Environment/ErrorDefine.cs @@ -39,11 +39,9 @@ namespace StgSharp public class UniformEmptyReferenceException : Exception { - public UniformEmptyReferenceException(string program, string name) : - base($"Location -1 returned when trying to find uniform {name} in shader program {program}") - { - - } + public UniformEmptyReferenceException( string program, string name ) + : base( + $"Location -1 returned when trying to find uniform {name} in shader program {program}" ) { } } } diff --git a/源代码/StgSharp/Environment/GlobalSetting.cs b/源代码/StgSharp/Environment/GlobalSetting.cs index 312c1c7d..205e9638 100644 --- a/源代码/StgSharp/Environment/GlobalSetting.cs +++ b/源代码/StgSharp/Environment/GlobalSetting.cs @@ -44,7 +44,7 @@ namespace StgSharp internal const int ssdSegmentLength = 16; - static byte[] _currentHash; + private static byte[] _currentHash; private static bool _inited; private static int _mainThreadID = -1; @@ -53,14 +53,12 @@ namespace StgSharp { get { - if (_currentHash == null) - { + if( _currentHash == null ) { string route = Assembly.GetExecutingAssembly().Location; string time = DateTime.UtcNow.ToString(); - using (SHA256 sh = SHA256.Create()) - { - byte[] bytes = Encoding.UTF8.GetBytes(route); - _currentHash = sh.ComputeHash(bytes); + using( SHA256 sh = SHA256.Create() ) { + byte[] bytes = Encoding.UTF8.GetBytes( route ); + _currentHash = sh.ComputeHash( bytes ); } } return _currentHash; @@ -69,26 +67,24 @@ namespace StgSharp public static int MainThreadID { - get => (_mainThreadID == -1) ? - throw new InvalidOperationException("StgSharp environment is not inited. " + - "Main thread id is not available") : _mainThreadID; + get => ( _mainThreadID == -1 ) ? + throw new InvalidOperationException( + "StgSharp environment is not inited. " + "Main thread id is not available" ) : _mainThreadID; } /// - /// CustomizeInit an instance of OpenGL program, - /// This method should be called before any other StgSharp api. + /// CustomizeInit an instance of OpenGL program, This method should be called before any + /// other StgSharp api. /// - public static void InitGL(int majorVersion, int minorVersion) + public static void InitGL( int majorVersion, int minorVersion ) { - if (API == default) - { + if( API == default ) { API = GraphicAPI.GL; } - if (API != GraphicAPI.GL) - { + if( API != GraphicAPI.GL ) { return; } - InternalIO.InternalInitGL(majorVersion, minorVersion); + InternalIO.InternalInitGL( majorVersion, minorVersion ); } public static class GlobalSetting @@ -101,7 +97,7 @@ namespace StgSharp get => vsyncActivated; set { - InternalIO.glfwSwapInterval(value ? 1 : 0); + InternalIO.glfwSwapInterval( value ? 1 : 0 ); vsyncActivated = value; } } diff --git a/源代码/StgSharp/Environment/Monitors.cs b/源代码/StgSharp/Environment/Monitors.cs index f6f8fe3d..753ed36b 100644 --- a/源代码/StgSharp/Environment/Monitors.cs +++ b/源代码/StgSharp/Environment/Monitors.cs @@ -48,13 +48,13 @@ namespace StgSharp { get { - if (monitorsArray == null) - { + if( monitorsArray == null ) { int count = 0; - IntPtr* arrayhandle = InternalIO.glfwGetMonitors(&count); + IntPtr* arrayhandle = InternalIO.glfwGetMonitors( &count ); monitorsArray = new IntPtr[count]; - Marshal.Copy((IntPtr)arrayhandle, monitorsArray, 0, count); - Marshal.FreeHGlobal((IntPtr)arrayhandle); + Marshal.Copy( + ( IntPtr )arrayhandle, monitorsArray, 0, count ); + Marshal.FreeHGlobal( ( IntPtr )arrayhandle ); } return monitorsArray; } @@ -62,10 +62,8 @@ namespace StgSharp public static IntPtr DefaultMonitor { - get { return MonitorsHandleArray[0]; } + get { return MonitorsHandleArray[ 0 ]; } } } - - } diff --git a/源代码/StgSharp/Environment/Platform.cs b/源代码/StgSharp/Environment/Platform.cs index 9334ce4e..98e17b18 100644 --- a/源代码/StgSharp/Environment/Platform.cs +++ b/源代码/StgSharp/Environment/Platform.cs @@ -60,18 +60,19 @@ namespace StgSharp { internal enum GraphicAPI : byte { + GL, DX, VK + } public static partial class StgSharp { /// - /// Version of current StgSharp platform. - /// Main version represent in hundred's digit, - /// and sub version represent in ten's digit. + /// Version of current StgSharp platform. Main version represent in hundred's digit, and sub + /// version represent in ten's digit. /// public const long version = 430; @@ -85,38 +86,39 @@ namespace StgSharp mainTimeProvider = new StgSharpTime(); MainTimeProvider.StartProvidingTime(); InternalIO.glfwInit(); - InternalIO.InternalAppendLog("\n\n\n"); + InternalIO.InternalAppendLog( "\n\n\n" ); InternalIO.InternalWriteLog( $"Program {Assembly.GetEntryAssembly()!.FullName} Started.", - LogType.Info); + LogType.Info ); _mainThreadID = Environment.CurrentManagedThreadId; } - public static void LogError(Exception ex) + public static void LogError( Exception ex ) { - InternalIO.InternalWriteLog(ex.Message, LogType.Error); + InternalIO.InternalWriteLog( ex.Message, LogType.Error ); } - public static void LogInfo(string log) + public static void LogInfo( string log ) { - InternalIO.InternalWriteLog(log, LogType.Info); + InternalIO.InternalWriteLog( log, LogType.Info ); } - public static void LogWarning(string log) + public static void LogWarning( string log ) { - InternalIO.InternalWriteLog(log, LogType.Warning); - } - public static void LogWarning(Exception notVerySeriesException) - { - InternalIO.InternalWriteLog(notVerySeriesException.Message, LogType.Warning); + InternalIO.InternalWriteLog( log, LogType.Warning ); } - public static void Mark(bool needConsole) + public static void LogWarning( Exception notVerySeriesException ) + { + InternalIO.InternalWriteLog( + notVerySeriesException.Message, LogType.Warning ); + } + + public static void Mark( bool needConsole ) { markCount++; - if (needConsole) - { - Console.WriteLine(markCount); + if( needConsole ) { + Console.WriteLine( markCount ); } } @@ -132,68 +134,60 @@ namespace StgSharp bool isConsole, [CallerFilePath] string filePath = "", [CallerMemberName] string callerName = "", - [CallerLineNumber] int lineNumber = 0 - ) + [CallerLineNumber] int lineNumber = 0 ) { Type t = target.GetType(); string log = $"Tracked object: {nameof(target)}\t\tType:{t.Name}\n"; - FieldInfo[] fieldInfo = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + FieldInfo[] fieldInfo = t.GetFields( + BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance ); log += "|\tFieldName\t|\tFieldType\t|\tFieldValue\t|\n"; - foreach (FieldInfo field in fieldInfo) - { + foreach( FieldInfo field in fieldInfo ) { log += $"|{field.Name}\t\t|{field.FieldType}\t\t|{field.GetValue(target)}\t\t|\n"; } log += $"Tracking at:\n{filePath}\t{callerName}\tline {lineNumber}\n"; log += $"Additional information:\n{message}\n"; - if (isConsole) - { - Console.WriteLine(log); - } - else - { - InternalIO.InternalWriteLog(log, LogType.Info); + if( isConsole ) { + Console.WriteLine( log ); + } else { + InternalIO.InternalWriteLog( log, LogType.Info ); } } /// /// Write a log message to log file, and mark the _level of this message. /// - /// A string contains information of how current evironment runs. - /// The severity of current message. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void WriteLog(string message, LogType logType) + /// A string contains information of how current evironment runs. + /// The severity of current message. + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static void WriteLog( string message, LogType logType ) { - InternalIO.InternalWriteLog(message, logType); + InternalIO.InternalWriteLog( message, logType ); } - internal static TDele ConvertAPI(IntPtr funcPtr) + internal static TDele ConvertAPI( IntPtr funcPtr ) { - if (funcPtr == IntPtr.Zero) - { - throw new Exception("Failed to convert api, the function pointer is zero."); + if( funcPtr == IntPtr.Zero ) { + throw new Exception( + "Failed to convert api, the function pointer is zero." ); } - try - { - return Marshal.GetDelegateForFunctionPointer(funcPtr); + try { + return Marshal.GetDelegateForFunctionPointer( funcPtr ); } - catch (Exception) - { + catch( Exception ) { throw; } } - internal static Delegate ConvertAPI(IntPtr funcPtr, Type T) + internal static Delegate ConvertAPI( IntPtr funcPtr, Type T ) { - if (funcPtr == IntPtr.Zero) - { - throw new Exception("Failed to convert api, the function pointer is zero."); + if( funcPtr == IntPtr.Zero ) { + throw new Exception( + "Failed to convert api, the function pointer is zero." ); } - try - { - return Marshal.GetDelegateForFunctionPointer(funcPtr, T); + try { + return Marshal.GetDelegateForFunctionPointer( funcPtr, T ); } - catch (Exception) - { + catch( Exception ) { throw; } } diff --git a/源代码/StgSharp/Environment/globalKeyStat.cs b/源代码/StgSharp/Environment/globalKeyStat.cs index 9ed4c49c..afddb8ab 100644 --- a/源代码/StgSharp/Environment/globalKeyStat.cs +++ b/源代码/StgSharp/Environment/globalKeyStat.cs @@ -37,18 +37,16 @@ using System.Threading.Tasks; namespace StgSharp { - public static partial class StgSharp { private static ConcurrentDictionary keyListener = new ConcurrentDictionary(); - public static KeyStatus CheckKey(KeyboardKey key) + public static KeyStatus CheckKey( KeyboardKey key ) { - return keyListener.GetOrAdd((int)key, KeyStatus.RELEASE); + return keyListener.GetOrAdd( ( int )key, KeyStatus.RELEASE ); } - } } diff --git a/源代码/StgSharp/Geometries/Coordination/CoordinationBase.cs b/源代码/StgSharp/Geometries/Coordination/CoordinationBase.cs index bec389d7..e86c9be5 100644 --- a/源代码/StgSharp/Geometries/Coordination/CoordinationBase.cs +++ b/源代码/StgSharp/Geometries/Coordination/CoordinationBase.cs @@ -45,9 +45,7 @@ namespace StgSharp.Geometries private CoordinationBase localCoordination; private Matrix44 coordMat; - - public CoordinationBase( - CoordinationBase localCoordination) + public CoordinationBase( CoordinationBase localCoordination ) { this.localCoordination = localCoordination; coordMat = new Matrix44(); @@ -55,23 +53,23 @@ namespace StgSharp.Geometries public virtual Point LocalOrigin { - get => new Point(coordMat.colum3.XYZ); + get => new Point( coordMat.colum3.XYZ ); internal set => coordMat.colum3.XYZ = value.Coord; } - public virtual vec3d LocalX + public virtual Vec3 LocalX { get => coordMat.colum0.XYZ; internal set => coordMat.colum0.XYZ = value; } - public virtual vec3d LocalY + public virtual Vec3 LocalY { get => coordMat.colum1.XYZ; internal set => coordMat.colum1.XYZ = value; } - public virtual vec3d LocalZ + public virtual Vec3 LocalZ { get => coordMat.colum2.XYZ; set => coordMat.colum2.XYZ = value; diff --git a/源代码/StgSharp/Geometries/Coordination/PlainCoordinate.cs b/源代码/StgSharp/Geometries/Coordination/PlainCoordinate.cs index 1535bdf6..e8624a1e 100644 --- a/源代码/StgSharp/Geometries/Coordination/PlainCoordinate.cs +++ b/源代码/StgSharp/Geometries/Coordination/PlainCoordinate.cs @@ -41,23 +41,22 @@ namespace StgSharp.Geometries { private static PlainCoordinate statndardPlainCoordination = new PlainCoordinate( - null, new Point(0, 0, 0), - new vec3d(1, 0, 0), - new vec3d(0, 1, 0) - ); + null, new Point( 0, 0, 0 ), new Vec3( 1, 0, 0 ), + new Vec3( 0, 1, 0 ) ); public PlainCoordinate( CoordinationBase local, Point origin, - vec3d xAxis, - vec3d yAxis - ) : base(local) + Vec3 xAxis, + Vec3 yAxis ) + : base( local ) { CoordMat = Matrix44.Unit; - CoordMat.colum0 = new vec4d(xAxis, 0); - CoordMat.colum1 = new vec4d(yAxis, 0); - CoordMat.colum2 = new vec4d(Linear.Normalize(Vec3d.Cross(xAxis, yAxis)), 0); + CoordMat.colum0 = new Vec4( xAxis, 0 ); + CoordMat.colum1 = new Vec4( yAxis, 0 ); + CoordMat.colum2 = new Vec4( + Linear.Normalize( Vec3.Cross( xAxis, yAxis ) ), 0 ); LocalOrigin = origin; } diff --git a/源代码/StgSharp/Geometries/Coordination/SpaceCoordinate.cs b/源代码/StgSharp/Geometries/Coordination/SpaceCoordinate.cs index f6797ffe..4e83172d 100644 --- a/源代码/StgSharp/Geometries/Coordination/SpaceCoordinate.cs +++ b/源代码/StgSharp/Geometries/Coordination/SpaceCoordinate.cs @@ -40,11 +40,12 @@ namespace StgSharp.Geometries { public SpaceCoordinate( - CoordinationBase localCoordination, Point origin, - vec3d xAxis, vec3d yAxis, vec3d zAxis - ) : base(localCoordination) - { - } + CoordinationBase localCoordination, + Point origin, + Vec3 xAxis, + Vec3 yAxis, + Vec3 zAxis ) + : base( localCoordination ) { } } } diff --git a/源代码/StgSharp/Geometries/GemoryException.cs b/源代码/StgSharp/Geometries/GemoryException.cs index cea81165..1189a134 100644 --- a/源代码/StgSharp/Geometries/GemoryException.cs +++ b/源代码/StgSharp/Geometries/GemoryException.cs @@ -36,20 +36,19 @@ namespace StgSharp.Geometries public unsafe class ToUpperDimensionException : Exception { - protected ToUpperDimensionException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - public ToUpperDimensionException() - { - } + protected ToUpperDimensionException( + SerializationInfo info, + StreamingContext context ) + : base( info, context ) { } - public ToUpperDimensionException(string message) : base(message) - { - } + public ToUpperDimensionException() { } - public ToUpperDimensionException(string message, Exception innerException) : base(message, innerException) - { - } + public ToUpperDimensionException( string message ) : base( message ) { } + + public ToUpperDimensionException( + string message, + Exception innerException ) + : base( message, innerException ) { } } @@ -59,20 +58,17 @@ namespace StgSharp.Geometries public class UnusedVertexException : Exception { - protected UnusedVertexException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - public UnusedVertexException() - { - } + protected UnusedVertexException( + SerializationInfo info, + StreamingContext context ) + : base( info, context ) { } - public UnusedVertexException(string message) : base(message) - { - } + public UnusedVertexException() { } - public UnusedVertexException(string message, Exception innerException) : base(message, innerException) - { - } + public UnusedVertexException( string message ) : base( message ) { } + + public UnusedVertexException( string message, Exception innerException ) + : base( message, innerException ) { } } } diff --git a/源代码/StgSharp/Geometries/GeometryOperation/GeometryOperation.cs b/源代码/StgSharp/Geometries/GeometryOperation/GeometryOperation.cs index fc75902d..c8833636 100644 --- a/源代码/StgSharp/Geometries/GeometryOperation/GeometryOperation.cs +++ b/源代码/StgSharp/Geometries/GeometryOperation/GeometryOperation.cs @@ -39,8 +39,10 @@ using System.Text; namespace StgSharp.Geometries { - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate vec3d GeometryMotionDelegate(TimeSpanProvider timeSource, out float rotation); +[UnmanagedFunctionPointer( CallingConvention.Cdecl )] + public delegate Vec3 GeometryMotionDelegate( + TimeSpanProvider timeSource, + out float rotation ); public class GeometryMotion { @@ -54,69 +56,60 @@ namespace StgSharp.Geometries public unsafe GeometryMotion( bool isIncreament, TimeSpanProvider timeSource, - GeometryMotionDelegate motionDelegate - ) + GeometryMotionDelegate motionDelegate ) { isIncrementMode = isIncreament; time = timeSource; - if (motionDelegate == null) - { - handle = (IntPtr)(delegate*)&defaultMotion; + if( motionDelegate == null ) { + handle = ( IntPtr )( delegate* )&defaultMotion; movement = defaultMotion; - } - else if (motionDelegate.Method.IsStatic) - { + } else if( motionDelegate.Method.IsStatic ) { sourceIsStatic = true; - handle = Marshal.GetFunctionPointerForDelegate(motionDelegate); + handle = Marshal.GetFunctionPointerForDelegate( motionDelegate ); movement = motionDelegate; - } - else - { + } else { movement = motionDelegate; } + //sourceIsStatic = false; } public bool IsIncrement { get => isIncrementMode; - } public static GeometryMotion DefaultMotion { - get => new GeometryMotion(true, null, null); + get => new GeometryMotion( true, null, null ); } - public unsafe void RunMotion(ref vec3d coord, ref float rotation) + public unsafe void RunMotion( ref Vec3 coord, ref float rotation ) { float rot; - vec3d vec; - if (sourceIsStatic) - { - vec = ((delegate* unmanaged[Cdecl])handle)(time, out rot); - } - else - { - vec = movement(time, out rot); + Vec3 vec; + if( sourceIsStatic ) { + vec = ( ( delegate* unmanaged[Cdecl] )handle )( + time, out rot ); + } else { + vec = movement( time, out rot ); } - if (isIncrementMode) - { + if( isIncrementMode ) { coord += vec; rotation += rot; - } - else - { + } else { coord = vec; rotation = rot; } } - private static vec3d defaultMotion(TimeSpanProvider provider, out float rotation) + private static Vec3 defaultMotion( + TimeSpanProvider provider, + out float rotation ) { rotation = 0; - return Vec3d.Zero; + return Vec3.Zero; } }//------------------------------- End of Class ------------------------------- diff --git a/源代码/StgSharp/Geometries/GeometryScaler/Angle.cs b/源代码/StgSharp/Geometries/GeometryScaler/Angle.cs index a1b3ee58..4c072d97 100644 --- a/源代码/StgSharp/Geometries/GeometryScaler/Angle.cs +++ b/源代码/StgSharp/Geometries/GeometryScaler/Angle.cs @@ -42,46 +42,46 @@ namespace StgSharp.Math internal const float DegToRad = 180 / Scaler.Pi; - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Cos(Radius r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Cos( Radius r ) { - return MathF.Cos(r._radius); + return MathF.Cos( r._radius ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Cos(Degree r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Cos( Degree r ) { - return MathF.Cos(r._degree / DegToRad); + return MathF.Cos( r._degree / DegToRad ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Sin(Radius r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Sin( Radius r ) { - return MathF.Sin(r._radius); + return MathF.Sin( r._radius ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Sin(Degree r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Sin( Degree r ) { - return MathF.Sin(r._degree / DegToRad); + return MathF.Sin( r._degree / DegToRad ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Tan(Radius r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Tan( Radius r ) { - return MathF.Tan(r._radius); + return MathF.Tan( r._radius ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Tan(Degree r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Tan( Degree r ) { - return MathF.Tan(r._degree / DegToRad); + return MathF.Tan( r._degree / DegToRad ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Degree ToDegree(float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Degree ToDegree( float value ) { - return new Degree(value); + return new Degree( value ); } } @@ -91,14 +91,14 @@ namespace StgSharp.Math internal float _degree; - internal Degree(float dgree) + internal Degree( float dgree ) { _degree = dgree; } - public static implicit operator Radius(Degree d) + public static implicit operator Radius( Degree d ) { - return new Radius(d._degree / GeometryScaler.DegToRad); + return new Radius( d._degree / GeometryScaler.DegToRad ); } } @@ -108,70 +108,70 @@ namespace StgSharp.Math internal float _radius; - [Obsolete("Unsafe, you may forget this is radius.", true)] + [Obsolete( "Unsafe, you may forget this is radius.", true )] public Radius() { } - public Radius(float radius) + public Radius( float radius ) { _radius = radius; } public static Radius Zero { - get => new Radius(0); + get => new Radius( 0 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Radius operator -(Radius r) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Radius operator -( Radius r ) { - return new Radius(-r._radius); + return new Radius( -r._radius ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Radius operator -(Radius left, Radius Right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Radius operator -( Radius left, Radius Right ) { - return new Radius(left._radius - Right._radius); + return new Radius( left._radius - Right._radius ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool operator !=(Radius left, Radius right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator !=( Radius left, Radius right ) { return left._radius != right._radius; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Radius operator *(Radius left, float right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Radius operator *( Radius left, float right ) { - return new Radius(left._radius * right); + return new Radius( left._radius * right ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Radius operator /(Radius left, float right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Radius operator /( Radius left, float right ) { - return new Radius(left._radius / right); + return new Radius( left._radius / right ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float operator /(Radius left, Radius right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float operator /( Radius left, Radius right ) { return left._radius / right._radius; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Radius operator +(Radius left, Radius Right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Radius operator +( Radius left, Radius Right ) { - return new Radius(left._radius + Right._radius); + return new Radius( left._radius + Right._radius ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool operator ==(Radius left, Radius right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( Radius left, Radius right ) { return left._radius == right._radius; } - public static implicit operator Degree(Radius r) + public static implicit operator Degree( Radius r ) { - return new Degree((r._radius * 180) / Scaler.Pi); + return new Degree( ( r._radius * 180 ) / Scaler.Pi ); } } diff --git a/源代码/StgSharp/Geometries/IGeometry.cs b/源代码/StgSharp/Geometries/IGeometry.cs index 5934dc97..22fda049 100644 --- a/源代码/StgSharp/Geometries/IGeometry.cs +++ b/源代码/StgSharp/Geometries/IGeometry.cs @@ -42,19 +42,23 @@ namespace StgSharp.Geometries public interface IGeometry { - public Point this[int index] + public Point this[ int index ] { get; set; } -#pragma warning disable CA1819 - public vec4d[] VertexStream -#pragma warning restore CA1819 + #pragma warning disable CA1819 + public Vec4[] VertexStream + #pragma warning restore CA1819 + { + get; + } + + public CoordinationBase Coordination { get; } - public CoordinationBase Coordination { get; } public int VertexCount { diff --git a/源代码/StgSharp/Geometries/IGeomtryBuffer.cs b/源代码/StgSharp/Geometries/IGeomtryBuffer.cs index f43cc279..3dc01ff7 100644 --- a/源代码/StgSharp/Geometries/IGeomtryBuffer.cs +++ b/源代码/StgSharp/Geometries/IGeomtryBuffer.cs @@ -36,9 +36,5 @@ using System.Threading.Tasks; namespace StgSharp.Geometries { - public interface IGeomtryBuffer - { - - - } + public interface IGeomtryBuffer { } } diff --git a/源代码/StgSharp/Geometries/IInstancing.cs b/源代码/StgSharp/Geometries/IInstancing.cs index efb9083c..33e26535 100644 --- a/源代码/StgSharp/Geometries/IInstancing.cs +++ b/源代码/StgSharp/Geometries/IInstancing.cs @@ -45,24 +45,25 @@ namespace StgSharp.Geometries public float Rotation { - get { return GlobalBuffer.CoordAndRotationList[BufferId].W; } + get { return GlobalBuffer.CoordAndRotationList[ BufferId ].W; } set { - vec4d temp = GlobalBuffer.CoordAndRotationList[BufferId]; + Vec4 temp = GlobalBuffer.CoordAndRotationList[ BufferId ]; temp.W = value; - GlobalBuffer.CoordAndRotationList[BufferId] = temp; + GlobalBuffer.CoordAndRotationList[ BufferId ] = temp; } } public float Scale { - get { return GlobalBuffer.ScalingList[BufferId]; } - set { GlobalBuffer.ScalingList[BufferId] = value; } + get { return GlobalBuffer.ScalingList[ BufferId ]; } + set { GlobalBuffer.ScalingList[ BufferId ] = value; } } public GeometryMotion Motion { - get; set; + get; + set; } public IInstancingBuffer GlobalBuffer @@ -77,25 +78,25 @@ namespace StgSharp.Geometries internal set; } - public vec3d CenterPositionGlobal + public Vec3 CenterPositionGlobal { get; internal set; } - public vec3d Coord + public Vec3 Coord { - get { return GlobalBuffer.CoordAndRotationList[BufferId].XYZ; } - set { GlobalBuffer.CoordAndRotationList[BufferId] = new vec4d(value.vec); } + get { return GlobalBuffer.CoordAndRotationList[ BufferId ].XYZ; } + set { GlobalBuffer.CoordAndRotationList[ BufferId ] = new Vec4( + value.vec ); } } public void Move() { - (vec3d coord, float rotation) = (Coord, Rotation); - Motion.RunMotion(ref coord, ref rotation); + (Vec3 coord, float rotation) = (Coord, Rotation); + Motion.RunMotion( ref coord, ref rotation ); (Coord, Rotation) = (coord, rotation); } } - } diff --git a/源代码/StgSharp/Geometries/IInstancingBuffer.cs b/源代码/StgSharp/Geometries/IInstancingBuffer.cs index 23705fc0..85e0841b 100644 --- a/源代码/StgSharp/Geometries/IInstancingBuffer.cs +++ b/源代码/StgSharp/Geometries/IInstancingBuffer.cs @@ -39,19 +39,35 @@ namespace StgSharp.Geometries public interface IInstancingBuffer { - public Span CoordAndRotationSpan { get; } + public Span CoordAndRotationSpan + { + get; + } - public Span ScalingSpan { get; } + public Span ScalingSpan + { + get; + } - internal IGeometry TypicalShape { get; } + internal IGeometry TypicalShape + { + get; + } - internal List InstanceList { get; } + internal List InstanceList + { + get; + } - internal List CoordAndRotationList { get; } - - internal List ScalingList { get; } + internal List CoordAndRotationList + { + get; + } + internal List ScalingList + { + get; + } } - } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Cordinate.cs b/源代码/StgSharp/Geometries/PlainGeometry/Cordinate.cs index 215abcca..b90df786 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Cordinate.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Cordinate.cs @@ -40,7 +40,7 @@ using System.Threading.Tasks; namespace StgSharp.Geometries { - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public struct PartialPlainCoordinate { @@ -49,40 +49,36 @@ namespace StgSharp.Geometries /// /// The origin of this coordinate. /// - public vec3d origin; + public Vec3 origin; - public PartialPlainCoordinate - ( - vec3d origin, - vec3d horiziontial, - vec3d vertical - ) + public PartialPlainCoordinate( + Vec3 origin, + Vec3 horiziontial, + Vec3 vertical ) { this.origin = origin; axis = new Matrix32(); -#if NET5_0_OR_GREATER - Unsafe.SkipInit(out axis.mat); -#endif + #if NET5_0_OR_GREATER + Unsafe.SkipInit( out axis.mat ); + #endif axis.colum0 = horiziontial; axis.colum1 = vertical; } /// - /// The horizontial axis of the coordinate. - /// Point to the right direction. + /// The horizontial axis of the coordinate. Point to the right direction. /// - public vec3d axis_H => axis.colum0; + public Vec3 axis_H => axis.colum0; /// - /// The vertical axis of the coordinate. - /// Point to the top direction. + /// The vertical axis of the coordinate. Point to the top direction. /// - public vec3d axis_V => axis.colum1; + public Vec3 axis_V => axis.colum1; - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public vec3d GetRealLocate(vec2d raletiveLocation) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public Vec3 GetRealLocate( Vec2 raletiveLocation ) { - return origin + axis.VerticalVecMultiply(raletiveLocation); + return origin + axis.VerticalVecMultiply( raletiveLocation ); } } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Define/GeometryOperation.cs b/源代码/StgSharp/Geometries/PlainGeometry/Define/GeometryOperation.cs index cae7f18c..dbd0206c 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Define/GeometryOperation.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Define/GeometryOperation.cs @@ -34,16 +34,14 @@ using System.Runtime.CompilerServices; namespace StgSharp.Geometries { - public static unsafe class GeometryOperation { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static vec3d DefaultMotion(int tick) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 DefaultMotion( int tick ) { - return default(vec3d); + return default( Vec3 ); } } - } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Define/IPlainEntity.cs b/源代码/StgSharp/Geometries/PlainGeometry/Define/IPlainEntity.cs index b79f2ee8..a6773c55 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Define/IPlainEntity.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Define/IPlainEntity.cs @@ -38,39 +38,39 @@ using System.Threading.Tasks; namespace StgSharp.Geometries { - public interface IPlainEntity { - public vec2d CenterPosition { get; set; } + public Vec2 CenterPosition + { + get; + set; + } - public bool CollideWith(IPlainEntity entity); + public bool CollideWith( IPlainEntity entity ); } - - public class PlainEntity : IPlainEntity { private PlainGeometry _shape; - public PlainEntity(PlainGeometry shape) + public PlainEntity( PlainGeometry shape ) { _shape = shape; } - bool IPlainEntity.CollideWith(IPlainEntity entity) + bool IPlainEntity.CollideWith( IPlainEntity entity ) { throw new NotImplementedException(); } - vec2d IPlainEntity.CenterPosition + Vec2 IPlainEntity.CenterPosition { get => _shape.Coordination.LocalOrigin.Coord.XY; set => throw new InvalidOperationException(); } } - } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Define/ParticleOnPlain.cs b/源代码/StgSharp/Geometries/PlainGeometry/Define/ParticleOnPlain.cs index 44f3a1f6..d9581574 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Define/ParticleOnPlain.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Define/ParticleOnPlain.cs @@ -43,15 +43,14 @@ namespace StgSharp.Geometries public class ParticleOnPlain : IInstancing, IPlainEntity { - public ParticleOnPlain(PlainInstancingBuffer buffer) + public ParticleOnPlain( PlainInstancingBuffer buffer ) { - if (buffer == null) - { - throw new ArgumentNullException(paramName: nameof(buffer)); + if( buffer == null ) { + throw new ArgumentNullException( paramName: nameof( buffer ) ); } GlobalBuffer = buffer; BufferId = buffer.CreateInstanceID(); - ((IInstancingBuffer)buffer).InstanceList.Add(this); + ( ( IInstancingBuffer )buffer ).InstanceList.Add( this ); } public GeometryMotion Motion @@ -72,21 +71,20 @@ namespace StgSharp.Geometries set; } - vec3d IInstancing.CenterPositionGlobal + Vec3 IInstancing.CenterPositionGlobal { get; set; } - - bool IPlainEntity.CollideWith(IPlainEntity entity) + bool IPlainEntity.CollideWith( IPlainEntity entity ) { throw new NotImplementedException(); } - vec2d IPlainEntity.CenterPosition + Vec2 IPlainEntity.CenterPosition { - get => GlobalBuffer.CoordAndRotationList[BufferId].XY; + get => GlobalBuffer.CoordAndRotationList[ BufferId ].XY; set => throw new NotImplementedException(); } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainGeometry.cs b/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainGeometry.cs index 3b1f7ac7..dd5466bf 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainGeometry.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainGeometry.cs @@ -42,33 +42,31 @@ namespace StgSharp.Geometries public abstract class PlainGeometry : IGeometry { - protected vec4d[] vertexMat; + protected Vec4[] vertexMat; internal CoordinationBase coordinate; - - internal PlainGeometry(CoordinationBase coordination) + internal PlainGeometry( CoordinationBase coordination ) { coordinate = coordination; } - public Point this[int index] + public Point this[ int index ] { - get => new Point(vertexMat[index]); - set => vertexMat[index].vec = value.coordVec; + get => new Point( vertexMat[ index ] ); + set => vertexMat[ index ].vec = value.coordVec; } - public int VertexCount => this.vertexMat.Length; - public abstract ReadOnlySpan VertexIndices { get; } + public abstract ReadOnlySpan VertexIndices + { + get; + } -#pragma warning disable CA1819 - public vec4d[] VertexStream => vertexMat; + #pragma warning disable CA1819 + public Vec4[] VertexStream => vertexMat; public CoordinationBase Coordination => this.coordinate; #pragma warning restore CA1819 - - - } } \ No newline at end of file diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs b/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs index 7359fe27..86e54b61 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs @@ -44,26 +44,24 @@ using System.Threading.Tasks; namespace StgSharp.Geometries { - public class PlainInstancingBuffer : - IDisposable, IEnumerable, IInstancingBuffer - where T : - IInstancing + public class PlainInstancingBuffer : IDisposable, IEnumerable, IInstancingBuffer + where T: IInstancing { private bool disposedValue; private CoordinatePlain globalCorrdinnate; - private List coordList; + private List coordList; private List instanceList; private List scalingList; private Mutex mutex; public PlainInstancingBuffer() { - coordList = new List(capacity: 100); - instanceList = new List(capacity: 100); - scalingList = new List(capacity: 100); - coordArray = Array.Empty(); + coordList = new List( capacity: 100 ); + instanceList = new List( capacity: 100 ); + scalingList = new List( capacity: 100 ); + coordArray = Array.Empty(); scaleArray = Array.Empty(); mutex = new Mutex(); } @@ -73,7 +71,7 @@ namespace StgSharp.Geometries get => instanceList; } - public List CoordAndRotationList + public List CoordAndRotationList { get => coordList; } @@ -83,25 +81,25 @@ namespace StgSharp.Geometries get => scalingList; } - public Span CoordAndRotationSpan + public Span CoordAndRotationSpan { get { - if (coordArray.Length != coordList.Capacity) - { - FieldInfo fieldInfo = typeof(List). - GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance); - if (fieldInfo == null) - { -#pragma warning disable CA1065 -#pragma warning disable CA2201 + if( coordArray.Length != coordList.Capacity ) { + FieldInfo fieldInfo = typeof( List ). + GetField( + "_items", + BindingFlags.NonPublic | BindingFlags.Instance ); + if( fieldInfo == null ) { + #pragma warning disable CA1065 + #pragma warning disable CA2201 throw new NullReferenceException(); -#pragma warning restore CA2201 -#pragma warning restore CA1065 + #pragma warning restore CA2201 + #pragma warning restore CA1065 } - coordArray = (vec4d[])fieldInfo.GetValue(coordList); + coordArray = ( Vec4[] )fieldInfo.GetValue( coordList ); } - return new Span(coordArray, 0, coordList.Count); + return new Span( coordArray, 0, coordList.Count ); } } @@ -109,21 +107,21 @@ namespace StgSharp.Geometries { get { - if (scaleArray.Length != coordList.Capacity) - { - FieldInfo fieldInfo = typeof(List). - GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance); - if (fieldInfo == null) - { -#pragma warning disable CA1065 -#pragma warning disable CA2201 + if( scaleArray.Length != coordList.Capacity ) { + FieldInfo fieldInfo = typeof( List ). + GetField( + "_items", + BindingFlags.NonPublic | BindingFlags.Instance ); + if( fieldInfo == null ) { + #pragma warning disable CA1065 + #pragma warning disable CA2201 throw new NullReferenceException(); -#pragma warning restore CA2201 -#pragma warning restore CA1065 + #pragma warning restore CA2201 + #pragma warning restore CA1065 } - scaleArray = (float[])fieldInfo.GetValue(scalingList); + scaleArray = ( float[] )fieldInfo.GetValue( scalingList ); } - return new Span(scaleArray, 0, coordList.Count); + return new Span( scaleArray, 0, coordList.Count ); } } @@ -131,8 +129,8 @@ namespace StgSharp.Geometries { mutex.WaitOne(); int ret = instanceList.Count; - coordList.Add(new vec4d()); - scalingList.Add(0); + coordList.Add( new Vec4() ); + scalingList.Add( 0 ); mutex.ReleaseMutex(); return ret; } @@ -144,55 +142,51 @@ namespace StgSharp.Geometries public void Dispose() { - Dispose(disposing: true); - GC.SuppressFinalize(this); + Dispose( disposing: true ); + GC.SuppressFinalize( this ); } public IEnumerator GetEnumerator() { - foreach (IInstancing item in instanceList) - { - yield return (T)item; + foreach( IInstancing item in instanceList ) { + yield return ( T )item; } } - public void Remove(T instance) + public void Remove( T instance ) { mutex.WaitOne(); - if (instance.GlobalBuffer != this) - { + if( instance.GlobalBuffer != this ) { throw new ArgumentException( message: "instance does not belong to current Particle Buffer", - paramName: nameof(instance)); + paramName: nameof( instance ) ); } int index = instance.BufferId; - IInstancing temp = instanceList[instanceList.Count - 1]; - instanceList[instance.BufferId] = temp; + IInstancing temp = instanceList[ instanceList.Count - 1 ]; + instanceList[ instance.BufferId ] = temp; temp.BufferId = instance.BufferId; - coordList[instance.BufferId] = coordList[coordList.Count - 1]; - scalingList[instance.BufferId] = scalingList[scalingList.Count - 1]; + coordList[ instance.BufferId ] = coordList[ coordList.Count - 1 ]; + scalingList[ instance.BufferId ] = scalingList[ + scalingList.Count - 1 ]; - instanceList.RemoveAt(instanceList.Count - 1); - coordList.RemoveAt(coordList.Count - 1); - scalingList.RemoveAt(scalingList.Count - 1); + instanceList.RemoveAt( instanceList.Count - 1 ); + coordList.RemoveAt( coordList.Count - 1 ); + scalingList.RemoveAt( scalingList.Count - 1 ); mutex.ReleaseMutex(); } public void UpdateAllParticles() { - foreach (IInstancing particle in instanceList) - { + foreach( IInstancing particle in instanceList ) { particle.Move(); } } - protected virtual void Dispose(bool disposing) + protected virtual void Dispose( bool disposing ) { - if (!disposedValue) - { - if (disposing) - { + if( !disposedValue ) { + if( disposing ) { mutex.Dispose(); } @@ -205,21 +199,19 @@ namespace StgSharp.Geometries IEnumerator IEnumerable.GetEnumerator() { - foreach (IInstancing item in instanceList) - { - yield return (T)item; + foreach( IInstancing item in instanceList ) { + yield return ( T )item; } } - IGeometry IInstancingBuffer.TypicalShape => throw new NotImplementedException(); + IGeometry IInstancingBuffer.TypicalShape => throw new NotImplementedException( + ); #region field of mem opt - vec4d[] coordArray; - float[] scaleArray; - - #endregion - + private Vec4[] coordArray; + private float[] scaleArray; + #endregion } } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Parallelogram.cs b/源代码/StgSharp/Geometries/PlainGeometry/Parallelogram.cs index cd623745..98b877de 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Parallelogram.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Parallelogram.cs @@ -38,52 +38,50 @@ namespace StgSharp.Geometries public class Parallelogram : Polygon4 { - internal readonly Func movCenterOperation = - new Func(GeometryOperation.DefaultMotion); + internal readonly Func movCenterOperation = + new Func( GeometryOperation.DefaultMotion ); internal Point center; public Parallelogram( - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y - ) : base( - v0x, v0y, v1x, v1y, - v2x, v2y, v3x, v3y - ) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y ) { -#if DEBUG - if ( - this[0].Coord + this[2].Coord != - this[1].Coord + this[3].Coord - ) - { - InternalIO.InternalWriteLog("Init of geometry item failed, because four vertices cannot form a rectangle.", LogType.Warning); + #if DEBUG + if( this[ 0 ].Coord + this[ 2 ].Coord != this[ 1 ].Coord + this[ 3 ].Coord ) { + InternalIO.InternalWriteLog( + "Init of geometry item failed, because four vertices cannot form a rectangle.", + LogType.Warning ); } -#endif + #endif } public Parallelogram( PlainCoordinate coordination, - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y - ) : base(coordination, - v0x, v0y, v1x, v1y, - v2x, v2y, v3x, v3y - ) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( coordination, v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y ) { -#if DEBUG - if ( - this[0].Coord + this[2].Coord != - this[1].Coord + this[3].Coord - ) - { - InternalIO.InternalWriteLog("Init of geometry item failed, because four vertices cannot form a rectangle.", LogType.Warning); + #if DEBUG + if( this[ 0 ].Coord + this[ 2 ].Coord != this[ 1 ].Coord + this[ 3 ].Coord ) { + InternalIO.InternalWriteLog( + "Init of geometry item failed, because four vertices cannot form a rectangle.", + LogType.Warning ); } -#endif + #endif } } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Plain.cs b/源代码/StgSharp/Geometries/PlainGeometry/Plain.cs index 4eccfc4b..2338a379 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Plain.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Plain.cs @@ -38,52 +38,54 @@ namespace StgSharp.Geometries { internal readonly float d = -1; - internal vec3d origin; + internal Vec3 origin; - internal vec3d plainParameter; - internal vec3d vec1; - internal vec3d vec2; + internal Vec3 plainParameter; + internal Vec3 vec1; + internal Vec3 vec2; - internal Plain(Vector4 origin, Vector4 p1, Vector4 p2) + internal Plain( Vector4 origin, Vector4 p1, Vector4 p2 ) { - this.origin = new vec3d(origin); + this.origin = new Vec3( origin ); - vec1 = new vec3d(p1 - origin); - vec2 = new vec3d(p2 - origin); + vec1 = new Vec3( p1 - origin ); + vec2 = new Vec3( p2 - origin ); } - public Plain(vec3d o, vec3d v1, vec3d v2) + public Plain( Vec3 o, Vec3 v1, Vec3 v2 ) { this.origin = o; - this.vec1 = v1 - (v2 * (v1.Y / v2.Y)); //计算平面在xz平面上的方向投影 - this.vec2 = v2 - (vec1 * (v2.X / v1.X)); //计算平面在yz平面上的方向投影 + this.vec1 = v1 - ( v2 * ( v1.Y / v2.Y ) ); //计算平面在xz平面上的方向投影 + this.vec2 = v2 - ( vec1 * ( v2.X / v1.X ) ); //计算平面在yz平面上的方向投影 //|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z; - plainParameter.Z = origin.Z - (vec1.Z * (origin.X / vec1.X)) - (vec2.Z * (origin.Y / vec2.Y)); + plainParameter.Z = origin.Z - ( vec1.Z * ( origin.X / vec1.X ) ) - ( vec2.Z * ( origin.Y / vec2.Y ) ); + //根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y - plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z); - plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z); + plainParameter.X = vec1.X * ( vec1.Z / plainParameter.Z ); + plainParameter.Y = vec2.Y * ( vec2.Z / plainParameter.Z ); plainParameter.X = 1 / plainParameter.X; plainParameter.Y = 1 / plainParameter.Y; plainParameter.Z = 1 / plainParameter.Z; } - public Plain(Point p1, Point p2, Point p3) + public Plain( Point p1, Point p2, Point p3 ) { - vec3d origin = p1.Coord; - vec3d v1 = p2.Coord - origin; - vec3d v2 = p3.Coord - origin; + Vec3 origin = p1.Coord; + Vec3 v1 = p2.Coord - origin; + Vec3 v2 = p3.Coord - origin; - vec1 = v1 - (v2 * (v1.Y / v2.Y)); //计算平面在xz平面上的方向投影 - vec2 = v2 - (vec1 * (v2.X / v1.X)); //计算平面在yz平面上的方向投影 + vec1 = v1 - ( v2 * ( v1.Y / v2.Y ) ); //计算平面在xz平面上的方向投影 + vec2 = v2 - ( vec1 * ( v2.X / v1.X ) ); //计算平面在yz平面上的方向投影 //|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z; - plainParameter.Z = origin.Z - (vec1.Z * (origin.X / vec1.X)) - (vec2.Z * (origin.Y / vec2.Y)); + plainParameter.Z = origin.Z - ( vec1.Z * ( origin.X / vec1.X ) ) - ( vec2.Z * ( origin.Y / vec2.Y ) ); + //根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y - plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z); - plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z); + plainParameter.X = vec1.X * ( vec1.Z / plainParameter.Z ); + plainParameter.Y = vec2.Y * ( vec2.Z / plainParameter.Z ); plainParameter.X = 1 / plainParameter.X; plainParameter.Y = 1 / plainParameter.Y; diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Polygon4.cs b/源代码/StgSharp/Geometries/PlainGeometry/Polygon4.cs index a95ab543..7af184cc 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Polygon4.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Polygon4.cs @@ -41,17 +41,17 @@ namespace StgSharp.Geometries protected static int[] Indices = [0, 1, 2, 0, 2, 3]; - internal Polygon4() : base(PlainCoordinate.StandardPlainCoordination) + internal Polygon4() + : base( PlainCoordinate.StandardPlainCoordination ) { - vertexMat = new vec4d[4]; + vertexMat = new Vec4[4]; } - internal Polygon4(vec4d[] rawCoord) : - base(PlainCoordinate.StandardPlainCoordination) + internal Polygon4( Vec4[] rawCoord ) + : base( PlainCoordinate.StandardPlainCoordination ) { - if (rawCoord.Length != 4) - { - throw new ArgumentOutOfRangeException(nameof(rawCoord)); + if( rawCoord.Length != 4 ) { + throw new ArgumentOutOfRangeException( nameof( rawCoord ) ); } vertexMat = rawCoord; } @@ -60,61 +60,67 @@ namespace StgSharp.Geometries Point topLeft, Point topRight, Point bottomRight, - Point bottomLeft - ) : base(PlainCoordinate.StandardPlainCoordination) + Point bottomLeft ) + : base( PlainCoordinate.StandardPlainCoordination ) { - this[0] = topLeft; - this[1] = topRight; - this[2] = bottomRight; - this[3] = bottomLeft; - + this[ 0 ] = topLeft; + this[ 1 ] = topRight; + this[ 2 ] = bottomRight; + this[ 3 ] = bottomLeft; } - - public Polygon4(CoordinationBase coordinate, + public Polygon4( + CoordinationBase coordinate, PlainCoordinate coordination, Point topLeft, Point topRight, Point bottomRight, - Point bottomLeft - ) : base(coordinate) + Point bottomLeft ) + : base( coordinate ) { - this[0] = topLeft; - this[1] = topRight; - this[2] = bottomRight; - this[3] = bottomLeft; - + this[ 0 ] = topLeft; + this[ 1 ] = topRight; + this[ 2 ] = bottomRight; + this[ 3 ] = bottomLeft; } public Polygon4( - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y - ) : base(PlainCoordinate.StandardPlainCoordination) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( PlainCoordinate.StandardPlainCoordination ) { - vertexMat = new vec4d[4]; + vertexMat = new Vec4[4]; - this[0] = new Point(v0x, v0y, 0); - this[1] = new Point(v1x, v1y, 0); - this[2] = new Point(v2x, v2y, 0); - this[3] = new Point(v3x, v3y, 0); + this[ 0 ] = new Point( v0x, v0y, 0 ); + this[ 1 ] = new Point( v1x, v1y, 0 ); + this[ 2 ] = new Point( v2x, v2y, 0 ); + this[ 3 ] = new Point( v3x, v3y, 0 ); } public Polygon4( PlainCoordinate coordination, - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y - ) : base(coordination) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( coordination ) { - vertexMat = new vec4d[4]; + vertexMat = new Vec4[4]; - this[0] = new Point(v0x, v0y, 0); - this[1] = new Point(v1x, v1y, 0); - this[2] = new Point(v2x, v2y, 0); - this[3] = new Point(v3x, v3y, 0); + this[ 0 ] = new Point( v0x, v0y, 0 ); + this[ 1 ] = new Point( v1x, v1y, 0 ); + this[ 2 ] = new Point( v2x, v2y, 0 ); + this[ 3 ] = new Point( v3x, v3y, 0 ); } public override ReadOnlySpan VertexIndices => Indices; diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Polygon5.cs b/源代码/StgSharp/Geometries/PlainGeometry/Polygon5.cs index 87034d28..3ddbc743 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Polygon5.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Polygon5.cs @@ -41,42 +41,53 @@ namespace StgSharp.Geometries internal static int[] Indices = [0, 1, 2, 0, 2, 3, 0, 3, 4]; - public unsafe Polygon5() : base(PlainCoordinate.StandardPlainCoordination) + public unsafe Polygon5() + : base( PlainCoordinate.StandardPlainCoordination ) { - vertexMat = new vec4d[5]; + vertexMat = new Vec4[5]; } public Polygon5( - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y, - float v4x, float v4y - ) : base(PlainCoordinate.StandardPlainCoordination) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y, + float v4x, + float v4y ) + : base( PlainCoordinate.StandardPlainCoordination ) { - vertexMat = new vec4d[5]; - this[0] = new Point(v0x, v0y, 0); - this[1] = new Point(v1x, v1y, 0); - this[2] = new Point(v2x, v2y, 0); - this[3] = new Point(v3x, v3y, 0); - this[4] = new Point(v4x, v4y, 0); + vertexMat = new Vec4[5]; + this[ 0 ] = new Point( v0x, v0y, 0 ); + this[ 1 ] = new Point( v1x, v1y, 0 ); + this[ 2 ] = new Point( v2x, v2y, 0 ); + this[ 3 ] = new Point( v3x, v3y, 0 ); + this[ 4 ] = new Point( v4x, v4y, 0 ); } public Polygon5( PlainCoordinate coordination, - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y, - float v4x, float v4y - ) : base(coordination) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y, + float v4x, + float v4y ) + : base( coordination ) { - vertexMat = new vec4d[5]; - this[0] = new Point(v0x, v0y, 0); - this[1] = new Point(v1x, v1y, 0); - this[2] = new Point(v2x, v2y, 0); - this[3] = new Point(v3x, v3y, 0); - this[4] = new Point(v4x, v4y, 0); + vertexMat = new Vec4[5]; + this[ 0 ] = new Point( v0x, v0y, 0 ); + this[ 1 ] = new Point( v1x, v1y, 0 ); + this[ 2 ] = new Point( v2x, v2y, 0 ); + this[ 3 ] = new Point( v3x, v3y, 0 ); + this[ 4 ] = new Point( v4x, v4y, 0 ); } public override ReadOnlySpan VertexIndices => Indices; diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Polygon6.cs b/源代码/StgSharp/Geometries/PlainGeometry/Polygon6.cs index e6c42dad..be3813b0 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Polygon6.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Polygon6.cs @@ -41,30 +41,31 @@ namespace StgSharp.Geometries internal static int[] Indices = [0, 1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 5]; - public Polygon6() : base(PlainCoordinate.StandardPlainCoordination) + public Polygon6() + : base( PlainCoordinate.StandardPlainCoordination ) { - vertexMat = new vec4d[6]; + vertexMat = new Vec4[6]; } public Polygon6( PlainCoordinate coordination, - vec2d vert0, - vec2d vert1, - vec2d vert2, - vec2d vert3, - vec2d vert4, - vec2d vert5, - vec2d vert6 - ) : base(coordination) + Vec2 vert0, + Vec2 vert1, + Vec2 vert2, + Vec2 vert3, + Vec2 vert4, + Vec2 vert5, + Vec2 vert6 ) + : base( coordination ) { - vertexMat = new vec4d[6]; - vertexMat[0].vec = vert0.vec; - vertexMat[1].vec = vert1.vec; - vertexMat[2].vec = vert2.vec; - vertexMat[3].vec = vert3.vec; - vertexMat[4].vec = vert4.vec; - vertexMat[5].vec = vert5.vec; - vertexMat[6].vec = vert6.vec; + vertexMat = new Vec4[6]; + vertexMat[ 0 ].vec = vert0.vec; + vertexMat[ 1 ].vec = vert1.vec; + vertexMat[ 2 ].vec = vert2.vec; + vertexMat[ 3 ].vec = vert3.vec; + vertexMat[ 4 ].vec = vert4.vec; + vertexMat[ 5 ].vec = vert5.vec; + vertexMat[ 6 ].vec = vert6.vec; } public override ReadOnlySpan VertexIndices => Indices; diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Rectangle.cs b/源代码/StgSharp/Geometries/PlainGeometry/Rectangle.cs index e3cecb75..30aacf82 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Rectangle.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Rectangle.cs @@ -38,59 +38,54 @@ namespace StgSharp.Geometries { public Rectangle( - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y - ) : base( - v0x, v0y, - v1x, v1y, - v2x, v2y, - v3x, v3y - ) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y ) { -#if DEBUG - vec2d side0 = (this[0].Coord - this[1].Coord).XY; - vec2d side1 = (this[2].Coord - this[1].Coord).XY; - if (side0.Cross(side1) == 0) - { + #if DEBUG + Vec2 side0 = ( this[ 0 ].Coord - this[ 1 ].Coord ).XY; + Vec2 side1 = ( this[ 2 ].Coord - this[ 1 ].Coord ).XY; + if( side0.Cross( side1 ) == 0 ) { throw new ArgumentException(); } -#endif + #endif } - public Rectangle( PlainCoordinate coordination, - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y - ) : base(coordination, - v0x, v0y, - v1x, v1y, - v2x, v2y, - v3x, v3y - ) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( coordination, v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y ) { -#if DEBUG - vec2d side0 = (this[0].Coord - this[1].Coord).XY; - vec2d side1 = (this[2].Coord - this[1].Coord).XY; - if (side0.Cross(side1) == 0) - { + #if DEBUG + Vec2 side0 = ( this[ 0 ].Coord - this[ 1 ].Coord ).XY; + Vec2 side1 = ( this[ 2 ].Coord - this[ 1 ].Coord ).XY; + if( side0.Cross( side1 ) == 0 ) { throw new ArgumentException(); } -#endif + #endif } /// /// Calculate movement to center /// - /// CurrentBlueprint time tick + /// CurrentBlueprint time tick /// - public virtual vec3d MovCenter(uint tick) + public virtual Vec3 MovCenter( uint tick ) { - return default(vec3d); + return default( Vec3 ); } } diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Square.cs b/源代码/StgSharp/Geometries/PlainGeometry/Square.cs index e97fc2c3..c4a5ce8a 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Square.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Square.cs @@ -34,7 +34,6 @@ using System.Numerics; namespace StgSharp.Geometries { - /// /// A square /// @@ -42,21 +41,18 @@ namespace StgSharp.Geometries { public Square( - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y, - float v3x, float v3y) - : base(v0x, v0y, - v1x, v1y, - v2x, v2y, - v3x, v3y) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y ) + : base( v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y ) { - if (true) - { - - } + if( true ) { } } - } } \ No newline at end of file diff --git a/源代码/StgSharp/Geometries/PlainGeometry/Triangle.cs b/源代码/StgSharp/Geometries/PlainGeometry/Triangle.cs index 60d53318..04933c7f 100644 --- a/源代码/StgSharp/Geometries/PlainGeometry/Triangle.cs +++ b/源代码/StgSharp/Geometries/PlainGeometry/Triangle.cs @@ -37,60 +37,64 @@ using System.Numerics; namespace StgSharp.Geometries { - - public unsafe class Triangle : PlainGeometry { internal static int[] Indices = [0, 1, 2]; - public Triangle() : base(PlainCoordinate.StandardPlainCoordination) + public Triangle() + : base( PlainCoordinate.StandardPlainCoordination ) { - vertexMat = new vec4d[3]; + vertexMat = new Vec4[3]; + } + + public Triangle( Point vertex01, Point vertex02, Point vertex03 ) + : base( PlainCoordinate.StandardPlainCoordination ) + { + this[ 0 ] = vertex01; + this[ 1 ] = vertex02; + this[ 2 ] = vertex03; } public Triangle( + PlainCoordinate coordination, Point vertex01, Point vertex02, - Point vertex03 - ) : base(PlainCoordinate.StandardPlainCoordination) + Point vertex03 ) + : base( coordination ) { - this[0] = vertex01; - this[1] = vertex02; - this[2] = vertex03; - } - - public Triangle(PlainCoordinate coordination, - Point vertex01, - Point vertex02, - Point vertex03 - ) : base(coordination) - { - this[0] = vertex01; - this[1] = vertex02; - this[2] = vertex03; + this[ 0 ] = vertex01; + this[ 1 ] = vertex02; + this[ 2 ] = vertex03; } public Triangle( - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y - ) : base(PlainCoordinate.StandardPlainCoordination) + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y ) + : base( PlainCoordinate.StandardPlainCoordination ) { - this[0] = new Point(v0x, v0y, 0); - this[1] = new Point(v1x, v1y, 0); - this[2] = new Point(v2x, v2y, 0); + this[ 0 ] = new Point( v0x, v0y, 0 ); + this[ 1 ] = new Point( v1x, v1y, 0 ); + this[ 2 ] = new Point( v2x, v2y, 0 ); } - public Triangle(PlainCoordinate coordination, - float v0x, float v0y, - float v1x, float v1y, - float v2x, float v2y - ) : base(coordination) + public Triangle( + PlainCoordinate coordination, + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y ) + : base( coordination ) { - this[0] = new Point(v0x, v0y, 0); - this[1] = new Point(v1x, v1y, 0); - this[2] = new Point(v2x, v2y, 0); + this[ 0 ] = new Point( v0x, v0y, 0 ); + this[ 1 ] = new Point( v1x, v1y, 0 ); + this[ 2 ] = new Point( v2x, v2y, 0 ); } public override ReadOnlySpan VertexIndices => Indices; diff --git a/源代码/StgSharp/Geometries/Point.cs b/源代码/StgSharp/Geometries/Point.cs index 0f0f9496..9731a2cc 100644 --- a/源代码/StgSharp/Geometries/Point.cs +++ b/源代码/StgSharp/Geometries/Point.cs @@ -38,37 +38,39 @@ using System.Text; namespace StgSharp.Geometries { - [StructLayout(LayoutKind.Explicit, Size = 16)] + [StructLayout( LayoutKind.Explicit, Size = 16 )] public struct Point { - [FieldOffset(0)] private vec3d coord; - [FieldOffset(0)] internal Vector4 coordVec; + [FieldOffset( 0 )] private Vec3 coord; + [FieldOffset( 0 )] internal Vector4 coordVec; - internal Point(vec4d vector) + internal Point( Vec4 vector ) { coordVec = vector.vec; coordVec.W = 1; } - public Point(vec3d coord) + public Point( Vec3 coord ) { Coord = coord; coordVec.W = 1; } - public Point(float x, float y, float z) + public Point( float x, float y, float z ) { - coordVec = new Vector4(x, y, z, 1); + coordVec = new Vector4( x, y, z, 1 ); } - public vec3d Coord + public Vec3 Coord { get => coord; - set { coord = value; coordVec.W = 1; } + set + { + coord = value; + coordVec.W = 1; + } } - - } } diff --git a/源代码/StgSharp/Geometries/SpaceGeometry/Class1.cs b/源代码/StgSharp/Geometries/SpaceGeometry/Class1.cs index 26a650a2..1a2d98c1 100644 --- a/源代码/StgSharp/Geometries/SpaceGeometry/Class1.cs +++ b/源代码/StgSharp/Geometries/SpaceGeometry/Class1.cs @@ -34,7 +34,5 @@ using System.Text; namespace StgSharp.Geometries.SpaceGeometry { - internal class Class1 - { - } + internal class Class1 { } } diff --git a/源代码/StgSharp/Graphics/CPUanimation/IImageProvider.cs b/源代码/StgSharp/Graphics/CPUanimation/IImageProvider.cs index b86e8674..1741e253 100644 --- a/源代码/StgSharp/Graphics/CPUanimation/IImageProvider.cs +++ b/源代码/StgSharp/Graphics/CPUanimation/IImageProvider.cs @@ -36,6 +36,8 @@ namespace StgSharp.Graphics { public interface IImageProvider { + Image ProvideImage(); + } } diff --git a/源代码/StgSharp/Graphics/CPUanimation/ImageHelper.cs b/源代码/StgSharp/Graphics/CPUanimation/ImageHelper.cs index e7f3fe2d..e41a960a 100644 --- a/源代码/StgSharp/Graphics/CPUanimation/ImageHelper.cs +++ b/源代码/StgSharp/Graphics/CPUanimation/ImageHelper.cs @@ -30,23 +30,35 @@ //----------------------------------------------------------------------- using System; using System.Collections.Generic; +using System.ComponentModel; using System.Text; namespace StgSharp.Graphics { public static class ImageHelper { - public static void Resize(Image i, int width, int height, ImageMovement move) + + public static void Resize( + Image i, + int width, + int height, + ImageMovement move ) { - if (i == null) - { - throw new ArgumentNullException(nameof(i)); + if( i == null ) { + throw new ArgumentNullException( nameof( i ) ); } - Array.Resize(ref i.Data, width * height * i.PixelSize); + if( i.Size == (width, height) ) { + return; + } + if( !Enum.IsDefined( typeof( ImageMovement ), move ) ) { + throw new InvalidEnumArgumentException( nameof( move ) ); + } + byte[] oldData = i.Data; + i.Data = new byte[width * height * i.PixelSize]; i.Height = height; i.Width = width; - switch (move) - { + i.PixelUpdateCount++; + switch( move ) { case ImageMovement.Discard: break; case ImageMovement.Top: @@ -54,8 +66,8 @@ namespace StgSharp.Graphics default: throw new NotImplementedException(); } - i.PixelUpdateCount++; } + } [Flags] @@ -63,7 +75,7 @@ namespace StgSharp.Graphics { #pragma warning disable CA1008 Discard = 0, -#pragma warning restore CA1008 + #pragma warning restore CA1008 Top = 1, Bottom = 2, Left = 4, @@ -72,5 +84,6 @@ namespace StgSharp.Graphics BottomLeft = Bottom | Left, TopRight = Top | Right, BottomRight = Bottom | Right, + } } diff --git a/源代码/StgSharp/Graphics/Define/BufferObjectBase.cs b/源代码/StgSharp/Graphics/Define/BufferObjectBase.cs index cd0d5847..69eb900d 100644 --- a/源代码/StgSharp/Graphics/Define/BufferObjectBase.cs +++ b/源代码/StgSharp/Graphics/Define/BufferObjectBase.cs @@ -52,31 +52,31 @@ namespace StgSharp.Graphics /// /// /// - public GlHandle this[int index] => _bufferHandle[index]; + public GlHandle this[ int index ] => _bufferHandle[ index ]; /// /// Bind a buffer instance to OpenGL /// - /// Index of handle of the object in this instance to be bind - public abstract void Bind(int index); + /// Index of handle of the object in this instance to be bind + public abstract void Bind( int index ); public void Dispose() { - Dispose(disposing: true); - GC.SuppressFinalize(this); + Dispose( disposing: true ); + GC.SuppressFinalize( this ); } - /// + /// public override string ToString() { return $"This is a {GetType().FullName}, containing {_bufferHandle.Length} buffer handles: {_bufferHandle.ToString()}."; } - protected abstract void Dispose(bool disposing); + protected abstract void Dispose( bool disposing ); ~BufferObjectBase() { - Dispose(disposing: false); + Dispose( disposing: false ); } } diff --git a/源代码/StgSharp/Graphics/Define/StructDefine.cs b/源代码/StgSharp/Graphics/Define/StructDefine.cs index 99506f23..83bb929a 100644 --- a/源代码/StgSharp/Graphics/Define/StructDefine.cs +++ b/源代码/StgSharp/Graphics/Define/StructDefine.cs @@ -45,7 +45,7 @@ namespace StgSharp.Graphics #region GLFW3 struct - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWcontext { @@ -116,12 +116,12 @@ namespace StgSharp.Graphics //GLFW_PLATFORM_CONTEXT_STATE } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct glfwVideomode { - /*! The refresh rate, in Hz, of the video mode. */ + private int refreshRate; /*! The bit depth of the blue channel of the video mode. */ @@ -142,12 +142,12 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct glfwGammaramp { - /*! An array of value describing the response of the blue channel. */ + private ushort* blue; /*! An array of value describing the response of the green channel. */ @@ -162,12 +162,12 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWimage { - /*! The pixel _data of this image, arranged left-to-right, top-to-bottom. */ + private byte* pixels; /*! The height, in pixels, of this image. @@ -177,26 +177,25 @@ namespace StgSharp.Graphics */ private int width; - } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWgamepadstate { - /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` * or `GLFW_RELEASE`. */ - public fixed byte buttons[15]; + + public fixed byte buttons[ 15 ]; /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 * to 1.0 inclusive. */ - public fixed float axes[6]; + public fixed float axes[ 6 ]; } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWallocator { @@ -213,7 +212,7 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct glfwMonitor { @@ -221,7 +220,7 @@ namespace StgSharp.Graphics private glfwWindow* window; - private fixed byte name[128]; + private fixed byte name[ 128 ]; private glfwGammaramp currentRamp; private glfwGammaramp originalRamp; @@ -231,57 +230,55 @@ namespace StgSharp.Graphics private int width, height; private IntPtr userPointer; - public glfwMonitor() - { } + public glfwMonitor() { } public unsafe string Name { get { - fixed (byte* cptr = name) - { - return Marshal.PtrToStringAnsi((IntPtr)cptr); + fixed( byte* cptr = name ) { + return Marshal.PtrToStringAnsi( ( IntPtr )cptr ); } } } } - [StructLayout(LayoutKind.Sequential)] - unsafe struct glfwWindow + [StructLayout( LayoutKind.Sequential )] + internal unsafe struct glfwWindow { - glfwWindow* next; - void* userPointer; - bool rawMouseMotion; - Callbacks callbacks; + private glfwWindow* next; + private void* userPointer; + private bool rawMouseMotion; + private Callbacks callbacks; // Virtual cursor position when cursor is disabled - double virtualCursorPosX, virtualCursorPosY; - int autoIconify; - int cursorMode; - int decorated; - int doublebuffer; - int floating; - int focusOnShow; - int lockKeyMods; - int maxwidth, maxheight; + private double virtualCursorPosX, virtualCursorPosY; + private int autoIconify; + private int cursorMode; + private int decorated; + private int doublebuffer; + private int floating; + private int focusOnShow; + private int lockKeyMods; + private int maxwidth, maxheight; - int minwidth, minheight; - int mousePassthrough; - int numer, denom; + private int minwidth, minheight; + private int mousePassthrough; + private int numer, denom; // Window settings and state - int resizable; - int shouldClose; + private int resizable; + private int shouldClose; - int stickyKeys; - int stickyMouseButtons; - IntPtr cursor; // _GLFWcursor* cursor; + private int stickyKeys; + private int stickyMouseButtons; + private IntPtr cursor; // _GLFWcursor* cursor; // glfwVideomode videoMode; // 根据GLFWvidmode的定义转换 - IntPtr monitor; // _GLFWmonitor* monitor; - public fixed byte keys[GLconst.GLFW_KEY_LAST + 1]; - public fixed byte mouseButtons[GLconst.GLFW_MOUSE_BUTTON_LAST + 1]; + private IntPtr monitor; // _GLFWmonitor* monitor; + public fixed byte keys[ GLconst.GLFW_KEY_LAST + 1 ]; + public fixed byte mouseButtons[ GLconst.GLFW_MOUSE_BUTTON_LAST + 1 ]; // _GLFWcontext viewPortDisplay; // 根据_GLFWcontext的定义转换 @@ -312,14 +309,10 @@ namespace StgSharp.Graphics // GLFW_PLATFORM_WINDOW_STATE platformWindowState; } + [StructLayout( LayoutKind.Sequential )] + public struct GLFWwindowCallback { } - [StructLayout(LayoutKind.Sequential)] - public struct GLFWwindowCallback - { - - } - - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public struct GLFWcursor { @@ -347,7 +340,7 @@ namespace StgSharp.Graphics } */ - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWinitconfig { @@ -361,7 +354,7 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWwndconfig { @@ -392,31 +385,25 @@ namespace StgSharp.Graphics internal X11 x11 = new X11(); - public GLFWwndconfig() - { - } + public GLFWwndconfig() { } internal struct Ns { private GLFWbool retina = false; - public fixed byte frameName[256]; + public fixed byte frameName[ 256 ]; - public Ns() - { - } + public Ns() { } } internal struct X11 { - public fixed byte className[256]; - public fixed byte instanceName[256]; + public fixed byte className[ 256 ]; + public fixed byte instanceName[ 256 ]; - public X11() - { - } + public X11() { } } @@ -430,17 +417,15 @@ namespace StgSharp.Graphics internal struct Wl { - public fixed byte appId[256]; + public fixed byte appId[ 256 ]; - public Wl() - { - } + public Wl() { } } } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWctxconfig { @@ -461,9 +446,7 @@ namespace StgSharp.Graphics internal Nsgl nsgl = new Nsgl(); - public GLFWctxconfig() - { - } + public GLFWctxconfig() { } internal struct Nsgl { @@ -474,7 +457,7 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWfbconfig { @@ -500,11 +483,13 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] internal unsafe struct GLFWlibrary { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = GLconst.GLFW_JOYSTICK_LAST + 1)] + [MarshalAs( + UnmanagedType.ByValArray, + SizeConst = GLconst.GLFW_JOYSTICK_LAST + 1 )] private GLFWjoystick[] joysticks = new GLFWjoystick[GLconst.GLFW_JOYSTICK_LAST + 1]; private GLFWallocator allocator; @@ -546,9 +531,7 @@ namespace StgSharp.Graphics internal Osmesa osmesa = new Osmesa(); - public GLFWlibrary() - { - } + public GLFWlibrary() { } internal unsafe struct Hints { @@ -566,6 +549,7 @@ namespace StgSharp.Graphics { private ulong offset; + // This is defined in platform.h //not transformed function defination @@ -652,11 +636,9 @@ namespace StgSharp.Graphics private GLFWbool KHR_xlib_surface; private GLFWbool MVK_macos_surface; private IntPtr GetInstanceProcAddr; - private fixed ulong extensions[2]; + private fixed ulong extensions[ 2 ]; - public vk() - { - } + public vk() { } } @@ -671,7 +653,7 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWmapelement { @@ -684,25 +666,24 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWmapping { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + [MarshalAs( UnmanagedType.ByValArray, SizeConst = 6 )] private GLFWmapelement[] axes = new GLFWmapelement[6]; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)] + [MarshalAs( UnmanagedType.ByValArray, SizeConst = 15 )] private GLFWmapelement[] buttons = new GLFWmapelement[15]; - private fixed byte guid[33]; + private fixed byte guid[ 33 ]; - private fixed byte name[128]; + private fixed byte name[ 128 ]; - public GLFWmapping() - { } + public GLFWmapping() { } } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWjoystick { @@ -710,8 +691,8 @@ namespace StgSharp.Graphics private byte* buttons; private byte* hats; private void* userPointer; - private fixed byte guid[33]; - private fixed byte name[128]; + private fixed byte guid[ 33 ]; + private fixed byte name[ 128 ]; private GLFWbool allocated; private GLFWbool connected; @@ -726,20 +707,20 @@ namespace StgSharp.Graphics // not completed in transforming // GLFW_PLATFORM_JOYSTICK_STATE; - public GLFWjoystick() - { } + public GLFWjoystick() { } } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWls { + // This is defined in platform.h //GLFW_PLATFORM_TLS_STATE } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWplatform { @@ -812,6 +793,7 @@ namespace StgSharp.Graphics internal IntPtr setCursorMode; #region input + /* void (* getCursorPos) (glfwWindow*, double*, double*); void (* setCursorPos) (glfwWindow*, double, double); void (* setCursorMode) (glfwWindow*, int); @@ -878,6 +860,7 @@ namespace StgSharp.Graphics void (* waitEventsTimeout) (double); void (* postEmptyEvent) (void); */ + #endregion internal IntPtr setCursorPos; @@ -910,25 +893,24 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public unsafe struct GLFWmutex { + // This is defined in platform.h //GLFW_PLATFORM_MUTEX_STATE } //public unsafe struct VkAllocationCallbacks { } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] internal unsafe struct VkExtensionProperties { - private fixed byte extensionName[256]; + private fixed byte extensionName[ 256 ]; private uint specVersion; - public VkExtensionProperties() - { - } + public VkExtensionProperties() { } } @@ -947,14 +929,14 @@ namespace StgSharp.Graphics } */ - [StructLayout(LayoutKind.Explicit, Size = 16)] + [StructLayout( LayoutKind.Explicit, Size = 16 )] public struct uintptr_t { - [FieldOffset(0)] + [FieldOffset( 0 )] private long part1; - [FieldOffset(8)] + [FieldOffset( 8 )] private long part2; } @@ -963,7 +945,7 @@ namespace StgSharp.Graphics #region glad struct - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] internal struct GLsync { diff --git a/源代码/StgSharp/Graphics/Define/glApiDefine.cs b/源代码/StgSharp/Graphics/Define/glApiDefine.cs index c71f8202..f2c01524 100644 --- a/源代码/StgSharp/Graphics/Define/glApiDefine.cs +++ b/源代码/StgSharp/Graphics/Define/glApiDefine.cs @@ -39,27 +39,59 @@ namespace StgSharp.Graphics /// /// Function handler to load an opengl function by searching its name. /// - /// the name of the Opengl function - /// An Intptr value representing the pointer to the function - public delegate IntPtr glLoader(string name); + /// the name of the Opengl function + /// An Intptr value representing the pointer to the function + public delegate IntPtr glLoader( string name ); #region StgSharpDele - public unsafe delegate void FrameBufferSizeHandler(IntPtr window, uint width, uint height); + public unsafe delegate void FrameBufferSizeHandler( + IntPtr window, + int width, + int height ); - public unsafe delegate void FramePositionHandler(IntPtr window, float width, float height); + public unsafe delegate void FramePositionHandler( + IntPtr window, + float width, + float height ); #endregion #region glDEBUG - internal unsafe delegate void GLDEBUGPROC(int source, int type, uint id, int severity, int length, sbyte* message, void* userParam); - internal unsafe delegate void GLDEBUGPROCARB(int source, int type, uint id, int severity, int length, sbyte* message, void* userParam); - internal unsafe delegate void GLDEBUGPROCKHR(int source, int type, uint id, int severity, int length, sbyte* message, void* userParam); - internal unsafe delegate void GLDEBUGPROCAMD(uint id, int category, int severity, int length, sbyte* message, void* userParam); - - #endregion + internal unsafe delegate void GLDEBUGPROC( + int source, + int type, + uint id, + int severity, + int length, + sbyte* message, + void* userParam ); + internal unsafe delegate void GLDEBUGPROCARB( + int source, + int type, + uint id, + int severity, + int length, + sbyte* message, + void* userParam ); + internal unsafe delegate void GLDEBUGPROCKHR( + int source, + int type, + uint id, + int severity, + int length, + sbyte* message, + void* userParam ); + internal unsafe delegate void GLDEBUGPROCAMD( + uint id, + int category, + int severity, + int length, + sbyte* message, + void* userParam ); +#endregion } diff --git a/源代码/StgSharp/Graphics/Define/glConst.cs b/源代码/StgSharp/Graphics/Define/glConst.cs index 0e3c6f3b..021f8887 100644 --- a/源代码/StgSharp/Graphics/Define/glConst.cs +++ b/源代码/StgSharp/Graphics/Define/glConst.cs @@ -337,7 +337,6 @@ namespace StgSharp.Graphics.OpenGL #region glad - public const int _1PASS_EXT = 0x80A1; public const int _1PASS_SGIS = 0x80A1; public const int _2PASS_0_EXT = 0x80A2; @@ -4839,12 +4838,7 @@ namespace StgSharp.Graphics.OpenGL public const int ZERO_TO_ONE = 0x935F; public const int Z_EXT = 0x87D7; - - - - #endregion - } public static class glAttachment @@ -4854,18 +4848,14 @@ namespace StgSharp.Graphics.OpenGL public const uint DepthAndStencil = GLconst.DEPTH_STENCIL_ATTACHMENT; public const uint Stencil = GLconst.STENCIL_ATTACHMENT; - private static int colorRange = - OpenGLFunction.CurrentGL.GetMaskInteger((uint)GLconst.MAX_COLOR_ATTACHMENTS); - - public static uint Color(int i) + public static uint Color( int i ) { -#if DEBUG - if ((i > colorRange) || (i < 0)) - { + #if DEBUG + if( ( i > OpenGLFunction.CurrentGL.AttachmentColorRange ) || ( i < 0 ) ) { throw new ArgumentOutOfRangeException(); } -#endif - return (uint)(GLconst.COLOR_ATTACHMENT0 + i); + #endif + return ( uint )( GLconst.COLOR_ATTACHMENT0 + i ); } } diff --git a/源代码/StgSharp/Graphics/Define/glEnum.cs b/源代码/StgSharp/Graphics/Define/glEnum.cs index 64f7c00d..7dc29186 100644 --- a/源代码/StgSharp/Graphics/Define/glEnum.cs +++ b/源代码/StgSharp/Graphics/Define/glEnum.cs @@ -29,13 +29,13 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using System.Runtime.CompilerServices; namespace StgSharp.Graphics.OpenGL { public enum PixelChannelLayout { + UByte = GLconst.UNSIGNED_BYTE, Byte = GLconst.BYTE, UShort = GLconst.UNSIGNED_SHORT, @@ -55,10 +55,12 @@ namespace StgSharp.Graphics.OpenGL UInt8888Rev = GLconst.UNSIGNED_INT_8_8_8_8_REV, UInt1010102 = GLconst.UNSIGNED_INT_10_10_10_2, UInt2101010Rev = GLconst.UNSIGNED_INT_2_10_10_10_REV + } public enum FrameBufferStatus { + Complete = GLconst.FRAMEBUFFER_COMPLETE, // GL_FRAMEBUFFER_COMPLETE IncompleteAttachment = GLconst.FRAMEBUFFER_INCOMPLETE_ATTACHMENT, // GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT IncompleteMissingAttachment = GLconst.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, // GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT @@ -67,10 +69,12 @@ namespace StgSharp.Graphics.OpenGL Unsupported = GLconst.FRAMEBUFFER_UNSUPPORTED, // GL_FRAMEBUFFER_UNSUPPORTED IncompleteMultisample = GLconst.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE, // GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE IncompleteLayerTargets = GLconst.FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS // GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS + } internal enum VkStructureType : uint { + VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, @@ -78,10 +82,12 @@ namespace StgSharp.Graphics.OpenGL VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF + } public enum FrameBufferChannel { + STENCIL_INDEX = GLconst.STENCIL_INDEX, DEPTH_COMPONENT = GLconst.DEPTH_COMPONENT, DEPTH_STENCIL = GLconst.DEPTH_STENCIL, @@ -92,17 +98,22 @@ namespace StgSharp.Graphics.OpenGL BGR = GLconst.BGR, RGBA = GLconst.RGBA, BGRA = GLconst.BGRA + } public enum FrameBufferAttachment { + Color = GLconst.COLOR_ATTACHMENT0, Depth = GLconst.DEPTH_ATTACHMENT, Stencil = GLconst.STENCIL_ATTACHMENT, + DepthAndStencil = GLconst.DEPTH_STENCIL_ATTACHMENT, + } public enum Texture2DTarget { + Texture2D = GLconst.TEXTURE_2D, ProxyTexture2D = GLconst.PROXY_TEXTURE_2D, Texture1DArray = GLconst.TEXTURE_1D_ARRAY, @@ -116,21 +127,27 @@ namespace StgSharp.Graphics.OpenGL TextureCubeMapPositiveZ = GLconst.TEXTURE_CUBE_MAP_POSITIVE_Z, TextureCubeMapNegativeZ = GLconst.TEXTURE_CUBE_MAP_NEGATIVE_Z, ProxyTextureCubeMap = GLconst.PROXY_TEXTURE_CUBE_MAP + } public enum RenderBufferInternalFormat : uint { + RGBA8 = GLconst.RGBA8, Depth24_Stencil8 = GLconst.DEPTH24_STENCIL8, + } public enum GLOperation : uint { + StencilTest = GLconst.STENCIL_TEST, + } internal enum VkResult { + VK_SUCCESS = 0, VK_NOT_READY = 1, VK_TIMEOUT = 2, @@ -155,22 +172,26 @@ namespace StgSharp.Graphics.OpenGL VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, VK_RESULT_MAX_ENUM = 0x7FFFFFFF + } -#pragma warning disable CA1008 + #pragma warning disable CA1008 public enum ShaderType : int -#pragma warning restore CA1008 + #pragma warning restore CA1008 { + Fragment = GLconst.FRAGMENT_SHADER, Vertex = GLconst.VERTEX_SHADER, Compute = GLconst.COMPUTE_SHADER, Geometry = GLconst.GEOMETRY_SHADER, + } -#pragma warning disable CA1008 // 枚举应具有零值 + #pragma warning disable CA1008 // 枚举应具有零值 public enum BufferType : int -#pragma warning restore CA1008 // 枚举应具有零值 + #pragma warning restore CA1008 // 枚举应具有零值 { + ArrayBuffer = GLconst.ARRAY_BUFFER, ElementArrayBuffer = GLconst.ELEMENT_ARRAY_BUFFER, AtomicCounterBuffer = GLconst.ATOMIC_COUNTER_BUFFER, @@ -185,12 +206,14 @@ namespace StgSharp.Graphics.OpenGL TEXTURE_BUFFER = GLconst.TEXTURE_BUFFER, TRANSFORM_FEEDBACK_BUFFER = GLconst.TRANSFORM_FEEDBACK_BUFFER, UNIFORM_BUFFER = GLconst.UNIFORM_BUFFER, + } -#pragma warning disable CA1008 // 枚举应具有零值 + #pragma warning disable CA1008 // 枚举应具有零值 public enum BufferUsage : int -#pragma warning restore CA1008 // 枚举应具有零值 + #pragma warning restore CA1008 // 枚举应具有零值 { + StreamDraw = 0x88E0, StreamRead = 0x88E1, StreamCopy = 0x88E2, @@ -200,18 +223,21 @@ namespace StgSharp.Graphics.OpenGL DynamicDraw = 0x88E8, DynamicRead = 0x88E9, DynamicCopy = 0x88EA - } + } public enum MaskBufferBit { + COLOR = GLconst.COLOR_BUFFER_BIT, DEPTH = GLconst.DEPTH_BUFFER_BIT, STENCIL = GLconst.STENCIL_BUFFER_BIT, + } public enum GeometryType : uint { + POINTS = 0x0000, LINES = 0x0001, LINE_LOOP = 0x0002, @@ -219,11 +245,14 @@ namespace StgSharp.Graphics.OpenGL TRIANGLES = 0x0004, TRIANGLE_STRIP = 0x0005, TRIANGLE_FAN = 0x0006 + } public enum TextureFiltering { + Nearest = 0x2600, Linear = 0x2601 + } } diff --git a/源代码/StgSharp/Graphics/Define/glType.cs b/源代码/StgSharp/Graphics/Define/glType.cs index b8a101ca..942ead22 100644 --- a/源代码/StgSharp/Graphics/Define/glType.cs +++ b/源代码/StgSharp/Graphics/Define/glType.cs @@ -36,81 +36,114 @@ using System.Collections.ObjectModel; using System.Runtime.InteropServices; using System.Text; - namespace StgSharp.Graphics { - - public delegate IntPtr GLfuncLoader(string name); + public delegate IntPtr GLfuncLoader( string name ); internal delegate void GLVULKANPROCNV(); public unsafe struct GLhandleARB { - dynamic value; + private dynamic value; - public unsafe GLhandleARB(dynamic value) + public unsafe GLhandleARB( dynamic value ) { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - if (value.GetType().Name != "Uint32") - { + if( !RuntimeInformation.IsOSPlatform( OSPlatform.OSX ) ) { + if( value.GetType().Name != "Uint32" ) { goto errorlog; } this.value = value; - } - else - { - if (value.GetType().Name != "IntPtr") - { + } else { + if( value.GetType().Name != "IntPtr" ) { goto errorlog; } this.value = value; } - errorlog: + errorlog: { InternalIO.InternalWriteLog( $"{value.GetType().Name} does not match definination of GLhandlARB on OS {Environment.OSVersion.Platform} ", - LogType.Error); + LogType.Error ); } - } - public static implicit operator uint(GLhandleARB value) + public static implicit operator uint( GLhandleARB value ) { - return (uint)value; + return ( uint )value; } - - } #region GLFW_dele - internal unsafe delegate void GLFWwindowsizefun(glfwWindow* window, int width, int height); - internal unsafe delegate void GLFWwindowrefreshfun(glfwWindow* window); - internal unsafe delegate void GLFWwindowposfun(glfwWindow* window, int xpos, int ypos); - internal unsafe delegate void GLFWwindowmaximizefun(glfwWindow* window, int maximized); - internal unsafe delegate void GLFWwindowiconifyfun(glfwWindow* window, int iconified); - internal unsafe delegate void GLFWwindowfocusfun(glfwWindow* window, int focused); - internal unsafe delegate void GLFWwindowcontentscalefun(glfwWindow* window, float xscale, float yscale); - internal unsafe delegate void GLFWwindowclosefun(glfwWindow* window); + internal unsafe delegate void GLFWwindowsizefun( + glfwWindow* window, + int width, + int height ); + internal unsafe delegate void GLFWwindowrefreshfun( glfwWindow* window ); + internal unsafe delegate void GLFWwindowposfun( + glfwWindow* window, + int xpos, + int ypos ); + internal unsafe delegate void GLFWwindowmaximizefun( + glfwWindow* window, + int maximized ); + internal unsafe delegate void GLFWwindowiconifyfun( + glfwWindow* window, + int iconified ); + internal unsafe delegate void GLFWwindowfocusfun( + glfwWindow* window, + int focused ); + internal unsafe delegate void GLFWwindowcontentscalefun( + glfwWindow* window, + float xscale, + float yscale ); + internal unsafe delegate void GLFWwindowclosefun( glfwWindow* window ); internal unsafe delegate void GLFWvkproc(); - internal unsafe delegate void GLFWscrollfun(glfwWindow* window, double xoffset, double yoffset); - internal unsafe delegate void GLFWmousebuttonfun(glfwWindow* window, int button, int action, int mods); - internal unsafe delegate void GLFWmonitorfun(glfwMonitor* monitor, int monitorevent); - internal unsafe delegate void GLFWkeyfun(glfwWindow* window, int key, int scancode, int action, int mods); - internal unsafe delegate void GLFWjoystickfun(int jid, int keyevent); + internal unsafe delegate void GLFWscrollfun( + glfwWindow* window, + double xoffset, + double yoffset ); + internal unsafe delegate void GLFWmousebuttonfun( + glfwWindow* window, + int button, + int action, + int mods ); + internal unsafe delegate void GLFWmonitorfun( + glfwMonitor* monitor, + int monitorevent ); + internal unsafe delegate void GLFWkeyfun( + glfwWindow* window, + int key, + int scancode, + int action, + int mods ); + internal unsafe delegate void GLFWjoystickfun( int jid, int keyevent ); public unsafe delegate void GLFWglproc(); - internal unsafe delegate void GLFWerrorfun(int error_code, sbyte* description); - internal unsafe delegate void GLFWdropfun(glfwWindow* window, int path_count, sbyte*[] paths); - internal unsafe delegate void GLFWcursorposfun(glfwWindow* window, double xpos, double ypos); - internal unsafe delegate void GLFWcursorenterfun(glfwWindow* window, int entered); - internal unsafe delegate void GLFWcharmodsfun(glfwWindow* window, uint codepoint, int mods); - internal unsafe delegate void GLFWcharfun(glfwWindow* window, uint codepoint); - - #endregion + internal unsafe delegate void GLFWerrorfun( + int error_code, + sbyte* description ); + internal unsafe delegate void GLFWdropfun( + glfwWindow* window, + int path_count, + sbyte*[] paths ); + internal unsafe delegate void GLFWcursorposfun( + glfwWindow* window, + double xpos, + double ypos ); + internal unsafe delegate void GLFWcursorenterfun( + glfwWindow* window, + int entered ); + internal unsafe delegate void GLFWcharmodsfun( + glfwWindow* window, + uint codepoint, + int mods ); + internal unsafe delegate void GLFWcharfun( + glfwWindow* window, + uint codepoint ); +#endregion } \ No newline at end of file diff --git a/源代码/StgSharp/Graphics/IGraphicAPIs.cs b/源代码/StgSharp/Graphics/IGraphicAPIs.cs index b97068a4..70646eac 100644 --- a/源代码/StgSharp/Graphics/IGraphicAPIs.cs +++ b/源代码/StgSharp/Graphics/IGraphicAPIs.cs @@ -37,8 +37,10 @@ namespace StgSharp.Graphics public interface IGraphicAPIs { - public IntPtr GraphicApiPackageHandle { get; } + public IntPtr GraphicApiPackageHandle + { + get; + } } - } diff --git a/源代码/StgSharp/Graphics/Image.cs b/源代码/StgSharp/Graphics/Image.cs index dc8ffd7e..f1c5d504 100644 --- a/源代码/StgSharp/Graphics/Image.cs +++ b/源代码/StgSharp/Graphics/Image.cs @@ -46,32 +46,43 @@ namespace StgSharp.Graphics { public class Image : ISSDSerializable, IImageProvider { + private byte[] _data; - private ImageInfo info; + private ImageInfo _rawInfo; private int _pixelUpdateCount = 0; internal unsafe Image() { - info = new ImageInfo(); + _rawInfo = new ImageInfo(); } - internal Image(ImageInfo information) + internal Image( ImageInfo information ) { - info = information; + _rawInfo = information; _data = Array.Empty(); - //int length = info.width * info.height * info.channel; - } - internal ref byte[] Data - { - get => ref _data; + //int length = _rawInfo.width * _rawInfo.height * _rawInfo.channel; } public (int width, int height) Size { - get => (info.Width, info.Height); + get => (_rawInfo.Width, _rawInfo.Height); } + public byte[] PixelBuffer + { + get + { + if( ( _data.Length == 0 ) || ( _data == null ) ) { + GetBytes(); + return _data!; + } + return _data; + } + } + + public ImageChannel Channel => _rawInfo.Channel; + /// /// Hash code of time pixels updated last time. /// @@ -81,59 +92,51 @@ namespace StgSharp.Graphics internal set => _pixelUpdateCount = value; } - public byte[] PixelBuffer - { - get - { - if ((_data.Length == 0) || (_data == null)) - { - GetBytes(); - return _data!; - } - return _data; - } - } + public int ChannelCount => _rawInfo.ChannelCount; - public ImageChannel Channel => info.Channel; - public int ChannelCount => info.ChannelCount; public int Height { - get => info.Height; - internal set => info.Height = value; + get => _rawInfo.Height; + internal set => _rawInfo.Height = value; } public int Width { - get => info.Width; - internal set => info.Width = value; + get => _rawInfo.Width; + internal set => _rawInfo.Width = value; } - public int PixelSize => GlHelper.GetPixelSize(info.pixelLayout, info.Channel); + public int PixelSize => GlHelper.GetPixelSize( + _rawInfo.pixelLayout, _rawInfo.Channel ); public PixelChannelLayout PixelLayout { - get => info.pixelLayout; - private set => info.pixelLayout = value; + get => _rawInfo.pixelLayout; + private set => _rawInfo.pixelLayout = value; } public SerializableTypeCode SSDTypeCode => SerializableTypeCode.PixelImage; - public void FromBytes(byte[] stream) + internal ref byte[] Data { - + get => ref _data; } - public static unsafe Image FromFile(string route, ImageLoader loader) + public void FromBytes( byte[] stream ) { } + + public static unsafe Image FromFile( string route, ImageLoader loader ) { Image ret = new Image(); - fixed (ImageInfo* iptr = &ret.info) - { - InternalIO.InternalLoadImage(route, iptr, loader); + fixed( ImageInfo* iptr = &ret._rawInfo ) { + InternalIO.InternalLoadImage( route, iptr, loader ); } return ret; } - public static Image FromMemory((int width, int height) size, ImageChannel channel, byte[] stream) + public static Image FromMemory( + (int width, int height) size, + ImageChannel channel, + byte[] stream ) { ImageInfo _info = new ImageInfo { @@ -142,13 +145,17 @@ namespace StgSharp.Graphics Channel = channel, StreamPtr = IntPtr.Zero }; - Image ret = new Image(_info); + Image ret = new Image( _info ); ret.PixelLayout = PixelChannelLayout.Byte; ret._data = stream; return ret; } - public static Image FromMemory((int width, int height) size, ImageChannel channel, PixelChannelLayout layout, byte[] stream) + public static Image FromMemory( + (int width, int height) size, + ImageChannel channel, + PixelChannelLayout layout, + byte[] stream ) { ImageInfo _info = new ImageInfo { @@ -157,7 +164,7 @@ namespace StgSharp.Graphics Channel = channel, StreamPtr = IntPtr.Zero }; - Image ret = new Image(_info); + Image ret = new Image( _info ); ret.PixelLayout = layout; ret._data = stream; return ret; @@ -165,20 +172,34 @@ namespace StgSharp.Graphics public unsafe byte[] GetBytes() { - if (_data.Length == 0) - { - int size = Width * Height * GlHelper.GetPixelSize(PixelLayout, Channel); - _data = new Span((byte*)info.StreamPtr, size).ToArray(); - fixed (ImageInfo* pptr = &info) - { - InternalIO.InternalUnloadImage(pptr); + if( _data.Length == 0 ) { + int size = Width * Height * GlHelper.GetPixelSize( + PixelLayout, Channel ); + _data = new Span( ( byte* )_rawInfo.StreamPtr, + size ).ToArray(); + fixed( ImageInfo* pptr = &_rawInfo ) { + InternalIO.InternalUnloadImage( pptr ); } - info.StreamPtr = IntPtr.Zero; + _rawInfo.StreamPtr = IntPtr.Zero; } return _data; } + public Image ProvideImage() => this; + internal static Image FromMemory( + ImageInfo info, + byte[] data, + int operationCount ) + { + return new Image + { + _rawInfo = info, + _data = data, + _pixelUpdateCount = operationCount + }; + } + byte[] ISSDSerializable.GetBytes() { throw new NotImplementedException(); @@ -186,7 +207,7 @@ namespace StgSharp.Graphics } - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] internal struct ImageInfo { @@ -204,7 +225,7 @@ namespace StgSharp.Graphics public int ChannelCount { - get => GlHelper.GetChannelCount(channel); + get => GlHelper.GetChannelCount( channel ); } public int Height @@ -215,7 +236,8 @@ namespace StgSharp.Graphics public int StreamSize { - get => width * height * GlHelper.GetPixelSize(pixelLayout, channel); + get => width * height * GlHelper.GetPixelSize( + pixelLayout, channel ); } public int Width @@ -230,27 +252,30 @@ namespace StgSharp.Graphics internal set => pixelPtr = value; } - public override string ToString() - { - return $"{channel}\t{width}\t{height}\t{(ulong)StreamPtr}"; - } - public override int GetHashCode() { int hash = 17; hash = hash * 17 + width; hash = hash * 17 + height; - hash = hash * 17 + (int)channel; + hash = hash * 17 + ( int )channel; return hash; } + + public override string ToString() + { + return $"{channel}\t{width}\t{height}\t{(ulong)StreamPtr}"; + } + } public enum ImageChannel : uint { + SingleColor = GLconst.RED, DoubleColor = GLconst.RG, TripleColor = GLconst.RGB, WithAlphaChannel = GLconst.RGBA, + } } @@ -259,7 +284,7 @@ namespace StgSharp.Graphics.OpenGL public static partial class GlHelper { - internal static int GetChannelCount(ImageChannel channel) + internal static int GetChannelCount( ImageChannel channel ) { return channel switch { @@ -267,34 +292,44 @@ namespace StgSharp.Graphics.OpenGL ImageChannel.DoubleColor => 2, ImageChannel.TripleColor => 3, ImageChannel.WithAlphaChannel => 4, - _ => throw new InvalidCastException("Unknown color channel decoding setting.") + _ => throw new InvalidCastException( + "Unknown color channel decoding setting." ) }; } - internal static int GetPixelSize(PixelChannelLayout layout, ImageChannel cahnnel) + internal static int GetPixelSize( + PixelChannelLayout layout, + ImageChannel cahnnel ) { return layout switch { - PixelChannelLayout.UByte => sizeof(byte) * GetChannelCount(cahnnel), - PixelChannelLayout.Byte => sizeof(byte) * GetChannelCount(cahnnel), - PixelChannelLayout.UShort => sizeof(short) * GetChannelCount(cahnnel), - PixelChannelLayout.Short => sizeof(short) * GetChannelCount(cahnnel), - PixelChannelLayout.UInt => sizeof(int) * GetChannelCount(cahnnel), - PixelChannelLayout.Int => sizeof(int) * GetChannelCount(cahnnel), - PixelChannelLayout.Float => sizeof(float) * GetChannelCount(cahnnel), - PixelChannelLayout.UByte332 => sizeof(byte), - PixelChannelLayout.UByte233Rev => sizeof(byte), - PixelChannelLayout.UShort565 => sizeof(short), - PixelChannelLayout.UShort565Rev => sizeof(short), - PixelChannelLayout.UShort4444 => sizeof(short), - PixelChannelLayout.UShort4444Rev => sizeof(short), - PixelChannelLayout.UShort5551 => sizeof(short), - PixelChannelLayout.UShort1555Rev => sizeof(short), - PixelChannelLayout.UInt8888 => sizeof(int), - PixelChannelLayout.UInt8888Rev => sizeof(int), - PixelChannelLayout.UInt1010102 => sizeof(int), - PixelChannelLayout.UInt2101010Rev => sizeof(int), - _ => throw new ArgumentException("Unknown layout type"), + PixelChannelLayout.UByte => sizeof( byte ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.Byte => sizeof( byte ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.UShort => sizeof( short ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.Short => sizeof( short ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.UInt => sizeof( int ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.Int => sizeof( int ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.Float => sizeof( float ) * GetChannelCount( + cahnnel ), + PixelChannelLayout.UByte332 => sizeof( byte ), + PixelChannelLayout.UByte233Rev => sizeof( byte ), + PixelChannelLayout.UShort565 => sizeof( short ), + PixelChannelLayout.UShort565Rev => sizeof( short ), + PixelChannelLayout.UShort4444 => sizeof( short ), + PixelChannelLayout.UShort4444Rev => sizeof( short ), + PixelChannelLayout.UShort5551 => sizeof( short ), + PixelChannelLayout.UShort1555Rev => sizeof( short ), + PixelChannelLayout.UInt8888 => sizeof( int ), + PixelChannelLayout.UInt8888Rev => sizeof( int ), + PixelChannelLayout.UInt1010102 => sizeof( int ), + PixelChannelLayout.UInt2101010Rev => sizeof( int ), + _ => throw new ArgumentException( "Unknown layout type" ), }; } diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/AutoTexture.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/AutoTexture.cs index bc283550..37fbc638 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/AutoTexture.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/AutoTexture.cs @@ -29,60 +29,60 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Collections; + using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using System.Text; -using System.Threading.Tasks; -using StgSharp.Collections; +using System.Threading.Tasks; namespace StgSharp.Graphics.OpenGL { /// - /// A collection of a sets of OpenGL textures. The collection can automatically select one of the - /// texture with minimum costs to upgrade pixels to buffer. Usually is used for - /// loading, but not for target of - /// . + /// A collection of a sets of OpenGL textures. The collection can automatically select one of + /// the texture with minimum costs to upgrade pixels to buffer. Usually is used for loading, but not for + /// target of . /// public sealed class AutoTextureGL { - private BidirectionalDictionary imageIndexMap = new BidirectionalDictionary(); - private Dictionary imageUpdateIndex = new Dictionary(); + + private TextureProperty[] propertyCache; + private BidirectionalDictionary imageIndexMap = new BidirectionalDictionary( + ); + private Dictionary imageUpdateIndex = new Dictionary( + ); private int _size, _currentIndex; private LinkedList usedTextureIndex; private Queue unusedTextureUnitIndex; - private TextureProperty[] propertyCache; private TextureGL texturePackage; private TextureProperty _textureProperty; - private OpenGLFunction GL - { - get => texturePackage.GL; - } - - private AutoTextureGL(TextureGL texture) + private AutoTextureGL( TextureGL texture ) { texturePackage = texture; _size = texture.Count; imageIndexMap = new BidirectionalDictionary(); unusedTextureUnitIndex = new Queue( - Enumerable.Range(0, _size)); + Enumerable.Range( 0, _size ) ); usedTextureIndex = new LinkedList(); propertyCache = new TextureProperty[_size]; } - public AutoTextureGL(int textureObjectSize, [NotNull]glRender binding) + public AutoTextureGL( int textureObjectSize, [NotNull]glRender binding ) { this._size = textureObjectSize; imageIndexMap = new BidirectionalDictionary(); - texturePackage = new TextureGL(textureObjectSize, binding); + texturePackage = new TextureGL( textureObjectSize, binding ); unusedTextureUnitIndex = new Queue( - Enumerable.Range(0, _size)); + Enumerable.Range( 0, _size ) ); usedTextureIndex = new LinkedList(); propertyCache = new TextureProperty[_size]; } @@ -93,75 +93,70 @@ namespace StgSharp.Graphics.OpenGL set => _textureProperty = value; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SelectTextureAndBind(Image i) + private OpenGLFunction GL + { + get => texturePackage.GL; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SelectTextureAndBind( Image i ) { TextureProperty property = _textureProperty; - SelectTextureAndBind(i, property); + SelectTextureAndBind( i, property ); } - public void SelectTextureAndBind([NotNull]Image i, TextureProperty property) + public void SelectTextureAndBind( + [NotNull]Image i, + TextureProperty property ) { //usable texture with image match - if (imageIndexMap.TryGetValue(i, out int index)) - { + if( imageIndexMap.TryGetValue( i, out int index ) ) { //prop setting match - if (propertyCache[index] == property) - { + if( propertyCache[ index ] == property ) { _currentIndex = index; //GL.Assert(true); - texturePackage.Bind2D(index); //GL.Assert(true); - if (i.PixelUpdateCount != imageUpdateIndex[i]) - { - texturePackage.LoadTexture(index, i); //GL.Assert(true); + texturePackage.Bind2D( index ); //GL.Assert(true); + if( i.PixelUpdateCount != imageUpdateIndex[ i ] ) { + texturePackage.LoadTexture( index, i ); //GL.Assert(true); + } + } else { + _currentIndex = index; //GL.Assert(true); + texturePackage.Bind2D( index ); //GL.Assert(true); + texturePackage.Set2dProperty( index, property ); //GL.Assert(true); + if( i.PixelUpdateCount != imageUpdateIndex[ i ] ) { + texturePackage.LoadTexture( index, i ); //GL.Assert(true); } } - else - { - _currentIndex = index; //GL.Assert(true); - texturePackage.Bind2D(index); //GL.Assert(true); - texturePackage.Set2dProperty(index, property); //GL.Assert(true); - if (i.PixelUpdateCount != imageUpdateIndex[i]) - { - texturePackage.LoadTexture(index, i); //GL.Assert(true); - } - } - } - else - { - if (unusedTextureUnitIndex.TryDequeue(out int newIndex)) - { + } else { + if( unusedTextureUnitIndex.TryDequeue( out int newIndex ) ) { //has extra unused texture object - imageIndexMap.Add(i, index); - texturePackage.Bind2D(index); - texturePackage.Set2dProperty(index, property); - texturePackage.LoadTexture(index, i); - usedTextureIndex.AddLast(newIndex); - propertyCache[newIndex] = property; - imageUpdateIndex[i] = i.PixelUpdateCount; - } - else - { + imageIndexMap.Add( i, index ); + texturePackage.Bind2D( index ); + texturePackage.Set2dProperty( index, property ); + texturePackage.LoadTexture( index, i ); + usedTextureIndex.AddLast( newIndex ); + propertyCache[ newIndex ] = property; + imageUpdateIndex[ i ] = i.PixelUpdateCount; + } else { //recycle from current int reusedIndex = usedTextureIndex.First!.Value; usedTextureIndex.RemoveFirst(); - usedTextureIndex.AddLast(reusedIndex); - imageIndexMap[i] = reusedIndex; - propertyCache[newIndex] = property; - imageUpdateIndex[i] = i.PixelUpdateCount; + usedTextureIndex.AddLast( reusedIndex ); + imageIndexMap[ i ] = reusedIndex; + propertyCache[ newIndex ] = property; + imageUpdateIndex[ i ] = i.PixelUpdateCount; } } } - public static AutoTextureGL ToAuto([NotNull]TextureGL texture) + public static AutoTextureGL ToAuto( [NotNull]TextureGL texture ) { - if (texture.IndexOfCurrentTexture != -1) - { - throw new InvalidOperationException("Texture to be converted has been editted."); + if( texture.IndexOfCurrentTexture != -1 ) { + throw new InvalidOperationException( + "Texture to be converted has been editted." ); } - return new AutoTextureGL(texture); + return new AutoTextureGL( texture ); } } - } diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/EBO.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/EBO.cs index 06cae15e..b98e4817 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/EBO.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/EBO.cs @@ -41,42 +41,50 @@ using System.Text; namespace StgSharp.Graphics.OpenGL { /// - /// A collection of handle to Element Buffer Object in OpenglFunc. - /// Each value indexed from instance of this class this - /// is the only handle to one Element Buffer Object. + /// A collection of handle to Element Buffer Object in OpenglFunc. Each + /// value indexed from instance of this class this is the only handle to one Element Buffer + /// Object. /// public sealed unsafe class ElementBuffer : GlBufferObjectBase { - internal ElementBuffer(int n, glRender binding) : base(binding) + internal ElementBuffer( int n, glRender binding ) + : base( binding ) { - _bufferHandle = GL.GenBuffers(n); + _bufferHandle = GL.GenBuffers( n ); } - public override sealed void Bind(int index) + public override sealed void Bind( int index ) { - GL.BindBuffer(BufferType.ElementArrayBuffer, _bufferHandle[index]); + GL.BindBuffer( + BufferType.ElementArrayBuffer, _bufferHandle[ index ] ); } - public void SetValue(int index, T[] bufferArray, BufferUsage usage) - where T : struct, IConvertible + public void SetValue( int index, T[] bufferArray, BufferUsage usage ) + where T: struct, IConvertible { - GL.BindBuffer(BufferType.ElementArrayBuffer, _bufferHandle[index]); - GL.SetBufferData(BufferType.ElementArrayBuffer, bufferArray, usage); + GL.BindBuffer( + BufferType.ElementArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferData( + BufferType.ElementArrayBuffer, bufferArray, usage ); } - public void SetValue(int index, ReadOnlySpan bufferSpan, BufferUsage usage) - where T : struct, IConvertible + public void SetValue( + int index, + ReadOnlySpan bufferSpan, + BufferUsage usage ) + where T: struct, IConvertible { - GL.BindBuffer(BufferType.ElementArrayBuffer, _bufferHandle[index]); - GL.SetBufferData(BufferType.ElementArrayBuffer, bufferSpan, usage); + GL.BindBuffer( + BufferType.ElementArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferData( BufferType.ElementArrayBuffer, bufferSpan, + usage ); } - protected override sealed void Dispose(bool disposing) + protected override sealed void Dispose( bool disposing ) { - if (disposing) - { - GL.DeleteBuffers(_bufferHandle); + if( disposing ) { + GL.DeleteBuffers( _bufferHandle ); } } diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/FBO.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/FBO.cs index fd314064..6379e957 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/FBO.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/FBO.cs @@ -40,55 +40,59 @@ using System.Threading.Tasks; namespace StgSharp.Graphics.OpenGL { -#pragma warning disable CA1008 -#pragma warning disable CA1028 + #pragma warning disable CA1008 + #pragma warning disable CA1028 public enum FrameBufferTarget : uint -#pragma warning restore CA1028 -#pragma warning restore CA1008 + #pragma warning restore CA1028 + #pragma warning restore CA1008 { + Read = GLconst.READ_FRAMEBUFFER, All = GLconst.FRAMEBUFFER, Draw = GLconst.DRAW_FRAMEBUFFER, + } public sealed class FrameBuffer : GlBufferObjectBase { - internal unsafe FrameBuffer(int count, glRender binding) : base(binding) + internal unsafe FrameBuffer( int count, glRender binding ) + : base( binding ) { - _bufferHandle = GL.GenFrameBuffers(count); + _bufferHandle = GL.GenFrameBuffers( count ); } /// - /// Bind the frame buffer object with name frame buffer to the frame buffer target specified by target. - /// will be set as default target. + /// Bind the frame buffer object with name frame buffer to the frame buffer target specified + /// by target. will be set as default target. /// - /// Index of object to be binded in handle set - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public override unsafe void Bind(int index) + /// Index of object to be binded in handle set + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public override unsafe void Bind( int index ) { - GL.BindFrameBuffer(FrameBufferTarget.All, _bufferHandle[index]); + GL.BindFrameBuffer( FrameBufferTarget.All, _bufferHandle[ index ] ); } /// - /// Bind the frame buffer object with name frame buffer to the frame buffer target specified by target. - /// Target of this frame buffer should be set manually. + /// Bind the frame buffer object with name frame buffer to the frame buffer target specified + /// by target. Target of this frame buffer should be set manually. /// - /// The frame buffer target of the binding operation. - /// Index of object to be binded in handle set - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void Bind(FrameBufferTarget target, int index) + /// The frame buffer target of the binding operation. + /// Index of object to be binded in handle set + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void Bind( FrameBufferTarget target, int index ) { - GL.BindFrameBuffer(target, _bufferHandle[index]); + GL.BindFrameBuffer( target, _bufferHandle[ index ] ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public static void BindNull() { - OpenGLFunction.CurrentGL.BindFrameBuffer(FrameBufferTarget.All, GlHandle.Zero); + OpenGLFunction.CurrentGL + .BindFrameBuffer( FrameBufferTarget.All, GlHandle.Zero ); } - protected override void Dispose(bool disposing) + protected override void Dispose( bool disposing ) { throw new NotImplementedException(); } diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs index f5b4ad81..675cb155 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs @@ -41,7 +41,7 @@ namespace StgSharp.Graphics.OpenGL private readonly glRender _contextBinding; - protected GlBufferObjectBase(glRender contextBinding) + protected GlBufferObjectBase( glRender contextBinding ) { binding = contextBinding; _contextBinding = contextBinding; diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/RBO.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/RBO.cs index bcf2959c..56d16466 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/RBO.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/RBO.cs @@ -35,36 +35,38 @@ using System.Collections.Generic; using System.Security.Principal; using System.Text; - namespace StgSharp.Graphics.OpenGL { - - - public sealed class RenderBuffer : GlBufferObjectBase { - public RenderBuffer(int count, glRender binding) : base(binding) + public RenderBuffer( int count, glRender binding ) + : base( binding ) { - _bufferHandle = GL.GenRenderBuffer(count); + _bufferHandle = GL.GenRenderBuffer( count ); } - public override void Bind(int index) + public override void Bind( int index ) { - GL.BindRenderBuffer(this[index]); + GL.BindRenderBuffer( this[ index ] ); } - public void Store(RenderBufferInternalFormat format, (int width, int height) size) + public void Store( + RenderBufferInternalFormat format, + (int width, int height) size ) { - if ((size.width > binding.Width) || (size.height > binding.Height)) - { - StgSharp.LogWarning("FrameBuffer is larger than current canvas binding"); + if( ( size.width > binding.Width ) || ( size.height > binding.Height ) ) { + StgSharp.LogWarning( + "FrameBuffer is larger than current canvas binding" ); } } - protected override void Dispose(bool disposing) + protected override void Dispose( bool disposing ) { - throw new NotImplementedException(); + foreach( GlHandle item in _bufferHandle ) { + Console.WriteLine( "removing a render buffer" ); + GL.DeleteRenderBuffer( item ); + } } } diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/TextureGL.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/TextureGL.cs index a5926e7f..ca964de9 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/TextureGL.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/TextureGL.cs @@ -28,7 +28,7 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- -using StgSharp.Data; +using StgSharp.Data.Intrinsic; using StgSharp.Math; using System; @@ -58,8 +58,6 @@ namespace StgSharp.Graphics.OpenGL _textureHandle = _gl.GenTextures( count ); } - internal OpenGLFunction GL => _gl; - public GlHandle this[ int index ] { get => _textureHandle[ index ]; @@ -77,12 +75,17 @@ namespace StgSharp.Graphics.OpenGL get => currentEditingTextureIndex; } - public void ActivateAs( TextureUnit unit ) { _gl.ActiveTextureUnit( ( uint )unit ); } + internal OpenGLFunction GL => _gl; + + public void ActivateAs( TextureUnit unit ) + { + _gl.ActiveTextureUnit( ( uint )unit ); + } public void Bind2D( int index ) { currentEditingTextureIndex = index; - _gl.BindTexture( GLconst.TEXTURE_2D, _textureHandle[ index ] ); + _gl.BindTexture( GLconst.TEXTURE_2D, _textureHandle[ index ] ); } /// @@ -94,8 +97,8 @@ namespace StgSharp.Graphics.OpenGL { byte[] handle = i.PixelBuffer; _gl.TextureImage2d( - Texture2DTarget.Texture2D, 0, ( uint )i.Channel, ( uint )i.Width, ( uint )i.Height, - ( uint )i.Channel, i.PixelLayout, pixels: handle ); + Texture2DTarget.Texture2D, 0, i.Channel, ( uint )i.Width, + ( uint )i.Height, i.Channel, i.PixelLayout, pixels: handle ); _gl.GenerateMipmap( Texture2DTarget.Texture2D ); } @@ -108,14 +111,17 @@ namespace StgSharp.Graphics.OpenGL TextureFilter onMagnify ) { #if DEBUG - if( index != currentEditingTextureIndex ) - { + if( index != currentEditingTextureIndex ) { throw new InvalidOperationException( "Texture to be editted is not the one being activated." ); } #endif - _gl.TextureParameter( GLconst.TEXTURE_2D, GLconst.TEXTURE_MIN_FILTER, ( int )onMinify ); - _gl.TextureParameter( GLconst.TEXTURE_2D, GLconst.TEXTURE_MAG_FILTER, ( int )onMagnify ); + _gl.TextureParameter( + GLconst.TEXTURE_2D, GLconst.TEXTURE_MIN_FILTER, + ( int )onMinify ); + _gl.TextureParameter( + GLconst.TEXTURE_2D, GLconst.TEXTURE_MAG_FILTER, + ( int )onMagnify ); } [MethodImpl( MethodImplOptions.AggressiveInlining )] @@ -125,21 +131,25 @@ namespace StgSharp.Graphics.OpenGL TextureWrap onVertical ) { #if DEBUG - if( index != currentEditingTextureIndex ) - { + if( index != currentEditingTextureIndex ) { throw new InvalidOperationException( "Texture to be editted is not the one being activated." ); } #endif - _gl.TextureParameter( GLconst.TEXTURE_2D, GLconst.TEXTURE_WRAP_S, ( int )onHorizontial ); - _gl.TextureParameter( GLconst.TEXTURE_2D, GLconst.TEXTURE_WRAP_T, ( int )onVertical ); + _gl.TextureParameter( + GLconst.TEXTURE_2D, GLconst.TEXTURE_WRAP_S, + ( int )onHorizontial ); + _gl.TextureParameter( + GLconst.TEXTURE_2D, GLconst.TEXTURE_WRAP_T, ( int )onVertical ); } [MethodImpl( MethodImplOptions.AggressiveInlining )] public void Set2dProperty( int index, TextureProperty property ) { - Set2dFilterProperty( index, property.FilterOnMinify, property.FilterOnMagnify ); - Set2dWrapProperty( index, property.WrapOnHorizontial, property.WrapOnVertical ); + Set2dFilterProperty( + index, property.FilterOnMinify, property.FilterOnMagnify ); + Set2dWrapProperty( + index, property.WrapOnHorizontial, property.WrapOnVertical ); } #endregion texture setting @@ -192,23 +202,35 @@ namespace StgSharp.Graphics.OpenGL set => vert = value; } + public override bool Equals( [NotNullWhen( true )] object obj ) + { + return base.Equals( obj ); + } + public override int GetHashCode() { return HashCode.Combine( - FilterOnMagnify, FilterOnMagnify, WrapOnHorizontial, WrapOnVertical ); - } - - public override bool Equals([NotNullWhen(true)] object obj) - { - return base.Equals(obj); + FilterOnMagnify, FilterOnMagnify, WrapOnHorizontial, + WrapOnVertical ); } public override string ToString() { - return $"FilterOnMagnify:{FilterOnMagnify}, " + - $"FilterOnMagnify:{FilterOnMagnify}, " + - $"WrapOnHorizontial:{WrapOnHorizontial}, " + - $"WrapOnVertical:{WrapOnVertical}"; + return $"FilterOnMagnify:{FilterOnMagnify}, " + $"FilterOnMagnify:{FilterOnMagnify}, " + $"WrapOnHorizontial:{WrapOnHorizontial}, " + $"WrapOnVertical:{WrapOnVertical}"; + } + + public static bool operator !=( + TextureProperty left, + TextureProperty right ) + { + return left.mask != right.mask; + } + + public static bool operator ==( + TextureProperty left, + TextureProperty right ) + { + return left.mask == right.mask; } public static implicit operator TextureProperty( @@ -219,18 +241,10 @@ namespace StgSharp.Graphics.OpenGL { return new TextureProperty( propertyValueTuple.onMagnify, propertyValueTuple.onMinify, - propertyValueTuple.onHorizontial, propertyValueTuple.onVertical ); + propertyValueTuple.onHorizontial, + propertyValueTuple.onVertical ); } - public static bool operator ==(TextureProperty left, TextureProperty right) - { - return left.mask == right.mask; - } - - public static bool operator !=(TextureProperty left, TextureProperty right) - { - return left.mask != right.mask; - } } #pragma warning disable CA1008 diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/VAO.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/VAO.cs index 587bc140..28ecd5a2 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/VAO.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/VAO.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using System; using System.Collections.Generic; using System.Runtime.CompilerServices; @@ -40,37 +39,41 @@ namespace StgSharp.Graphics.OpenGL public sealed unsafe class VertexArray : GlBufferObjectBase { - internal VertexArray(int n, glRender binding) : base(binding) + internal VertexArray( int n, glRender binding ) + : base( binding ) { - _bufferHandle = GL.GenVertexArrays(n); + _bufferHandle = GL.GenVertexArrays( n ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public override sealed void Bind(int index) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public override sealed void Bind( int index ) { - GL.BindVertexArray(_bufferHandle[index]); + GL.BindVertexArray( _bufferHandle[ index ] ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public static void BindNull() { - OpenGLFunction.CurrentGL.BindVertexArray(GlHandle.Zero); + OpenGLFunction.CurrentGL.BindVertexArray( GlHandle.Zero ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetVertexAttribute(uint index, int vertexLength, TypeCode dataType, bool isNomalized, uint stride, int pointer) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetVertexAttribute( + uint index, + int vertexLength, + TypeCode dataType, + bool isNomalized, + uint stride, + int pointer ) { GL.SetVertexAttribute( - index, vertexLength, dataType, - isNomalized, - stride, pointer); + index, vertexLength, dataType, isNomalized, stride, pointer ); } - protected override sealed void Dispose(bool disposing) + protected override sealed void Dispose( bool disposing ) { - if (disposing) - { - GL.DeleteVertexArrays(_bufferHandle); + if( disposing ) { + GL.DeleteVertexArrays( _bufferHandle ); } } diff --git a/源代码/StgSharp/Graphics/OpenGL/Buffer/VBO.cs b/源代码/StgSharp/Graphics/OpenGL/Buffer/VBO.cs index 3ff9478d..d127128b 100644 --- a/源代码/StgSharp/Graphics/OpenGL/Buffer/VBO.cs +++ b/源代码/StgSharp/Graphics/OpenGL/Buffer/VBO.cs @@ -43,108 +43,126 @@ namespace StgSharp.Graphics.OpenGL public sealed unsafe class VertexBuffer : GlBufferObjectBase { - internal VertexBuffer(int n, glRender binding) : base(binding) + internal VertexBuffer( int n, glRender binding ) + : base( binding ) { - _bufferHandle = GL.GenBuffers(n); + _bufferHandle = GL.GenBuffers( n ); } - public override sealed void Bind(int index) + public override sealed void Bind( int index ) { - GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + GL.BindBuffer( BufferType.ArrayBuffer, _bufferHandle[ index ] ); } /// /// /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public void Unbind() { - GL.BindBuffer(BufferType.ArrayBuffer, GlHandle.Zero); + GL.BindBuffer( BufferType.ArrayBuffer, GlHandle.Zero ); } /// /// Set _data to current vertex buffer object /// - /// Type of bufferData - /// Index to find certain VBO in this instance - /// Data to write in - /// How OpenGL use these _data, defined by - public void WriteMatrixData(int index, T bufferData, BufferUsage usage) - where T : struct, IMat + /// Type of bufferData + /// Index to find certain VBO in this instance + /// Data to write in + /// How OpenGL use these _data, defined by + public void WriteMatrixData( + int index, + T bufferData, + BufferUsage usage ) + where T: struct, IMat { - GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); - GL.SetBufferData(BufferType.ArrayBuffer, bufferData, usage); + GL.BindBuffer( BufferType.ArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferData( BufferType.ArrayBuffer, bufferData, usage ); } /// /// Set _data to current vertex buffer object /// - /// Type of bufferData - /// Index to find certain VBO in this instance - /// Data to write in - /// How OpenGL use these _data, defined by - public void WriteScalerData(int index, T[] bufferArray, BufferUsage usage) - where T : struct, + /// Type of bufferData + /// Index to find certain VBO in this instance + /// Data to write in + /// How OpenGL use these _data, defined by + public void WriteScalerData( + int index, + T[] bufferArray, + BufferUsage usage ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { - GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); - GL.SetBufferData(BufferType.ArrayBuffer, bufferArray, usage); + GL.BindBuffer( BufferType.ArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferData( BufferType.ArrayBuffer, bufferArray, usage ); } /// /// Set _data to current vertex buffer object /// - /// Type of bufferData - /// Index to find certain VBO in this instance - /// A of _data to write in - /// How OpenGL use these _data, defined by - public void WriteScalerData(int index, ReadOnlySpan scalerSpan, BufferUsage usage) - where T : struct, + /// Type of bufferData + /// Index to find certain VBO in this instance + /// A of _data to write in + /// How OpenGL use these _data, defined by + public void WriteScalerData( + int index, + ReadOnlySpan scalerSpan, + BufferUsage usage ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { - GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); - GL.SetBufferData(BufferType.ArrayBuffer, scalerSpan, usage); + GL.BindBuffer( BufferType.ArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferData( BufferType.ArrayBuffer, scalerSpan, usage ); } /// /// Set _data to current vertex buffer object /// - /// Type of bufferData - /// Index to find certain VBO in this instance - /// A of _data to write in - /// How OpenGL use these _data, defined by - public void WriteVectorData(int index, ReadOnlySpan vectorSpan, BufferUsage usage) where T : struct, IVector + /// Type of bufferData + /// Index to find certain VBO in this instance + /// A of _data to write in + /// How OpenGL use these _data, defined by + public void WriteVectorData( + int index, + ReadOnlySpan vectorSpan, + BufferUsage usage ) + where T: struct, IVector { - GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); - GL.SetBufferVectorData(BufferType.ArrayBuffer, vectorSpan, usage); + GL.BindBuffer( BufferType.ArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferVectorData( BufferType.ArrayBuffer, vectorSpan, usage ); } /// /// Set _data to current vertex buffer object /// - /// Type of bufferData - /// Index to find certain VBO in this instance - /// A array of _data to write in - /// How OpenGL use these _data, defined by - public void WriteVectorData(int index, T[] vectorArray, BufferUsage usage) where T : struct, IVector + /// Type of bufferData + /// Index to find certain VBO in this instance + /// A array of _data to write in + /// How OpenGL use these _data, defined by + public void WriteVectorData( + int index, + T[] vectorArray, + BufferUsage usage ) + where T: struct, IVector { - GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); - GL.SetBufferVectorData(BufferType.ArrayBuffer, vectorArray, usage); + GL.BindBuffer( BufferType.ArrayBuffer, _bufferHandle[ index ] ); + GL.SetBufferVectorData( BufferType.ArrayBuffer, vectorArray, + usage ); } - protected override sealed void Dispose(bool disposing) + protected override sealed void Dispose( bool disposing ) { - if (disposing) - { - GL.DeleteBuffers(_bufferHandle); + if( disposing ) { + GL.DeleteBuffers( _bufferHandle ); } } diff --git a/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/IglConvertable.cs b/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/IglConvertable.cs index b8c7f3e3..9f37e056 100644 --- a/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/IglConvertable.cs +++ b/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/IglConvertable.cs @@ -42,22 +42,25 @@ namespace StgSharp.Graphics.ShaderEdit { /// - /// + /// /// public void DisplayGLtypeDefinition(); /// - /// + /// /// - public void GainAllUniforms(ShaderProgram source, params string[] uniformName); + public void GainAllUniforms( + ShaderProgram source, + params string[] uniformName ); /// - /// + /// /// /// public ShaderStruct GetConvertedGLtype(); + /// - /// + /// /// public void SetAllUniforms(); diff --git a/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Shader.cs b/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Shader.cs index a4d71253..ae33f8d0 100644 --- a/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Shader.cs +++ b/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Shader.cs @@ -45,19 +45,21 @@ namespace StgSharp.Graphics.OpenGL { /// - /// Create an instance of program + /// Create an instance of program /// - /// New instance of instance. - [MethodImpl(MethodImplOptions.AggressiveInlining)] + /// New instance of instance. + [MethodImpl( MethodImplOptions.AggressiveInlining )] protected override sealed ShaderProgram CreateShaderProgram() { - return new ShaderProgram(this); + return new ShaderProgram( this ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - protected override sealed Shader CreateShaderSegment(ShaderType type, int count) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected override sealed Shader CreateShaderSegment( + ShaderType type, + int count ) { - return new Shader(GL.CreateShaderSet(count, type), type, this); + return new Shader( GL.CreateShaderSet( count, type ), type, this ); } } @@ -69,7 +71,10 @@ namespace StgSharp.Graphics.OpenGL internal readonly GlHandle[] handle; public readonly ShaderType type; - internal unsafe Shader(GlHandle[] handle, ShaderType usage, glRender stream) + internal unsafe Shader( + GlHandle[] handle, + ShaderType usage, + glRender stream ) { this.handle = handle; GL = stream.GL; @@ -81,60 +86,58 @@ namespace StgSharp.Graphics.OpenGL /// /// Attach one shader code to a shader program. /// - /// Shader program to attach - /// Index of shader code in current shader code set. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void AttachTo(int index, ShaderProgram target) + /// Shader program to attach + /// Index of shader code in current shader code set. + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void AttachTo( int index, ShaderProgram target ) { - GL.AttachShader(target.handle, handle[index]); + GL.AttachShader( target.handle, handle[ index ] ); } - public void CheckStatus(int index, ShaderStatus status) + public void CheckStatus( int index, ShaderStatus status ) { - string log = GL.GetShaderStatus(this, index, (int)status); - if (!string.IsNullOrEmpty(log)) - { - throw new Exception($"{$"Shader Error \t{status}\n"}{log}"); + string log = GL.GetShaderStatus( this, index, ( int )status ); + if( !string.IsNullOrEmpty( log ) ) { + throw new Exception( $"{$"Shader Error \t{status}\n"}{log}" ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void Compile(int index, byte[] codeStream) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void Compile( int index, byte[] codeStream ) { - if (codeStream == null) - { - throw new ArgumentNullException(nameof(codeStream)); + if( codeStream == null ) { + throw new ArgumentNullException( nameof( codeStream ) ); } - GL.LoadShaderSource(handle[index], codeStream); - GL.CompileShader(handle[index]); - CheckStatus(index, ShaderStatus.CompileStatus); + GL.LoadShaderSource( handle[ index ], codeStream ); + GL.CompileShader( handle[ index ] ); + CheckStatus( index, ShaderStatus.CompileStatus ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void Compile(int index, string codeStream) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void Compile( int index, string codeStream ) { - if (codeStream == null) - { - throw new ArgumentNullException(nameof(codeStream)); + if( codeStream == null ) { + throw new ArgumentNullException( nameof( codeStream ) ); } - GL.LoadShaderSource(handle[index], Encoding.ASCII.GetBytes(codeStream)); - GL.CompileShader(handle[index]); - CheckStatus(index, ShaderStatus.CompileStatus); + GL.LoadShaderSource( + handle[ index ], Encoding.ASCII.GetBytes( codeStream ) ); + GL.CompileShader( handle[ index ] ); + CheckStatus( index, ShaderStatus.CompileStatus ); } - public void FromBytes(byte[] stream) + public void FromBytes( byte[] stream ) { throw new NotImplementedException(); } - public static byte[] FromCodeFile(string fileRoute) + public static byte[] FromCodeFile( string fileRoute ) { - string str = File.ReadAllText(fileRoute); - if (string.IsNullOrEmpty(str)) - { - throw new InvalidOperationException($"Cannot load and GLSL code from {fileRoute}"); + string str = File.ReadAllText( fileRoute ); + if( string.IsNullOrEmpty( str ) ) { + throw new InvalidOperationException( + $"Cannot load and GLSL code from {fileRoute}" ); } - return Encoding.UTF8.GetBytes(str); + return Encoding.UTF8.GetBytes( str ); } public byte[] GetBytes() @@ -142,7 +145,7 @@ namespace StgSharp.Graphics.OpenGL return Array.Empty(); } - public byte[] GetBytes(out int length) + public byte[] GetBytes( out int length ) { throw new NotImplementedException(); } @@ -156,7 +159,9 @@ namespace StgSharp.Graphics.OpenGL public enum ShaderStatus : int { + CompileStatus = GLconst.COMPILE_STATUS, + } public class ShaderProgram @@ -168,64 +173,63 @@ namespace StgSharp.Graphics.OpenGL /// /// CustomizeInit a program with no shader attached. /// - internal unsafe ShaderProgram(glRender binding) + internal unsafe ShaderProgram( glRender binding ) { GL = binding.GL; handle = GL.CreateProgram(); } /// - /// Get a uniform form current shader, - /// the value type of the uniform should be provided. + /// Get a uniform form current shader, the value type of the uniform should be provided. /// - /// ContextName of the Uniform in shader code + /// ContextName of the Uniform in shader code /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe Uniform GetUniform(string name) where T : struct + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe Uniform GetUniform( string name ) where T: struct { - return new Uniform(GL.GetUniformLocation(this.handle, name)); + return new Uniform( GL.GetUniformLocation( this.handle, name ) ); } /// - /// Get a uniform form current shader, - /// the value type of the uniform should be provided. + /// Get a uniform form current shader, the value type of the uniform should be provided. /// - /// ContextName of the Uniform in shader code + /// ContextName of the Uniform in shader code /// - public unsafe Uniform GetUniform(string name) - where T : struct - where U : struct + public unsafe Uniform GetUniform( string name ) + where T: struct + where U: struct { - return new Uniform(GL.GetUniformLocation(this.handle, name)); + return new Uniform( + GL.GetUniformLocation( this.handle, name ) ); } /// - /// Get a uniform form current shader, - /// the value type of the uniform should be provided. + /// Get a uniform form current shader, the value type of the uniform should be provided. /// - /// ContextName of the Uniform in shader code + /// ContextName of the Uniform in shader code /// - public unsafe Uniform GetUniform(string name) - where T : struct - where U : struct - where V : struct + public unsafe Uniform GetUniform( string name ) + where T: struct + where U: struct + where V: struct { - return new Uniform(GL.GetUniformLocation(this.handle, name)); + return new Uniform( + GL.GetUniformLocation( this.handle, name ) ); } /// - /// Get a uniform form current shader, - /// the value type of the uniform should be provided. + /// Get a uniform form current shader, the value type of the uniform should be provided. /// - /// ContextName of the Uniform in shader code + /// ContextName of the Uniform in shader code /// - public unsafe Uniform GetUniform(string name) - where T : struct - where U : struct - where V : struct - where W : struct + public unsafe Uniform GetUniform( string name ) + where T: struct + where U: struct + where V: struct + where W: struct { - return new Uniform(GL.GetUniformLocation(this.handle, name)); + return new Uniform( + GL.GetUniformLocation( this.handle, name ) ); } /// @@ -233,20 +237,18 @@ namespace StgSharp.Graphics.OpenGL /// public unsafe void Link() { - if (InternalIO.InternalLinkShaderProgram((OpenglContext*)this.GL.ContextHandle, handle.Value) == 0) - { + if( InternalIO.InternalLinkShaderProgram( + ( OpenglContext* )this.GL.ContextHandle, handle.Value ) == 0 ) { IntPtr logPtr = InternalIO.InternalReadSSCLog(); - try - { + try { byte[] logByte = new byte[512]; - Marshal.Copy(logPtr, logByte, 0, 512); - string log = Encoding.UTF8.GetString(logByte); - log = log.Replace("\0", string.Empty); - InternalIO.InternalWriteLog(log, LogType.Error); + Marshal.Copy( logPtr, logByte, 0, 512 ); + string log = Encoding.UTF8.GetString( logByte ); + log = log.Replace( "\0", string.Empty ); + InternalIO.InternalWriteLog( log, LogType.Error ); } - catch (Exception ex) - { - InternalIO.InternalWriteLog(ex.Message, LogType.Error); + catch( Exception ex ) { + InternalIO.InternalWriteLog( ex.Message, LogType.Error ); } } } @@ -254,10 +256,10 @@ namespace StgSharp.Graphics.OpenGL /// /// Let the current viewPortDisplay use this shader. /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public unsafe void Use() { - GL.UseProgram(handle); + GL.UseProgram( handle ); } ~ShaderProgram() diff --git a/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Uniform.cs b/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Uniform.cs index f155b62e..ce684862 100644 --- a/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Uniform.cs +++ b/源代码/StgSharp/Graphics/OpenGL/ShaderEdit/Uniform.cs @@ -52,93 +52,73 @@ namespace StgSharp.Graphics.OpenGL } - public sealed class Uniform : Uniform - where T : struct + public sealed class Uniform : Uniform where T: struct { - internal Uniform() - { + internal Uniform() { } - } - - internal unsafe Uniform(GlHandle id) + internal unsafe Uniform( GlHandle id ) { this.id = id; } - internal static Uniform FromHandle(GlHandle handle) + internal static Uniform FromHandle( GlHandle handle ) { return new Uniform { id = handle }; } } - public sealed class Uniform : Uniform - where T : struct - where U : struct + public sealed class Uniform : Uniform where T: struct where U: struct { + internal Uniform() { } - - internal Uniform() - { - - } - - internal unsafe Uniform(GlHandle id) + internal unsafe Uniform( GlHandle id ) { this.id = id; } - internal static Uniform FromHandle(GlHandle handle) + internal static Uniform FromHandle( GlHandle handle ) { return new Uniform { id = handle }; } } - public sealed class Uniform : Uniform - where T : struct - where U : struct - where V : struct + public sealed class Uniform : Uniform where T: struct + where U: struct + where V: struct { - internal Uniform() - { + internal Uniform() { } - } - - internal unsafe Uniform(GlHandle id) + internal unsafe Uniform( GlHandle id ) { this.id = id; } - internal static Uniform FromHandle(GlHandle handle) + internal static Uniform FromHandle( GlHandle handle ) { return new Uniform { id = handle }; } } - public sealed class Uniform : Uniform - where T : struct - where U : struct - where V : struct - where W : struct + public sealed class Uniform : Uniform where T: struct + where U: struct + where V: struct + where W: struct { - internal Uniform() - { + internal Uniform() { } - } - - - internal unsafe Uniform(GlHandle id) + internal unsafe Uniform( GlHandle id ) { this.id = id; } - internal static Uniform FromHandle(GlHandle handle) + internal static Uniform FromHandle( GlHandle handle ) { return new Uniform { id = handle }; } @@ -148,59 +128,71 @@ namespace StgSharp.Graphics.OpenGL public unsafe partial class OpenGLFunction { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue - (Uniform uniform, Matrix44 mat) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( Uniform uniform, Matrix44 mat ) { Matrix44 temp = mat; - Context.glUniformMatrix4fv(uniform.id.SignedValue, 1, false, (float*)&temp); + Context.glUniformMatrix4fv( + uniform.id.SignedValue, 1, false, ( float* )&temp ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, vec4d vec) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( + Uniform uniform, + Vec4 vec ) { - vec4d temp = vec; - Context.glUniform1fv(uniform.id.SignedValue, 4, &temp); + Vec4 temp = vec; + Context.glUniform1fv( uniform.id.SignedValue, 4, &temp ); } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, vec4d vec) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( Uniform uniform, Vec4 vec ) { - vec4d temp = vec; - Context.glUniform1fv(uniform.id.SignedValue, 4, &temp); + Vec4 temp = vec; + Context.glUniform1fv( uniform.id.SignedValue, 4, &temp ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, float v0) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( Uniform uniform, float v0 ) { - Context.glUniform1f(uniform.id.SignedValue, v0); + Context.glUniform1f( uniform.id.SignedValue, v0 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, int i0) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( Uniform uniform, int i0 ) { - Context.glUniform1i(uniform.id.SignedValue, i0); + Context.glUniform1i( uniform.id.SignedValue, i0 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, float v0, float v1) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( + Uniform uniform, + float v0, + float v1 ) { - Context.glUniform2f(uniform.id.SignedValue, v0, v1); + Context.glUniform2f( uniform.id.SignedValue, v0, v1 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, float v0, float v1, float v2) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( + Uniform uniform, + float v0, + float v1, + float v2 ) { - Context.glUniform3f(uniform.id.SignedValue, v0, v1, v2); + Context.glUniform3f( uniform.id.SignedValue, v0, v1, v2 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetUniformValue(Uniform uniform, float v0, float v1, float v2, float v3) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetUniformValue( + Uniform uniform, + float v0, + float v1, + float v2, + float v3 ) { - Context.glUniform4f(uniform.id.SignedValue, v0, v1, v2, v3); + Context.glUniform4f( uniform.id.SignedValue, v0, v1, v2, v3 ); } } - } \ No newline at end of file diff --git a/源代码/StgSharp/Graphics/OpenGL/glAPICalling.cs b/源代码/StgSharp/Graphics/OpenGL/glAPICalling.cs index 9677da98..05af95e9 100644 --- a/源代码/StgSharp/Graphics/OpenGL/glAPICalling.cs +++ b/源代码/StgSharp/Graphics/OpenGL/glAPICalling.cs @@ -34,14 +34,11 @@ using System.Text; namespace StgSharp.Graphics.OpenGL { - [AttributeUsage(AttributeTargets.Method)] + [AttributeUsage( AttributeTargets.Method )] public sealed class OpenGLAPICallingAttribute : Attribute { - public OpenGLAPICallingAttribute() - { - - } + public OpenGLAPICallingAttribute() { } } } diff --git a/源代码/StgSharp/Graphics/OpenGL/glApiManager.cs b/源代码/StgSharp/Graphics/OpenGL/glApiManager.cs index 415275e0..d93f5922 100644 --- a/源代码/StgSharp/Graphics/OpenGL/glApiManager.cs +++ b/源代码/StgSharp/Graphics/OpenGL/glApiManager.cs @@ -32,7 +32,6 @@ using StgSharp.Math; using StgSharp.MVVM; using StgSharp.MVVM.View; - using System; using System.Collections.Generic; using System.Linq; @@ -62,1923 +61,4440 @@ namespace StgSharp.Graphics.OpenGL /// /// Get the function pointer of given OpenGL api name /// - /// ContextName of the OpenGL api - /// The funtion pointer of the api in stream of - public static IntPtr LoadGLfunc(string name) + /// ContextName of the OpenGL api + /// The funtion pointer of the api in stream of + public static IntPtr LoadGLfunc( string name ) { - IntPtr ret = InternalIO.glfwGetProcAddress(name); - if (ret == default) - { + IntPtr ret = InternalIO.glfwGetProcAddress( name ); + if( ret == default ) { InternalIO.InternalAppendLog( - $"Cannot load OpenGL api called {name}, this api may not exist or supported."); + $"Cannot load OpenGL api called {name}, this api may not exist or supported." ); return ret; } return ret; } /// - /// Load all supported OpenGL APIs and bind them to given . + /// Load all supported OpenGL APIs and bind them to given . /// - /// The handle to current OpenGL viewPortDisplay - public static unsafe void LoadOpenGLApiTo(IntPtr contextHandle) + /// The handle to current OpenGL viewPortDisplay + public static unsafe void LoadOpenGLApiTo( IntPtr contextHandle ) { - OpenglContext* context = (OpenglContext*)contextHandle; + OpenglContext* context = ( OpenglContext* )contextHandle; delegate* loader = &InternalIO.glfwGetProcAddress; - if ((IntPtr)context->glGetString != IntPtr.Zero) - { + if( ( IntPtr )context->glGetString != IntPtr.Zero ) { return; } - IntPtr proc = loader("glGetString"); - if (proc == IntPtr.Zero) - { -#if DEBUG - Console.WriteLine("Cannot load GL."); -#endif - throw new Exception("Cannot load gl"); + IntPtr proc = loader( "glGetString" ); + if( proc == IntPtr.Zero ) { + #if DEBUG + Console.WriteLine( "Cannot load GL." ); + #endif + throw new Exception( "Cannot load gl" ); } - context->glGetString = (delegate*)proc; + context->glGetString = ( delegate* )proc; string coreVersion; - if (context->glGetString(glVersion) == IntPtr.Zero) - { - InternalIO.InternalWriteLog("Failed to call glGetString", LogType.Error); + if( context->glGetString( glVersion ) == IntPtr.Zero ) { + InternalIO.InternalWriteLog( + "Failed to call glGetString", LogType.Error ); } - coreVersion = Marshal.PtrToStringAnsi(context->glGetString(glVersion)) ?? string.Empty; + coreVersion = Marshal.PtrToStringAnsi( + context->glGetString( glVersion ) ) ?? + string.Empty; - foreach (string branch in glBranch) - { - if (coreVersion.Contains(branch)) - { - coreVersion.Replace(branch, string.Empty); + foreach( string branch in glBranch ) { + if( coreVersion.Contains( branch ) ) { + coreVersion.Replace( branch, string.Empty ); } } - string[] versionSep = coreVersion!.Split('.'); - int majorVersion = int.Parse(versionSep[0]); - int minorVersion = int.Parse(versionSep[1]); - CheckCoreVersion(majorVersion, minorVersion); + string[] versionSep = coreVersion!.Split( '.' ); + int majorVersion = int.Parse( versionSep[ 0 ] ); + int minorVersion = int.Parse( versionSep[ 1 ] ); + CheckCoreVersion( majorVersion, minorVersion ); - try - { + try { #region load_core_gl - LoadGLcore10(context, loader); - LoadGLcore11(context, loader); - LoadGLcore12(context, loader); - LoadGLcore13(context, loader); - LoadGLcore14(context, loader); - LoadGLcore15(context, loader); - LoadGLcore20(context, loader); - LoadGLcore21(context, loader); - LoadGLcore30(context, loader); - LoadGLcore31(context, loader); - LoadGLcore32(context, loader); - LoadGLcore33(context, loader); - LoadGLcore40(context, loader); - LoadGLcore41(context, loader); - LoadGLcore42(context, loader); - LoadGLcore43(context, loader); - LoadGLcore44(context, loader); - LoadGLcore45(context, loader); - LoadGLcore46(context, loader); + LoadGLcore10( context, loader ); + LoadGLcore11( context, loader ); + LoadGLcore12( context, loader ); + LoadGLcore13( context, loader ); + LoadGLcore14( context, loader ); + LoadGLcore15( context, loader ); + LoadGLcore20( context, loader ); + LoadGLcore21( context, loader ); + LoadGLcore30( context, loader ); + LoadGLcore31( context, loader ); + LoadGLcore32( context, loader ); + LoadGLcore33( context, loader ); + LoadGLcore40( context, loader ); + LoadGLcore41( context, loader ); + LoadGLcore42( context, loader ); + LoadGLcore43( context, loader ); + LoadGLcore44( context, loader ); + LoadGLcore45( context, loader ); + LoadGLcore46( context, loader ); #endregion load_core_gl } - catch (Exception ex) - { - if (ex.Message != "Final Version") - { + catch( Exception ex ) { + if( ex.Message != "Final Version" ) { throw; } } uint code = context->glGetError(); - Console.WriteLine(code); - if (code != 0) - { - throw new GlExecutionException(code); + Console.WriteLine( code ); + if( code != 0 ) { + throw new GlExecutionException( code ); } int extensionCount; - context->glGetIntegerv(GLconst.NUM_EXTENSIONS, &extensionCount); - if (extensionCount == 0) - { - InternalIO.InternalWriteLog("No supported OpenGL extensions are found.", LogType.Info); + context->glGetIntegerv( GLconst.NUM_EXTENSIONS, &extensionCount ); + if( extensionCount == 0 ) { + InternalIO.InternalWriteLog( + "No supported OpenGL extensions are found.", LogType.Info ); return; } List extensions = new List(); - for (uint i = 0; i < extensionCount; i++) - { - byte* strPtr = context->glGetStringi(GLconst.EXTENSIONS, i); - extensions.Add(Marshal.PtrToStringAnsi((IntPtr)strPtr)); + for( uint i = 0; i < extensionCount; i++ ) { + byte* strPtr = context->glGetStringi( GLconst.EXTENSIONS, i ); + extensions.Add( Marshal.PtrToStringAnsi( ( IntPtr )strPtr ) ); } - InternalIO.InternalWriteLog($"{$"Find OpenGL extensions:"}{Environment.NewLine}{($"{string.Join(';', extensions)}")}", - LogType.Info); + InternalIO.InternalWriteLog( + $"{$"Find OpenGL extensions:"}{Environment.NewLine}{($"{string.Join(';', extensions)}")}", + LogType.Info ); #region checkGLextensions - if (extensions.Contains("gl_4DFX_multisample")) { _4DFX_multisample = true; extensions.Remove("gl_4DFX_multisample"); } - if (extensions.Contains("gl_3DFX_tbuffer")) { _3DFX_tbuffer = true; extensions.Remove("gl_3DFX_tbuffer"); } - if (extensions.Contains("gl_3DFX_texture_compression_FXT1")) { _3DFX_texture_compression_FXT1 = true; extensions.Remove("gl_3DFX_texture_compression_FXT1"); } - if (extensions.Contains("gl_AMD_blend_minmax_factor")) { AMD_blend_minmax_factor = true; extensions.Remove("glAMD_blend_minmax_factor"); } - if (extensions.Contains("gl_AMD_conservative_depth")) { AMD_conservative_depth = true; extensions.Remove("glAMD_conservative_depth"); } - if (extensions.Contains("gl_AMD_debug_output")) { AMD_debug_output = true; extensions.Remove("glAMD_debug_output"); } - if (extensions.Contains("gl_AMD_depth_clamp_separate")) { AMD_depth_clamp_separate = true; extensions.Remove("glAMD_depth_clamp_separate"); } - if (extensions.Contains("gl_AMD_draw_buffers_blend")) { AMD_draw_buffers_blend = true; extensions.Remove("glAMD_draw_buffers_blend"); } - if (extensions.Contains("gl_AMD_framebuffer_multisample_advanced")) { AMD_framebuffer_multisample_advanced = true; extensions.Remove("glAMD_framebuffer_multisample_advanced"); } - if (extensions.Contains("gl_AMD_framebuffer_sample_positions")) { AMD_framebuffer_sample_positions = true; extensions.Remove("glAMD_framebuffer_sample_positions"); } - if (extensions.Contains("gl_AMD_gcn_shader")) { AMD_gcn_shader = true; extensions.Remove("glAMD_gcn_shader"); } - if (extensions.Contains("gl_AMD_gpu_shader_half_float")) { AMD_gpu_shader_half_float = true; extensions.Remove("glAMD_gpu_shader_half_float"); } - if (extensions.Contains("gl_AMD_gpu_shader_int16")) { AMD_gpu_shader_int16 = true; extensions.Remove("glAMD_gpu_shader_int16"); } - if (extensions.Contains("gl_AMD_gpu_shader_int64")) { AMD_gpu_shader_int64 = true; extensions.Remove("glAMD_gpu_shader_int64"); } - if (extensions.Contains("gl_AMD_interleaved_elements")) { AMD_interleaved_elements = true; extensions.Remove("glAMD_interleaved_elements"); } - if (extensions.Contains("gl_AMD_multi_draw_indirect")) { AMD_multi_draw_indirect = true; extensions.Remove("glAMD_multi_draw_indirect"); } - if (extensions.Contains("gl_AMD_name_gen_delete")) { AMD_name_gen_delete = true; extensions.Remove("glAMD_name_gen_delete"); } - if (extensions.Contains("gl_AMD_occlusion_query_event")) { AMD_occlusion_query_event = true; extensions.Remove("glAMD_occlusion_query_event"); } - if (extensions.Contains("gl_AMD_performance_monitor")) { AMD_performance_monitor = true; extensions.Remove("glAMD_performance_monitor"); } - if (extensions.Contains("gl_AMD_pinned_memory")) { AMD_pinned_memory = true; extensions.Remove("glAMD_pinned_memory"); } - if (extensions.Contains("gl_AMD_query_buffer_object")) { AMD_query_buffer_object = true; extensions.Remove("glAMD_query_buffer_object"); } - if (extensions.Contains("gl_AMD_sample_positions")) { AMD_sample_positions = true; extensions.Remove("glAMD_sample_positions"); } - if (extensions.Contains("gl_AMD_seamless_cubemap_per_texture")) { AMD_seamless_cubemap_per_texture = true; extensions.Remove("glAMD_seamless_cubemap_per_texture"); } - if (extensions.Contains("gl_AMD_shader_atomic_counter_ops")) { AMD_shader_atomic_counter_ops = true; extensions.Remove("glAMD_shader_atomic_counter_ops"); } - if (extensions.Contains("gl_AMD_shader_ballot")) { AMD_shader_ballot = true; extensions.Remove("glAMD_shader_ballot"); } - if (extensions.Contains("gl_AMD_shader_explicit_vertex_parameter")) { AMD_shader_explicit_vertex_parameter = true; extensions.Remove("glAMD_shader_explicit_vertex_parameter"); } - if (extensions.Contains("gl_AMD_shader_gpu_shader_half_float_fetch")) { AMD_shader_gpu_shader_half_float_fetch = true; extensions.Remove("glAMD_shader_gpu_shader_half_float_fetch"); } - if (extensions.Contains("gl_AMD_shader_image_load_store_lod")) { AMD_shader_image_load_store_lod = true; extensions.Remove("glAMD_shader_image_load_store_lod"); } - if (extensions.Contains("gl_AMD_shader_stencil_export")) { AMD_shader_stencil_export = true; extensions.Remove("glAMD_shader_stencil_export"); } - if (extensions.Contains("gl_AMD_shader_trinary_minmax")) { AMD_shader_trinary_minmax = true; extensions.Remove("glAMD_shader_trinary_minmax"); } - if (extensions.Contains("gl_AMD_sparse_texture")) { AMD_sparse_texture = true; extensions.Remove("glAMD_sparse_texture"); } - if (extensions.Contains("gl_AMD_stencil_operation_extended")) { AMD_stencil_operation_extended = true; extensions.Remove("glAMD_stencil_operation_extended"); } - if (extensions.Contains("gl_AMD_texture_gather_bias_lod")) { AMD_texture_gather_bias_lod = true; extensions.Remove("glAMD_texture_gather_bias_lod"); } - if (extensions.Contains("gl_AMD_texture_texture4")) { AMD_texture_texture4 = true; extensions.Remove("glAMD_texture_texture4"); } - if (extensions.Contains("gl_AMD_transform_feedback3_lines_triangles")) { AMD_transform_feedback3_lines_triangles = true; extensions.Remove("glAMD_transform_feedback3_lines_triangles"); } - if (extensions.Contains("gl_AMD_transform_feedback4")) { AMD_transform_feedback4 = true; extensions.Remove("glAMD_transform_feedback4"); } - if (extensions.Contains("gl_AMD_vertex_shader_layer")) { AMD_vertex_shader_layer = true; extensions.Remove("glAMD_vertex_shader_layer"); } - if (extensions.Contains("gl_AMD_vertex_shader_tessellator")) { AMD_vertex_shader_tessellator = true; extensions.Remove("glAMD_vertex_shader_tessellator"); } - if (extensions.Contains("gl_AMD_vertex_shader_viewport_index")) { AMD_vertex_shader_viewport_index = true; extensions.Remove("glAMD_vertex_shader_viewport_index"); } - if (extensions.Contains("gl_APPLE_aux_depth_stencil")) { APPLE_aux_depth_stencil = true; extensions.Remove("glAPPLE_aux_depth_stencil"); } - if (extensions.Contains("gl_APPLE_client_storage")) { APPLE_client_storage = true; extensions.Remove("glAPPLE_client_storage"); } - if (extensions.Contains("gl_APPLE_element_array")) { APPLE_element_array = true; extensions.Remove("glAPPLE_element_array"); } - if (extensions.Contains("gl_APPLE_fence")) { APPLE_fence = true; extensions.Remove("glAPPLE_fence"); } - if (extensions.Contains("gl_APPLE_float_pixels")) { APPLE_float_pixels = true; extensions.Remove("glAPPLE_float_pixels"); } - if (extensions.Contains("gl_APPLE_flush_buffer_range")) { APPLE_flush_buffer_range = true; extensions.Remove("glAPPLE_flush_buffer_range"); } - if (extensions.Contains("gl_APPLE_object_purgeable")) { APPLE_object_purgeable = true; extensions.Remove("glAPPLE_object_purgeable"); } - if (extensions.Contains("gl_APPLE_rgb_422")) { APPLE_rgb_422 = true; extensions.Remove("glAPPLE_rgb_422"); } - if (extensions.Contains("gl_APPLE_row_bytes")) { APPLE_row_bytes = true; extensions.Remove("glAPPLE_row_bytes"); } - if (extensions.Contains("gl_APPLE_specular_vector")) { APPLE_specular_vector = true; extensions.Remove("glAPPLE_specular_vector"); } - if (extensions.Contains("gl_APPLE_texture_range")) { APPLE_texture_range = true; extensions.Remove("glAPPLE_texture_range"); } - if (extensions.Contains("gl_APPLE_transform_hint")) { APPLE_transform_hint = true; extensions.Remove("glAPPLE_transform_hint"); } - if (extensions.Contains("gl_APPLE_vertex_array_object")) { APPLE_vertex_array_object = true; extensions.Remove("glAPPLE_vertex_array_object"); } - if (extensions.Contains("gl_APPLE_vertex_array_range")) { APPLE_vertex_array_range = true; extensions.Remove("glAPPLE_vertex_array_range"); } - if (extensions.Contains("gl_APPLE_vertex_program_evaluators")) { APPLE_vertex_program_evaluators = true; extensions.Remove("glAPPLE_vertex_program_evaluators"); } - if (extensions.Contains("gl_APPLE_ycbcr_422")) { APPLE_ycbcr_422 = true; extensions.Remove("glAPPLE_ycbcr_422"); } - if (extensions.Contains("gl_ARB_ES2_compatibility")) { ARB_ES2_compatibility = true; extensions.Remove("glARB_ES2_compatibility"); } - if (extensions.Contains("gl_ARB_ES3_1_compatibility")) { ARB_ES3_1_compatibility = true; extensions.Remove("glARB_ES3_1_compatibility"); } - if (extensions.Contains("gl_ARB_ES3_2_compatibility")) { ARB_ES3_2_compatibility = true; extensions.Remove("glARB_ES3_2_compatibility"); } - if (extensions.Contains("gl_ARB_ES3_compatibility")) { ARB_ES3_compatibility = true; extensions.Remove("glARB_ES3_compatibility"); } - if (extensions.Contains("gl_ARB_arrays_of_arrays")) { ARB_arrays_of_arrays = true; extensions.Remove("glARB_arrays_of_arrays"); } - if (extensions.Contains("gl_ARB_base_instance")) { ARB_base_instance = true; extensions.Remove("glARB_base_instance"); } - if (extensions.Contains("gl_ARB_bindless_texture")) { ARB_bindless_texture = true; extensions.Remove("glARB_bindless_texture"); } - if (extensions.Contains("gl_ARB_blend_func_extended")) { ARB_blend_func_extended = true; extensions.Remove("glARB_blend_func_extended"); } - if (extensions.Contains("gl_ARB_buffer_storage")) { ARB_buffer_storage = true; extensions.Remove("glARB_buffer_storage"); } - if (extensions.Contains("gl_ARB_cl_event")) { ARB_cl_event = true; extensions.Remove("glARB_cl_event"); } - if (extensions.Contains("gl_ARB_clear_buffer_object")) { ARB_clear_buffer_object = true; extensions.Remove("glARB_clear_buffer_object"); } - if (extensions.Contains("gl_ARB_clear_texture")) { ARB_clear_texture = true; extensions.Remove("glARB_clear_texture"); } - if (extensions.Contains("gl_ARB_clip_control")) { ARB_clip_control = true; extensions.Remove("glARB_clip_control"); } - if (extensions.Contains("gl_ARB_color_buffer_float")) { ARB_color_buffer_float = true; extensions.Remove("glARB_color_buffer_float"); } - if (extensions.Contains("gl_ARB_compatibility")) { ARB_compatibility = true; extensions.Remove("glARB_compatibility"); } - if (extensions.Contains("gl_ARB_compressed_texture_pixel_storage")) { ARB_compressed_texture_pixel_storage = true; extensions.Remove("glARB_compressed_texture_pixel_storage"); } - if (extensions.Contains("gl_ARB_compute_shader")) { ARB_compute_shader = true; extensions.Remove("glARB_compute_shader"); } - if (extensions.Contains("gl_ARB_compute_variable_group_size")) { ARB_compute_variable_group_size = true; extensions.Remove("glARB_compute_variable_group_size"); } - if (extensions.Contains("gl_ARB_conditional_render_inverted")) { ARB_conditional_render_inverted = true; extensions.Remove("glARB_conditional_render_inverted"); } - if (extensions.Contains("gl_ARB_conservative_depth")) { ARB_conservative_depth = true; extensions.Remove("glARB_conservative_depth"); } - if (extensions.Contains("gl_ARB_copy_buffer")) { ARB_copy_buffer = true; extensions.Remove("glARB_copy_buffer"); } - if (extensions.Contains("gl_ARB_copy_image")) { ARB_copy_image = true; extensions.Remove("glARB_copy_image"); } - if (extensions.Contains("gl_ARB_cull_distance")) { ARB_cull_distance = true; extensions.Remove("glARB_cull_distance"); } - if (extensions.Contains("gl_ARB_debug_output")) { ARB_debug_output = true; extensions.Remove("glARB_debug_output"); } - if (extensions.Contains("gl_ARB_depth_buffer_float")) { ARB_depth_buffer_float = true; extensions.Remove("glARB_depth_buffer_float"); } - if (extensions.Contains("gl_ARB_depth_clamp")) { ARB_depth_clamp = true; extensions.Remove("glARB_depth_clamp"); } - if (extensions.Contains("gl_ARB_depth_texture")) { ARB_depth_texture = true; extensions.Remove("glARB_depth_texture"); } - if (extensions.Contains("gl_ARB_derivative_control")) { ARB_derivative_control = true; extensions.Remove("glARB_derivative_control"); } - if (extensions.Contains("gl_ARB_direct_state_access")) { ARB_direct_state_access = true; extensions.Remove("glARB_direct_state_access"); } - if (extensions.Contains("gl_ARB_draw_buffers")) { ARB_draw_buffers = true; extensions.Remove("glARB_draw_buffers"); } - if (extensions.Contains("gl_ARB_draw_buffers_blend")) { ARB_draw_buffers_blend = true; extensions.Remove("glARB_draw_buffers_blend"); } - if (extensions.Contains("gl_ARB_draw_elements_base_vertex")) { ARB_draw_elements_base_vertex = true; extensions.Remove("glARB_draw_elements_base_vertex"); } - if (extensions.Contains("gl_ARB_draw_indirect")) { ARB_draw_indirect = true; extensions.Remove("glARB_draw_indirect"); } - if (extensions.Contains("gl_ARB_draw_instanced")) { ARB_draw_instanced = true; extensions.Remove("glARB_draw_instanced"); } - if (extensions.Contains("gl_ARB_enhanced_layouts")) { ARB_enhanced_layouts = true; extensions.Remove("glARB_enhanced_layouts"); } - if (extensions.Contains("gl_ARB_explicit_attrib_location")) { ARB_explicit_attrib_location = true; extensions.Remove("glARB_explicit_attrib_location"); } - if (extensions.Contains("gl_ARB_explicit_uniform_location")) { ARB_explicit_uniform_location = true; extensions.Remove("glARB_explicit_uniform_location"); } - if (extensions.Contains("gl_ARB_fragment_coord_conventions")) { ARB_fragment_coord_conventions = true; extensions.Remove("glARB_fragment_coord_conventions"); } - if (extensions.Contains("gl_ARB_fragment_layer_viewport")) { ARB_fragment_layer_viewport = true; extensions.Remove("glARB_fragment_layer_viewport"); } - if (extensions.Contains("gl_ARB_fragment_program")) { ARB_fragment_program = true; extensions.Remove("glARB_fragment_program"); } - if (extensions.Contains("gl_ARB_fragment_program_shadow")) { ARB_fragment_program_shadow = true; extensions.Remove("glARB_fragment_program_shadow"); } - if (extensions.Contains("gl_ARB_fragment_shader")) { ARB_fragment_shader = true; extensions.Remove("glARB_fragment_shader"); } - if (extensions.Contains("gl_ARB_fragment_shader_interlock")) { ARB_fragment_shader_interlock = true; extensions.Remove("glARB_fragment_shader_interlock"); } - if (extensions.Contains("gl_ARB_framebuffer_no_attachments")) { ARB_framebuffer_no_attachments = true; extensions.Remove("glARB_framebuffer_no_attachments"); } - if (extensions.Contains("gl_ARB_framebuffer_object")) { ARB_framebuffer_object = true; extensions.Remove("glARB_framebuffer_object"); } - if (extensions.Contains("gl_ARB_framebuffer_sRGB")) { ARB_framebuffer_sRGB = true; extensions.Remove("glARB_framebuffer_sRGB"); } - if (extensions.Contains("gl_ARB_geometry_shader4")) { ARB_geometry_shader4 = true; extensions.Remove("glARB_geometry_shader4"); } - if (extensions.Contains("gl_ARB_get_program_binary")) { ARB_get_program_binary = true; extensions.Remove("glARB_get_program_binary"); } - if (extensions.Contains("gl_ARB_get_texture_sub_image")) { ARB_get_texture_sub_image = true; extensions.Remove("glARB_get_texture_sub_image"); } - if (extensions.Contains("gl_ARB_gl_spirv")) { ARB_gl_spirv = true; extensions.Remove("glARB_gl_spirv"); } - if (extensions.Contains("gl_ARB_gpu_shader5")) { ARB_gpu_shader5 = true; extensions.Remove("glARB_gpu_shader5"); } - if (extensions.Contains("gl_ARB_gpu_shader_fp64")) { ARB_gpu_shader_fp64 = true; extensions.Remove("glARB_gpu_shader_fp64"); } - if (extensions.Contains("gl_ARB_gpu_shader_int64")) { ARB_gpu_shader_int64 = true; extensions.Remove("glARB_gpu_shader_int64"); } - if (extensions.Contains("gl_ARB_half_float_pixel")) { ARB_half_float_pixel = true; extensions.Remove("glARB_half_float_pixel"); } - if (extensions.Contains("gl_ARB_half_float_vertex")) { ARB_half_float_vertex = true; extensions.Remove("glARB_half_float_vertex"); } - if (extensions.Contains("gl_ARB_imaging")) { ARB_imaging = true; extensions.Remove("glARB_imaging"); } - if (extensions.Contains("gl_ARB_indirect_parameters")) { ARB_indirect_parameters = true; extensions.Remove("glARB_indirect_parameters"); } - if (extensions.Contains("gl_ARB_instanced_arrays")) { ARB_instanced_arrays = true; extensions.Remove("glARB_instanced_arrays"); } - if (extensions.Contains("gl_ARB_internalformat_query")) { ARB_internalformat_query = true; extensions.Remove("glARB_internalformat_query"); } - if (extensions.Contains("gl_ARB_internalformat_query2")) { ARB_internalformat_query2 = true; extensions.Remove("glARB_internalformat_query2"); } - if (extensions.Contains("gl_ARB_invalidate_subdata")) { ARB_invalidate_subdata = true; extensions.Remove("glARB_invalidate_subdata"); } - if (extensions.Contains("gl_ARB_map_buffer_alignment")) { ARB_map_buffer_alignment = true; extensions.Remove("glARB_map_buffer_alignment"); } - if (extensions.Contains("gl_ARB_map_buffer_range")) { ARB_map_buffer_range = true; extensions.Remove("glARB_map_buffer_range"); } - if (extensions.Contains("gl_ARB_matrix_palette")) { ARB_matrix_palette = true; extensions.Remove("glARB_matrix_palette"); } - if (extensions.Contains("gl_ARB_multi_bind")) { ARB_multi_bind = true; extensions.Remove("glARB_multi_bind"); } - if (extensions.Contains("gl_ARB_multi_draw_indirect")) { ARB_multi_draw_indirect = true; extensions.Remove("glARB_multi_draw_indirect"); } - if (extensions.Contains("gl_ARB_multisample")) { ARB_multisample = true; extensions.Remove("glARB_multisample"); } - if (extensions.Contains("gl_ARB_multitexture")) { ARB_multitexture = true; extensions.Remove("glARB_multitexture"); } - if (extensions.Contains("gl_ARB_occlusion_query")) { ARB_occlusion_query = true; extensions.Remove("glARB_occlusion_query"); } - if (extensions.Contains("gl_ARB_occlusion_query2")) { ARB_occlusion_query2 = true; extensions.Remove("glARB_occlusion_query2"); } - if (extensions.Contains("gl_ARB_parallel_shader_compile")) { ARB_parallel_shader_compile = true; extensions.Remove("glARB_parallel_shader_compile"); } - if (extensions.Contains("gl_ARB_pipeline_statistics_query")) { ARB_pipeline_statistics_query = true; extensions.Remove("glARB_pipeline_statistics_query"); } - if (extensions.Contains("gl_ARB_pixel_buffer_object")) { ARB_pixel_buffer_object = true; extensions.Remove("glARB_pixel_buffer_object"); } - if (extensions.Contains("gl_ARB_point_parameters")) { ARB_point_parameters = true; extensions.Remove("glARB_point_parameters"); } - if (extensions.Contains("gl_ARB_point_sprite")) { ARB_point_sprite = true; extensions.Remove("glARB_point_sprite"); } - if (extensions.Contains("gl_ARB_polygon_offset_clamp")) { ARB_polygon_offset_clamp = true; extensions.Remove("glARB_polygon_offset_clamp"); } - if (extensions.Contains("gl_ARB_post_depth_coverage")) { ARB_post_depth_coverage = true; extensions.Remove("glARB_post_depth_coverage"); } - if (extensions.Contains("gl_ARB_program_interface_query")) { ARB_program_interface_query = true; extensions.Remove("glARB_program_interface_query"); } - if (extensions.Contains("gl_ARB_provoking_vertex")) { ARB_provoking_vertex = true; extensions.Remove("glARB_provoking_vertex"); } - if (extensions.Contains("gl_ARB_query_buffer_object")) { ARB_query_buffer_object = true; extensions.Remove("glARB_query_buffer_object"); } - if (extensions.Contains("gl_ARB_robust_buffer_access_behavior")) { ARB_robust_buffer_access_behavior = true; extensions.Remove("glARB_robust_buffer_access_behavior"); } - if (extensions.Contains("gl_ARB_robustness")) { ARB_robustness = true; extensions.Remove("glARB_robustness"); } - if (extensions.Contains("gl_ARB_robustness_isolation")) { ARB_robustness_isolation = true; extensions.Remove("glARB_robustness_isolation"); } - if (extensions.Contains("gl_ARB_sample_locations")) { ARB_sample_locations = true; extensions.Remove("glARB_sample_locations"); } - if (extensions.Contains("gl_ARB_sample_shading")) { ARB_sample_shading = true; extensions.Remove("glARB_sample_shading"); } - if (extensions.Contains("gl_ARB_sampler_objects")) { ARB_sampler_objects = true; extensions.Remove("glARB_sampler_objects"); } - if (extensions.Contains("gl_ARB_seamless_cube_map")) { ARB_seamless_cube_map = true; extensions.Remove("glARB_seamless_cube_map"); } - if (extensions.Contains("gl_ARB_seamless_cubemap_per_texture")) { ARB_seamless_cubemap_per_texture = true; extensions.Remove("glARB_seamless_cubemap_per_texture"); } - if (extensions.Contains("gl_ARB_separate_shader_objects")) { ARB_separate_shader_objects = true; extensions.Remove("glARB_separate_shader_objects"); } - if (extensions.Contains("gl_ARB_shader_atomic_counter_ops")) { ARB_shader_atomic_counter_ops = true; extensions.Remove("glARB_shader_atomic_counter_ops"); } - if (extensions.Contains("gl_ARB_shader_atomic_counters")) { ARB_shader_atomic_counters = true; extensions.Remove("glARB_shader_atomic_counters"); } - if (extensions.Contains("gl_ARB_shader_ballot")) { ARB_shader_ballot = true; extensions.Remove("glARB_shader_ballot"); } - if (extensions.Contains("gl_ARB_shader_bit_encoding")) { ARB_shader_bit_encoding = true; extensions.Remove("glARB_shader_bit_encoding"); } - if (extensions.Contains("gl_ARB_shader_clock")) { ARB_shader_clock = true; extensions.Remove("glARB_shader_clock"); } - if (extensions.Contains("gl_ARB_shader_draw_parameters")) { ARB_shader_draw_parameters = true; extensions.Remove("glARB_shader_draw_parameters"); } - if (extensions.Contains("gl_ARB_shader_group_vote")) { ARB_shader_group_vote = true; extensions.Remove("glARB_shader_group_vote"); } - if (extensions.Contains("gl_ARB_shader_image_load_store")) { ARB_shader_image_load_store = true; extensions.Remove("glARB_shader_image_load_store"); } - if (extensions.Contains("gl_ARB_shader_image_size")) { ARB_shader_image_size = true; extensions.Remove("glARB_shader_image_size"); } - if (extensions.Contains("gl_ARB_shader_objects")) { ARB_shader_objects = true; extensions.Remove("glARB_shader_objects"); } - if (extensions.Contains("gl_ARB_shader_precision")) { ARB_shader_precision = true; extensions.Remove("glARB_shader_precision"); } - if (extensions.Contains("gl_ARB_shader_stencil_export")) { ARB_shader_stencil_export = true; extensions.Remove("glARB_shader_stencil_export"); } - if (extensions.Contains("gl_ARB_shader_storage_buffer_object")) { ARB_shader_storage_buffer_object = true; extensions.Remove("glARB_shader_storage_buffer_object"); } - if (extensions.Contains("gl_ARB_shader_subroutine")) { ARB_shader_subroutine = true; extensions.Remove("glARB_shader_subroutine"); } - if (extensions.Contains("gl_ARB_shader_texture_image_samples")) { ARB_shader_texture_image_samples = true; extensions.Remove("glARB_shader_texture_image_samples"); } - if (extensions.Contains("gl_ARB_shader_texture_lod")) { ARB_shader_texture_lod = true; extensions.Remove("glARB_shader_texture_lod"); } - if (extensions.Contains("gl_ARB_shader_viewport_layer_array")) { ARB_shader_viewport_layer_array = true; extensions.Remove("glARB_shader_viewport_layer_array"); } - if (extensions.Contains("gl_ARB_shading_language_100")) { ARB_shading_language_100 = true; extensions.Remove("glARB_shading_language_100"); } - if (extensions.Contains("gl_ARB_shading_language_420pack")) { ARB_shading_language_420pack = true; extensions.Remove("glARB_shading_language_420pack"); } - if (extensions.Contains("gl_ARB_shading_language_include")) { ARB_shading_language_include = true; extensions.Remove("glARB_shading_language_include"); } - if (extensions.Contains("gl_ARB_shading_language_packing")) { ARB_shading_language_packing = true; extensions.Remove("glARB_shading_language_packing"); } - if (extensions.Contains("gl_ARB_shadow")) { ARB_shadow = true; extensions.Remove("glARB_shadow"); } - if (extensions.Contains("gl_ARB_shadow_ambient")) { ARB_shadow_ambient = true; extensions.Remove("glARB_shadow_ambient"); } - if (extensions.Contains("gl_ARB_sparse_buffer")) { ARB_sparse_buffer = true; extensions.Remove("glARB_sparse_buffer"); } - if (extensions.Contains("gl_ARB_sparse_texture")) { ARB_sparse_texture = true; extensions.Remove("glARB_sparse_texture"); } - if (extensions.Contains("gl_ARB_sparse_texture2")) { ARB_sparse_texture2 = true; extensions.Remove("glARB_sparse_texture2"); } - if (extensions.Contains("gl_ARB_sparse_texture_clamp")) { ARB_sparse_texture_clamp = true; extensions.Remove("glARB_sparse_texture_clamp"); } - if (extensions.Contains("gl_ARB_spirv_extensions")) { ARB_spirv_extensions = true; extensions.Remove("glARB_spirv_extensions"); } - if (extensions.Contains("gl_ARB_stencil_texturing")) { ARB_stencil_texturing = true; extensions.Remove("glARB_stencil_texturing"); } - if (extensions.Contains("gl_ARB_sync")) { ARB_sync = true; extensions.Remove("glARB_sync"); } - if (extensions.Contains("gl_ARB_tessellation_shader")) { ARB_tessellation_shader = true; extensions.Remove("glARB_tessellation_shader"); } - if (extensions.Contains("gl_ARB_texture_barrier")) { ARB_texture_barrier = true; extensions.Remove("glARB_texture_barrier"); } - if (extensions.Contains("gl_ARB_texture_border_clamp")) { ARB_texture_border_clamp = true; extensions.Remove("glARB_texture_border_clamp"); } - if (extensions.Contains("gl_ARB_texture_buffer_object")) { ARB_texture_buffer_object = true; extensions.Remove("glARB_texture_buffer_object"); } - if (extensions.Contains("gl_ARB_texture_buffer_object_rgb32")) { ARB_texture_buffer_object_rgb32 = true; extensions.Remove("glARB_texture_buffer_object_rgb32"); } - if (extensions.Contains("gl_ARB_texture_buffer_range")) { ARB_texture_buffer_range = true; extensions.Remove("glARB_texture_buffer_range"); } - if (extensions.Contains("gl_ARB_texture_compression")) { ARB_texture_compression = true; extensions.Remove("glARB_texture_compression"); } - if (extensions.Contains("gl_ARB_texture_compression_bptc")) { ARB_texture_compression_bptc = true; extensions.Remove("glARB_texture_compression_bptc"); } - if (extensions.Contains("gl_ARB_texture_compression_rgtc")) { ARB_texture_compression_rgtc = true; extensions.Remove("glARB_texture_compression_rgtc"); } - if (extensions.Contains("gl_ARB_texture_cube_map")) { ARB_texture_cube_map = true; extensions.Remove("glARB_texture_cube_map"); } - if (extensions.Contains("gl_ARB_texture_cube_map_array")) { ARB_texture_cube_map_array = true; extensions.Remove("glARB_texture_cube_map_array"); } - if (extensions.Contains("gl_ARB_texture_env_add")) { ARB_texture_env_add = true; extensions.Remove("glARB_texture_env_add"); } - if (extensions.Contains("gl_ARB_texture_env_combine")) { ARB_texture_env_combine = true; extensions.Remove("glARB_texture_env_combine"); } - if (extensions.Contains("gl_ARB_texture_env_crossbar")) { ARB_texture_env_crossbar = true; extensions.Remove("glARB_texture_env_crossbar"); } - if (extensions.Contains("gl_ARB_texture_env_dot3")) { ARB_texture_env_dot3 = true; extensions.Remove("glARB_texture_env_dot3"); } - if (extensions.Contains("gl_ARB_texture_filter_anisotropic")) { ARB_texture_filter_anisotropic = true; extensions.Remove("glARB_texture_filter_anisotropic"); } - if (extensions.Contains("gl_ARB_texture_filter_minmax")) { ARB_texture_filter_minmax = true; extensions.Remove("glARB_texture_filter_minmax"); } - if (extensions.Contains("gl_ARB_texture_float")) { ARB_texture_float = true; extensions.Remove("glARB_texture_float"); } - if (extensions.Contains("gl_ARB_texture_gather")) { ARB_texture_gather = true; extensions.Remove("glARB_texture_gather"); } - if (extensions.Contains("gl_ARB_texture_mirror_clamp_to_edge")) { ARB_texture_mirror_clamp_to_edge = true; extensions.Remove("glARB_texture_mirror_clamp_to_edge"); } - if (extensions.Contains("gl_ARB_texture_mirrored_repeat")) { ARB_texture_mirrored_repeat = true; extensions.Remove("glARB_texture_mirrored_repeat"); } - if (extensions.Contains("gl_ARB_texture_multisample")) { ARB_texture_multisample = true; extensions.Remove("glARB_texture_multisample"); } - if (extensions.Contains("gl_ARB_texture_non_power_of_two")) { ARB_texture_non_power_of_two = true; extensions.Remove("glARB_texture_non_power_of_two"); } - if (extensions.Contains("gl_ARB_texture_query_levels")) { ARB_texture_query_levels = true; extensions.Remove("glARB_texture_query_levels"); } - if (extensions.Contains("gl_ARB_texture_query_lod")) { ARB_texture_query_lod = true; extensions.Remove("glARB_texture_query_lod"); } - if (extensions.Contains("gl_ARB_texture_rectangle")) { ARB_texture_rectangle = true; extensions.Remove("glARB_texture_rectangle"); } - if (extensions.Contains("gl_ARB_texture_rg")) { ARB_texture_rg = true; extensions.Remove("glARB_texture_rg"); } - if (extensions.Contains("gl_ARB_texture_rgb10_a2ui")) { ARB_texture_rgb10_a2ui = true; extensions.Remove("glARB_texture_rgb10_a2ui"); } - if (extensions.Contains("gl_ARB_texture_stencil8")) { ARB_texture_stencil8 = true; extensions.Remove("glARB_texture_stencil8"); } - if (extensions.Contains("gl_ARB_texture_storage")) { ARB_texture_storage = true; extensions.Remove("glARB_texture_storage"); } - if (extensions.Contains("gl_ARB_texture_storage_multisample")) { ARB_texture_storage_multisample = true; extensions.Remove("glARB_texture_storage_multisample"); } - if (extensions.Contains("gl_ARB_texture_swizzle")) { ARB_texture_swizzle = true; extensions.Remove("glARB_texture_swizzle"); } - if (extensions.Contains("gl_ARB_texture_view")) { ARB_texture_view = true; extensions.Remove("glARB_texture_view"); } - if (extensions.Contains("gl_ARB_timer_query")) { ARB_timer_query = true; extensions.Remove("glARB_timer_query"); } - if (extensions.Contains("gl_ARB_transform_feedback2")) { ARB_transform_feedback2 = true; extensions.Remove("glARB_transform_feedback2"); } - if (extensions.Contains("gl_ARB_transform_feedback3")) { ARB_transform_feedback3 = true; extensions.Remove("glARB_transform_feedback3"); } - if (extensions.Contains("gl_ARB_transform_feedback_instanced")) { ARB_transform_feedback_instanced = true; extensions.Remove("glARB_transform_feedback_instanced"); } - if (extensions.Contains("gl_ARB_transform_feedback_overflow_query")) { ARB_transform_feedback_overflow_query = true; extensions.Remove("glARB_transform_feedback_overflow_query"); } - if (extensions.Contains("gl_ARB_transpose_matrix")) { ARB_transpose_matrix = true; extensions.Remove("glARB_transpose_matrix"); } - if (extensions.Contains("gl_ARB_uniform_buffer_object")) { ARB_uniform_buffer_object = true; extensions.Remove("glARB_uniform_buffer_object"); } - if (extensions.Contains("gl_ARB_vertex_array_bgra")) { ARB_vertex_array_bgra = true; extensions.Remove("glARB_vertex_array_bgra"); } - if (extensions.Contains("gl_ARB_vertex_array_object")) { ARB_vertex_array_object = true; extensions.Remove("glARB_vertex_array_object"); } - if (extensions.Contains("gl_ARB_vertex_attrib_64bit")) { ARB_vertex_attrib_64bit = true; extensions.Remove("glARB_vertex_attrib_64bit"); } - if (extensions.Contains("gl_ARB_vertex_attrib_binding")) { ARB_vertex_attrib_binding = true; extensions.Remove("glARB_vertex_attrib_binding"); } - if (extensions.Contains("gl_ARB_vertex_blend")) { ARB_vertex_blend = true; extensions.Remove("glARB_vertex_blend"); } - if (extensions.Contains("gl_ARB_vertex_buffer_object")) { ARB_vertex_buffer_object = true; extensions.Remove("glARB_vertex_buffer_object"); } - if (extensions.Contains("gl_ARB_vertex_program")) { ARB_vertex_program = true; extensions.Remove("glARB_vertex_program"); } - if (extensions.Contains("gl_ARB_vertex_shader")) { ARB_vertex_shader = true; extensions.Remove("glARB_vertex_shader"); } - if (extensions.Contains("gl_ARB_vertex_type_10f_11f_11f_rev")) { ARB_vertex_type_10f_11f_11f_rev = true; extensions.Remove("glARB_vertex_type_10f_11f_11f_rev"); } - if (extensions.Contains("gl_ARB_vertex_type_2_10_10_10_rev")) { ARB_vertex_type_2_10_10_10_rev = true; extensions.Remove("glARB_vertex_type_2_10_10_10_rev"); } - if (extensions.Contains("gl_ARB_viewport_array")) { ARB_viewport_array = true; extensions.Remove("glARB_viewport_array"); } - if (extensions.Contains("gl_ARB_window_pos")) { ARB_window_pos = true; extensions.Remove("glARB_window_pos"); } - if (extensions.Contains("gl_ATI_draw_buffers")) { ATI_draw_buffers = true; extensions.Remove("glATI_draw_buffers"); } - if (extensions.Contains("gl_ATI_element_array")) { ATI_element_array = true; extensions.Remove("glATI_element_array"); } - if (extensions.Contains("gl_ATI_envmap_bumpmap")) { ATI_envmap_bumpmap = true; extensions.Remove("glATI_envmap_bumpmap"); } - if (extensions.Contains("gl_ATI_fragment_shader")) { ATI_fragment_shader = true; extensions.Remove("glATI_fragment_shader"); } - if (extensions.Contains("gl_ATI_map_object_buffer")) { ATI_map_object_buffer = true; extensions.Remove("glATI_map_object_buffer"); } - if (extensions.Contains("gl_ATI_meminfo")) { ATI_meminfo = true; extensions.Remove("glATI_meminfo"); } - if (extensions.Contains("gl_ATI_pixel_format_float")) { ATI_pixel_format_float = true; extensions.Remove("glATI_pixel_format_float"); } - if (extensions.Contains("gl_ATI_pn_triangles")) { ATI_pn_triangles = true; extensions.Remove("glATI_pn_triangles"); } - if (extensions.Contains("gl_ATI_separate_stencil")) { ATI_separate_stencil = true; extensions.Remove("glATI_separate_stencil"); } - if (extensions.Contains("gl_ATI_text_fragment_shader")) { ATI_text_fragment_shader = true; extensions.Remove("glATI_text_fragment_shader"); } - if (extensions.Contains("gl_ATI_texture_env_combine3")) { ATI_texture_env_combine3 = true; extensions.Remove("glATI_texture_env_combine3"); } - if (extensions.Contains("gl_ATI_texture_float")) { ATI_texture_float = true; extensions.Remove("glATI_texture_float"); } - if (extensions.Contains("gl_ATI_texture_mirror_once")) { ATI_texture_mirror_once = true; extensions.Remove("glATI_texture_mirror_once"); } - if (extensions.Contains("gl_ATI_vertex_array_object")) { ATI_vertex_array_object = true; extensions.Remove("glATI_vertex_array_object"); } - if (extensions.Contains("gl_ATI_vertex_attrib_array_object")) { ATI_vertex_attrib_array_object = true; extensions.Remove("glATI_vertex_attrib_array_object"); } - if (extensions.Contains("gl_ATI_vertex_streams")) { ATI_vertex_streams = true; extensions.Remove("glATI_vertex_streams"); } - if (extensions.Contains("gl_EXT_422_pixels")) { EXT_422_pixels = true; extensions.Remove("glEXT_422_pixels"); } - if (extensions.Contains("gl_EXT_EGL_image_storage")) { EXT_EGL_image_storage = true; extensions.Remove("glEXT_EGL_image_storage"); } - if (extensions.Contains("gl_EXT_EGL_sync")) { EXT_EGL_sync = true; extensions.Remove("glEXT_EGL_sync"); } - if (extensions.Contains("gl_EXT_abgr")) { EXT_abgr = true; extensions.Remove("glEXT_abgr"); } - if (extensions.Contains("gl_EXT_bgra")) { EXT_bgra = true; extensions.Remove("glEXT_bgra"); } - if (extensions.Contains("gl_EXT_bindable_uniform")) { EXT_bindable_uniform = true; extensions.Remove("glEXT_bindable_uniform"); } - if (extensions.Contains("gl_EXT_blend_color")) { EXT_blend_color = true; extensions.Remove("glEXT_blend_color"); } - if (extensions.Contains("gl_EXT_blend_equation_separate")) { EXT_blend_equation_separate = true; extensions.Remove("glEXT_blend_equation_separate"); } - if (extensions.Contains("gl_EXT_blend_func_separate")) { EXT_blend_func_separate = true; extensions.Remove("glEXT_blend_func_separate"); } - if (extensions.Contains("gl_EXT_blend_logic_op")) { EXT_blend_logic_op = true; extensions.Remove("glEXT_blend_logic_op"); } - if (extensions.Contains("gl_EXT_blend_minmax")) { EXT_blend_minmax = true; extensions.Remove("glEXT_blend_minmax"); } - if (extensions.Contains("gl_EXT_blend_subtract")) { EXT_blend_subtract = true; extensions.Remove("glEXT_blend_subtract"); } - if (extensions.Contains("gl_EXT_clip_volume_hint")) { EXT_clip_volume_hint = true; extensions.Remove("glEXT_clip_volume_hint"); } - if (extensions.Contains("gl_EXT_cmyka")) { EXT_cmyka = true; extensions.Remove("glEXT_cmyka"); } - if (extensions.Contains("gl_EXT_color_subtable")) { EXT_color_subtable = true; extensions.Remove("glEXT_color_subtable"); } - if (extensions.Contains("gl_EXT_compiled_vertex_array")) { EXT_compiled_vertex_array = true; extensions.Remove("glEXT_compiled_vertex_array"); } - if (extensions.Contains("gl_EXT_convolution")) { EXT_convolution = true; extensions.Remove("glEXT_convolution"); } - if (extensions.Contains("gl_EXT_coordinate_frame")) { EXT_coordinate_frame = true; extensions.Remove("glEXT_coordinate_frame"); } - if (extensions.Contains("gl_EXT_copy_texture")) { EXT_copy_texture = true; extensions.Remove("glEXT_copy_texture"); } - if (extensions.Contains("gl_EXT_cull_vertex")) { EXT_cull_vertex = true; extensions.Remove("glEXT_cull_vertex"); } - if (extensions.Contains("gl_EXT_debug_label")) { EXT_debug_label = true; extensions.Remove("glEXT_debug_label"); } - if (extensions.Contains("gl_EXT_debug_marker")) { EXT_debug_marker = true; extensions.Remove("glEXT_debug_marker"); } - if (extensions.Contains("gl_EXT_depth_bounds_test")) { EXT_depth_bounds_test = true; extensions.Remove("glEXT_depth_bounds_test"); } - if (extensions.Contains("gl_EXT_direct_state_access")) { EXT_direct_state_access = true; extensions.Remove("glEXT_direct_state_access"); } - if (extensions.Contains("gl_EXT_draw_buffers2")) { EXT_draw_buffers2 = true; extensions.Remove("glEXT_draw_buffers2"); } - if (extensions.Contains("gl_EXT_draw_instanced")) { EXT_draw_instanced = true; extensions.Remove("glEXT_draw_instanced"); } - if (extensions.Contains("gl_EXT_draw_range_elements")) { EXT_draw_range_elements = true; extensions.Remove("glEXT_draw_range_elements"); } - if (extensions.Contains("gl_EXT_external_buffer")) { EXT_external_buffer = true; extensions.Remove("glEXT_external_buffer"); } - if (extensions.Contains("gl_EXT_fog_coord")) { EXT_fog_coord = true; extensions.Remove("glEXT_fog_coord"); } - if (extensions.Contains("gl_EXT_framebuffer_blit")) { EXT_framebuffer_blit = true; extensions.Remove("glEXT_framebuffer_blit"); } - if (extensions.Contains("gl_EXT_framebuffer_blit_layers")) { EXT_framebuffer_blit_layers = true; extensions.Remove("glEXT_framebuffer_blit_layers"); } - if (extensions.Contains("gl_EXT_framebuffer_multisample")) { EXT_framebuffer_multisample = true; extensions.Remove("glEXT_framebuffer_multisample"); } - if (extensions.Contains("gl_EXT_framebuffer_multisample_blit_scaled")) { EXT_framebuffer_multisample_blit_scaled = true; extensions.Remove("glEXT_framebuffer_multisample_blit_scaled"); } - if (extensions.Contains("gl_EXT_framebuffer_object")) { EXT_framebuffer_object = true; extensions.Remove("glEXT_framebuffer_object"); } - if (extensions.Contains("gl_EXT_framebuffer_sRGB")) { EXT_framebuffer_sRGB = true; extensions.Remove("glEXT_framebuffer_sRGB"); } - if (extensions.Contains("gl_EXT_geometry_shader4")) { EXT_geometry_shader4 = true; extensions.Remove("glEXT_geometry_shader4"); } - if (extensions.Contains("gl_EXT_gpu_program_parameters")) { EXT_gpu_program_parameters = true; extensions.Remove("glEXT_gpu_program_parameters"); } - if (extensions.Contains("gl_EXT_gpu_shader4")) { EXT_gpu_shader4 = true; extensions.Remove("glEXT_gpu_shader4"); } - if (extensions.Contains("gl_EXT_histogram")) { EXT_histogram = true; extensions.Remove("glEXT_histogram"); } - if (extensions.Contains("gl_EXT_index_array_formats")) { EXT_index_array_formats = true; extensions.Remove("glEXT_index_array_formats"); } - if (extensions.Contains("gl_EXT_index_func")) { EXT_index_func = true; extensions.Remove("glEXT_index_func"); } - if (extensions.Contains("gl_EXT_index_material")) { EXT_index_material = true; extensions.Remove("glEXT_index_material"); } - if (extensions.Contains("gl_EXT_index_texture")) { EXT_index_texture = true; extensions.Remove("glEXT_index_texture"); } - if (extensions.Contains("gl_EXT_light_texture")) { EXT_light_texture = true; extensions.Remove("glEXT_light_texture"); } - if (extensions.Contains("gl_EXT_memory_object")) { EXT_memory_object = true; extensions.Remove("glEXT_memory_object"); } - if (extensions.Contains("gl_EXT_memory_object_fd")) { EXT_memory_object_fd = true; extensions.Remove("glEXT_memory_object_fd"); } - if (extensions.Contains("gl_EXT_memory_object_win32")) { EXT_memory_object_win32 = true; extensions.Remove("glEXT_memory_object_win32"); } - if (extensions.Contains("gl_EXT_misc_attribute")) { EXT_misc_attribute = true; extensions.Remove("glEXT_misc_attribute"); } - if (extensions.Contains("gl_EXT_multi_draw_arrays")) { EXT_multi_draw_arrays = true; extensions.Remove("glEXT_multi_draw_arrays"); } - if (extensions.Contains("gl_EXT_multisample")) { EXT_multisample = true; extensions.Remove("glEXT_multisample"); } - if (extensions.Contains("gl_EXT_multiview_tessellation_geometry_shader")) { EXT_multiview_tessellation_geometry_shader = true; extensions.Remove("glEXT_multiview_tessellation_geometry_shader"); } - if (extensions.Contains("gl_EXT_multiview_texture_multisample")) { EXT_multiview_texture_multisample = true; extensions.Remove("glEXT_multiview_texture_multisample"); } - if (extensions.Contains("gl_EXT_multiview_timer_query")) { EXT_multiview_timer_query = true; extensions.Remove("glEXT_multiview_timer_query"); } - if (extensions.Contains("gl_EXT_packed_depth_stencil")) { EXT_packed_depth_stencil = true; extensions.Remove("glEXT_packed_depth_stencil"); } - if (extensions.Contains("gl_EXT_packed_float")) { EXT_packed_float = true; extensions.Remove("glEXT_packed_float"); } - if (extensions.Contains("gl_EXT_packed_pixels")) { EXT_packed_pixels = true; extensions.Remove("glEXT_packed_pixels"); } - if (extensions.Contains("gl_EXT_paletted_texture")) { EXT_paletted_texture = true; extensions.Remove("glEXT_paletted_texture"); } - if (extensions.Contains("gl_EXT_pixel_buffer_object")) { EXT_pixel_buffer_object = true; extensions.Remove("glEXT_pixel_buffer_object"); } - if (extensions.Contains("gl_EXT_pixel_transform")) { EXT_pixel_transform = true; extensions.Remove("glEXT_pixel_transform"); } - if (extensions.Contains("gl_EXT_pixel_transform_color_table")) { EXT_pixel_transform_color_table = true; extensions.Remove("glEXT_pixel_transform_color_table"); } - if (extensions.Contains("gl_EXT_point_parameters")) { EXT_point_parameters = true; extensions.Remove("glEXT_point_parameters"); } - if (extensions.Contains("gl_EXT_polygon_offset")) { EXT_polygon_offset = true; extensions.Remove("glEXT_polygon_offset"); } - if (extensions.Contains("gl_EXT_polygon_offset_clamp")) { EXT_polygon_offset_clamp = true; extensions.Remove("glEXT_polygon_offset_clamp"); } - if (extensions.Contains("gl_EXT_post_depth_coverage")) { EXT_post_depth_coverage = true; extensions.Remove("glEXT_post_depth_coverage"); } - if (extensions.Contains("gl_EXT_provoking_vertex")) { EXT_provoking_vertex = true; extensions.Remove("glEXT_provoking_vertex"); } - if (extensions.Contains("gl_EXT_raster_multisample")) { EXT_raster_multisample = true; extensions.Remove("glEXT_raster_multisample"); } - if (extensions.Contains("gl_EXT_rescale_normal")) { EXT_rescale_normal = true; extensions.Remove("glEXT_rescale_normal"); } - if (extensions.Contains("gl_EXT_secondary_color")) { EXT_secondary_color = true; extensions.Remove("glEXT_secondary_color"); } - if (extensions.Contains("gl_EXT_semaphore")) { EXT_semaphore = true; extensions.Remove("glEXT_semaphore"); } - if (extensions.Contains("gl_EXT_semaphore_fd")) { EXT_semaphore_fd = true; extensions.Remove("glEXT_semaphore_fd"); } - if (extensions.Contains("gl_EXT_semaphore_win32")) { EXT_semaphore_win32 = true; extensions.Remove("glEXT_semaphore_win32"); } - if (extensions.Contains("gl_EXT_separate_shader_objects")) { EXT_separate_shader_objects = true; extensions.Remove("glEXT_separate_shader_objects"); } - if (extensions.Contains("gl_EXT_separate_specular_color")) { EXT_separate_specular_color = true; extensions.Remove("glEXT_separate_specular_color"); } - if (extensions.Contains("gl_EXT_shader_framebuffer_fetch")) { EXT_shader_framebuffer_fetch = true; extensions.Remove("glEXT_shader_framebuffer_fetch"); } - if (extensions.Contains("gl_EXT_shader_framebuffer_fetch_non_coherent")) { EXT_shader_framebuffer_fetch_non_coherent = true; extensions.Remove("glEXT_shader_framebuffer_fetch_non_coherent"); } - if (extensions.Contains("gl_EXT_shader_image_load_formatted")) { EXT_shader_image_load_formatted = true; extensions.Remove("glEXT_shader_image_load_formatted"); } - if (extensions.Contains("gl_EXT_shader_image_load_store")) { EXT_shader_image_load_store = true; extensions.Remove("glEXT_shader_image_load_store"); } - if (extensions.Contains("gl_EXT_shader_integer_mix")) { EXT_shader_integer_mix = true; extensions.Remove("glEXT_shader_integer_mix"); } - if (extensions.Contains("gl_EXT_shader_samples_identical")) { EXT_shader_samples_identical = true; extensions.Remove("glEXT_shader_samples_identical"); } - if (extensions.Contains("gl_EXT_shadow_funcs")) { EXT_shadow_funcs = true; extensions.Remove("glEXT_shadow_funcs"); } - if (extensions.Contains("gl_EXT_shared_texture_palette")) { EXT_shared_texture_palette = true; extensions.Remove("glEXT_shared_texture_palette"); } - if (extensions.Contains("gl_EXT_sparse_texture2")) { EXT_sparse_texture2 = true; extensions.Remove("glEXT_sparse_texture2"); } - if (extensions.Contains("gl_EXT_stencil_clear_tag")) { EXT_stencil_clear_tag = true; extensions.Remove("glEXT_stencil_clear_tag"); } - if (extensions.Contains("gl_EXT_stencil_two_side")) { EXT_stencil_two_side = true; extensions.Remove("glEXT_stencil_two_side"); } - if (extensions.Contains("gl_EXT_stencil_wrap")) { EXT_stencil_wrap = true; extensions.Remove("glEXT_stencil_wrap"); } - if (extensions.Contains("gl_EXT_subtexture")) { EXT_subtexture = true; extensions.Remove("glEXT_subtexture"); } - if (extensions.Contains("gl_EXT_texture")) { EXT_texture = true; extensions.Remove("glEXT_texture"); } - if (extensions.Contains("gl_EXT_texture3D")) { EXT_texture3D = true; extensions.Remove("glEXT_texture3D"); } - if (extensions.Contains("gl_EXT_texture_array")) { EXT_texture_array = true; extensions.Remove("glEXT_texture_array"); } - if (extensions.Contains("gl_EXT_texture_buffer_object")) { EXT_texture_buffer_object = true; extensions.Remove("glEXT_texture_buffer_object"); } - if (extensions.Contains("gl_EXT_texture_compression_latc")) { EXT_texture_compression_latc = true; extensions.Remove("glEXT_texture_compression_latc"); } - if (extensions.Contains("gl_EXT_texture_compression_rgtc")) { EXT_texture_compression_rgtc = true; extensions.Remove("glEXT_texture_compression_rgtc"); } - if (extensions.Contains("gl_EXT_texture_compression_s3tc")) { EXT_texture_compression_s3tc = true; extensions.Remove("glEXT_texture_compression_s3tc"); } - if (extensions.Contains("gl_EXT_texture_cube_map")) { EXT_texture_cube_map = true; extensions.Remove("glEXT_texture_cube_map"); } - if (extensions.Contains("gl_EXT_texture_env_add")) { EXT_texture_env_add = true; extensions.Remove("glEXT_texture_env_add"); } - if (extensions.Contains("gl_EXT_texture_env_combine")) { EXT_texture_env_combine = true; extensions.Remove("glEXT_texture_env_combine"); } - if (extensions.Contains("gl_EXT_texture_env_dot3")) { EXT_texture_env_dot3 = true; extensions.Remove("glEXT_texture_env_dot3"); } - if (extensions.Contains("gl_EXT_texture_filter_anisotropic")) { EXT_texture_filter_anisotropic = true; extensions.Remove("glEXT_texture_filter_anisotropic"); } - if (extensions.Contains("gl_EXT_texture_filter_minmax")) { EXT_texture_filter_minmax = true; extensions.Remove("glEXT_texture_filter_minmax"); } - if (extensions.Contains("gl_EXT_texture_integer")) { EXT_texture_integer = true; extensions.Remove("glEXT_texture_integer"); } - if (extensions.Contains("gl_EXT_texture_lod_bias")) { EXT_texture_lod_bias = true; extensions.Remove("glEXT_texture_lod_bias"); } - if (extensions.Contains("gl_EXT_texture_mirror_clamp")) { EXT_texture_mirror_clamp = true; extensions.Remove("glEXT_texture_mirror_clamp"); } - if (extensions.Contains("gl_EXT_texture_object")) { EXT_texture_object = true; extensions.Remove("glEXT_texture_object"); } - if (extensions.Contains("gl_EXT_texture_perturb_normal")) { EXT_texture_perturb_normal = true; extensions.Remove("glEXT_texture_perturb_normal"); } - if (extensions.Contains("gl_EXT_texture_sRGB")) { EXT_texture_sRGB = true; extensions.Remove("glEXT_texture_sRGB"); } - if (extensions.Contains("gl_EXT_texture_sRGB_R8")) { EXT_texture_sRGB_R8 = true; extensions.Remove("glEXT_texture_sRGB_R8"); } - if (extensions.Contains("gl_EXT_texture_sRGB_RG8")) { EXT_texture_sRGB_RG8 = true; extensions.Remove("glEXT_texture_sRGB_RG8"); } - if (extensions.Contains("gl_EXT_texture_sRGB_decode")) { EXT_texture_sRGB_decode = true; extensions.Remove("glEXT_texture_sRGB_decode"); } - if (extensions.Contains("gl_EXT_texture_shadow_lod")) { EXT_texture_shadow_lod = true; extensions.Remove("glEXT_texture_shadow_lod"); } - if (extensions.Contains("gl_EXT_texture_shared_exponent")) { EXT_texture_shared_exponent = true; extensions.Remove("glEXT_texture_shared_exponent"); } - if (extensions.Contains("gl_EXT_texture_snorm")) { EXT_texture_snorm = true; extensions.Remove("glEXT_texture_snorm"); } - if (extensions.Contains("gl_EXT_texture_storage")) { EXT_texture_storage = true; extensions.Remove("glEXT_texture_storage"); } - if (extensions.Contains("gl_EXT_texture_swizzle")) { EXT_texture_swizzle = true; extensions.Remove("glEXT_texture_swizzle"); } - if (extensions.Contains("gl_EXT_timer_query")) { EXT_timer_query = true; extensions.Remove("glEXT_timer_query"); } - if (extensions.Contains("gl_EXT_transform_feedback")) { EXT_transform_feedback = true; extensions.Remove("glEXT_transform_feedback"); } - if (extensions.Contains("gl_EXT_vertex_array")) { EXT_vertex_array = true; extensions.Remove("glEXT_vertex_array"); } - if (extensions.Contains("gl_EXT_vertex_array_bgra")) { EXT_vertex_array_bgra = true; extensions.Remove("glEXT_vertex_array_bgra"); } - if (extensions.Contains("gl_EXT_vertex_attrib_64bit")) { EXT_vertex_attrib_64bit = true; extensions.Remove("glEXT_vertex_attrib_64bit"); } - if (extensions.Contains("gl_EXT_vertex_shader")) { EXT_vertex_shader = true; extensions.Remove("glEXT_vertex_shader"); } - if (extensions.Contains("gl_EXT_vertex_weighting")) { EXT_vertex_weighting = true; extensions.Remove("glEXT_vertex_weighting"); } - if (extensions.Contains("gl_EXT_win32_keyed_mutex")) { EXT_win32_keyed_mutex = true; extensions.Remove("glEXT_win32_keyed_mutex"); } - if (extensions.Contains("gl_EXT_window_rectangles")) { EXT_window_rectangles = true; extensions.Remove("glEXT_window_rectangles"); } - if (extensions.Contains("gl_EXT_x11_sync_object")) { EXT_x11_sync_object = true; extensions.Remove("glEXT_x11_sync_object"); } - if (extensions.Contains("gl_GREMEDY_frame_terminator")) { GREMEDY_frame_terminator = true; extensions.Remove("glGREMEDY_frame_terminator"); } - if (extensions.Contains("gl_GREMEDY_string_marker")) { GREMEDY_string_marker = true; extensions.Remove("glGREMEDY_string_marker"); } - if (extensions.Contains("gl_HP_convolution_border_modes")) { HP_convolution_border_modes = true; extensions.Remove("glHP_convolution_border_modes"); } - if (extensions.Contains("gl_HP_image_transform")) { HP_image_transform = true; extensions.Remove("glHP_image_transform"); } - if (extensions.Contains("gl_HP_occlusion_test")) { HP_occlusion_test = true; extensions.Remove("glHP_occlusion_test"); } - if (extensions.Contains("gl_HP_texture_lighting")) { HP_texture_lighting = true; extensions.Remove("glHP_texture_lighting"); } - if (extensions.Contains("gl_IBM_cull_vertex")) { IBM_cull_vertex = true; extensions.Remove("glIBM_cull_vertex"); } - if (extensions.Contains("gl_IBM_multimode_draw_arrays")) { IBM_multimode_draw_arrays = true; extensions.Remove("glIBM_multimode_draw_arrays"); } - if (extensions.Contains("gl_IBM_rasterpos_clip")) { IBM_rasterpos_clip = true; extensions.Remove("glIBM_rasterpos_clip"); } - if (extensions.Contains("gl_IBM_static_data")) { IBM_static_data = true; extensions.Remove("glIBM_static_data"); } - if (extensions.Contains("gl_IBM_texture_mirrored_repeat")) { IBM_texture_mirrored_repeat = true; extensions.Remove("glIBM_texture_mirrored_repeat"); } - if (extensions.Contains("gl_IBM_vertex_array_lists")) { IBM_vertex_array_lists = true; extensions.Remove("glIBM_vertex_array_lists"); } - if (extensions.Contains("gl_INGR_blend_func_separate")) { INGR_blend_func_separate = true; extensions.Remove("glINGR_blend_func_separate"); } - if (extensions.Contains("gl_INGR_color_clamp")) { INGR_color_clamp = true; extensions.Remove("glINGR_color_clamp"); } - if (extensions.Contains("gl_INGR_interlace_read")) { INGR_interlace_read = true; extensions.Remove("glINGR_interlace_read"); } - if (extensions.Contains("gl_INTEL_blackhole_render")) { INTEL_blackhole_render = true; extensions.Remove("glINTEL_blackhole_render"); } - if (extensions.Contains("gl_INTEL_conservative_rasterization")) { INTEL_conservative_rasterization = true; extensions.Remove("glINTEL_conservative_rasterization"); } - if (extensions.Contains("gl_INTEL_fragment_shader_ordering")) { INTEL_fragment_shader_ordering = true; extensions.Remove("glINTEL_fragment_shader_ordering"); } - if (extensions.Contains("gl_INTEL_framebuffer_CMAA")) { INTEL_framebuffer_CMAA = true; extensions.Remove("glINTEL_framebuffer_CMAA"); } - if (extensions.Contains("gl_INTEL_map_texture")) { INTEL_map_texture = true; extensions.Remove("glINTEL_map_texture"); } - if (extensions.Contains("gl_INTEL_parallel_arrays")) { INTEL_parallel_arrays = true; extensions.Remove("glINTEL_parallel_arrays"); } - if (extensions.Contains("gl_INTEL_performance_query")) { INTEL_performance_query = true; extensions.Remove("glINTEL_performance_query"); } - if (extensions.Contains("gl_KHR_blend_equation_advanced")) { KHR_blend_equation_advanced = true; extensions.Remove("glKHR_blend_equation_advanced"); } - if (extensions.Contains("gl_KHR_blend_equation_advanced_coherent")) { KHR_blend_equation_advanced_coherent = true; extensions.Remove("glKHR_blend_equation_advanced_coherent"); } - if (extensions.Contains("gl_KHR_context_flush_control")) { KHR_context_flush_control = true; extensions.Remove("glKHR_context_flush_control"); } - if (extensions.Contains("gl_KHR_debug")) { KHR_debug = true; extensions.Remove("glKHR_debug"); } - if (extensions.Contains("gl_KHR_no_error")) { KHR_no_error = true; extensions.Remove("glKHR_no_error"); } - if (extensions.Contains("gl_KHR_parallel_shader_compile")) { KHR_parallel_shader_compile = true; extensions.Remove("glKHR_parallel_shader_compile"); } - if (extensions.Contains("gl_KHR_robust_buffer_access_behavior")) { KHR_robust_buffer_access_behavior = true; extensions.Remove("glKHR_robust_buffer_access_behavior"); } - if (extensions.Contains("gl_KHR_robustness")) { KHR_robustness = true; extensions.Remove("glKHR_robustness"); } - if (extensions.Contains("gl_KHR_shader_subgroup")) { KHR_shader_subgroup = true; extensions.Remove("glKHR_shader_subgroup"); } - if (extensions.Contains("gl_KHR_texture_compression_astc_hdr")) { KHR_texture_compression_astc_hdr = true; extensions.Remove("glKHR_texture_compression_astc_hdr"); } - if (extensions.Contains("gl_KHR_texture_compression_astc_ldr")) { KHR_texture_compression_astc_ldr = true; extensions.Remove("glKHR_texture_compression_astc_ldr"); } - if (extensions.Contains("gl_KHR_texture_compression_astc_sliced_3d")) { KHR_texture_compression_astc_sliced_3d = true; extensions.Remove("glKHR_texture_compression_astc_sliced_3d"); } - if (extensions.Contains("gl_MESAX_texture_stack")) { MESAX_texture_stack = true; extensions.Remove("glMESAX_texture_stack"); } - if (extensions.Contains("gl_MESA_framebuffer_flip_x")) { MESA_framebuffer_flip_x = true; extensions.Remove("glMESA_framebuffer_flip_x"); } - if (extensions.Contains("gl_MESA_framebuffer_flip_y")) { MESA_framebuffer_flip_y = true; extensions.Remove("glMESA_framebuffer_flip_y"); } - if (extensions.Contains("gl_MESA_framebuffer_swap_xy")) { MESA_framebuffer_swap_xy = true; extensions.Remove("glMESA_framebuffer_swap_xy"); } - if (extensions.Contains("gl_MESA_pack_invert")) { MESA_pack_invert = true; extensions.Remove("glMESA_pack_invert"); } - if (extensions.Contains("gl_MESA_program_binary_formats")) { MESA_program_binary_formats = true; extensions.Remove("glMESA_program_binary_formats"); } - if (extensions.Contains("gl_MESA_resize_buffers")) { MESA_resize_buffers = true; extensions.Remove("glMESA_resize_buffers"); } - if (extensions.Contains("gl_MESA_shader_integer_functions")) { MESA_shader_integer_functions = true; extensions.Remove("glMESA_shader_integer_functions"); } - if (extensions.Contains("gl_MESA_tile_raster_order")) { MESA_tile_raster_order = true; extensions.Remove("glMESA_tile_raster_order"); } - if (extensions.Contains("gl_MESA_window_pos")) { MESA_window_pos = true; extensions.Remove("glMESA_window_pos"); } - if (extensions.Contains("gl_MESA_ycbcr_texture")) { MESA_ycbcr_texture = true; extensions.Remove("glMESA_ycbcr_texture"); } - if (extensions.Contains("gl_NVX_blend_equation_advanced_multi_draw_buffers")) { NVX_blend_equation_advanced_multi_draw_buffers = true; extensions.Remove("glNVX_blend_equation_advanced_multi_draw_buffers"); } - if (extensions.Contains("gl_NVX_conditional_render")) { NVX_conditional_render = true; extensions.Remove("glNVX_conditional_render"); } - if (extensions.Contains("gl_NVX_gpu_memory_info")) { NVX_gpu_memory_info = true; extensions.Remove("glNVX_gpu_memory_info"); } - if (extensions.Contains("gl_NVX_gpu_multicast2")) { NVX_gpu_multicast2 = true; extensions.Remove("glNVX_gpu_multicast2"); } - if (extensions.Contains("gl_NVX_linked_gpu_multicast")) { NVX_linked_gpu_multicast = true; extensions.Remove("glNVX_linked_gpu_multicast"); } - if (extensions.Contains("gl_NVX_progress_fence")) { NVX_progress_fence = true; extensions.Remove("glNVX_progress_fence"); } - if (extensions.Contains("gl_NV_alpha_to_coverage_dither_control")) { NV_alpha_to_coverage_dither_control = true; extensions.Remove("glNV_alpha_to_coverage_dither_control"); } - if (extensions.Contains("gl_NV_bindless_multi_draw_indirect")) { NV_bindless_multi_draw_indirect = true; extensions.Remove("glNV_bindless_multi_draw_indirect"); } - if (extensions.Contains("gl_NV_bindless_multi_draw_indirect_count")) { NV_bindless_multi_draw_indirect_count = true; extensions.Remove("glNV_bindless_multi_draw_indirect_count"); } - if (extensions.Contains("gl_NV_bindless_texture")) { NV_bindless_texture = true; extensions.Remove("glNV_bindless_texture"); } - if (extensions.Contains("gl_NV_blend_equation_advanced")) { NV_blend_equation_advanced = true; extensions.Remove("glNV_blend_equation_advanced"); } - if (extensions.Contains("gl_NV_blend_equation_advanced_coherent")) { NV_blend_equation_advanced_coherent = true; extensions.Remove("glNV_blend_equation_advanced_coherent"); } - if (extensions.Contains("gl_NV_blend_minmax_factor")) { NV_blend_minmax_factor = true; extensions.Remove("glNV_blend_minmax_factor"); } - if (extensions.Contains("gl_NV_blend_square")) { NV_blend_square = true; extensions.Remove("glNV_blend_square"); } - if (extensions.Contains("gl_NV_clip_space_w_scaling")) { NV_clip_space_w_scaling = true; extensions.Remove("glNV_clip_space_w_scaling"); } - if (extensions.Contains("gl_NV_command_list")) { NV_command_list = true; extensions.Remove("glNV_command_list"); } - if (extensions.Contains("gl_NV_compute_program5")) { NV_compute_program5 = true; extensions.Remove("glNV_compute_program5"); } - if (extensions.Contains("gl_NV_compute_shader_derivatives")) { NV_compute_shader_derivatives = true; extensions.Remove("glNV_compute_shader_derivatives"); } - if (extensions.Contains("gl_NV_conditional_render")) { NV_conditional_render = true; extensions.Remove("glNV_conditional_render"); } - if (extensions.Contains("gl_NV_conservative_raster")) { NV_conservative_raster = true; extensions.Remove("glNV_conservative_raster"); } - if (extensions.Contains("gl_NV_conservative_raster_dilate")) { NV_conservative_raster_dilate = true; extensions.Remove("glNV_conservative_raster_dilate"); } - if (extensions.Contains("gl_NV_conservative_raster_pre_snap")) { NV_conservative_raster_pre_snap = true; extensions.Remove("glNV_conservative_raster_pre_snap"); } - if (extensions.Contains("gl_NV_conservative_raster_pre_snap_triangles")) { NV_conservative_raster_pre_snap_triangles = true; extensions.Remove("glNV_conservative_raster_pre_snap_triangles"); } - if (extensions.Contains("gl_NV_conservative_raster_underestimation")) { NV_conservative_raster_underestimation = true; extensions.Remove("glNV_conservative_raster_underestimation"); } - if (extensions.Contains("gl_NV_copy_depth_to_color")) { NV_copy_depth_to_color = true; extensions.Remove("glNV_copy_depth_to_color"); } - if (extensions.Contains("gl_NV_copy_image")) { NV_copy_image = true; extensions.Remove("glNV_copy_image"); } - if (extensions.Contains("gl_NV_deep_texture3D")) { NV_deep_texture3D = true; extensions.Remove("glNV_deep_texture3D"); } - if (extensions.Contains("gl_NV_depth_buffer_float")) { NV_depth_buffer_float = true; extensions.Remove("glNV_depth_buffer_float"); } - if (extensions.Contains("gl_NV_depth_clamp")) { NV_depth_clamp = true; extensions.Remove("glNV_depth_clamp"); } - if (extensions.Contains("gl_NV_draw_texture")) { NV_draw_texture = true; extensions.Remove("glNV_draw_texture"); } - if (extensions.Contains("gl_NV_draw_vulkan_image")) { NV_draw_vulkan_image = true; extensions.Remove("glNV_draw_vulkan_image"); } - if (extensions.Contains("gl_NV_evaluators")) { NV_evaluators = true; extensions.Remove("glNV_evaluators"); } - if (extensions.Contains("gl_NV_explicit_multisample")) { NV_explicit_multisample = true; extensions.Remove("glNV_explicit_multisample"); } - if (extensions.Contains("gl_NV_fence")) { NV_fence = true; extensions.Remove("glNV_fence"); } - if (extensions.Contains("gl_NV_fill_rectangle")) { NV_fill_rectangle = true; extensions.Remove("glNV_fill_rectangle"); } - if (extensions.Contains("gl_NV_float_buffer")) { NV_float_buffer = true; extensions.Remove("glNV_float_buffer"); } - if (extensions.Contains("gl_NV_fog_distance")) { NV_fog_distance = true; extensions.Remove("glNV_fog_distance"); } - if (extensions.Contains("gl_NV_fragment_coverage_to_color")) { NV_fragment_coverage_to_color = true; extensions.Remove("glNV_fragment_coverage_to_color"); } - if (extensions.Contains("gl_NV_fragment_program")) { NV_fragment_program = true; extensions.Remove("glNV_fragment_program"); } - if (extensions.Contains("gl_NV_fragment_program2")) { NV_fragment_program2 = true; extensions.Remove("glNV_fragment_program2"); } - if (extensions.Contains("gl_NV_fragment_program4")) { NV_fragment_program4 = true; extensions.Remove("glNV_fragment_program4"); } - if (extensions.Contains("gl_NV_fragment_program_option")) { NV_fragment_program_option = true; extensions.Remove("glNV_fragment_program_option"); } - if (extensions.Contains("gl_NV_fragment_shader_barycentric")) { NV_fragment_shader_barycentric = true; extensions.Remove("glNV_fragment_shader_barycentric"); } - if (extensions.Contains("gl_NV_fragment_shader_interlock")) { NV_fragment_shader_interlock = true; extensions.Remove("glNV_fragment_shader_interlock"); } - if (extensions.Contains("gl_NV_framebuffer_mixed_samples")) { NV_framebuffer_mixed_samples = true; extensions.Remove("glNV_framebuffer_mixed_samples"); } - if (extensions.Contains("gl_NV_framebuffer_multisample_coverage")) { NV_framebuffer_multisample_coverage = true; extensions.Remove("glNV_framebuffer_multisample_coverage"); } - if (extensions.Contains("gl_NV_geometry_program4")) { NV_geometry_program4 = true; extensions.Remove("glNV_geometry_program4"); } - if (extensions.Contains("gl_NV_geometry_shader4")) { NV_geometry_shader4 = true; extensions.Remove("glNV_geometry_shader4"); } - if (extensions.Contains("gl_NV_geometry_shader_passthrough")) { NV_geometry_shader_passthrough = true; extensions.Remove("glNV_geometry_shader_passthrough"); } - if (extensions.Contains("gl_NV_gpu_multicast")) { NV_gpu_multicast = true; extensions.Remove("glNV_gpu_multicast"); } - if (extensions.Contains("gl_NV_gpu_program4")) { NV_gpu_program4 = true; extensions.Remove("glNV_gpu_program4"); } - if (extensions.Contains("gl_NV_gpu_program5")) { NV_gpu_program5 = true; extensions.Remove("glNV_gpu_program5"); } - if (extensions.Contains("gl_NV_gpu_program5_mem_extended")) { NV_gpu_program5_mem_extended = true; extensions.Remove("glNV_gpu_program5_mem_extended"); } - if (extensions.Contains("gl_NV_gpu_shader5")) { NV_gpu_shader5 = true; extensions.Remove("glNV_gpu_shader5"); } - if (extensions.Contains("gl_NV_half_float")) { NV_half_float = true; extensions.Remove("glNV_half_float"); } - if (extensions.Contains("gl_NV_internalformat_sample_query")) { NV_internalformat_sample_query = true; extensions.Remove("glNV_internalformat_sample_query"); } - if (extensions.Contains("gl_NV_light_max_exponent")) { NV_light_max_exponent = true; extensions.Remove("glNV_light_max_exponent"); } - if (extensions.Contains("gl_NV_memory_attachment")) { NV_memory_attachment = true; extensions.Remove("glNV_memory_attachment"); } - if (extensions.Contains("gl_NV_memory_object_sparse")) { NV_memory_object_sparse = true; extensions.Remove("glNV_memory_object_sparse"); } - if (extensions.Contains("gl_NV_mesh_shader")) { NV_mesh_shader = true; extensions.Remove("glNV_mesh_shader"); } - if (extensions.Contains("gl_NV_multisample_coverage")) { NV_multisample_coverage = true; extensions.Remove("glNV_multisample_coverage"); } - if (extensions.Contains("gl_NV_multisample_filter_hint")) { NV_multisample_filter_hint = true; extensions.Remove("glNV_multisample_filter_hint"); } - if (extensions.Contains("gl_NV_occlusion_query")) { NV_occlusion_query = true; extensions.Remove("glNV_occlusion_query"); } - if (extensions.Contains("gl_NV_packed_depth_stencil")) { NV_packed_depth_stencil = true; extensions.Remove("glNV_packed_depth_stencil"); } - if (extensions.Contains("gl_NV_parameter_buffer_object")) { NV_parameter_buffer_object = true; extensions.Remove("glNV_parameter_buffer_object"); } - if (extensions.Contains("gl_NV_parameter_buffer_object2")) { NV_parameter_buffer_object2 = true; extensions.Remove("glNV_parameter_buffer_object2"); } - if (extensions.Contains("gl_NV_path_rendering")) { NV_path_rendering = true; extensions.Remove("glNV_path_rendering"); } - if (extensions.Contains("gl_NV_path_rendering_shared_edge")) { NV_path_rendering_shared_edge = true; extensions.Remove("glNV_path_rendering_shared_edge"); } - if (extensions.Contains("gl_NV_pixel_data_range")) { NV_pixel_data_range = true; extensions.Remove("glNV_pixel_data_range"); } - if (extensions.Contains("gl_NV_point_sprite")) { NV_point_sprite = true; extensions.Remove("glNV_point_sprite"); } - if (extensions.Contains("gl_NV_present_video")) { NV_present_video = true; extensions.Remove("glNV_present_video"); } - if (extensions.Contains("gl_NV_primitive_restart")) { NV_primitive_restart = true; extensions.Remove("glNV_primitive_restart"); } - if (extensions.Contains("gl_NV_primitive_shading_rate")) { NV_primitive_shading_rate = true; extensions.Remove("glNV_primitive_shading_rate"); } - if (extensions.Contains("gl_NV_query_resource")) { NV_query_resource = true; extensions.Remove("glNV_query_resource"); } - if (extensions.Contains("gl_NV_query_resource_tag")) { NV_query_resource_tag = true; extensions.Remove("glNV_query_resource_tag"); } - if (extensions.Contains("gl_NV_register_combiners")) { NV_register_combiners = true; extensions.Remove("glNV_register_combiners"); } - if (extensions.Contains("gl_NV_register_combiners2")) { NV_register_combiners2 = true; extensions.Remove("glNV_register_combiners2"); } - if (extensions.Contains("gl_NV_representative_fragment_test")) { NV_representative_fragment_test = true; extensions.Remove("glNV_representative_fragment_test"); } - if (extensions.Contains("gl_NV_robustness_video_memory_purge")) { NV_robustness_video_memory_purge = true; extensions.Remove("glNV_robustness_video_memory_purge"); } - if (extensions.Contains("gl_NV_sample_locations")) { NV_sample_locations = true; extensions.Remove("glNV_sample_locations"); } - if (extensions.Contains("gl_NV_sample_mask_override_coverage")) { NV_sample_mask_override_coverage = true; extensions.Remove("glNV_sample_mask_override_coverage"); } - if (extensions.Contains("gl_NV_scissor_exclusive")) { NV_scissor_exclusive = true; extensions.Remove("glNV_scissor_exclusive"); } - if (extensions.Contains("gl_NV_shader_atomic_counters")) { NV_shader_atomic_counters = true; extensions.Remove("glNV_shader_atomic_counters"); } - if (extensions.Contains("gl_NV_shader_atomic_float")) { NV_shader_atomic_float = true; extensions.Remove("glNV_shader_atomic_float"); } - if (extensions.Contains("gl_NV_shader_atomic_float64")) { NV_shader_atomic_float64 = true; extensions.Remove("glNV_shader_atomic_float64"); } - if (extensions.Contains("gl_NV_shader_atomic_fp16_vector")) { NV_shader_atomic_fp16_vector = true; extensions.Remove("glNV_shader_atomic_fp16_vector"); } - if (extensions.Contains("gl_NV_shader_atomic_int64")) { NV_shader_atomic_int64 = true; extensions.Remove("glNV_shader_atomic_int64"); } - if (extensions.Contains("gl_NV_shader_buffer_load")) { NV_shader_buffer_load = true; extensions.Remove("glNV_shader_buffer_load"); } - if (extensions.Contains("gl_NV_shader_buffer_store")) { NV_shader_buffer_store = true; extensions.Remove("glNV_shader_buffer_store"); } - if (extensions.Contains("gl_NV_shader_storage_buffer_object")) { NV_shader_storage_buffer_object = true; extensions.Remove("glNV_shader_storage_buffer_object"); } - if (extensions.Contains("gl_NV_shader_subgroup_partitioned")) { NV_shader_subgroup_partitioned = true; extensions.Remove("glNV_shader_subgroup_partitioned"); } - if (extensions.Contains("gl_NV_shader_texture_footprint")) { NV_shader_texture_footprint = true; extensions.Remove("glNV_shader_texture_footprint"); } - if (extensions.Contains("gl_NV_shader_thread_group")) { NV_shader_thread_group = true; extensions.Remove("glNV_shader_thread_group"); } - if (extensions.Contains("gl_NV_shader_thread_shuffle")) { NV_shader_thread_shuffle = true; extensions.Remove("glNV_shader_thread_shuffle"); } - if (extensions.Contains("gl_NV_shading_rate_image")) { NV_shading_rate_image = true; extensions.Remove("glNV_shading_rate_image"); } - if (extensions.Contains("gl_NV_stereo_view_rendering")) { NV_stereo_view_rendering = true; extensions.Remove("glNV_stereo_view_rendering"); } - if (extensions.Contains("gl_NV_tessellation_program5")) { NV_tessellation_program5 = true; extensions.Remove("glNV_tessellation_program5"); } - if (extensions.Contains("gl_NV_texgen_emboss")) { NV_texgen_emboss = true; extensions.Remove("glNV_texgen_emboss"); } - if (extensions.Contains("gl_NV_texgen_reflection")) { NV_texgen_reflection = true; extensions.Remove("glNV_texgen_reflection"); } - if (extensions.Contains("gl_NV_texture_barrier")) { NV_texture_barrier = true; extensions.Remove("glNV_texture_barrier"); } - if (extensions.Contains("gl_NV_texture_compression_vtc")) { NV_texture_compression_vtc = true; extensions.Remove("glNV_texture_compression_vtc"); } - if (extensions.Contains("gl_NV_texture_env_combine4")) { NV_texture_env_combine4 = true; extensions.Remove("glNV_texture_env_combine4"); } - if (extensions.Contains("gl_NV_texture_expand_normal")) { NV_texture_expand_normal = true; extensions.Remove("glNV_texture_expand_normal"); } - if (extensions.Contains("gl_NV_texture_multisample")) { NV_texture_multisample = true; extensions.Remove("glNV_texture_multisample"); } - if (extensions.Contains("gl_NV_texture_rectangle")) { NV_texture_rectangle = true; extensions.Remove("glNV_texture_rectangle"); } - if (extensions.Contains("gl_NV_texture_rectangle_compressed")) { NV_texture_rectangle_compressed = true; extensions.Remove("glNV_texture_rectangle_compressed"); } - if (extensions.Contains("gl_NV_texture_shader")) { NV_texture_shader = true; extensions.Remove("glNV_texture_shader"); } - if (extensions.Contains("gl_NV_texture_shader2")) { NV_texture_shader2 = true; extensions.Remove("glNV_texture_shader2"); } - if (extensions.Contains("gl_NV_texture_shader3")) { NV_texture_shader3 = true; extensions.Remove("glNV_texture_shader3"); } - if (extensions.Contains("gl_NV_timeline_semaphore")) { NV_timeline_semaphore = true; extensions.Remove("glNV_timeline_semaphore"); } - if (extensions.Contains("gl_NV_transform_feedback")) { NV_transform_feedback = true; extensions.Remove("glNV_transform_feedback"); } - if (extensions.Contains("gl_NV_transform_feedback2")) { NV_transform_feedback2 = true; extensions.Remove("glNV_transform_feedback2"); } - if (extensions.Contains("gl_NV_uniform_buffer_std430_layout")) { NV_uniform_buffer_std430_layout = true; extensions.Remove("glNV_uniform_buffer_std430_layout"); } - if (extensions.Contains("gl_NV_uniform_buffer_unified_memory")) { NV_uniform_buffer_unified_memory = true; extensions.Remove("glNV_uniform_buffer_unified_memory"); } - if (extensions.Contains("gl_NV_vdpau_interop")) { NV_vdpau_interop = true; extensions.Remove("glNV_vdpau_interop"); } - if (extensions.Contains("gl_NV_vdpau_interop2")) { NV_vdpau_interop2 = true; extensions.Remove("glNV_vdpau_interop2"); } - if (extensions.Contains("gl_NV_vertex_array_range")) { NV_vertex_array_range = true; extensions.Remove("glNV_vertex_array_range"); } - if (extensions.Contains("gl_NV_vertex_array_range2")) { NV_vertex_array_range2 = true; extensions.Remove("glNV_vertex_array_range2"); } - if (extensions.Contains("gl_NV_vertex_attrib_integer_64bit")) { NV_vertex_attrib_integer_64bit = true; extensions.Remove("glNV_vertex_attrib_integer_64bit"); } - if (extensions.Contains("gl_NV_vertex_buffer_unified_memory")) { NV_vertex_buffer_unified_memory = true; extensions.Remove("glNV_vertex_buffer_unified_memory"); } - if (extensions.Contains("gl_NV_vertex_program")) { NV_vertex_program = true; extensions.Remove("glNV_vertex_program"); } - if (extensions.Contains("gl_NV_vertex_program1_1")) { NV_vertex_program1_1 = true; extensions.Remove("glNV_vertex_program1_1"); } - if (extensions.Contains("gl_NV_vertex_program2")) { NV_vertex_program2 = true; extensions.Remove("glNV_vertex_program2"); } - if (extensions.Contains("gl_NV_vertex_program2_option")) { NV_vertex_program2_option = true; extensions.Remove("glNV_vertex_program2_option"); } - if (extensions.Contains("gl_NV_vertex_program3")) { NV_vertex_program3 = true; extensions.Remove("glNV_vertex_program3"); } - if (extensions.Contains("gl_NV_vertex_program4")) { NV_vertex_program4 = true; extensions.Remove("glNV_vertex_program4"); } - if (extensions.Contains("gl_NV_video_capture")) { NV_video_capture = true; extensions.Remove("glNV_video_capture"); } - if (extensions.Contains("gl_NV_viewport_array2")) { NV_viewport_array2 = true; extensions.Remove("glNV_viewport_array2"); } - if (extensions.Contains("gl_NV_viewport_swizzle")) { NV_viewport_swizzle = true; extensions.Remove("glNV_viewport_swizzle"); } - if (extensions.Contains("gl_OES_byte_coordinates")) { OES_byte_coordinates = true; extensions.Remove("glOES_byte_coordinates"); } - if (extensions.Contains("gl_OES_compressed_paletted_texture")) { OES_compressed_paletted_texture = true; extensions.Remove("glOES_compressed_paletted_texture"); } - if (extensions.Contains("gl_OES_fixed_point")) { OES_fixed_point = true; extensions.Remove("glOES_fixed_point"); } - if (extensions.Contains("gl_OES_query_matrix")) { OES_query_matrix = true; extensions.Remove("glOES_query_matrix"); } - if (extensions.Contains("gl_OES_read_format")) { OES_read_format = true; extensions.Remove("glOES_read_format"); } - if (extensions.Contains("gl_OES_single_precision")) { OES_single_precision = true; extensions.Remove("glOES_single_precision"); } - if (extensions.Contains("gl_OML_interlace")) { OML_interlace = true; extensions.Remove("glOML_interlace"); } - if (extensions.Contains("gl_OML_resample")) { OML_resample = true; extensions.Remove("glOML_resample"); } - if (extensions.Contains("gl_OML_subsample")) { OML_subsample = true; extensions.Remove("glOML_subsample"); } - if (extensions.Contains("gl_OVR_multiview")) { OVR_multiview = true; extensions.Remove("glOVR_multiview"); } - if (extensions.Contains("gl_OVR_multiview2")) { OVR_multiview2 = true; extensions.Remove("glOVR_multiview2"); } - if (extensions.Contains("gl_PGI_misc_hints")) { PGI_misc_hints = true; extensions.Remove("glPGI_misc_hints"); } - if (extensions.Contains("gl_PGI_vertex_hints")) { PGI_vertex_hints = true; extensions.Remove("glPGI_vertex_hints"); } - if (extensions.Contains("gl_REND_screen_coordinates")) { REND_screen_coordinates = true; extensions.Remove("glREND_screen_coordinates"); } - if (extensions.Contains("gl_S3_s3tc")) { S3_s3tc = true; extensions.Remove("glS3_s3tc"); } - if (extensions.Contains("gl_SGIS_detail_texture")) { SGIS_detail_texture = true; extensions.Remove("glSGIS_detail_texture"); } - if (extensions.Contains("gl_SGIS_fog_function")) { SGIS_fog_function = true; extensions.Remove("glSGIS_fog_function"); } - if (extensions.Contains("gl_SGIS_generate_mipmap")) { SGIS_generate_mipmap = true; extensions.Remove("glSGIS_generate_mipmap"); } - if (extensions.Contains("gl_SGIS_multisample")) { SGIS_multisample = true; extensions.Remove("glSGIS_multisample"); } - if (extensions.Contains("gl_SGIS_pixel_texture")) { SGIS_pixel_texture = true; extensions.Remove("glSGIS_pixel_texture"); } - if (extensions.Contains("gl_SGIS_point_line_texgen")) { SGIS_point_line_texgen = true; extensions.Remove("glSGIS_point_line_texgen"); } - if (extensions.Contains("gl_SGIS_point_parameters")) { SGIS_point_parameters = true; extensions.Remove("glSGIS_point_parameters"); } - if (extensions.Contains("gl_SGIS_sharpen_texture")) { SGIS_sharpen_texture = true; extensions.Remove("glSGIS_sharpen_texture"); } - if (extensions.Contains("gl_SGIS_texture4D")) { SGIS_texture4D = true; extensions.Remove("glSGIS_texture4D"); } - if (extensions.Contains("gl_SGIS_texture_border_clamp")) { SGIS_texture_border_clamp = true; extensions.Remove("glSGIS_texture_border_clamp"); } - if (extensions.Contains("gl_SGIS_texture_color_mask")) { SGIS_texture_color_mask = true; extensions.Remove("glSGIS_texture_color_mask"); } - if (extensions.Contains("gl_SGIS_texture_edge_clamp")) { SGIS_texture_edge_clamp = true; extensions.Remove("glSGIS_texture_edge_clamp"); } - if (extensions.Contains("gl_SGIS_texture_filter4")) { SGIS_texture_filter4 = true; extensions.Remove("glSGIS_texture_filter4"); } - if (extensions.Contains("gl_SGIS_texture_lod")) { SGIS_texture_lod = true; extensions.Remove("glSGIS_texture_lod"); } - if (extensions.Contains("gl_SGIS_texture_select")) { SGIS_texture_select = true; extensions.Remove("glSGIS_texture_select"); } - if (extensions.Contains("gl_SGIX_async")) { SGIX_async = true; extensions.Remove("glSGIX_async"); } - if (extensions.Contains("gl_SGIX_async_histogram")) { SGIX_async_histogram = true; extensions.Remove("glSGIX_async_histogram"); } - if (extensions.Contains("gl_SGIX_async_pixel")) { SGIX_async_pixel = true; extensions.Remove("glSGIX_async_pixel"); } - if (extensions.Contains("gl_SGIX_blend_alpha_minmax")) { SGIX_blend_alpha_minmax = true; extensions.Remove("glSGIX_blend_alpha_minmax"); } - if (extensions.Contains("gl_SGIX_calligraphic_fragment")) { SGIX_calligraphic_fragment = true; extensions.Remove("glSGIX_calligraphic_fragment"); } - if (extensions.Contains("gl_SGIX_clipmap")) { SGIX_clipmap = true; extensions.Remove("glSGIX_clipmap"); } - if (extensions.Contains("gl_SGIX_convolution_accuracy")) { SGIX_convolution_accuracy = true; extensions.Remove("glSGIX_convolution_accuracy"); } - if (extensions.Contains("gl_SGIX_depth_pass_instrument")) { SGIX_depth_pass_instrument = true; extensions.Remove("glSGIX_depth_pass_instrument"); } - if (extensions.Contains("gl_SGIX_depth_texture")) { SGIX_depth_texture = true; extensions.Remove("glSGIX_depth_texture"); } - if (extensions.Contains("gl_SGIX_flush_raster")) { SGIX_flush_raster = true; extensions.Remove("glSGIX_flush_raster"); } - if (extensions.Contains("gl_SGIX_fog_offset")) { SGIX_fog_offset = true; extensions.Remove("glSGIX_fog_offset"); } - if (extensions.Contains("gl_SGIX_fragment_lighting")) { SGIX_fragment_lighting = true; extensions.Remove("glSGIX_fragment_lighting"); } - if (extensions.Contains("gl_SGIX_framezoom")) { SGIX_framezoom = true; extensions.Remove("glSGIX_framezoom"); } - if (extensions.Contains("gl_SGIX_igloo_interface")) { SGIX_igloo_interface = true; extensions.Remove("glSGIX_igloo_interface"); } - if (extensions.Contains("gl_SGIX_instruments")) { SGIX_instruments = true; extensions.Remove("glSGIX_instruments"); } - if (extensions.Contains("gl_SGIX_interlace")) { SGIX_interlace = true; extensions.Remove("glSGIX_interlace"); } - if (extensions.Contains("gl_SGIX_ir_instrument1")) { SGIX_ir_instrument1 = true; extensions.Remove("glSGIX_ir_instrument1"); } - if (extensions.Contains("gl_SGIX_list_priority")) { SGIX_list_priority = true; extensions.Remove("glSGIX_list_priority"); } - if (extensions.Contains("gl_SGIX_pixel_texture")) { SGIX_pixel_texture = true; extensions.Remove("glSGIX_pixel_texture"); } - if (extensions.Contains("gl_SGIX_pixel_tiles")) { SGIX_pixel_tiles = true; extensions.Remove("glSGIX_pixel_tiles"); } - if (extensions.Contains("gl_SGIX_polynomial_ffd")) { SGIX_polynomial_ffd = true; extensions.Remove("glSGIX_polynomial_ffd"); } - if (extensions.Contains("gl_SGIX_reference_plane")) { SGIX_reference_plane = true; extensions.Remove("glSGIX_reference_plane"); } - if (extensions.Contains("gl_SGIX_resample")) { SGIX_resample = true; extensions.Remove("glSGIX_resample"); } - if (extensions.Contains("gl_SGIX_scalebias_hint")) { SGIX_scalebias_hint = true; extensions.Remove("glSGIX_scalebias_hint"); } - if (extensions.Contains("gl_SGIX_shadow")) { SGIX_shadow = true; extensions.Remove("glSGIX_shadow"); } - if (extensions.Contains("gl_SGIX_shadow_ambient")) { SGIX_shadow_ambient = true; extensions.Remove("glSGIX_shadow_ambient"); } - if (extensions.Contains("gl_SGIX_sprite")) { SGIX_sprite = true; extensions.Remove("glSGIX_sprite"); } - if (extensions.Contains("gl_SGIX_subsample")) { SGIX_subsample = true; extensions.Remove("glSGIX_subsample"); } - if (extensions.Contains("gl_SGIX_tag_sample_buffer")) { SGIX_tag_sample_buffer = true; extensions.Remove("glSGIX_tag_sample_buffer"); } - if (extensions.Contains("gl_SGIX_texture_add_env")) { SGIX_texture_add_env = true; extensions.Remove("glSGIX_texture_add_env"); } - if (extensions.Contains("gl_SGIX_texture_coordinate_clamp")) { SGIX_texture_coordinate_clamp = true; extensions.Remove("glSGIX_texture_coordinate_clamp"); } - if (extensions.Contains("gl_SGIX_texture_lod_bias")) { SGIX_texture_lod_bias = true; extensions.Remove("glSGIX_texture_lod_bias"); } - if (extensions.Contains("gl_SGIX_texture_multi_buffer")) { SGIX_texture_multi_buffer = true; extensions.Remove("glSGIX_texture_multi_buffer"); } - if (extensions.Contains("gl_SGIX_texture_scale_bias")) { SGIX_texture_scale_bias = true; extensions.Remove("glSGIX_texture_scale_bias"); } - if (extensions.Contains("gl_SGIX_vertex_preclip")) { SGIX_vertex_preclip = true; extensions.Remove("glSGIX_vertex_preclip"); } - if (extensions.Contains("gl_SGIX_ycrcb")) { SGIX_ycrcb = true; extensions.Remove("glSGIX_ycrcb"); } - if (extensions.Contains("gl_SGIX_ycrcb_subsample")) { SGIX_ycrcb_subsample = true; extensions.Remove("glSGIX_ycrcb_subsample"); } - if (extensions.Contains("gl_SGIX_ycrcba")) { SGIX_ycrcba = true; extensions.Remove("glSGIX_ycrcba"); } - if (extensions.Contains("gl_SGI_color_matrix")) { SGI_color_matrix = true; extensions.Remove("glSGI_color_matrix"); } - if (extensions.Contains("gl_SGI_color_table")) { SGI_color_table = true; extensions.Remove("glSGI_color_table"); } - if (extensions.Contains("gl_SGI_texture_color_table")) { SGI_texture_color_table = true; extensions.Remove("glSGI_texture_color_table"); } - if (extensions.Contains("gl_SUNX_constant_data")) { SUNX_constant_data = true; extensions.Remove("glSUNX_constant_data"); } - if (extensions.Contains("gl_SUN_convolution_border_modes")) { SUN_convolution_border_modes = true; extensions.Remove("glSUN_convolution_border_modes"); } - if (extensions.Contains("gl_SUN_global_alpha")) { SUN_global_alpha = true; extensions.Remove("glSUN_global_alpha"); } - if (extensions.Contains("gl_SUN_mesh_array")) { SUN_mesh_array = true; extensions.Remove("glSUN_mesh_array"); } - if (extensions.Contains("gl_SUN_slice_accum")) { SUN_slice_accum = true; extensions.Remove("glSUN_slice_accum"); } - if (extensions.Contains("gl_SUN_triangle_list")) { SUN_triangle_list = true; extensions.Remove("glSUN_triangle_list"); } - if (extensions.Contains("gl_SUN_vertex")) { SUN_vertex = true; extensions.Remove("glSUN_vertex"); } - if (extensions.Contains("gl_WIN_phong_shading")) { WIN_phong_shading = true; extensions.Remove("glWIN_phong_shading"); } - if (extensions.Contains("gl_WIN_specular_fog")) { WIN_specular_fog = true; extensions.Remove("glWIN_specular_fog"); } + if( extensions.Contains( "gl_4DFX_multisample" ) ) { + _4DFX_multisample = true; + extensions.Remove( "gl_4DFX_multisample" ); + } + if( extensions.Contains( "gl_3DFX_tbuffer" ) ) { + _3DFX_tbuffer = true; + extensions.Remove( "gl_3DFX_tbuffer" ); + } + if( extensions.Contains( "gl_3DFX_texture_compression_FXT1" ) ) { + _3DFX_texture_compression_FXT1 = true; + extensions.Remove( "gl_3DFX_texture_compression_FXT1" ); + } + if( extensions.Contains( "gl_AMD_blend_minmax_factor" ) ) { + AMD_blend_minmax_factor = true; + extensions.Remove( "glAMD_blend_minmax_factor" ); + } + if( extensions.Contains( "gl_AMD_conservative_depth" ) ) { + AMD_conservative_depth = true; + extensions.Remove( "glAMD_conservative_depth" ); + } + if( extensions.Contains( "gl_AMD_debug_output" ) ) { + AMD_debug_output = true; + extensions.Remove( "glAMD_debug_output" ); + } + if( extensions.Contains( "gl_AMD_depth_clamp_separate" ) ) { + AMD_depth_clamp_separate = true; + extensions.Remove( "glAMD_depth_clamp_separate" ); + } + if( extensions.Contains( "gl_AMD_draw_buffers_blend" ) ) { + AMD_draw_buffers_blend = true; + extensions.Remove( "glAMD_draw_buffers_blend" ); + } + if( extensions.Contains( "gl_AMD_framebuffer_multisample_advanced" ) ) { + AMD_framebuffer_multisample_advanced = true; + extensions.Remove( "glAMD_framebuffer_multisample_advanced" ); + } + if( extensions.Contains( "gl_AMD_framebuffer_sample_positions" ) ) { + AMD_framebuffer_sample_positions = true; + extensions.Remove( "glAMD_framebuffer_sample_positions" ); + } + if( extensions.Contains( "gl_AMD_gcn_shader" ) ) { + AMD_gcn_shader = true; + extensions.Remove( "glAMD_gcn_shader" ); + } + if( extensions.Contains( "gl_AMD_gpu_shader_half_float" ) ) { + AMD_gpu_shader_half_float = true; + extensions.Remove( "glAMD_gpu_shader_half_float" ); + } + if( extensions.Contains( "gl_AMD_gpu_shader_int16" ) ) { + AMD_gpu_shader_int16 = true; + extensions.Remove( "glAMD_gpu_shader_int16" ); + } + if( extensions.Contains( "gl_AMD_gpu_shader_int64" ) ) { + AMD_gpu_shader_int64 = true; + extensions.Remove( "glAMD_gpu_shader_int64" ); + } + if( extensions.Contains( "gl_AMD_interleaved_elements" ) ) { + AMD_interleaved_elements = true; + extensions.Remove( "glAMD_interleaved_elements" ); + } + if( extensions.Contains( "gl_AMD_multi_draw_indirect" ) ) { + AMD_multi_draw_indirect = true; + extensions.Remove( "glAMD_multi_draw_indirect" ); + } + if( extensions.Contains( "gl_AMD_name_gen_delete" ) ) { + AMD_name_gen_delete = true; + extensions.Remove( "glAMD_name_gen_delete" ); + } + if( extensions.Contains( "gl_AMD_occlusion_query_event" ) ) { + AMD_occlusion_query_event = true; + extensions.Remove( "glAMD_occlusion_query_event" ); + } + if( extensions.Contains( "gl_AMD_performance_monitor" ) ) { + AMD_performance_monitor = true; + extensions.Remove( "glAMD_performance_monitor" ); + } + if( extensions.Contains( "gl_AMD_pinned_memory" ) ) { + AMD_pinned_memory = true; + extensions.Remove( "glAMD_pinned_memory" ); + } + if( extensions.Contains( "gl_AMD_query_buffer_object" ) ) { + AMD_query_buffer_object = true; + extensions.Remove( "glAMD_query_buffer_object" ); + } + if( extensions.Contains( "gl_AMD_sample_positions" ) ) { + AMD_sample_positions = true; + extensions.Remove( "glAMD_sample_positions" ); + } + if( extensions.Contains( "gl_AMD_seamless_cubemap_per_texture" ) ) { + AMD_seamless_cubemap_per_texture = true; + extensions.Remove( "glAMD_seamless_cubemap_per_texture" ); + } + if( extensions.Contains( "gl_AMD_shader_atomic_counter_ops" ) ) { + AMD_shader_atomic_counter_ops = true; + extensions.Remove( "glAMD_shader_atomic_counter_ops" ); + } + if( extensions.Contains( "gl_AMD_shader_ballot" ) ) { + AMD_shader_ballot = true; + extensions.Remove( "glAMD_shader_ballot" ); + } + if( extensions.Contains( "gl_AMD_shader_explicit_vertex_parameter" ) ) { + AMD_shader_explicit_vertex_parameter = true; + extensions.Remove( "glAMD_shader_explicit_vertex_parameter" ); + } + if( extensions.Contains( + "gl_AMD_shader_gpu_shader_half_float_fetch" ) ) { + AMD_shader_gpu_shader_half_float_fetch = true; + extensions.Remove( "glAMD_shader_gpu_shader_half_float_fetch" ); + } + if( extensions.Contains( "gl_AMD_shader_image_load_store_lod" ) ) { + AMD_shader_image_load_store_lod = true; + extensions.Remove( "glAMD_shader_image_load_store_lod" ); + } + if( extensions.Contains( "gl_AMD_shader_stencil_export" ) ) { + AMD_shader_stencil_export = true; + extensions.Remove( "glAMD_shader_stencil_export" ); + } + if( extensions.Contains( "gl_AMD_shader_trinary_minmax" ) ) { + AMD_shader_trinary_minmax = true; + extensions.Remove( "glAMD_shader_trinary_minmax" ); + } + if( extensions.Contains( "gl_AMD_sparse_texture" ) ) { + AMD_sparse_texture = true; + extensions.Remove( "glAMD_sparse_texture" ); + } + if( extensions.Contains( "gl_AMD_stencil_operation_extended" ) ) { + AMD_stencil_operation_extended = true; + extensions.Remove( "glAMD_stencil_operation_extended" ); + } + if( extensions.Contains( "gl_AMD_texture_gather_bias_lod" ) ) { + AMD_texture_gather_bias_lod = true; + extensions.Remove( "glAMD_texture_gather_bias_lod" ); + } + if( extensions.Contains( "gl_AMD_texture_texture4" ) ) { + AMD_texture_texture4 = true; + extensions.Remove( "glAMD_texture_texture4" ); + } + if( extensions.Contains( + "gl_AMD_transform_feedback3_lines_triangles" ) ) { + AMD_transform_feedback3_lines_triangles = true; + extensions.Remove( "glAMD_transform_feedback3_lines_triangles" ); + } + if( extensions.Contains( "gl_AMD_transform_feedback4" ) ) { + AMD_transform_feedback4 = true; + extensions.Remove( "glAMD_transform_feedback4" ); + } + if( extensions.Contains( "gl_AMD_vertex_shader_layer" ) ) { + AMD_vertex_shader_layer = true; + extensions.Remove( "glAMD_vertex_shader_layer" ); + } + if( extensions.Contains( "gl_AMD_vertex_shader_tessellator" ) ) { + AMD_vertex_shader_tessellator = true; + extensions.Remove( "glAMD_vertex_shader_tessellator" ); + } + if( extensions.Contains( "gl_AMD_vertex_shader_viewport_index" ) ) { + AMD_vertex_shader_viewport_index = true; + extensions.Remove( "glAMD_vertex_shader_viewport_index" ); + } + if( extensions.Contains( "gl_APPLE_aux_depth_stencil" ) ) { + APPLE_aux_depth_stencil = true; + extensions.Remove( "glAPPLE_aux_depth_stencil" ); + } + if( extensions.Contains( "gl_APPLE_client_storage" ) ) { + APPLE_client_storage = true; + extensions.Remove( "glAPPLE_client_storage" ); + } + if( extensions.Contains( "gl_APPLE_element_array" ) ) { + APPLE_element_array = true; + extensions.Remove( "glAPPLE_element_array" ); + } + if( extensions.Contains( "gl_APPLE_fence" ) ) { + APPLE_fence = true; + extensions.Remove( "glAPPLE_fence" ); + } + if( extensions.Contains( "gl_APPLE_float_pixels" ) ) { + APPLE_float_pixels = true; + extensions.Remove( "glAPPLE_float_pixels" ); + } + if( extensions.Contains( "gl_APPLE_flush_buffer_range" ) ) { + APPLE_flush_buffer_range = true; + extensions.Remove( "glAPPLE_flush_buffer_range" ); + } + if( extensions.Contains( "gl_APPLE_object_purgeable" ) ) { + APPLE_object_purgeable = true; + extensions.Remove( "glAPPLE_object_purgeable" ); + } + if( extensions.Contains( "gl_APPLE_rgb_422" ) ) { + APPLE_rgb_422 = true; + extensions.Remove( "glAPPLE_rgb_422" ); + } + if( extensions.Contains( "gl_APPLE_row_bytes" ) ) { + APPLE_row_bytes = true; + extensions.Remove( "glAPPLE_row_bytes" ); + } + if( extensions.Contains( "gl_APPLE_specular_vector" ) ) { + APPLE_specular_vector = true; + extensions.Remove( "glAPPLE_specular_vector" ); + } + if( extensions.Contains( "gl_APPLE_texture_range" ) ) { + APPLE_texture_range = true; + extensions.Remove( "glAPPLE_texture_range" ); + } + if( extensions.Contains( "gl_APPLE_transform_hint" ) ) { + APPLE_transform_hint = true; + extensions.Remove( "glAPPLE_transform_hint" ); + } + if( extensions.Contains( "gl_APPLE_vertex_array_object" ) ) { + APPLE_vertex_array_object = true; + extensions.Remove( "glAPPLE_vertex_array_object" ); + } + if( extensions.Contains( "gl_APPLE_vertex_array_range" ) ) { + APPLE_vertex_array_range = true; + extensions.Remove( "glAPPLE_vertex_array_range" ); + } + if( extensions.Contains( "gl_APPLE_vertex_program_evaluators" ) ) { + APPLE_vertex_program_evaluators = true; + extensions.Remove( "glAPPLE_vertex_program_evaluators" ); + } + if( extensions.Contains( "gl_APPLE_ycbcr_422" ) ) { + APPLE_ycbcr_422 = true; + extensions.Remove( "glAPPLE_ycbcr_422" ); + } + if( extensions.Contains( "gl_ARB_ES2_compatibility" ) ) { + ARB_ES2_compatibility = true; + extensions.Remove( "glARB_ES2_compatibility" ); + } + if( extensions.Contains( "gl_ARB_ES3_1_compatibility" ) ) { + ARB_ES3_1_compatibility = true; + extensions.Remove( "glARB_ES3_1_compatibility" ); + } + if( extensions.Contains( "gl_ARB_ES3_2_compatibility" ) ) { + ARB_ES3_2_compatibility = true; + extensions.Remove( "glARB_ES3_2_compatibility" ); + } + if( extensions.Contains( "gl_ARB_ES3_compatibility" ) ) { + ARB_ES3_compatibility = true; + extensions.Remove( "glARB_ES3_compatibility" ); + } + if( extensions.Contains( "gl_ARB_arrays_of_arrays" ) ) { + ARB_arrays_of_arrays = true; + extensions.Remove( "glARB_arrays_of_arrays" ); + } + if( extensions.Contains( "gl_ARB_base_instance" ) ) { + ARB_base_instance = true; + extensions.Remove( "glARB_base_instance" ); + } + if( extensions.Contains( "gl_ARB_bindless_texture" ) ) { + ARB_bindless_texture = true; + extensions.Remove( "glARB_bindless_texture" ); + } + if( extensions.Contains( "gl_ARB_blend_func_extended" ) ) { + ARB_blend_func_extended = true; + extensions.Remove( "glARB_blend_func_extended" ); + } + if( extensions.Contains( "gl_ARB_buffer_storage" ) ) { + ARB_buffer_storage = true; + extensions.Remove( "glARB_buffer_storage" ); + } + if( extensions.Contains( "gl_ARB_cl_event" ) ) { + ARB_cl_event = true; + extensions.Remove( "glARB_cl_event" ); + } + if( extensions.Contains( "gl_ARB_clear_buffer_object" ) ) { + ARB_clear_buffer_object = true; + extensions.Remove( "glARB_clear_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_clear_texture" ) ) { + ARB_clear_texture = true; + extensions.Remove( "glARB_clear_texture" ); + } + if( extensions.Contains( "gl_ARB_clip_control" ) ) { + ARB_clip_control = true; + extensions.Remove( "glARB_clip_control" ); + } + if( extensions.Contains( "gl_ARB_color_buffer_float" ) ) { + ARB_color_buffer_float = true; + extensions.Remove( "glARB_color_buffer_float" ); + } + if( extensions.Contains( "gl_ARB_compatibility" ) ) { + ARB_compatibility = true; + extensions.Remove( "glARB_compatibility" ); + } + if( extensions.Contains( "gl_ARB_compressed_texture_pixel_storage" ) ) { + ARB_compressed_texture_pixel_storage = true; + extensions.Remove( "glARB_compressed_texture_pixel_storage" ); + } + if( extensions.Contains( "gl_ARB_compute_shader" ) ) { + ARB_compute_shader = true; + extensions.Remove( "glARB_compute_shader" ); + } + if( extensions.Contains( "gl_ARB_compute_variable_group_size" ) ) { + ARB_compute_variable_group_size = true; + extensions.Remove( "glARB_compute_variable_group_size" ); + } + if( extensions.Contains( "gl_ARB_conditional_render_inverted" ) ) { + ARB_conditional_render_inverted = true; + extensions.Remove( "glARB_conditional_render_inverted" ); + } + if( extensions.Contains( "gl_ARB_conservative_depth" ) ) { + ARB_conservative_depth = true; + extensions.Remove( "glARB_conservative_depth" ); + } + if( extensions.Contains( "gl_ARB_copy_buffer" ) ) { + ARB_copy_buffer = true; + extensions.Remove( "glARB_copy_buffer" ); + } + if( extensions.Contains( "gl_ARB_copy_image" ) ) { + ARB_copy_image = true; + extensions.Remove( "glARB_copy_image" ); + } + if( extensions.Contains( "gl_ARB_cull_distance" ) ) { + ARB_cull_distance = true; + extensions.Remove( "glARB_cull_distance" ); + } + if( extensions.Contains( "gl_ARB_debug_output" ) ) { + ARB_debug_output = true; + extensions.Remove( "glARB_debug_output" ); + } + if( extensions.Contains( "gl_ARB_depth_buffer_float" ) ) { + ARB_depth_buffer_float = true; + extensions.Remove( "glARB_depth_buffer_float" ); + } + if( extensions.Contains( "gl_ARB_depth_clamp" ) ) { + ARB_depth_clamp = true; + extensions.Remove( "glARB_depth_clamp" ); + } + if( extensions.Contains( "gl_ARB_depth_texture" ) ) { + ARB_depth_texture = true; + extensions.Remove( "glARB_depth_texture" ); + } + if( extensions.Contains( "gl_ARB_derivative_control" ) ) { + ARB_derivative_control = true; + extensions.Remove( "glARB_derivative_control" ); + } + if( extensions.Contains( "gl_ARB_direct_state_access" ) ) { + ARB_direct_state_access = true; + extensions.Remove( "glARB_direct_state_access" ); + } + if( extensions.Contains( "gl_ARB_draw_buffers" ) ) { + ARB_draw_buffers = true; + extensions.Remove( "glARB_draw_buffers" ); + } + if( extensions.Contains( "gl_ARB_draw_buffers_blend" ) ) { + ARB_draw_buffers_blend = true; + extensions.Remove( "glARB_draw_buffers_blend" ); + } + if( extensions.Contains( "gl_ARB_draw_elements_base_vertex" ) ) { + ARB_draw_elements_base_vertex = true; + extensions.Remove( "glARB_draw_elements_base_vertex" ); + } + if( extensions.Contains( "gl_ARB_draw_indirect" ) ) { + ARB_draw_indirect = true; + extensions.Remove( "glARB_draw_indirect" ); + } + if( extensions.Contains( "gl_ARB_draw_instanced" ) ) { + ARB_draw_instanced = true; + extensions.Remove( "glARB_draw_instanced" ); + } + if( extensions.Contains( "gl_ARB_enhanced_layouts" ) ) { + ARB_enhanced_layouts = true; + extensions.Remove( "glARB_enhanced_layouts" ); + } + if( extensions.Contains( "gl_ARB_explicit_attrib_location" ) ) { + ARB_explicit_attrib_location = true; + extensions.Remove( "glARB_explicit_attrib_location" ); + } + if( extensions.Contains( "gl_ARB_explicit_uniform_location" ) ) { + ARB_explicit_uniform_location = true; + extensions.Remove( "glARB_explicit_uniform_location" ); + } + if( extensions.Contains( "gl_ARB_fragment_coord_conventions" ) ) { + ARB_fragment_coord_conventions = true; + extensions.Remove( "glARB_fragment_coord_conventions" ); + } + if( extensions.Contains( "gl_ARB_fragment_layer_viewport" ) ) { + ARB_fragment_layer_viewport = true; + extensions.Remove( "glARB_fragment_layer_viewport" ); + } + if( extensions.Contains( "gl_ARB_fragment_program" ) ) { + ARB_fragment_program = true; + extensions.Remove( "glARB_fragment_program" ); + } + if( extensions.Contains( "gl_ARB_fragment_program_shadow" ) ) { + ARB_fragment_program_shadow = true; + extensions.Remove( "glARB_fragment_program_shadow" ); + } + if( extensions.Contains( "gl_ARB_fragment_shader" ) ) { + ARB_fragment_shader = true; + extensions.Remove( "glARB_fragment_shader" ); + } + if( extensions.Contains( "gl_ARB_fragment_shader_interlock" ) ) { + ARB_fragment_shader_interlock = true; + extensions.Remove( "glARB_fragment_shader_interlock" ); + } + if( extensions.Contains( "gl_ARB_framebuffer_no_attachments" ) ) { + ARB_framebuffer_no_attachments = true; + extensions.Remove( "glARB_framebuffer_no_attachments" ); + } + if( extensions.Contains( "gl_ARB_framebuffer_object" ) ) { + ARB_framebuffer_object = true; + extensions.Remove( "glARB_framebuffer_object" ); + } + if( extensions.Contains( "gl_ARB_framebuffer_sRGB" ) ) { + ARB_framebuffer_sRGB = true; + extensions.Remove( "glARB_framebuffer_sRGB" ); + } + if( extensions.Contains( "gl_ARB_geometry_shader4" ) ) { + ARB_geometry_shader4 = true; + extensions.Remove( "glARB_geometry_shader4" ); + } + if( extensions.Contains( "gl_ARB_get_program_binary" ) ) { + ARB_get_program_binary = true; + extensions.Remove( "glARB_get_program_binary" ); + } + if( extensions.Contains( "gl_ARB_get_texture_sub_image" ) ) { + ARB_get_texture_sub_image = true; + extensions.Remove( "glARB_get_texture_sub_image" ); + } + if( extensions.Contains( "gl_ARB_gl_spirv" ) ) { + ARB_gl_spirv = true; + extensions.Remove( "glARB_gl_spirv" ); + } + if( extensions.Contains( "gl_ARB_gpu_shader5" ) ) { + ARB_gpu_shader5 = true; + extensions.Remove( "glARB_gpu_shader5" ); + } + if( extensions.Contains( "gl_ARB_gpu_shader_fp64" ) ) { + ARB_gpu_shader_fp64 = true; + extensions.Remove( "glARB_gpu_shader_fp64" ); + } + if( extensions.Contains( "gl_ARB_gpu_shader_int64" ) ) { + ARB_gpu_shader_int64 = true; + extensions.Remove( "glARB_gpu_shader_int64" ); + } + if( extensions.Contains( "gl_ARB_half_float_pixel" ) ) { + ARB_half_float_pixel = true; + extensions.Remove( "glARB_half_float_pixel" ); + } + if( extensions.Contains( "gl_ARB_half_float_vertex" ) ) { + ARB_half_float_vertex = true; + extensions.Remove( "glARB_half_float_vertex" ); + } + if( extensions.Contains( "gl_ARB_imaging" ) ) { + ARB_imaging = true; + extensions.Remove( "glARB_imaging" ); + } + if( extensions.Contains( "gl_ARB_indirect_parameters" ) ) { + ARB_indirect_parameters = true; + extensions.Remove( "glARB_indirect_parameters" ); + } + if( extensions.Contains( "gl_ARB_instanced_arrays" ) ) { + ARB_instanced_arrays = true; + extensions.Remove( "glARB_instanced_arrays" ); + } + if( extensions.Contains( "gl_ARB_internalformat_query" ) ) { + ARB_internalformat_query = true; + extensions.Remove( "glARB_internalformat_query" ); + } + if( extensions.Contains( "gl_ARB_internalformat_query2" ) ) { + ARB_internalformat_query2 = true; + extensions.Remove( "glARB_internalformat_query2" ); + } + if( extensions.Contains( "gl_ARB_invalidate_subdata" ) ) { + ARB_invalidate_subdata = true; + extensions.Remove( "glARB_invalidate_subdata" ); + } + if( extensions.Contains( "gl_ARB_map_buffer_alignment" ) ) { + ARB_map_buffer_alignment = true; + extensions.Remove( "glARB_map_buffer_alignment" ); + } + if( extensions.Contains( "gl_ARB_map_buffer_range" ) ) { + ARB_map_buffer_range = true; + extensions.Remove( "glARB_map_buffer_range" ); + } + if( extensions.Contains( "gl_ARB_matrix_palette" ) ) { + ARB_matrix_palette = true; + extensions.Remove( "glARB_matrix_palette" ); + } + if( extensions.Contains( "gl_ARB_multi_bind" ) ) { + ARB_multi_bind = true; + extensions.Remove( "glARB_multi_bind" ); + } + if( extensions.Contains( "gl_ARB_multi_draw_indirect" ) ) { + ARB_multi_draw_indirect = true; + extensions.Remove( "glARB_multi_draw_indirect" ); + } + if( extensions.Contains( "gl_ARB_multisample" ) ) { + ARB_multisample = true; + extensions.Remove( "glARB_multisample" ); + } + if( extensions.Contains( "gl_ARB_multitexture" ) ) { + ARB_multitexture = true; + extensions.Remove( "glARB_multitexture" ); + } + if( extensions.Contains( "gl_ARB_occlusion_query" ) ) { + ARB_occlusion_query = true; + extensions.Remove( "glARB_occlusion_query" ); + } + if( extensions.Contains( "gl_ARB_occlusion_query2" ) ) { + ARB_occlusion_query2 = true; + extensions.Remove( "glARB_occlusion_query2" ); + } + if( extensions.Contains( "gl_ARB_parallel_shader_compile" ) ) { + ARB_parallel_shader_compile = true; + extensions.Remove( "glARB_parallel_shader_compile" ); + } + if( extensions.Contains( "gl_ARB_pipeline_statistics_query" ) ) { + ARB_pipeline_statistics_query = true; + extensions.Remove( "glARB_pipeline_statistics_query" ); + } + if( extensions.Contains( "gl_ARB_pixel_buffer_object" ) ) { + ARB_pixel_buffer_object = true; + extensions.Remove( "glARB_pixel_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_point_parameters" ) ) { + ARB_point_parameters = true; + extensions.Remove( "glARB_point_parameters" ); + } + if( extensions.Contains( "gl_ARB_point_sprite" ) ) { + ARB_point_sprite = true; + extensions.Remove( "glARB_point_sprite" ); + } + if( extensions.Contains( "gl_ARB_polygon_offset_clamp" ) ) { + ARB_polygon_offset_clamp = true; + extensions.Remove( "glARB_polygon_offset_clamp" ); + } + if( extensions.Contains( "gl_ARB_post_depth_coverage" ) ) { + ARB_post_depth_coverage = true; + extensions.Remove( "glARB_post_depth_coverage" ); + } + if( extensions.Contains( "gl_ARB_program_interface_query" ) ) { + ARB_program_interface_query = true; + extensions.Remove( "glARB_program_interface_query" ); + } + if( extensions.Contains( "gl_ARB_provoking_vertex" ) ) { + ARB_provoking_vertex = true; + extensions.Remove( "glARB_provoking_vertex" ); + } + if( extensions.Contains( "gl_ARB_query_buffer_object" ) ) { + ARB_query_buffer_object = true; + extensions.Remove( "glARB_query_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_robust_buffer_access_behavior" ) ) { + ARB_robust_buffer_access_behavior = true; + extensions.Remove( "glARB_robust_buffer_access_behavior" ); + } + if( extensions.Contains( "gl_ARB_robustness" ) ) { + ARB_robustness = true; + extensions.Remove( "glARB_robustness" ); + } + if( extensions.Contains( "gl_ARB_robustness_isolation" ) ) { + ARB_robustness_isolation = true; + extensions.Remove( "glARB_robustness_isolation" ); + } + if( extensions.Contains( "gl_ARB_sample_locations" ) ) { + ARB_sample_locations = true; + extensions.Remove( "glARB_sample_locations" ); + } + if( extensions.Contains( "gl_ARB_sample_shading" ) ) { + ARB_sample_shading = true; + extensions.Remove( "glARB_sample_shading" ); + } + if( extensions.Contains( "gl_ARB_sampler_objects" ) ) { + ARB_sampler_objects = true; + extensions.Remove( "glARB_sampler_objects" ); + } + if( extensions.Contains( "gl_ARB_seamless_cube_map" ) ) { + ARB_seamless_cube_map = true; + extensions.Remove( "glARB_seamless_cube_map" ); + } + if( extensions.Contains( "gl_ARB_seamless_cubemap_per_texture" ) ) { + ARB_seamless_cubemap_per_texture = true; + extensions.Remove( "glARB_seamless_cubemap_per_texture" ); + } + if( extensions.Contains( "gl_ARB_separate_shader_objects" ) ) { + ARB_separate_shader_objects = true; + extensions.Remove( "glARB_separate_shader_objects" ); + } + if( extensions.Contains( "gl_ARB_shader_atomic_counter_ops" ) ) { + ARB_shader_atomic_counter_ops = true; + extensions.Remove( "glARB_shader_atomic_counter_ops" ); + } + if( extensions.Contains( "gl_ARB_shader_atomic_counters" ) ) { + ARB_shader_atomic_counters = true; + extensions.Remove( "glARB_shader_atomic_counters" ); + } + if( extensions.Contains( "gl_ARB_shader_ballot" ) ) { + ARB_shader_ballot = true; + extensions.Remove( "glARB_shader_ballot" ); + } + if( extensions.Contains( "gl_ARB_shader_bit_encoding" ) ) { + ARB_shader_bit_encoding = true; + extensions.Remove( "glARB_shader_bit_encoding" ); + } + if( extensions.Contains( "gl_ARB_shader_clock" ) ) { + ARB_shader_clock = true; + extensions.Remove( "glARB_shader_clock" ); + } + if( extensions.Contains( "gl_ARB_shader_draw_parameters" ) ) { + ARB_shader_draw_parameters = true; + extensions.Remove( "glARB_shader_draw_parameters" ); + } + if( extensions.Contains( "gl_ARB_shader_group_vote" ) ) { + ARB_shader_group_vote = true; + extensions.Remove( "glARB_shader_group_vote" ); + } + if( extensions.Contains( "gl_ARB_shader_image_load_store" ) ) { + ARB_shader_image_load_store = true; + extensions.Remove( "glARB_shader_image_load_store" ); + } + if( extensions.Contains( "gl_ARB_shader_image_size" ) ) { + ARB_shader_image_size = true; + extensions.Remove( "glARB_shader_image_size" ); + } + if( extensions.Contains( "gl_ARB_shader_objects" ) ) { + ARB_shader_objects = true; + extensions.Remove( "glARB_shader_objects" ); + } + if( extensions.Contains( "gl_ARB_shader_precision" ) ) { + ARB_shader_precision = true; + extensions.Remove( "glARB_shader_precision" ); + } + if( extensions.Contains( "gl_ARB_shader_stencil_export" ) ) { + ARB_shader_stencil_export = true; + extensions.Remove( "glARB_shader_stencil_export" ); + } + if( extensions.Contains( "gl_ARB_shader_storage_buffer_object" ) ) { + ARB_shader_storage_buffer_object = true; + extensions.Remove( "glARB_shader_storage_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_shader_subroutine" ) ) { + ARB_shader_subroutine = true; + extensions.Remove( "glARB_shader_subroutine" ); + } + if( extensions.Contains( "gl_ARB_shader_texture_image_samples" ) ) { + ARB_shader_texture_image_samples = true; + extensions.Remove( "glARB_shader_texture_image_samples" ); + } + if( extensions.Contains( "gl_ARB_shader_texture_lod" ) ) { + ARB_shader_texture_lod = true; + extensions.Remove( "glARB_shader_texture_lod" ); + } + if( extensions.Contains( "gl_ARB_shader_viewport_layer_array" ) ) { + ARB_shader_viewport_layer_array = true; + extensions.Remove( "glARB_shader_viewport_layer_array" ); + } + if( extensions.Contains( "gl_ARB_shading_language_100" ) ) { + ARB_shading_language_100 = true; + extensions.Remove( "glARB_shading_language_100" ); + } + if( extensions.Contains( "gl_ARB_shading_language_420pack" ) ) { + ARB_shading_language_420pack = true; + extensions.Remove( "glARB_shading_language_420pack" ); + } + if( extensions.Contains( "gl_ARB_shading_language_include" ) ) { + ARB_shading_language_include = true; + extensions.Remove( "glARB_shading_language_include" ); + } + if( extensions.Contains( "gl_ARB_shading_language_packing" ) ) { + ARB_shading_language_packing = true; + extensions.Remove( "glARB_shading_language_packing" ); + } + if( extensions.Contains( "gl_ARB_shadow" ) ) { + ARB_shadow = true; + extensions.Remove( "glARB_shadow" ); + } + if( extensions.Contains( "gl_ARB_shadow_ambient" ) ) { + ARB_shadow_ambient = true; + extensions.Remove( "glARB_shadow_ambient" ); + } + if( extensions.Contains( "gl_ARB_sparse_buffer" ) ) { + ARB_sparse_buffer = true; + extensions.Remove( "glARB_sparse_buffer" ); + } + if( extensions.Contains( "gl_ARB_sparse_texture" ) ) { + ARB_sparse_texture = true; + extensions.Remove( "glARB_sparse_texture" ); + } + if( extensions.Contains( "gl_ARB_sparse_texture2" ) ) { + ARB_sparse_texture2 = true; + extensions.Remove( "glARB_sparse_texture2" ); + } + if( extensions.Contains( "gl_ARB_sparse_texture_clamp" ) ) { + ARB_sparse_texture_clamp = true; + extensions.Remove( "glARB_sparse_texture_clamp" ); + } + if( extensions.Contains( "gl_ARB_spirv_extensions" ) ) { + ARB_spirv_extensions = true; + extensions.Remove( "glARB_spirv_extensions" ); + } + if( extensions.Contains( "gl_ARB_stencil_texturing" ) ) { + ARB_stencil_texturing = true; + extensions.Remove( "glARB_stencil_texturing" ); + } + if( extensions.Contains( "gl_ARB_sync" ) ) { + ARB_sync = true; + extensions.Remove( "glARB_sync" ); + } + if( extensions.Contains( "gl_ARB_tessellation_shader" ) ) { + ARB_tessellation_shader = true; + extensions.Remove( "glARB_tessellation_shader" ); + } + if( extensions.Contains( "gl_ARB_texture_barrier" ) ) { + ARB_texture_barrier = true; + extensions.Remove( "glARB_texture_barrier" ); + } + if( extensions.Contains( "gl_ARB_texture_border_clamp" ) ) { + ARB_texture_border_clamp = true; + extensions.Remove( "glARB_texture_border_clamp" ); + } + if( extensions.Contains( "gl_ARB_texture_buffer_object" ) ) { + ARB_texture_buffer_object = true; + extensions.Remove( "glARB_texture_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_texture_buffer_object_rgb32" ) ) { + ARB_texture_buffer_object_rgb32 = true; + extensions.Remove( "glARB_texture_buffer_object_rgb32" ); + } + if( extensions.Contains( "gl_ARB_texture_buffer_range" ) ) { + ARB_texture_buffer_range = true; + extensions.Remove( "glARB_texture_buffer_range" ); + } + if( extensions.Contains( "gl_ARB_texture_compression" ) ) { + ARB_texture_compression = true; + extensions.Remove( "glARB_texture_compression" ); + } + if( extensions.Contains( "gl_ARB_texture_compression_bptc" ) ) { + ARB_texture_compression_bptc = true; + extensions.Remove( "glARB_texture_compression_bptc" ); + } + if( extensions.Contains( "gl_ARB_texture_compression_rgtc" ) ) { + ARB_texture_compression_rgtc = true; + extensions.Remove( "glARB_texture_compression_rgtc" ); + } + if( extensions.Contains( "gl_ARB_texture_cube_map" ) ) { + ARB_texture_cube_map = true; + extensions.Remove( "glARB_texture_cube_map" ); + } + if( extensions.Contains( "gl_ARB_texture_cube_map_array" ) ) { + ARB_texture_cube_map_array = true; + extensions.Remove( "glARB_texture_cube_map_array" ); + } + if( extensions.Contains( "gl_ARB_texture_env_add" ) ) { + ARB_texture_env_add = true; + extensions.Remove( "glARB_texture_env_add" ); + } + if( extensions.Contains( "gl_ARB_texture_env_combine" ) ) { + ARB_texture_env_combine = true; + extensions.Remove( "glARB_texture_env_combine" ); + } + if( extensions.Contains( "gl_ARB_texture_env_crossbar" ) ) { + ARB_texture_env_crossbar = true; + extensions.Remove( "glARB_texture_env_crossbar" ); + } + if( extensions.Contains( "gl_ARB_texture_env_dot3" ) ) { + ARB_texture_env_dot3 = true; + extensions.Remove( "glARB_texture_env_dot3" ); + } + if( extensions.Contains( "gl_ARB_texture_filter_anisotropic" ) ) { + ARB_texture_filter_anisotropic = true; + extensions.Remove( "glARB_texture_filter_anisotropic" ); + } + if( extensions.Contains( "gl_ARB_texture_filter_minmax" ) ) { + ARB_texture_filter_minmax = true; + extensions.Remove( "glARB_texture_filter_minmax" ); + } + if( extensions.Contains( "gl_ARB_texture_float" ) ) { + ARB_texture_float = true; + extensions.Remove( "glARB_texture_float" ); + } + if( extensions.Contains( "gl_ARB_texture_gather" ) ) { + ARB_texture_gather = true; + extensions.Remove( "glARB_texture_gather" ); + } + if( extensions.Contains( "gl_ARB_texture_mirror_clamp_to_edge" ) ) { + ARB_texture_mirror_clamp_to_edge = true; + extensions.Remove( "glARB_texture_mirror_clamp_to_edge" ); + } + if( extensions.Contains( "gl_ARB_texture_mirrored_repeat" ) ) { + ARB_texture_mirrored_repeat = true; + extensions.Remove( "glARB_texture_mirrored_repeat" ); + } + if( extensions.Contains( "gl_ARB_texture_multisample" ) ) { + ARB_texture_multisample = true; + extensions.Remove( "glARB_texture_multisample" ); + } + if( extensions.Contains( "gl_ARB_texture_non_power_of_two" ) ) { + ARB_texture_non_power_of_two = true; + extensions.Remove( "glARB_texture_non_power_of_two" ); + } + if( extensions.Contains( "gl_ARB_texture_query_levels" ) ) { + ARB_texture_query_levels = true; + extensions.Remove( "glARB_texture_query_levels" ); + } + if( extensions.Contains( "gl_ARB_texture_query_lod" ) ) { + ARB_texture_query_lod = true; + extensions.Remove( "glARB_texture_query_lod" ); + } + if( extensions.Contains( "gl_ARB_texture_rectangle" ) ) { + ARB_texture_rectangle = true; + extensions.Remove( "glARB_texture_rectangle" ); + } + if( extensions.Contains( "gl_ARB_texture_rg" ) ) { + ARB_texture_rg = true; + extensions.Remove( "glARB_texture_rg" ); + } + if( extensions.Contains( "gl_ARB_texture_rgb10_a2ui" ) ) { + ARB_texture_rgb10_a2ui = true; + extensions.Remove( "glARB_texture_rgb10_a2ui" ); + } + if( extensions.Contains( "gl_ARB_texture_stencil8" ) ) { + ARB_texture_stencil8 = true; + extensions.Remove( "glARB_texture_stencil8" ); + } + if( extensions.Contains( "gl_ARB_texture_storage" ) ) { + ARB_texture_storage = true; + extensions.Remove( "glARB_texture_storage" ); + } + if( extensions.Contains( "gl_ARB_texture_storage_multisample" ) ) { + ARB_texture_storage_multisample = true; + extensions.Remove( "glARB_texture_storage_multisample" ); + } + if( extensions.Contains( "gl_ARB_texture_swizzle" ) ) { + ARB_texture_swizzle = true; + extensions.Remove( "glARB_texture_swizzle" ); + } + if( extensions.Contains( "gl_ARB_texture_view" ) ) { + ARB_texture_view = true; + extensions.Remove( "glARB_texture_view" ); + } + if( extensions.Contains( "gl_ARB_timer_query" ) ) { + ARB_timer_query = true; + extensions.Remove( "glARB_timer_query" ); + } + if( extensions.Contains( "gl_ARB_transform_feedback2" ) ) { + ARB_transform_feedback2 = true; + extensions.Remove( "glARB_transform_feedback2" ); + } + if( extensions.Contains( "gl_ARB_transform_feedback3" ) ) { + ARB_transform_feedback3 = true; + extensions.Remove( "glARB_transform_feedback3" ); + } + if( extensions.Contains( "gl_ARB_transform_feedback_instanced" ) ) { + ARB_transform_feedback_instanced = true; + extensions.Remove( "glARB_transform_feedback_instanced" ); + } + if( extensions.Contains( + "gl_ARB_transform_feedback_overflow_query" ) ) { + ARB_transform_feedback_overflow_query = true; + extensions.Remove( "glARB_transform_feedback_overflow_query" ); + } + if( extensions.Contains( "gl_ARB_transpose_matrix" ) ) { + ARB_transpose_matrix = true; + extensions.Remove( "glARB_transpose_matrix" ); + } + if( extensions.Contains( "gl_ARB_uniform_buffer_object" ) ) { + ARB_uniform_buffer_object = true; + extensions.Remove( "glARB_uniform_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_vertex_array_bgra" ) ) { + ARB_vertex_array_bgra = true; + extensions.Remove( "glARB_vertex_array_bgra" ); + } + if( extensions.Contains( "gl_ARB_vertex_array_object" ) ) { + ARB_vertex_array_object = true; + extensions.Remove( "glARB_vertex_array_object" ); + } + if( extensions.Contains( "gl_ARB_vertex_attrib_64bit" ) ) { + ARB_vertex_attrib_64bit = true; + extensions.Remove( "glARB_vertex_attrib_64bit" ); + } + if( extensions.Contains( "gl_ARB_vertex_attrib_binding" ) ) { + ARB_vertex_attrib_binding = true; + extensions.Remove( "glARB_vertex_attrib_binding" ); + } + if( extensions.Contains( "gl_ARB_vertex_blend" ) ) { + ARB_vertex_blend = true; + extensions.Remove( "glARB_vertex_blend" ); + } + if( extensions.Contains( "gl_ARB_vertex_buffer_object" ) ) { + ARB_vertex_buffer_object = true; + extensions.Remove( "glARB_vertex_buffer_object" ); + } + if( extensions.Contains( "gl_ARB_vertex_program" ) ) { + ARB_vertex_program = true; + extensions.Remove( "glARB_vertex_program" ); + } + if( extensions.Contains( "gl_ARB_vertex_shader" ) ) { + ARB_vertex_shader = true; + extensions.Remove( "glARB_vertex_shader" ); + } + if( extensions.Contains( "gl_ARB_vertex_type_10f_11f_11f_rev" ) ) { + ARB_vertex_type_10f_11f_11f_rev = true; + extensions.Remove( "glARB_vertex_type_10f_11f_11f_rev" ); + } + if( extensions.Contains( "gl_ARB_vertex_type_2_10_10_10_rev" ) ) { + ARB_vertex_type_2_10_10_10_rev = true; + extensions.Remove( "glARB_vertex_type_2_10_10_10_rev" ); + } + if( extensions.Contains( "gl_ARB_viewport_array" ) ) { + ARB_viewport_array = true; + extensions.Remove( "glARB_viewport_array" ); + } + if( extensions.Contains( "gl_ARB_window_pos" ) ) { + ARB_window_pos = true; + extensions.Remove( "glARB_window_pos" ); + } + if( extensions.Contains( "gl_ATI_draw_buffers" ) ) { + ATI_draw_buffers = true; + extensions.Remove( "glATI_draw_buffers" ); + } + if( extensions.Contains( "gl_ATI_element_array" ) ) { + ATI_element_array = true; + extensions.Remove( "glATI_element_array" ); + } + if( extensions.Contains( "gl_ATI_envmap_bumpmap" ) ) { + ATI_envmap_bumpmap = true; + extensions.Remove( "glATI_envmap_bumpmap" ); + } + if( extensions.Contains( "gl_ATI_fragment_shader" ) ) { + ATI_fragment_shader = true; + extensions.Remove( "glATI_fragment_shader" ); + } + if( extensions.Contains( "gl_ATI_map_object_buffer" ) ) { + ATI_map_object_buffer = true; + extensions.Remove( "glATI_map_object_buffer" ); + } + if( extensions.Contains( "gl_ATI_meminfo" ) ) { + ATI_meminfo = true; + extensions.Remove( "glATI_meminfo" ); + } + if( extensions.Contains( "gl_ATI_pixel_format_float" ) ) { + ATI_pixel_format_float = true; + extensions.Remove( "glATI_pixel_format_float" ); + } + if( extensions.Contains( "gl_ATI_pn_triangles" ) ) { + ATI_pn_triangles = true; + extensions.Remove( "glATI_pn_triangles" ); + } + if( extensions.Contains( "gl_ATI_separate_stencil" ) ) { + ATI_separate_stencil = true; + extensions.Remove( "glATI_separate_stencil" ); + } + if( extensions.Contains( "gl_ATI_text_fragment_shader" ) ) { + ATI_text_fragment_shader = true; + extensions.Remove( "glATI_text_fragment_shader" ); + } + if( extensions.Contains( "gl_ATI_texture_env_combine3" ) ) { + ATI_texture_env_combine3 = true; + extensions.Remove( "glATI_texture_env_combine3" ); + } + if( extensions.Contains( "gl_ATI_texture_float" ) ) { + ATI_texture_float = true; + extensions.Remove( "glATI_texture_float" ); + } + if( extensions.Contains( "gl_ATI_texture_mirror_once" ) ) { + ATI_texture_mirror_once = true; + extensions.Remove( "glATI_texture_mirror_once" ); + } + if( extensions.Contains( "gl_ATI_vertex_array_object" ) ) { + ATI_vertex_array_object = true; + extensions.Remove( "glATI_vertex_array_object" ); + } + if( extensions.Contains( "gl_ATI_vertex_attrib_array_object" ) ) { + ATI_vertex_attrib_array_object = true; + extensions.Remove( "glATI_vertex_attrib_array_object" ); + } + if( extensions.Contains( "gl_ATI_vertex_streams" ) ) { + ATI_vertex_streams = true; + extensions.Remove( "glATI_vertex_streams" ); + } + if( extensions.Contains( "gl_EXT_422_pixels" ) ) { + EXT_422_pixels = true; + extensions.Remove( "glEXT_422_pixels" ); + } + if( extensions.Contains( "gl_EXT_EGL_image_storage" ) ) { + EXT_EGL_image_storage = true; + extensions.Remove( "glEXT_EGL_image_storage" ); + } + if( extensions.Contains( "gl_EXT_EGL_sync" ) ) { + EXT_EGL_sync = true; + extensions.Remove( "glEXT_EGL_sync" ); + } + if( extensions.Contains( "gl_EXT_abgr" ) ) { + EXT_abgr = true; + extensions.Remove( "glEXT_abgr" ); + } + if( extensions.Contains( "gl_EXT_bgra" ) ) { + EXT_bgra = true; + extensions.Remove( "glEXT_bgra" ); + } + if( extensions.Contains( "gl_EXT_bindable_uniform" ) ) { + EXT_bindable_uniform = true; + extensions.Remove( "glEXT_bindable_uniform" ); + } + if( extensions.Contains( "gl_EXT_blend_color" ) ) { + EXT_blend_color = true; + extensions.Remove( "glEXT_blend_color" ); + } + if( extensions.Contains( "gl_EXT_blend_equation_separate" ) ) { + EXT_blend_equation_separate = true; + extensions.Remove( "glEXT_blend_equation_separate" ); + } + if( extensions.Contains( "gl_EXT_blend_func_separate" ) ) { + EXT_blend_func_separate = true; + extensions.Remove( "glEXT_blend_func_separate" ); + } + if( extensions.Contains( "gl_EXT_blend_logic_op" ) ) { + EXT_blend_logic_op = true; + extensions.Remove( "glEXT_blend_logic_op" ); + } + if( extensions.Contains( "gl_EXT_blend_minmax" ) ) { + EXT_blend_minmax = true; + extensions.Remove( "glEXT_blend_minmax" ); + } + if( extensions.Contains( "gl_EXT_blend_subtract" ) ) { + EXT_blend_subtract = true; + extensions.Remove( "glEXT_blend_subtract" ); + } + if( extensions.Contains( "gl_EXT_clip_volume_hint" ) ) { + EXT_clip_volume_hint = true; + extensions.Remove( "glEXT_clip_volume_hint" ); + } + if( extensions.Contains( "gl_EXT_cmyka" ) ) { + EXT_cmyka = true; + extensions.Remove( "glEXT_cmyka" ); + } + if( extensions.Contains( "gl_EXT_color_subtable" ) ) { + EXT_color_subtable = true; + extensions.Remove( "glEXT_color_subtable" ); + } + if( extensions.Contains( "gl_EXT_compiled_vertex_array" ) ) { + EXT_compiled_vertex_array = true; + extensions.Remove( "glEXT_compiled_vertex_array" ); + } + if( extensions.Contains( "gl_EXT_convolution" ) ) { + EXT_convolution = true; + extensions.Remove( "glEXT_convolution" ); + } + if( extensions.Contains( "gl_EXT_coordinate_frame" ) ) { + EXT_coordinate_frame = true; + extensions.Remove( "glEXT_coordinate_frame" ); + } + if( extensions.Contains( "gl_EXT_copy_texture" ) ) { + EXT_copy_texture = true; + extensions.Remove( "glEXT_copy_texture" ); + } + if( extensions.Contains( "gl_EXT_cull_vertex" ) ) { + EXT_cull_vertex = true; + extensions.Remove( "glEXT_cull_vertex" ); + } + if( extensions.Contains( "gl_EXT_debug_label" ) ) { + EXT_debug_label = true; + extensions.Remove( "glEXT_debug_label" ); + } + if( extensions.Contains( "gl_EXT_debug_marker" ) ) { + EXT_debug_marker = true; + extensions.Remove( "glEXT_debug_marker" ); + } + if( extensions.Contains( "gl_EXT_depth_bounds_test" ) ) { + EXT_depth_bounds_test = true; + extensions.Remove( "glEXT_depth_bounds_test" ); + } + if( extensions.Contains( "gl_EXT_direct_state_access" ) ) { + EXT_direct_state_access = true; + extensions.Remove( "glEXT_direct_state_access" ); + } + if( extensions.Contains( "gl_EXT_draw_buffers2" ) ) { + EXT_draw_buffers2 = true; + extensions.Remove( "glEXT_draw_buffers2" ); + } + if( extensions.Contains( "gl_EXT_draw_instanced" ) ) { + EXT_draw_instanced = true; + extensions.Remove( "glEXT_draw_instanced" ); + } + if( extensions.Contains( "gl_EXT_draw_range_elements" ) ) { + EXT_draw_range_elements = true; + extensions.Remove( "glEXT_draw_range_elements" ); + } + if( extensions.Contains( "gl_EXT_external_buffer" ) ) { + EXT_external_buffer = true; + extensions.Remove( "glEXT_external_buffer" ); + } + if( extensions.Contains( "gl_EXT_fog_coord" ) ) { + EXT_fog_coord = true; + extensions.Remove( "glEXT_fog_coord" ); + } + if( extensions.Contains( "gl_EXT_framebuffer_blit" ) ) { + EXT_framebuffer_blit = true; + extensions.Remove( "glEXT_framebuffer_blit" ); + } + if( extensions.Contains( "gl_EXT_framebuffer_blit_layers" ) ) { + EXT_framebuffer_blit_layers = true; + extensions.Remove( "glEXT_framebuffer_blit_layers" ); + } + if( extensions.Contains( "gl_EXT_framebuffer_multisample" ) ) { + EXT_framebuffer_multisample = true; + extensions.Remove( "glEXT_framebuffer_multisample" ); + } + if( extensions.Contains( + "gl_EXT_framebuffer_multisample_blit_scaled" ) ) { + EXT_framebuffer_multisample_blit_scaled = true; + extensions.Remove( "glEXT_framebuffer_multisample_blit_scaled" ); + } + if( extensions.Contains( "gl_EXT_framebuffer_object" ) ) { + EXT_framebuffer_object = true; + extensions.Remove( "glEXT_framebuffer_object" ); + } + if( extensions.Contains( "gl_EXT_framebuffer_sRGB" ) ) { + EXT_framebuffer_sRGB = true; + extensions.Remove( "glEXT_framebuffer_sRGB" ); + } + if( extensions.Contains( "gl_EXT_geometry_shader4" ) ) { + EXT_geometry_shader4 = true; + extensions.Remove( "glEXT_geometry_shader4" ); + } + if( extensions.Contains( "gl_EXT_gpu_program_parameters" ) ) { + EXT_gpu_program_parameters = true; + extensions.Remove( "glEXT_gpu_program_parameters" ); + } + if( extensions.Contains( "gl_EXT_gpu_shader4" ) ) { + EXT_gpu_shader4 = true; + extensions.Remove( "glEXT_gpu_shader4" ); + } + if( extensions.Contains( "gl_EXT_histogram" ) ) { + EXT_histogram = true; + extensions.Remove( "glEXT_histogram" ); + } + if( extensions.Contains( "gl_EXT_index_array_formats" ) ) { + EXT_index_array_formats = true; + extensions.Remove( "glEXT_index_array_formats" ); + } + if( extensions.Contains( "gl_EXT_index_func" ) ) { + EXT_index_func = true; + extensions.Remove( "glEXT_index_func" ); + } + if( extensions.Contains( "gl_EXT_index_material" ) ) { + EXT_index_material = true; + extensions.Remove( "glEXT_index_material" ); + } + if( extensions.Contains( "gl_EXT_index_texture" ) ) { + EXT_index_texture = true; + extensions.Remove( "glEXT_index_texture" ); + } + if( extensions.Contains( "gl_EXT_light_texture" ) ) { + EXT_light_texture = true; + extensions.Remove( "glEXT_light_texture" ); + } + if( extensions.Contains( "gl_EXT_memory_object" ) ) { + EXT_memory_object = true; + extensions.Remove( "glEXT_memory_object" ); + } + if( extensions.Contains( "gl_EXT_memory_object_fd" ) ) { + EXT_memory_object_fd = true; + extensions.Remove( "glEXT_memory_object_fd" ); + } + if( extensions.Contains( "gl_EXT_memory_object_win32" ) ) { + EXT_memory_object_win32 = true; + extensions.Remove( "glEXT_memory_object_win32" ); + } + if( extensions.Contains( "gl_EXT_misc_attribute" ) ) { + EXT_misc_attribute = true; + extensions.Remove( "glEXT_misc_attribute" ); + } + if( extensions.Contains( "gl_EXT_multi_draw_arrays" ) ) { + EXT_multi_draw_arrays = true; + extensions.Remove( "glEXT_multi_draw_arrays" ); + } + if( extensions.Contains( "gl_EXT_multisample" ) ) { + EXT_multisample = true; + extensions.Remove( "glEXT_multisample" ); + } + if( extensions.Contains( + "gl_EXT_multiview_tessellation_geometry_shader" ) ) { + EXT_multiview_tessellation_geometry_shader = true; + extensions.Remove( + "glEXT_multiview_tessellation_geometry_shader" ); + } + if( extensions.Contains( "gl_EXT_multiview_texture_multisample" ) ) { + EXT_multiview_texture_multisample = true; + extensions.Remove( "glEXT_multiview_texture_multisample" ); + } + if( extensions.Contains( "gl_EXT_multiview_timer_query" ) ) { + EXT_multiview_timer_query = true; + extensions.Remove( "glEXT_multiview_timer_query" ); + } + if( extensions.Contains( "gl_EXT_packed_depth_stencil" ) ) { + EXT_packed_depth_stencil = true; + extensions.Remove( "glEXT_packed_depth_stencil" ); + } + if( extensions.Contains( "gl_EXT_packed_float" ) ) { + EXT_packed_float = true; + extensions.Remove( "glEXT_packed_float" ); + } + if( extensions.Contains( "gl_EXT_packed_pixels" ) ) { + EXT_packed_pixels = true; + extensions.Remove( "glEXT_packed_pixels" ); + } + if( extensions.Contains( "gl_EXT_paletted_texture" ) ) { + EXT_paletted_texture = true; + extensions.Remove( "glEXT_paletted_texture" ); + } + if( extensions.Contains( "gl_EXT_pixel_buffer_object" ) ) { + EXT_pixel_buffer_object = true; + extensions.Remove( "glEXT_pixel_buffer_object" ); + } + if( extensions.Contains( "gl_EXT_pixel_transform" ) ) { + EXT_pixel_transform = true; + extensions.Remove( "glEXT_pixel_transform" ); + } + if( extensions.Contains( "gl_EXT_pixel_transform_color_table" ) ) { + EXT_pixel_transform_color_table = true; + extensions.Remove( "glEXT_pixel_transform_color_table" ); + } + if( extensions.Contains( "gl_EXT_point_parameters" ) ) { + EXT_point_parameters = true; + extensions.Remove( "glEXT_point_parameters" ); + } + if( extensions.Contains( "gl_EXT_polygon_offset" ) ) { + EXT_polygon_offset = true; + extensions.Remove( "glEXT_polygon_offset" ); + } + if( extensions.Contains( "gl_EXT_polygon_offset_clamp" ) ) { + EXT_polygon_offset_clamp = true; + extensions.Remove( "glEXT_polygon_offset_clamp" ); + } + if( extensions.Contains( "gl_EXT_post_depth_coverage" ) ) { + EXT_post_depth_coverage = true; + extensions.Remove( "glEXT_post_depth_coverage" ); + } + if( extensions.Contains( "gl_EXT_provoking_vertex" ) ) { + EXT_provoking_vertex = true; + extensions.Remove( "glEXT_provoking_vertex" ); + } + if( extensions.Contains( "gl_EXT_raster_multisample" ) ) { + EXT_raster_multisample = true; + extensions.Remove( "glEXT_raster_multisample" ); + } + if( extensions.Contains( "gl_EXT_rescale_normal" ) ) { + EXT_rescale_normal = true; + extensions.Remove( "glEXT_rescale_normal" ); + } + if( extensions.Contains( "gl_EXT_secondary_color" ) ) { + EXT_secondary_color = true; + extensions.Remove( "glEXT_secondary_color" ); + } + if( extensions.Contains( "gl_EXT_semaphore" ) ) { + EXT_semaphore = true; + extensions.Remove( "glEXT_semaphore" ); + } + if( extensions.Contains( "gl_EXT_semaphore_fd" ) ) { + EXT_semaphore_fd = true; + extensions.Remove( "glEXT_semaphore_fd" ); + } + if( extensions.Contains( "gl_EXT_semaphore_win32" ) ) { + EXT_semaphore_win32 = true; + extensions.Remove( "glEXT_semaphore_win32" ); + } + if( extensions.Contains( "gl_EXT_separate_shader_objects" ) ) { + EXT_separate_shader_objects = true; + extensions.Remove( "glEXT_separate_shader_objects" ); + } + if( extensions.Contains( "gl_EXT_separate_specular_color" ) ) { + EXT_separate_specular_color = true; + extensions.Remove( "glEXT_separate_specular_color" ); + } + if( extensions.Contains( "gl_EXT_shader_framebuffer_fetch" ) ) { + EXT_shader_framebuffer_fetch = true; + extensions.Remove( "glEXT_shader_framebuffer_fetch" ); + } + if( extensions.Contains( + "gl_EXT_shader_framebuffer_fetch_non_coherent" ) ) { + EXT_shader_framebuffer_fetch_non_coherent = true; + extensions.Remove( + "glEXT_shader_framebuffer_fetch_non_coherent" ); + } + if( extensions.Contains( "gl_EXT_shader_image_load_formatted" ) ) { + EXT_shader_image_load_formatted = true; + extensions.Remove( "glEXT_shader_image_load_formatted" ); + } + if( extensions.Contains( "gl_EXT_shader_image_load_store" ) ) { + EXT_shader_image_load_store = true; + extensions.Remove( "glEXT_shader_image_load_store" ); + } + if( extensions.Contains( "gl_EXT_shader_integer_mix" ) ) { + EXT_shader_integer_mix = true; + extensions.Remove( "glEXT_shader_integer_mix" ); + } + if( extensions.Contains( "gl_EXT_shader_samples_identical" ) ) { + EXT_shader_samples_identical = true; + extensions.Remove( "glEXT_shader_samples_identical" ); + } + if( extensions.Contains( "gl_EXT_shadow_funcs" ) ) { + EXT_shadow_funcs = true; + extensions.Remove( "glEXT_shadow_funcs" ); + } + if( extensions.Contains( "gl_EXT_shared_texture_palette" ) ) { + EXT_shared_texture_palette = true; + extensions.Remove( "glEXT_shared_texture_palette" ); + } + if( extensions.Contains( "gl_EXT_sparse_texture2" ) ) { + EXT_sparse_texture2 = true; + extensions.Remove( "glEXT_sparse_texture2" ); + } + if( extensions.Contains( "gl_EXT_stencil_clear_tag" ) ) { + EXT_stencil_clear_tag = true; + extensions.Remove( "glEXT_stencil_clear_tag" ); + } + if( extensions.Contains( "gl_EXT_stencil_two_side" ) ) { + EXT_stencil_two_side = true; + extensions.Remove( "glEXT_stencil_two_side" ); + } + if( extensions.Contains( "gl_EXT_stencil_wrap" ) ) { + EXT_stencil_wrap = true; + extensions.Remove( "glEXT_stencil_wrap" ); + } + if( extensions.Contains( "gl_EXT_subtexture" ) ) { + EXT_subtexture = true; + extensions.Remove( "glEXT_subtexture" ); + } + if( extensions.Contains( "gl_EXT_texture" ) ) { + EXT_texture = true; + extensions.Remove( "glEXT_texture" ); + } + if( extensions.Contains( "gl_EXT_texture3D" ) ) { + EXT_texture3D = true; + extensions.Remove( "glEXT_texture3D" ); + } + if( extensions.Contains( "gl_EXT_texture_array" ) ) { + EXT_texture_array = true; + extensions.Remove( "glEXT_texture_array" ); + } + if( extensions.Contains( "gl_EXT_texture_buffer_object" ) ) { + EXT_texture_buffer_object = true; + extensions.Remove( "glEXT_texture_buffer_object" ); + } + if( extensions.Contains( "gl_EXT_texture_compression_latc" ) ) { + EXT_texture_compression_latc = true; + extensions.Remove( "glEXT_texture_compression_latc" ); + } + if( extensions.Contains( "gl_EXT_texture_compression_rgtc" ) ) { + EXT_texture_compression_rgtc = true; + extensions.Remove( "glEXT_texture_compression_rgtc" ); + } + if( extensions.Contains( "gl_EXT_texture_compression_s3tc" ) ) { + EXT_texture_compression_s3tc = true; + extensions.Remove( "glEXT_texture_compression_s3tc" ); + } + if( extensions.Contains( "gl_EXT_texture_cube_map" ) ) { + EXT_texture_cube_map = true; + extensions.Remove( "glEXT_texture_cube_map" ); + } + if( extensions.Contains( "gl_EXT_texture_env_add" ) ) { + EXT_texture_env_add = true; + extensions.Remove( "glEXT_texture_env_add" ); + } + if( extensions.Contains( "gl_EXT_texture_env_combine" ) ) { + EXT_texture_env_combine = true; + extensions.Remove( "glEXT_texture_env_combine" ); + } + if( extensions.Contains( "gl_EXT_texture_env_dot3" ) ) { + EXT_texture_env_dot3 = true; + extensions.Remove( "glEXT_texture_env_dot3" ); + } + if( extensions.Contains( "gl_EXT_texture_filter_anisotropic" ) ) { + EXT_texture_filter_anisotropic = true; + extensions.Remove( "glEXT_texture_filter_anisotropic" ); + } + if( extensions.Contains( "gl_EXT_texture_filter_minmax" ) ) { + EXT_texture_filter_minmax = true; + extensions.Remove( "glEXT_texture_filter_minmax" ); + } + if( extensions.Contains( "gl_EXT_texture_integer" ) ) { + EXT_texture_integer = true; + extensions.Remove( "glEXT_texture_integer" ); + } + if( extensions.Contains( "gl_EXT_texture_lod_bias" ) ) { + EXT_texture_lod_bias = true; + extensions.Remove( "glEXT_texture_lod_bias" ); + } + if( extensions.Contains( "gl_EXT_texture_mirror_clamp" ) ) { + EXT_texture_mirror_clamp = true; + extensions.Remove( "glEXT_texture_mirror_clamp" ); + } + if( extensions.Contains( "gl_EXT_texture_object" ) ) { + EXT_texture_object = true; + extensions.Remove( "glEXT_texture_object" ); + } + if( extensions.Contains( "gl_EXT_texture_perturb_normal" ) ) { + EXT_texture_perturb_normal = true; + extensions.Remove( "glEXT_texture_perturb_normal" ); + } + if( extensions.Contains( "gl_EXT_texture_sRGB" ) ) { + EXT_texture_sRGB = true; + extensions.Remove( "glEXT_texture_sRGB" ); + } + if( extensions.Contains( "gl_EXT_texture_sRGB_R8" ) ) { + EXT_texture_sRGB_R8 = true; + extensions.Remove( "glEXT_texture_sRGB_R8" ); + } + if( extensions.Contains( "gl_EXT_texture_sRGB_RG8" ) ) { + EXT_texture_sRGB_RG8 = true; + extensions.Remove( "glEXT_texture_sRGB_RG8" ); + } + if( extensions.Contains( "gl_EXT_texture_sRGB_decode" ) ) { + EXT_texture_sRGB_decode = true; + extensions.Remove( "glEXT_texture_sRGB_decode" ); + } + if( extensions.Contains( "gl_EXT_texture_shadow_lod" ) ) { + EXT_texture_shadow_lod = true; + extensions.Remove( "glEXT_texture_shadow_lod" ); + } + if( extensions.Contains( "gl_EXT_texture_shared_exponent" ) ) { + EXT_texture_shared_exponent = true; + extensions.Remove( "glEXT_texture_shared_exponent" ); + } + if( extensions.Contains( "gl_EXT_texture_snorm" ) ) { + EXT_texture_snorm = true; + extensions.Remove( "glEXT_texture_snorm" ); + } + if( extensions.Contains( "gl_EXT_texture_storage" ) ) { + EXT_texture_storage = true; + extensions.Remove( "glEXT_texture_storage" ); + } + if( extensions.Contains( "gl_EXT_texture_swizzle" ) ) { + EXT_texture_swizzle = true; + extensions.Remove( "glEXT_texture_swizzle" ); + } + if( extensions.Contains( "gl_EXT_timer_query" ) ) { + EXT_timer_query = true; + extensions.Remove( "glEXT_timer_query" ); + } + if( extensions.Contains( "gl_EXT_transform_feedback" ) ) { + EXT_transform_feedback = true; + extensions.Remove( "glEXT_transform_feedback" ); + } + if( extensions.Contains( "gl_EXT_vertex_array" ) ) { + EXT_vertex_array = true; + extensions.Remove( "glEXT_vertex_array" ); + } + if( extensions.Contains( "gl_EXT_vertex_array_bgra" ) ) { + EXT_vertex_array_bgra = true; + extensions.Remove( "glEXT_vertex_array_bgra" ); + } + if( extensions.Contains( "gl_EXT_vertex_attrib_64bit" ) ) { + EXT_vertex_attrib_64bit = true; + extensions.Remove( "glEXT_vertex_attrib_64bit" ); + } + if( extensions.Contains( "gl_EXT_vertex_shader" ) ) { + EXT_vertex_shader = true; + extensions.Remove( "glEXT_vertex_shader" ); + } + if( extensions.Contains( "gl_EXT_vertex_weighting" ) ) { + EXT_vertex_weighting = true; + extensions.Remove( "glEXT_vertex_weighting" ); + } + if( extensions.Contains( "gl_EXT_win32_keyed_mutex" ) ) { + EXT_win32_keyed_mutex = true; + extensions.Remove( "glEXT_win32_keyed_mutex" ); + } + if( extensions.Contains( "gl_EXT_window_rectangles" ) ) { + EXT_window_rectangles = true; + extensions.Remove( "glEXT_window_rectangles" ); + } + if( extensions.Contains( "gl_EXT_x11_sync_object" ) ) { + EXT_x11_sync_object = true; + extensions.Remove( "glEXT_x11_sync_object" ); + } + if( extensions.Contains( "gl_GREMEDY_frame_terminator" ) ) { + GREMEDY_frame_terminator = true; + extensions.Remove( "glGREMEDY_frame_terminator" ); + } + if( extensions.Contains( "gl_GREMEDY_string_marker" ) ) { + GREMEDY_string_marker = true; + extensions.Remove( "glGREMEDY_string_marker" ); + } + if( extensions.Contains( "gl_HP_convolution_border_modes" ) ) { + HP_convolution_border_modes = true; + extensions.Remove( "glHP_convolution_border_modes" ); + } + if( extensions.Contains( "gl_HP_image_transform" ) ) { + HP_image_transform = true; + extensions.Remove( "glHP_image_transform" ); + } + if( extensions.Contains( "gl_HP_occlusion_test" ) ) { + HP_occlusion_test = true; + extensions.Remove( "glHP_occlusion_test" ); + } + if( extensions.Contains( "gl_HP_texture_lighting" ) ) { + HP_texture_lighting = true; + extensions.Remove( "glHP_texture_lighting" ); + } + if( extensions.Contains( "gl_IBM_cull_vertex" ) ) { + IBM_cull_vertex = true; + extensions.Remove( "glIBM_cull_vertex" ); + } + if( extensions.Contains( "gl_IBM_multimode_draw_arrays" ) ) { + IBM_multimode_draw_arrays = true; + extensions.Remove( "glIBM_multimode_draw_arrays" ); + } + if( extensions.Contains( "gl_IBM_rasterpos_clip" ) ) { + IBM_rasterpos_clip = true; + extensions.Remove( "glIBM_rasterpos_clip" ); + } + if( extensions.Contains( "gl_IBM_static_data" ) ) { + IBM_static_data = true; + extensions.Remove( "glIBM_static_data" ); + } + if( extensions.Contains( "gl_IBM_texture_mirrored_repeat" ) ) { + IBM_texture_mirrored_repeat = true; + extensions.Remove( "glIBM_texture_mirrored_repeat" ); + } + if( extensions.Contains( "gl_IBM_vertex_array_lists" ) ) { + IBM_vertex_array_lists = true; + extensions.Remove( "glIBM_vertex_array_lists" ); + } + if( extensions.Contains( "gl_INGR_blend_func_separate" ) ) { + INGR_blend_func_separate = true; + extensions.Remove( "glINGR_blend_func_separate" ); + } + if( extensions.Contains( "gl_INGR_color_clamp" ) ) { + INGR_color_clamp = true; + extensions.Remove( "glINGR_color_clamp" ); + } + if( extensions.Contains( "gl_INGR_interlace_read" ) ) { + INGR_interlace_read = true; + extensions.Remove( "glINGR_interlace_read" ); + } + if( extensions.Contains( "gl_INTEL_blackhole_render" ) ) { + INTEL_blackhole_render = true; + extensions.Remove( "glINTEL_blackhole_render" ); + } + if( extensions.Contains( "gl_INTEL_conservative_rasterization" ) ) { + INTEL_conservative_rasterization = true; + extensions.Remove( "glINTEL_conservative_rasterization" ); + } + if( extensions.Contains( "gl_INTEL_fragment_shader_ordering" ) ) { + INTEL_fragment_shader_ordering = true; + extensions.Remove( "glINTEL_fragment_shader_ordering" ); + } + if( extensions.Contains( "gl_INTEL_framebuffer_CMAA" ) ) { + INTEL_framebuffer_CMAA = true; + extensions.Remove( "glINTEL_framebuffer_CMAA" ); + } + if( extensions.Contains( "gl_INTEL_map_texture" ) ) { + INTEL_map_texture = true; + extensions.Remove( "glINTEL_map_texture" ); + } + if( extensions.Contains( "gl_INTEL_parallel_arrays" ) ) { + INTEL_parallel_arrays = true; + extensions.Remove( "glINTEL_parallel_arrays" ); + } + if( extensions.Contains( "gl_INTEL_performance_query" ) ) { + INTEL_performance_query = true; + extensions.Remove( "glINTEL_performance_query" ); + } + if( extensions.Contains( "gl_KHR_blend_equation_advanced" ) ) { + KHR_blend_equation_advanced = true; + extensions.Remove( "glKHR_blend_equation_advanced" ); + } + if( extensions.Contains( "gl_KHR_blend_equation_advanced_coherent" ) ) { + KHR_blend_equation_advanced_coherent = true; + extensions.Remove( "glKHR_blend_equation_advanced_coherent" ); + } + if( extensions.Contains( "gl_KHR_context_flush_control" ) ) { + KHR_context_flush_control = true; + extensions.Remove( "glKHR_context_flush_control" ); + } + if( extensions.Contains( "gl_KHR_debug" ) ) { + KHR_debug = true; + extensions.Remove( "glKHR_debug" ); + } + if( extensions.Contains( "gl_KHR_no_error" ) ) { + KHR_no_error = true; + extensions.Remove( "glKHR_no_error" ); + } + if( extensions.Contains( "gl_KHR_parallel_shader_compile" ) ) { + KHR_parallel_shader_compile = true; + extensions.Remove( "glKHR_parallel_shader_compile" ); + } + if( extensions.Contains( "gl_KHR_robust_buffer_access_behavior" ) ) { + KHR_robust_buffer_access_behavior = true; + extensions.Remove( "glKHR_robust_buffer_access_behavior" ); + } + if( extensions.Contains( "gl_KHR_robustness" ) ) { + KHR_robustness = true; + extensions.Remove( "glKHR_robustness" ); + } + if( extensions.Contains( "gl_KHR_shader_subgroup" ) ) { + KHR_shader_subgroup = true; + extensions.Remove( "glKHR_shader_subgroup" ); + } + if( extensions.Contains( "gl_KHR_texture_compression_astc_hdr" ) ) { + KHR_texture_compression_astc_hdr = true; + extensions.Remove( "glKHR_texture_compression_astc_hdr" ); + } + if( extensions.Contains( "gl_KHR_texture_compression_astc_ldr" ) ) { + KHR_texture_compression_astc_ldr = true; + extensions.Remove( "glKHR_texture_compression_astc_ldr" ); + } + if( extensions.Contains( + "gl_KHR_texture_compression_astc_sliced_3d" ) ) { + KHR_texture_compression_astc_sliced_3d = true; + extensions.Remove( "glKHR_texture_compression_astc_sliced_3d" ); + } + if( extensions.Contains( "gl_MESAX_texture_stack" ) ) { + MESAX_texture_stack = true; + extensions.Remove( "glMESAX_texture_stack" ); + } + if( extensions.Contains( "gl_MESA_framebuffer_flip_x" ) ) { + MESA_framebuffer_flip_x = true; + extensions.Remove( "glMESA_framebuffer_flip_x" ); + } + if( extensions.Contains( "gl_MESA_framebuffer_flip_y" ) ) { + MESA_framebuffer_flip_y = true; + extensions.Remove( "glMESA_framebuffer_flip_y" ); + } + if( extensions.Contains( "gl_MESA_framebuffer_swap_xy" ) ) { + MESA_framebuffer_swap_xy = true; + extensions.Remove( "glMESA_framebuffer_swap_xy" ); + } + if( extensions.Contains( "gl_MESA_pack_invert" ) ) { + MESA_pack_invert = true; + extensions.Remove( "glMESA_pack_invert" ); + } + if( extensions.Contains( "gl_MESA_program_binary_formats" ) ) { + MESA_program_binary_formats = true; + extensions.Remove( "glMESA_program_binary_formats" ); + } + if( extensions.Contains( "gl_MESA_resize_buffers" ) ) { + MESA_resize_buffers = true; + extensions.Remove( "glMESA_resize_buffers" ); + } + if( extensions.Contains( "gl_MESA_shader_integer_functions" ) ) { + MESA_shader_integer_functions = true; + extensions.Remove( "glMESA_shader_integer_functions" ); + } + if( extensions.Contains( "gl_MESA_tile_raster_order" ) ) { + MESA_tile_raster_order = true; + extensions.Remove( "glMESA_tile_raster_order" ); + } + if( extensions.Contains( "gl_MESA_window_pos" ) ) { + MESA_window_pos = true; + extensions.Remove( "glMESA_window_pos" ); + } + if( extensions.Contains( "gl_MESA_ycbcr_texture" ) ) { + MESA_ycbcr_texture = true; + extensions.Remove( "glMESA_ycbcr_texture" ); + } + if( extensions.Contains( + "gl_NVX_blend_equation_advanced_multi_draw_buffers" ) ) { + NVX_blend_equation_advanced_multi_draw_buffers = true; + extensions.Remove( + "glNVX_blend_equation_advanced_multi_draw_buffers" ); + } + if( extensions.Contains( "gl_NVX_conditional_render" ) ) { + NVX_conditional_render = true; + extensions.Remove( "glNVX_conditional_render" ); + } + if( extensions.Contains( "gl_NVX_gpu_memory_info" ) ) { + NVX_gpu_memory_info = true; + extensions.Remove( "glNVX_gpu_memory_info" ); + } + if( extensions.Contains( "gl_NVX_gpu_multicast2" ) ) { + NVX_gpu_multicast2 = true; + extensions.Remove( "glNVX_gpu_multicast2" ); + } + if( extensions.Contains( "gl_NVX_linked_gpu_multicast" ) ) { + NVX_linked_gpu_multicast = true; + extensions.Remove( "glNVX_linked_gpu_multicast" ); + } + if( extensions.Contains( "gl_NVX_progress_fence" ) ) { + NVX_progress_fence = true; + extensions.Remove( "glNVX_progress_fence" ); + } + if( extensions.Contains( "gl_NV_alpha_to_coverage_dither_control" ) ) { + NV_alpha_to_coverage_dither_control = true; + extensions.Remove( "glNV_alpha_to_coverage_dither_control" ); + } + if( extensions.Contains( "gl_NV_bindless_multi_draw_indirect" ) ) { + NV_bindless_multi_draw_indirect = true; + extensions.Remove( "glNV_bindless_multi_draw_indirect" ); + } + if( extensions.Contains( + "gl_NV_bindless_multi_draw_indirect_count" ) ) { + NV_bindless_multi_draw_indirect_count = true; + extensions.Remove( "glNV_bindless_multi_draw_indirect_count" ); + } + if( extensions.Contains( "gl_NV_bindless_texture" ) ) { + NV_bindless_texture = true; + extensions.Remove( "glNV_bindless_texture" ); + } + if( extensions.Contains( "gl_NV_blend_equation_advanced" ) ) { + NV_blend_equation_advanced = true; + extensions.Remove( "glNV_blend_equation_advanced" ); + } + if( extensions.Contains( "gl_NV_blend_equation_advanced_coherent" ) ) { + NV_blend_equation_advanced_coherent = true; + extensions.Remove( "glNV_blend_equation_advanced_coherent" ); + } + if( extensions.Contains( "gl_NV_blend_minmax_factor" ) ) { + NV_blend_minmax_factor = true; + extensions.Remove( "glNV_blend_minmax_factor" ); + } + if( extensions.Contains( "gl_NV_blend_square" ) ) { + NV_blend_square = true; + extensions.Remove( "glNV_blend_square" ); + } + if( extensions.Contains( "gl_NV_clip_space_w_scaling" ) ) { + NV_clip_space_w_scaling = true; + extensions.Remove( "glNV_clip_space_w_scaling" ); + } + if( extensions.Contains( "gl_NV_command_list" ) ) { + NV_command_list = true; + extensions.Remove( "glNV_command_list" ); + } + if( extensions.Contains( "gl_NV_compute_program5" ) ) { + NV_compute_program5 = true; + extensions.Remove( "glNV_compute_program5" ); + } + if( extensions.Contains( "gl_NV_compute_shader_derivatives" ) ) { + NV_compute_shader_derivatives = true; + extensions.Remove( "glNV_compute_shader_derivatives" ); + } + if( extensions.Contains( "gl_NV_conditional_render" ) ) { + NV_conditional_render = true; + extensions.Remove( "glNV_conditional_render" ); + } + if( extensions.Contains( "gl_NV_conservative_raster" ) ) { + NV_conservative_raster = true; + extensions.Remove( "glNV_conservative_raster" ); + } + if( extensions.Contains( "gl_NV_conservative_raster_dilate" ) ) { + NV_conservative_raster_dilate = true; + extensions.Remove( "glNV_conservative_raster_dilate" ); + } + if( extensions.Contains( "gl_NV_conservative_raster_pre_snap" ) ) { + NV_conservative_raster_pre_snap = true; + extensions.Remove( "glNV_conservative_raster_pre_snap" ); + } + if( extensions.Contains( + "gl_NV_conservative_raster_pre_snap_triangles" ) ) { + NV_conservative_raster_pre_snap_triangles = true; + extensions.Remove( + "glNV_conservative_raster_pre_snap_triangles" ); + } + if( extensions.Contains( + "gl_NV_conservative_raster_underestimation" ) ) { + NV_conservative_raster_underestimation = true; + extensions.Remove( "glNV_conservative_raster_underestimation" ); + } + if( extensions.Contains( "gl_NV_copy_depth_to_color" ) ) { + NV_copy_depth_to_color = true; + extensions.Remove( "glNV_copy_depth_to_color" ); + } + if( extensions.Contains( "gl_NV_copy_image" ) ) { + NV_copy_image = true; + extensions.Remove( "glNV_copy_image" ); + } + if( extensions.Contains( "gl_NV_deep_texture3D" ) ) { + NV_deep_texture3D = true; + extensions.Remove( "glNV_deep_texture3D" ); + } + if( extensions.Contains( "gl_NV_depth_buffer_float" ) ) { + NV_depth_buffer_float = true; + extensions.Remove( "glNV_depth_buffer_float" ); + } + if( extensions.Contains( "gl_NV_depth_clamp" ) ) { + NV_depth_clamp = true; + extensions.Remove( "glNV_depth_clamp" ); + } + if( extensions.Contains( "gl_NV_draw_texture" ) ) { + NV_draw_texture = true; + extensions.Remove( "glNV_draw_texture" ); + } + if( extensions.Contains( "gl_NV_draw_vulkan_image" ) ) { + NV_draw_vulkan_image = true; + extensions.Remove( "glNV_draw_vulkan_image" ); + } + if( extensions.Contains( "gl_NV_evaluators" ) ) { + NV_evaluators = true; + extensions.Remove( "glNV_evaluators" ); + } + if( extensions.Contains( "gl_NV_explicit_multisample" ) ) { + NV_explicit_multisample = true; + extensions.Remove( "glNV_explicit_multisample" ); + } + if( extensions.Contains( "gl_NV_fence" ) ) { + NV_fence = true; + extensions.Remove( "glNV_fence" ); + } + if( extensions.Contains( "gl_NV_fill_rectangle" ) ) { + NV_fill_rectangle = true; + extensions.Remove( "glNV_fill_rectangle" ); + } + if( extensions.Contains( "gl_NV_float_buffer" ) ) { + NV_float_buffer = true; + extensions.Remove( "glNV_float_buffer" ); + } + if( extensions.Contains( "gl_NV_fog_distance" ) ) { + NV_fog_distance = true; + extensions.Remove( "glNV_fog_distance" ); + } + if( extensions.Contains( "gl_NV_fragment_coverage_to_color" ) ) { + NV_fragment_coverage_to_color = true; + extensions.Remove( "glNV_fragment_coverage_to_color" ); + } + if( extensions.Contains( "gl_NV_fragment_program" ) ) { + NV_fragment_program = true; + extensions.Remove( "glNV_fragment_program" ); + } + if( extensions.Contains( "gl_NV_fragment_program2" ) ) { + NV_fragment_program2 = true; + extensions.Remove( "glNV_fragment_program2" ); + } + if( extensions.Contains( "gl_NV_fragment_program4" ) ) { + NV_fragment_program4 = true; + extensions.Remove( "glNV_fragment_program4" ); + } + if( extensions.Contains( "gl_NV_fragment_program_option" ) ) { + NV_fragment_program_option = true; + extensions.Remove( "glNV_fragment_program_option" ); + } + if( extensions.Contains( "gl_NV_fragment_shader_barycentric" ) ) { + NV_fragment_shader_barycentric = true; + extensions.Remove( "glNV_fragment_shader_barycentric" ); + } + if( extensions.Contains( "gl_NV_fragment_shader_interlock" ) ) { + NV_fragment_shader_interlock = true; + extensions.Remove( "glNV_fragment_shader_interlock" ); + } + if( extensions.Contains( "gl_NV_framebuffer_mixed_samples" ) ) { + NV_framebuffer_mixed_samples = true; + extensions.Remove( "glNV_framebuffer_mixed_samples" ); + } + if( extensions.Contains( "gl_NV_framebuffer_multisample_coverage" ) ) { + NV_framebuffer_multisample_coverage = true; + extensions.Remove( "glNV_framebuffer_multisample_coverage" ); + } + if( extensions.Contains( "gl_NV_geometry_program4" ) ) { + NV_geometry_program4 = true; + extensions.Remove( "glNV_geometry_program4" ); + } + if( extensions.Contains( "gl_NV_geometry_shader4" ) ) { + NV_geometry_shader4 = true; + extensions.Remove( "glNV_geometry_shader4" ); + } + if( extensions.Contains( "gl_NV_geometry_shader_passthrough" ) ) { + NV_geometry_shader_passthrough = true; + extensions.Remove( "glNV_geometry_shader_passthrough" ); + } + if( extensions.Contains( "gl_NV_gpu_multicast" ) ) { + NV_gpu_multicast = true; + extensions.Remove( "glNV_gpu_multicast" ); + } + if( extensions.Contains( "gl_NV_gpu_program4" ) ) { + NV_gpu_program4 = true; + extensions.Remove( "glNV_gpu_program4" ); + } + if( extensions.Contains( "gl_NV_gpu_program5" ) ) { + NV_gpu_program5 = true; + extensions.Remove( "glNV_gpu_program5" ); + } + if( extensions.Contains( "gl_NV_gpu_program5_mem_extended" ) ) { + NV_gpu_program5_mem_extended = true; + extensions.Remove( "glNV_gpu_program5_mem_extended" ); + } + if( extensions.Contains( "gl_NV_gpu_shader5" ) ) { + NV_gpu_shader5 = true; + extensions.Remove( "glNV_gpu_shader5" ); + } + if( extensions.Contains( "gl_NV_half_float" ) ) { + NV_half_float = true; + extensions.Remove( "glNV_half_float" ); + } + if( extensions.Contains( "gl_NV_internalformat_sample_query" ) ) { + NV_internalformat_sample_query = true; + extensions.Remove( "glNV_internalformat_sample_query" ); + } + if( extensions.Contains( "gl_NV_light_max_exponent" ) ) { + NV_light_max_exponent = true; + extensions.Remove( "glNV_light_max_exponent" ); + } + if( extensions.Contains( "gl_NV_memory_attachment" ) ) { + NV_memory_attachment = true; + extensions.Remove( "glNV_memory_attachment" ); + } + if( extensions.Contains( "gl_NV_memory_object_sparse" ) ) { + NV_memory_object_sparse = true; + extensions.Remove( "glNV_memory_object_sparse" ); + } + if( extensions.Contains( "gl_NV_mesh_shader" ) ) { + NV_mesh_shader = true; + extensions.Remove( "glNV_mesh_shader" ); + } + if( extensions.Contains( "gl_NV_multisample_coverage" ) ) { + NV_multisample_coverage = true; + extensions.Remove( "glNV_multisample_coverage" ); + } + if( extensions.Contains( "gl_NV_multisample_filter_hint" ) ) { + NV_multisample_filter_hint = true; + extensions.Remove( "glNV_multisample_filter_hint" ); + } + if( extensions.Contains( "gl_NV_occlusion_query" ) ) { + NV_occlusion_query = true; + extensions.Remove( "glNV_occlusion_query" ); + } + if( extensions.Contains( "gl_NV_packed_depth_stencil" ) ) { + NV_packed_depth_stencil = true; + extensions.Remove( "glNV_packed_depth_stencil" ); + } + if( extensions.Contains( "gl_NV_parameter_buffer_object" ) ) { + NV_parameter_buffer_object = true; + extensions.Remove( "glNV_parameter_buffer_object" ); + } + if( extensions.Contains( "gl_NV_parameter_buffer_object2" ) ) { + NV_parameter_buffer_object2 = true; + extensions.Remove( "glNV_parameter_buffer_object2" ); + } + if( extensions.Contains( "gl_NV_path_rendering" ) ) { + NV_path_rendering = true; + extensions.Remove( "glNV_path_rendering" ); + } + if( extensions.Contains( "gl_NV_path_rendering_shared_edge" ) ) { + NV_path_rendering_shared_edge = true; + extensions.Remove( "glNV_path_rendering_shared_edge" ); + } + if( extensions.Contains( "gl_NV_pixel_data_range" ) ) { + NV_pixel_data_range = true; + extensions.Remove( "glNV_pixel_data_range" ); + } + if( extensions.Contains( "gl_NV_point_sprite" ) ) { + NV_point_sprite = true; + extensions.Remove( "glNV_point_sprite" ); + } + if( extensions.Contains( "gl_NV_present_video" ) ) { + NV_present_video = true; + extensions.Remove( "glNV_present_video" ); + } + if( extensions.Contains( "gl_NV_primitive_restart" ) ) { + NV_primitive_restart = true; + extensions.Remove( "glNV_primitive_restart" ); + } + if( extensions.Contains( "gl_NV_primitive_shading_rate" ) ) { + NV_primitive_shading_rate = true; + extensions.Remove( "glNV_primitive_shading_rate" ); + } + if( extensions.Contains( "gl_NV_query_resource" ) ) { + NV_query_resource = true; + extensions.Remove( "glNV_query_resource" ); + } + if( extensions.Contains( "gl_NV_query_resource_tag" ) ) { + NV_query_resource_tag = true; + extensions.Remove( "glNV_query_resource_tag" ); + } + if( extensions.Contains( "gl_NV_register_combiners" ) ) { + NV_register_combiners = true; + extensions.Remove( "glNV_register_combiners" ); + } + if( extensions.Contains( "gl_NV_register_combiners2" ) ) { + NV_register_combiners2 = true; + extensions.Remove( "glNV_register_combiners2" ); + } + if( extensions.Contains( "gl_NV_representative_fragment_test" ) ) { + NV_representative_fragment_test = true; + extensions.Remove( "glNV_representative_fragment_test" ); + } + if( extensions.Contains( "gl_NV_robustness_video_memory_purge" ) ) { + NV_robustness_video_memory_purge = true; + extensions.Remove( "glNV_robustness_video_memory_purge" ); + } + if( extensions.Contains( "gl_NV_sample_locations" ) ) { + NV_sample_locations = true; + extensions.Remove( "glNV_sample_locations" ); + } + if( extensions.Contains( "gl_NV_sample_mask_override_coverage" ) ) { + NV_sample_mask_override_coverage = true; + extensions.Remove( "glNV_sample_mask_override_coverage" ); + } + if( extensions.Contains( "gl_NV_scissor_exclusive" ) ) { + NV_scissor_exclusive = true; + extensions.Remove( "glNV_scissor_exclusive" ); + } + if( extensions.Contains( "gl_NV_shader_atomic_counters" ) ) { + NV_shader_atomic_counters = true; + extensions.Remove( "glNV_shader_atomic_counters" ); + } + if( extensions.Contains( "gl_NV_shader_atomic_float" ) ) { + NV_shader_atomic_float = true; + extensions.Remove( "glNV_shader_atomic_float" ); + } + if( extensions.Contains( "gl_NV_shader_atomic_float64" ) ) { + NV_shader_atomic_float64 = true; + extensions.Remove( "glNV_shader_atomic_float64" ); + } + if( extensions.Contains( "gl_NV_shader_atomic_fp16_vector" ) ) { + NV_shader_atomic_fp16_vector = true; + extensions.Remove( "glNV_shader_atomic_fp16_vector" ); + } + if( extensions.Contains( "gl_NV_shader_atomic_int64" ) ) { + NV_shader_atomic_int64 = true; + extensions.Remove( "glNV_shader_atomic_int64" ); + } + if( extensions.Contains( "gl_NV_shader_buffer_load" ) ) { + NV_shader_buffer_load = true; + extensions.Remove( "glNV_shader_buffer_load" ); + } + if( extensions.Contains( "gl_NV_shader_buffer_store" ) ) { + NV_shader_buffer_store = true; + extensions.Remove( "glNV_shader_buffer_store" ); + } + if( extensions.Contains( "gl_NV_shader_storage_buffer_object" ) ) { + NV_shader_storage_buffer_object = true; + extensions.Remove( "glNV_shader_storage_buffer_object" ); + } + if( extensions.Contains( "gl_NV_shader_subgroup_partitioned" ) ) { + NV_shader_subgroup_partitioned = true; + extensions.Remove( "glNV_shader_subgroup_partitioned" ); + } + if( extensions.Contains( "gl_NV_shader_texture_footprint" ) ) { + NV_shader_texture_footprint = true; + extensions.Remove( "glNV_shader_texture_footprint" ); + } + if( extensions.Contains( "gl_NV_shader_thread_group" ) ) { + NV_shader_thread_group = true; + extensions.Remove( "glNV_shader_thread_group" ); + } + if( extensions.Contains( "gl_NV_shader_thread_shuffle" ) ) { + NV_shader_thread_shuffle = true; + extensions.Remove( "glNV_shader_thread_shuffle" ); + } + if( extensions.Contains( "gl_NV_shading_rate_image" ) ) { + NV_shading_rate_image = true; + extensions.Remove( "glNV_shading_rate_image" ); + } + if( extensions.Contains( "gl_NV_stereo_view_rendering" ) ) { + NV_stereo_view_rendering = true; + extensions.Remove( "glNV_stereo_view_rendering" ); + } + if( extensions.Contains( "gl_NV_tessellation_program5" ) ) { + NV_tessellation_program5 = true; + extensions.Remove( "glNV_tessellation_program5" ); + } + if( extensions.Contains( "gl_NV_texgen_emboss" ) ) { + NV_texgen_emboss = true; + extensions.Remove( "glNV_texgen_emboss" ); + } + if( extensions.Contains( "gl_NV_texgen_reflection" ) ) { + NV_texgen_reflection = true; + extensions.Remove( "glNV_texgen_reflection" ); + } + if( extensions.Contains( "gl_NV_texture_barrier" ) ) { + NV_texture_barrier = true; + extensions.Remove( "glNV_texture_barrier" ); + } + if( extensions.Contains( "gl_NV_texture_compression_vtc" ) ) { + NV_texture_compression_vtc = true; + extensions.Remove( "glNV_texture_compression_vtc" ); + } + if( extensions.Contains( "gl_NV_texture_env_combine4" ) ) { + NV_texture_env_combine4 = true; + extensions.Remove( "glNV_texture_env_combine4" ); + } + if( extensions.Contains( "gl_NV_texture_expand_normal" ) ) { + NV_texture_expand_normal = true; + extensions.Remove( "glNV_texture_expand_normal" ); + } + if( extensions.Contains( "gl_NV_texture_multisample" ) ) { + NV_texture_multisample = true; + extensions.Remove( "glNV_texture_multisample" ); + } + if( extensions.Contains( "gl_NV_texture_rectangle" ) ) { + NV_texture_rectangle = true; + extensions.Remove( "glNV_texture_rectangle" ); + } + if( extensions.Contains( "gl_NV_texture_rectangle_compressed" ) ) { + NV_texture_rectangle_compressed = true; + extensions.Remove( "glNV_texture_rectangle_compressed" ); + } + if( extensions.Contains( "gl_NV_texture_shader" ) ) { + NV_texture_shader = true; + extensions.Remove( "glNV_texture_shader" ); + } + if( extensions.Contains( "gl_NV_texture_shader2" ) ) { + NV_texture_shader2 = true; + extensions.Remove( "glNV_texture_shader2" ); + } + if( extensions.Contains( "gl_NV_texture_shader3" ) ) { + NV_texture_shader3 = true; + extensions.Remove( "glNV_texture_shader3" ); + } + if( extensions.Contains( "gl_NV_timeline_semaphore" ) ) { + NV_timeline_semaphore = true; + extensions.Remove( "glNV_timeline_semaphore" ); + } + if( extensions.Contains( "gl_NV_transform_feedback" ) ) { + NV_transform_feedback = true; + extensions.Remove( "glNV_transform_feedback" ); + } + if( extensions.Contains( "gl_NV_transform_feedback2" ) ) { + NV_transform_feedback2 = true; + extensions.Remove( "glNV_transform_feedback2" ); + } + if( extensions.Contains( "gl_NV_uniform_buffer_std430_layout" ) ) { + NV_uniform_buffer_std430_layout = true; + extensions.Remove( "glNV_uniform_buffer_std430_layout" ); + } + if( extensions.Contains( "gl_NV_uniform_buffer_unified_memory" ) ) { + NV_uniform_buffer_unified_memory = true; + extensions.Remove( "glNV_uniform_buffer_unified_memory" ); + } + if( extensions.Contains( "gl_NV_vdpau_interop" ) ) { + NV_vdpau_interop = true; + extensions.Remove( "glNV_vdpau_interop" ); + } + if( extensions.Contains( "gl_NV_vdpau_interop2" ) ) { + NV_vdpau_interop2 = true; + extensions.Remove( "glNV_vdpau_interop2" ); + } + if( extensions.Contains( "gl_NV_vertex_array_range" ) ) { + NV_vertex_array_range = true; + extensions.Remove( "glNV_vertex_array_range" ); + } + if( extensions.Contains( "gl_NV_vertex_array_range2" ) ) { + NV_vertex_array_range2 = true; + extensions.Remove( "glNV_vertex_array_range2" ); + } + if( extensions.Contains( "gl_NV_vertex_attrib_integer_64bit" ) ) { + NV_vertex_attrib_integer_64bit = true; + extensions.Remove( "glNV_vertex_attrib_integer_64bit" ); + } + if( extensions.Contains( "gl_NV_vertex_buffer_unified_memory" ) ) { + NV_vertex_buffer_unified_memory = true; + extensions.Remove( "glNV_vertex_buffer_unified_memory" ); + } + if( extensions.Contains( "gl_NV_vertex_program" ) ) { + NV_vertex_program = true; + extensions.Remove( "glNV_vertex_program" ); + } + if( extensions.Contains( "gl_NV_vertex_program1_1" ) ) { + NV_vertex_program1_1 = true; + extensions.Remove( "glNV_vertex_program1_1" ); + } + if( extensions.Contains( "gl_NV_vertex_program2" ) ) { + NV_vertex_program2 = true; + extensions.Remove( "glNV_vertex_program2" ); + } + if( extensions.Contains( "gl_NV_vertex_program2_option" ) ) { + NV_vertex_program2_option = true; + extensions.Remove( "glNV_vertex_program2_option" ); + } + if( extensions.Contains( "gl_NV_vertex_program3" ) ) { + NV_vertex_program3 = true; + extensions.Remove( "glNV_vertex_program3" ); + } + if( extensions.Contains( "gl_NV_vertex_program4" ) ) { + NV_vertex_program4 = true; + extensions.Remove( "glNV_vertex_program4" ); + } + if( extensions.Contains( "gl_NV_video_capture" ) ) { + NV_video_capture = true; + extensions.Remove( "glNV_video_capture" ); + } + if( extensions.Contains( "gl_NV_viewport_array2" ) ) { + NV_viewport_array2 = true; + extensions.Remove( "glNV_viewport_array2" ); + } + if( extensions.Contains( "gl_NV_viewport_swizzle" ) ) { + NV_viewport_swizzle = true; + extensions.Remove( "glNV_viewport_swizzle" ); + } + if( extensions.Contains( "gl_OES_byte_coordinates" ) ) { + OES_byte_coordinates = true; + extensions.Remove( "glOES_byte_coordinates" ); + } + if( extensions.Contains( "gl_OES_compressed_paletted_texture" ) ) { + OES_compressed_paletted_texture = true; + extensions.Remove( "glOES_compressed_paletted_texture" ); + } + if( extensions.Contains( "gl_OES_fixed_point" ) ) { + OES_fixed_point = true; + extensions.Remove( "glOES_fixed_point" ); + } + if( extensions.Contains( "gl_OES_query_matrix" ) ) { + OES_query_matrix = true; + extensions.Remove( "glOES_query_matrix" ); + } + if( extensions.Contains( "gl_OES_read_format" ) ) { + OES_read_format = true; + extensions.Remove( "glOES_read_format" ); + } + if( extensions.Contains( "gl_OES_single_precision" ) ) { + OES_single_precision = true; + extensions.Remove( "glOES_single_precision" ); + } + if( extensions.Contains( "gl_OML_interlace" ) ) { + OML_interlace = true; + extensions.Remove( "glOML_interlace" ); + } + if( extensions.Contains( "gl_OML_resample" ) ) { + OML_resample = true; + extensions.Remove( "glOML_resample" ); + } + if( extensions.Contains( "gl_OML_subsample" ) ) { + OML_subsample = true; + extensions.Remove( "glOML_subsample" ); + } + if( extensions.Contains( "gl_OVR_multiview" ) ) { + OVR_multiview = true; + extensions.Remove( "glOVR_multiview" ); + } + if( extensions.Contains( "gl_OVR_multiview2" ) ) { + OVR_multiview2 = true; + extensions.Remove( "glOVR_multiview2" ); + } + if( extensions.Contains( "gl_PGI_misc_hints" ) ) { + PGI_misc_hints = true; + extensions.Remove( "glPGI_misc_hints" ); + } + if( extensions.Contains( "gl_PGI_vertex_hints" ) ) { + PGI_vertex_hints = true; + extensions.Remove( "glPGI_vertex_hints" ); + } + if( extensions.Contains( "gl_REND_screen_coordinates" ) ) { + REND_screen_coordinates = true; + extensions.Remove( "glREND_screen_coordinates" ); + } + if( extensions.Contains( "gl_S3_s3tc" ) ) { + S3_s3tc = true; + extensions.Remove( "glS3_s3tc" ); + } + if( extensions.Contains( "gl_SGIS_detail_texture" ) ) { + SGIS_detail_texture = true; + extensions.Remove( "glSGIS_detail_texture" ); + } + if( extensions.Contains( "gl_SGIS_fog_function" ) ) { + SGIS_fog_function = true; + extensions.Remove( "glSGIS_fog_function" ); + } + if( extensions.Contains( "gl_SGIS_generate_mipmap" ) ) { + SGIS_generate_mipmap = true; + extensions.Remove( "glSGIS_generate_mipmap" ); + } + if( extensions.Contains( "gl_SGIS_multisample" ) ) { + SGIS_multisample = true; + extensions.Remove( "glSGIS_multisample" ); + } + if( extensions.Contains( "gl_SGIS_pixel_texture" ) ) { + SGIS_pixel_texture = true; + extensions.Remove( "glSGIS_pixel_texture" ); + } + if( extensions.Contains( "gl_SGIS_point_line_texgen" ) ) { + SGIS_point_line_texgen = true; + extensions.Remove( "glSGIS_point_line_texgen" ); + } + if( extensions.Contains( "gl_SGIS_point_parameters" ) ) { + SGIS_point_parameters = true; + extensions.Remove( "glSGIS_point_parameters" ); + } + if( extensions.Contains( "gl_SGIS_sharpen_texture" ) ) { + SGIS_sharpen_texture = true; + extensions.Remove( "glSGIS_sharpen_texture" ); + } + if( extensions.Contains( "gl_SGIS_texture4D" ) ) { + SGIS_texture4D = true; + extensions.Remove( "glSGIS_texture4D" ); + } + if( extensions.Contains( "gl_SGIS_texture_border_clamp" ) ) { + SGIS_texture_border_clamp = true; + extensions.Remove( "glSGIS_texture_border_clamp" ); + } + if( extensions.Contains( "gl_SGIS_texture_color_mask" ) ) { + SGIS_texture_color_mask = true; + extensions.Remove( "glSGIS_texture_color_mask" ); + } + if( extensions.Contains( "gl_SGIS_texture_edge_clamp" ) ) { + SGIS_texture_edge_clamp = true; + extensions.Remove( "glSGIS_texture_edge_clamp" ); + } + if( extensions.Contains( "gl_SGIS_texture_filter4" ) ) { + SGIS_texture_filter4 = true; + extensions.Remove( "glSGIS_texture_filter4" ); + } + if( extensions.Contains( "gl_SGIS_texture_lod" ) ) { + SGIS_texture_lod = true; + extensions.Remove( "glSGIS_texture_lod" ); + } + if( extensions.Contains( "gl_SGIS_texture_select" ) ) { + SGIS_texture_select = true; + extensions.Remove( "glSGIS_texture_select" ); + } + if( extensions.Contains( "gl_SGIX_async" ) ) { + SGIX_async = true; + extensions.Remove( "glSGIX_async" ); + } + if( extensions.Contains( "gl_SGIX_async_histogram" ) ) { + SGIX_async_histogram = true; + extensions.Remove( "glSGIX_async_histogram" ); + } + if( extensions.Contains( "gl_SGIX_async_pixel" ) ) { + SGIX_async_pixel = true; + extensions.Remove( "glSGIX_async_pixel" ); + } + if( extensions.Contains( "gl_SGIX_blend_alpha_minmax" ) ) { + SGIX_blend_alpha_minmax = true; + extensions.Remove( "glSGIX_blend_alpha_minmax" ); + } + if( extensions.Contains( "gl_SGIX_calligraphic_fragment" ) ) { + SGIX_calligraphic_fragment = true; + extensions.Remove( "glSGIX_calligraphic_fragment" ); + } + if( extensions.Contains( "gl_SGIX_clipmap" ) ) { + SGIX_clipmap = true; + extensions.Remove( "glSGIX_clipmap" ); + } + if( extensions.Contains( "gl_SGIX_convolution_accuracy" ) ) { + SGIX_convolution_accuracy = true; + extensions.Remove( "glSGIX_convolution_accuracy" ); + } + if( extensions.Contains( "gl_SGIX_depth_pass_instrument" ) ) { + SGIX_depth_pass_instrument = true; + extensions.Remove( "glSGIX_depth_pass_instrument" ); + } + if( extensions.Contains( "gl_SGIX_depth_texture" ) ) { + SGIX_depth_texture = true; + extensions.Remove( "glSGIX_depth_texture" ); + } + if( extensions.Contains( "gl_SGIX_flush_raster" ) ) { + SGIX_flush_raster = true; + extensions.Remove( "glSGIX_flush_raster" ); + } + if( extensions.Contains( "gl_SGIX_fog_offset" ) ) { + SGIX_fog_offset = true; + extensions.Remove( "glSGIX_fog_offset" ); + } + if( extensions.Contains( "gl_SGIX_fragment_lighting" ) ) { + SGIX_fragment_lighting = true; + extensions.Remove( "glSGIX_fragment_lighting" ); + } + if( extensions.Contains( "gl_SGIX_framezoom" ) ) { + SGIX_framezoom = true; + extensions.Remove( "glSGIX_framezoom" ); + } + if( extensions.Contains( "gl_SGIX_igloo_interface" ) ) { + SGIX_igloo_interface = true; + extensions.Remove( "glSGIX_igloo_interface" ); + } + if( extensions.Contains( "gl_SGIX_instruments" ) ) { + SGIX_instruments = true; + extensions.Remove( "glSGIX_instruments" ); + } + if( extensions.Contains( "gl_SGIX_interlace" ) ) { + SGIX_interlace = true; + extensions.Remove( "glSGIX_interlace" ); + } + if( extensions.Contains( "gl_SGIX_ir_instrument1" ) ) { + SGIX_ir_instrument1 = true; + extensions.Remove( "glSGIX_ir_instrument1" ); + } + if( extensions.Contains( "gl_SGIX_list_priority" ) ) { + SGIX_list_priority = true; + extensions.Remove( "glSGIX_list_priority" ); + } + if( extensions.Contains( "gl_SGIX_pixel_texture" ) ) { + SGIX_pixel_texture = true; + extensions.Remove( "glSGIX_pixel_texture" ); + } + if( extensions.Contains( "gl_SGIX_pixel_tiles" ) ) { + SGIX_pixel_tiles = true; + extensions.Remove( "glSGIX_pixel_tiles" ); + } + if( extensions.Contains( "gl_SGIX_polynomial_ffd" ) ) { + SGIX_polynomial_ffd = true; + extensions.Remove( "glSGIX_polynomial_ffd" ); + } + if( extensions.Contains( "gl_SGIX_reference_plane" ) ) { + SGIX_reference_plane = true; + extensions.Remove( "glSGIX_reference_plane" ); + } + if( extensions.Contains( "gl_SGIX_resample" ) ) { + SGIX_resample = true; + extensions.Remove( "glSGIX_resample" ); + } + if( extensions.Contains( "gl_SGIX_scalebias_hint" ) ) { + SGIX_scalebias_hint = true; + extensions.Remove( "glSGIX_scalebias_hint" ); + } + if( extensions.Contains( "gl_SGIX_shadow" ) ) { + SGIX_shadow = true; + extensions.Remove( "glSGIX_shadow" ); + } + if( extensions.Contains( "gl_SGIX_shadow_ambient" ) ) { + SGIX_shadow_ambient = true; + extensions.Remove( "glSGIX_shadow_ambient" ); + } + if( extensions.Contains( "gl_SGIX_sprite" ) ) { + SGIX_sprite = true; + extensions.Remove( "glSGIX_sprite" ); + } + if( extensions.Contains( "gl_SGIX_subsample" ) ) { + SGIX_subsample = true; + extensions.Remove( "glSGIX_subsample" ); + } + if( extensions.Contains( "gl_SGIX_tag_sample_buffer" ) ) { + SGIX_tag_sample_buffer = true; + extensions.Remove( "glSGIX_tag_sample_buffer" ); + } + if( extensions.Contains( "gl_SGIX_texture_add_env" ) ) { + SGIX_texture_add_env = true; + extensions.Remove( "glSGIX_texture_add_env" ); + } + if( extensions.Contains( "gl_SGIX_texture_coordinate_clamp" ) ) { + SGIX_texture_coordinate_clamp = true; + extensions.Remove( "glSGIX_texture_coordinate_clamp" ); + } + if( extensions.Contains( "gl_SGIX_texture_lod_bias" ) ) { + SGIX_texture_lod_bias = true; + extensions.Remove( "glSGIX_texture_lod_bias" ); + } + if( extensions.Contains( "gl_SGIX_texture_multi_buffer" ) ) { + SGIX_texture_multi_buffer = true; + extensions.Remove( "glSGIX_texture_multi_buffer" ); + } + if( extensions.Contains( "gl_SGIX_texture_scale_bias" ) ) { + SGIX_texture_scale_bias = true; + extensions.Remove( "glSGIX_texture_scale_bias" ); + } + if( extensions.Contains( "gl_SGIX_vertex_preclip" ) ) { + SGIX_vertex_preclip = true; + extensions.Remove( "glSGIX_vertex_preclip" ); + } + if( extensions.Contains( "gl_SGIX_ycrcb" ) ) { + SGIX_ycrcb = true; + extensions.Remove( "glSGIX_ycrcb" ); + } + if( extensions.Contains( "gl_SGIX_ycrcb_subsample" ) ) { + SGIX_ycrcb_subsample = true; + extensions.Remove( "glSGIX_ycrcb_subsample" ); + } + if( extensions.Contains( "gl_SGIX_ycrcba" ) ) { + SGIX_ycrcba = true; + extensions.Remove( "glSGIX_ycrcba" ); + } + if( extensions.Contains( "gl_SGI_color_matrix" ) ) { + SGI_color_matrix = true; + extensions.Remove( "glSGI_color_matrix" ); + } + if( extensions.Contains( "gl_SGI_color_table" ) ) { + SGI_color_table = true; + extensions.Remove( "glSGI_color_table" ); + } + if( extensions.Contains( "gl_SGI_texture_color_table" ) ) { + SGI_texture_color_table = true; + extensions.Remove( "glSGI_texture_color_table" ); + } + if( extensions.Contains( "gl_SUNX_constant_data" ) ) { + SUNX_constant_data = true; + extensions.Remove( "glSUNX_constant_data" ); + } + if( extensions.Contains( "gl_SUN_convolution_border_modes" ) ) { + SUN_convolution_border_modes = true; + extensions.Remove( "glSUN_convolution_border_modes" ); + } + if( extensions.Contains( "gl_SUN_global_alpha" ) ) { + SUN_global_alpha = true; + extensions.Remove( "glSUN_global_alpha" ); + } + if( extensions.Contains( "gl_SUN_mesh_array" ) ) { + SUN_mesh_array = true; + extensions.Remove( "glSUN_mesh_array" ); + } + if( extensions.Contains( "gl_SUN_slice_accum" ) ) { + SUN_slice_accum = true; + extensions.Remove( "glSUN_slice_accum" ); + } + if( extensions.Contains( "gl_SUN_triangle_list" ) ) { + SUN_triangle_list = true; + extensions.Remove( "glSUN_triangle_list" ); + } + if( extensions.Contains( "gl_SUN_vertex" ) ) { + SUN_vertex = true; + extensions.Remove( "glSUN_vertex" ); + } + if( extensions.Contains( "gl_WIN_phong_shading" ) ) { + WIN_phong_shading = true; + extensions.Remove( "glWIN_phong_shading" ); + } + if( extensions.Contains( "gl_WIN_specular_fog" ) ) { + WIN_specular_fog = true; + extensions.Remove( "glWIN_specular_fog" ); + } #endregion checkGLextensions - - } - internal static void CheckCoreVersion(int majorVersion, int minorVersion) + internal static void CheckCoreVersion( + int majorVersion, + int minorVersion ) { - if (majorVersion < 3) - { - throw new InvalidOperationException("StgSharp does not support OpenGL immediate mode."); + if( majorVersion < 3 ) { + throw new InvalidOperationException( + "StgSharp does not support OpenGL immediate mode." ); } - if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 0))) - { + if( ( majorVersion >= 1 ) || ( ( majorVersion == 1 ) && ( minorVersion == 0 ) ) ) { core10 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 1))) - { + if( ( majorVersion >= 1 ) || ( ( majorVersion == 1 ) && ( minorVersion == 1 ) ) ) { core11 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 2))) - { + if( ( majorVersion >= 1 ) || ( ( majorVersion == 1 ) && ( minorVersion == 2 ) ) ) { core12 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 3))) - { + if( ( majorVersion >= 1 ) || ( ( majorVersion == 1 ) && ( minorVersion == 3 ) ) ) { core13 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 4))) - { + if( ( majorVersion >= 1 ) || ( ( majorVersion == 1 ) && ( minorVersion == 4 ) ) ) { core14 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 5))) - { + if( ( majorVersion >= 1 ) || ( ( majorVersion == 1 ) && ( minorVersion == 5 ) ) ) { core15 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 2) || ((majorVersion == 2) && (minorVersion == 0))) - { + if( ( majorVersion >= 2 ) || ( ( majorVersion == 2 ) && ( minorVersion == 0 ) ) ) { core20 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 2) || ((majorVersion == 2) && (minorVersion == 1))) - { + if( ( majorVersion >= 2 ) || ( ( majorVersion == 2 ) && ( minorVersion == 1 ) ) ) { core21 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 0))) - { + if( ( majorVersion >= 3 ) || ( ( majorVersion == 3 ) && ( minorVersion == 0 ) ) ) { core30 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 1))) - { + if( ( majorVersion >= 3 ) || ( ( majorVersion == 3 ) && ( minorVersion == 1 ) ) ) { core31 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 2))) - { + if( ( majorVersion >= 3 ) || ( ( majorVersion == 3 ) && ( minorVersion == 2 ) ) ) { core32 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 3))) - { + if( ( majorVersion >= 3 ) || ( ( majorVersion == 3 ) && ( minorVersion == 3 ) ) ) { core33 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 0))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 0 ) ) ) { core40 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 1))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 1 ) ) ) { core41 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 2))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 2 ) ) ) { core42 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 3))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 3 ) ) ) { core43 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 4))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 4 ) ) ) { core44 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 5))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 5 ) ) ) { core45 = true; - } - else - { + } else { goto log; } - if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 6))) - { + if( ( majorVersion >= 4 ) || ( ( majorVersion == 4 ) && ( minorVersion == 6 ) ) ) { core46 = true; - } - else - { + } else { goto log; } - log: + log: { - InternalIO.InternalWriteLog("Find core OpenGL version.", LogType.Info); + InternalIO.InternalWriteLog( + "Find core OpenGL version.", LogType.Info ); return; } } - internal static unsafe string GetExtensions(this OpenglContext context) + internal static unsafe string GetExtensions( + this OpenglContext context ) { - if (context.glGetString == null) - { + if( context.glGetString == null ) { return string.Empty; } - return Marshal.PtrToStringAnsi( - context.glGetString(glExtension)); + return Marshal.PtrToStringAnsi( context.glGetString( glExtension ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static T internalLoadAPI(IntPtr ptr) where T : Delegate + [MethodImpl( MethodImplOptions.AggressiveInlining )] + internal static T internalLoadAPI( IntPtr ptr ) where T: Delegate { - try - { - if (ptr == IntPtr.Zero) { return null; } - T func = Marshal.GetDelegateForFunctionPointer(ptr); + try { + if( ptr == IntPtr.Zero ) { + return null; + } + T func = Marshal.GetDelegateForFunctionPointer( ptr ); return func; } - catch (Exception ex) - { + catch( Exception ex ) { InternalIO.InternalWriteLog( - $"{$"Failed to convert the api {typeof(T).Name}.\n"}{ex.Message}", LogType.Warning); + $"{$"Failed to convert the api {typeof(T).Name}.\n"}{ex.Message}", + LogType.Warning ); return default; } } - internal static unsafe void LoadGLcore10(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore10( + OpenglContext* contextPtr, + delegate* load ) { - if (!core10) - { - InternalIO.InternalAppendLog("The core version 1.0 is not supported."); - throw new Exception("Final Version"); + if( !core10 ) { + InternalIO.InternalAppendLog( + "The core version 1.0 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBlendFunc = (delegate*)load("glBlendFunc"); - contextPtr->glClear = (delegate*)load("glClear"); - contextPtr->glClearColor = (delegate*)load("glClearColor"); - contextPtr->glClearDepth = (delegate*)load("glClearDepth"); - contextPtr->glClearStencil = (delegate*)load("glClearStencil"); - contextPtr->glColorMask = (delegate*)load("glColorMask"); - contextPtr->glCullFace = (delegate*)load("glCullFace"); - contextPtr->glDepthFunc = (delegate*)load("glDepthFunc"); - contextPtr->glDepthMask = (delegate*)load("glDepthMask"); - contextPtr->glDepthRange = (delegate*)load("glDepthRange"); - contextPtr->glDisable = (delegate*)load("glDisable"); - contextPtr->glDrawBuffer = (delegate*)load("glDrawBuffer"); - contextPtr->glEnable = (delegate*)load("glEnable"); - contextPtr->glFinish = (delegate*)load("glFinish"); - contextPtr->glFlush = (delegate*)load("glFlush"); - contextPtr->glFrontFace = (delegate*)load("glFrontFace"); - contextPtr->glGetBooleanv = (delegate*)load("glGetBooleanv"); - contextPtr->glGetDoublev = (delegate*)load("glGetDoublev"); - contextPtr->glGetError = (delegate*)load("glGetError"); - contextPtr->glGetFloatv = (delegate*)load("glGetFloatv"); - contextPtr->glGetIntegerv = (delegate*)load("glGetIntegerv"); - contextPtr->glGetString = (delegate*)load("glGetString"); - contextPtr->glGetTexImage = (delegate*)load("glGetTexImage"); - contextPtr->glGetTexLevelParameterfv = (delegate*)load("glGetTexLevelParameterfv"); - contextPtr->glGetTexLevelParameteriv = (delegate*)load("glGetTexLevelParameteriv"); - contextPtr->glGetTexParameterfv = (delegate*)load("glGetTexParameterfv"); - contextPtr->glGetTexParameteriv = (delegate*)load("glGetTexParameteriv"); - contextPtr->glHint = (delegate*)load("glHint"); - contextPtr->glIsEnabled = (delegate*)load("glIsEnabled"); - contextPtr->glLineWidth = (delegate*)load("glLineWidth"); - contextPtr->glLogicOp = (delegate*)load("glLogicOp"); - contextPtr->glPixelStoref = (delegate*)load("glPixelStoref"); - contextPtr->glPixelStorei = (delegate*)load("glPixelStorei"); - contextPtr->glPointSize = (delegate*)load("glPointSize"); - contextPtr->glPolygonMode = (delegate*)load("glPolygonMode"); - contextPtr->glReadBuffer = (delegate*)load("glReadBuffer"); - contextPtr->glReadPixels = (delegate*)load("glReadPixels"); - contextPtr->glScissor = (delegate*)load("glScissor"); - contextPtr->glStencilFunc = (delegate*)load("glStencilFunc"); - contextPtr->glStencilMask = (delegate*)load("glStencilMask"); - contextPtr->glStencilOp = (delegate*)load("glStencilOp"); - contextPtr->glTexImage1D = (delegate*)load("glTexImage1D"); - contextPtr->glTexImage2D = (delegate*)load("glTexImage2D"); - contextPtr->glTexParameterf = (delegate*)load("glTexParameterf"); - contextPtr->glTexParameterfv = (delegate*)load("glTexParameterfv"); - contextPtr->glTexParameteri = (delegate*)load("glTexParameteri"); - contextPtr->glTexParameteriv = (delegate*)load("glTexParameteriv"); - contextPtr->glViewport = (delegate*)load("glViewport"); + contextPtr->glBlendFunc = ( delegate* )load( + "glBlendFunc" ); + contextPtr->glClear = ( delegate* )load( "glClear" ); + contextPtr->glClearColor = ( delegate* )load( + "glClearColor" ); + contextPtr->glClearDepth = ( delegate* )load( + "glClearDepth" ); + contextPtr->glClearStencil = ( delegate* )load( + "glClearStencil" ); + contextPtr->glColorMask = ( delegate* )load( + "glColorMask" ); + contextPtr->glCullFace = ( delegate* )load( + "glCullFace" ); + contextPtr->glDepthFunc = ( delegate* )load( + "glDepthFunc" ); + contextPtr->glDepthMask = ( delegate* )load( + "glDepthMask" ); + contextPtr->glDepthRange = ( delegate* )load( + "glDepthRange" ); + contextPtr->glDisable = ( delegate* )load( "glDisable" ); + contextPtr->glDrawBuffer = ( delegate* )load( + "glDrawBuffer" ); + contextPtr->glEnable = ( delegate* )load( "glEnable" ); + contextPtr->glFinish = ( delegate* )load( "glFinish" ); + contextPtr->glFlush = ( delegate* )load( "glFlush" ); + contextPtr->glFrontFace = ( delegate* )load( + "glFrontFace" ); + contextPtr->glGetBooleanv = ( delegate* )load( + "glGetBooleanv" ); + contextPtr->glGetDoublev = ( delegate* )load( + "glGetDoublev" ); + contextPtr->glGetError = ( delegate* )load( "glGetError" ); + contextPtr->glGetFloatv = ( delegate* )load( + "glGetFloatv" ); + contextPtr->glGetIntegerv = ( delegate* )load( + "glGetIntegerv" ); + contextPtr->glGetString = ( delegate* )load( + "glGetString" ); + contextPtr->glGetTexImage = ( delegate* )load( + "glGetTexImage" ); + contextPtr->glGetTexLevelParameterfv = ( delegate* )load( + "glGetTexLevelParameterfv" ); + contextPtr->glGetTexLevelParameteriv = ( delegate* )load( + "glGetTexLevelParameteriv" ); + contextPtr->glGetTexParameterfv = ( delegate* )load( + "glGetTexParameterfv" ); + contextPtr->glGetTexParameteriv = ( delegate* )load( + "glGetTexParameteriv" ); + contextPtr->glHint = ( delegate* )load( "glHint" ); + contextPtr->glIsEnabled = ( delegate* )load( + "glIsEnabled" ); + contextPtr->glLineWidth = ( delegate* )load( + "glLineWidth" ); + contextPtr->glLogicOp = ( delegate* )load( "glLogicOp" ); + contextPtr->glPixelStoref = ( delegate* )load( + "glPixelStoref" ); + contextPtr->glPixelStorei = ( delegate* )load( + "glPixelStorei" ); + contextPtr->glPointSize = ( delegate* )load( + "glPointSize" ); + contextPtr->glPolygonMode = ( delegate* )load( + "glPolygonMode" ); + contextPtr->glReadBuffer = ( delegate* )load( + "glReadBuffer" ); + contextPtr->glReadPixels = ( delegate* )load( + "glReadPixels" ); + contextPtr->glScissor = ( delegate* )load( + "glScissor" ); + contextPtr->glStencilFunc = ( delegate* )load( + "glStencilFunc" ); + contextPtr->glStencilMask = ( delegate* )load( + "glStencilMask" ); + contextPtr->glStencilOp = ( delegate* )load( + "glStencilOp" ); + contextPtr->glTexImage1D = ( delegate* )load( + "glTexImage1D" ); + contextPtr->glTexImage2D = ( delegate* )load( + "glTexImage2D" ); + contextPtr->glTexParameterf = ( delegate* )load( + "glTexParameterf" ); + contextPtr->glTexParameterfv = ( delegate* )load( + "glTexParameterfv" ); + contextPtr->glTexParameteri = ( delegate* )load( + "glTexParameteri" ); + contextPtr->glTexParameteriv = ( delegate* )load( + "glTexParameteriv" ); + contextPtr->glViewport = ( delegate* )load( + "glViewport" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 1.0 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 1.0 APIs" ); } - internal static unsafe void LoadGLcore11(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore11( + OpenglContext* contextPtr, + delegate* load ) { - if (!core11) - { - InternalIO.InternalAppendLog("The core version 1.1 is not supported."); - throw new Exception("Final Version"); + if( !core11 ) { + InternalIO.InternalAppendLog( + "The core version 1.1 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindTexture = (delegate*)load("glBindTexture"); - contextPtr->glCopyTexImage1D = (delegate*)load("glCopyTexImage1D"); - contextPtr->glCopyTexImage2D = (delegate*)load("glCopyTexImage2D"); - contextPtr->glCopyTexSubImage1D = (delegate*)load("glCopyTexSubImage1D"); - contextPtr->glCopyTexSubImage2D = (delegate*)load("glCopyTexSubImage2D"); - contextPtr->glDeleteTextures = (delegate*)load("glDeleteTextures"); - contextPtr->glDrawArrays = (delegate*)load("glDrawArrays"); - contextPtr->glDrawElements = (delegate*)load("glDrawElements"); - contextPtr->glGenTextures = (delegate*)load("glGenTextures"); - contextPtr->glGetPointerv = (delegate*)load("glGetPointerv"); - contextPtr->glIsTexture = (delegate*)load("glIsTexture"); - contextPtr->glPolygonOffset = (delegate*)load("glPolygonOffset"); - contextPtr->glTexSubImage1D = (delegate*)load("glTexSubImage1D"); - contextPtr->glTexSubImage2D = (delegate*)load("glTexSubImage2D"); + contextPtr->glBindTexture = ( delegate* )load( + "glBindTexture" ); + contextPtr->glCopyTexImage1D = ( delegate* )load( + "glCopyTexImage1D" ); + contextPtr->glCopyTexImage2D = ( delegate* )load( + "glCopyTexImage2D" ); + contextPtr->glCopyTexSubImage1D = ( delegate* )load( + "glCopyTexSubImage1D" ); + contextPtr->glCopyTexSubImage2D = ( delegate* )load( + "glCopyTexSubImage2D" ); + contextPtr->glDeleteTextures = ( delegate* )load( + "glDeleteTextures" ); + contextPtr->glDrawArrays = ( delegate* )load( + "glDrawArrays" ); + contextPtr->glDrawElements = ( delegate* )load( + "glDrawElements" ); + contextPtr->glGenTextures = ( delegate* )load( + "glGenTextures" ); + contextPtr->glGetPointerv = ( delegate* )load( + "glGetPointerv" ); + contextPtr->glIsTexture = ( delegate* )load( + "glIsTexture" ); + contextPtr->glPolygonOffset = ( delegate* )load( + "glPolygonOffset" ); + contextPtr->glTexSubImage1D = ( delegate* )load( + "glTexSubImage1D" ); + contextPtr->glTexSubImage2D = ( delegate* )load( + "glTexSubImage2D" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 1.1 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 1.1 APIs" ); } - internal static unsafe void LoadGLcore12(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore12( + OpenglContext* contextPtr, + delegate* load ) { - if (!core12) - { - InternalIO.InternalAppendLog("The core version 1.2 is not supported."); - throw new Exception("Final Version"); + if( !core12 ) { + InternalIO.InternalAppendLog( + "The core version 1.2 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glCopyTexSubImage3D = (delegate*)load("glCopyTexSubImage3D"); - contextPtr->glDrawRangeElements = (delegate*)load("glDrawRangeElements"); - contextPtr->glTexImage3D = (delegate*)load("glTexImage3D"); - contextPtr->glTexSubImage3D = (delegate*)load("glTexSubImage3D"); + contextPtr->glCopyTexSubImage3D = ( delegate* )load( + "glCopyTexSubImage3D" ); + contextPtr->glDrawRangeElements = ( delegate* )load( + "glDrawRangeElements" ); + contextPtr->glTexImage3D = ( delegate* )load( + "glTexImage3D" ); + contextPtr->glTexSubImage3D = ( delegate* )load( + "glTexSubImage3D" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 1.2 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 1.2 APIs" ); } - internal static unsafe void LoadGLcore13(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore13( + OpenglContext* contextPtr, + delegate* load ) { - if (!core13) - { - InternalIO.InternalAppendLog("The core version 1.3 is not supported."); - throw new Exception("Final Version"); + if( !core13 ) { + InternalIO.InternalAppendLog( + "The core version 1.3 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glActiveTexture = (delegate*)load("glActiveTexture"); - contextPtr->glCompressedTexImage1D = (delegate*)load("glCompressedTexImage1D"); - contextPtr->glCompressedTexImage2D = (delegate*)load("glCompressedTexImage2D"); - contextPtr->glCompressedTexImage3D = (delegate*)load("glCompressedTexImage3D"); - contextPtr->glCompressedTexSubImage1D = (delegate*)load("glCompressedTexSubImage1D"); - contextPtr->glCompressedTexSubImage2D = (delegate*)load("glCompressedTexSubImage2D"); - contextPtr->glCompressedTexSubImage3D = (delegate*)load("glCompressedTexSubImage3D"); - contextPtr->glGetCompressedTexImage = (delegate*)load("glGetCompressedTexImage"); - contextPtr->glSampleCoverage = (delegate*)load("glSampleCoverage"); + contextPtr->glActiveTexture = ( delegate* )load( + "glActiveTexture" ); + contextPtr->glCompressedTexImage1D = ( delegate* )load( + "glCompressedTexImage1D" ); + contextPtr->glCompressedTexImage2D = ( delegate* )load( + "glCompressedTexImage2D" ); + contextPtr->glCompressedTexImage3D = ( delegate* )load( + "glCompressedTexImage3D" ); + contextPtr->glCompressedTexSubImage1D = ( delegate* )load( + "glCompressedTexSubImage1D" ); + contextPtr->glCompressedTexSubImage2D = ( delegate* )load( + "glCompressedTexSubImage2D" ); + contextPtr->glCompressedTexSubImage3D = ( delegate* )load( + "glCompressedTexSubImage3D" ); + contextPtr->glGetCompressedTexImage = ( delegate* )load( + "glGetCompressedTexImage" ); + contextPtr->glSampleCoverage = ( delegate* )load( + "glSampleCoverage" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 1.3 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 1.3 APIs" ); } - internal static unsafe void LoadGLcore14(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore14( + OpenglContext* contextPtr, + delegate* load ) { - if (!core14) - { - InternalIO.InternalAppendLog("The core version 1.4 is not supported."); - throw new Exception("Final Version"); + if( !core14 ) { + InternalIO.InternalAppendLog( + "The core version 1.4 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBlendColor = (delegate*)load("glBlendColor"); - contextPtr->glBlendEquation = (delegate*)load("glBlendEquation"); - contextPtr->glBlendFuncSeparate = (delegate*)load("glBlendFuncSeparate"); - contextPtr->glMultiDrawArrays = (delegate*)load("glMultiDrawArrays"); - contextPtr->glMultiDrawElements = (delegate*)load("glMultiDrawElements"); - contextPtr->glPointParameterf = (delegate*)load("glPointParameterf"); - contextPtr->glPointParameterfv = (delegate*)load("glPointParameterfv"); - contextPtr->glPointParameteri = (delegate*)load("glPointParameteri"); - contextPtr->glPointParameteriv = (delegate*)load("glPointParameteriv"); + contextPtr->glBlendColor = ( delegate* )load( + "glBlendColor" ); + contextPtr->glBlendEquation = ( delegate* )load( + "glBlendEquation" ); + contextPtr->glBlendFuncSeparate = ( delegate* )load( + "glBlendFuncSeparate" ); + contextPtr->glMultiDrawArrays = ( delegate* )load( + "glMultiDrawArrays" ); + contextPtr->glMultiDrawElements = ( delegate* )load( + "glMultiDrawElements" ); + contextPtr->glPointParameterf = ( delegate* )load( + "glPointParameterf" ); + contextPtr->glPointParameterfv = ( delegate* )load( + "glPointParameterfv" ); + contextPtr->glPointParameteri = ( delegate* )load( + "glPointParameteri" ); + contextPtr->glPointParameteriv = ( delegate* )load( + "glPointParameteriv" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 1.4 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 1.4 APIs" ); } - internal static unsafe void LoadGLcore15(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore15( + OpenglContext* contextPtr, + delegate* load ) { - if (!core15) - { - InternalIO.InternalAppendLog("The core version 1.5 is not supported."); - throw new Exception("Final Version"); + if( !core15 ) { + InternalIO.InternalAppendLog( + "The core version 1.5 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBeginQuery = (delegate*)load("glBeginQuery"); - contextPtr->glBindBuffer = (delegate*)load("glBindBuffer"); - contextPtr->glBufferData = (delegate*)load("glBufferData"); - contextPtr->glBufferSubData = (delegate*)load("glBufferSubData"); - contextPtr->glDeleteBuffers = (delegate*)load("glDeleteBuffers"); - contextPtr->glDeleteQueries = (delegate*)load("glDeleteQueries"); - contextPtr->glEndQuery = (delegate*)load("glEndQuery"); - contextPtr->glGenBuffers = (delegate*)load("glGenBuffers"); - contextPtr->glGenQueries = (delegate*)load("glGenQueries"); - contextPtr->glGetBufferParameteriv = (delegate*)load("glGetBufferParameteriv"); - contextPtr->glGetBufferPointerv = (delegate*)load("glGetBufferPointerv"); - contextPtr->glGetBufferSubData = (delegate*)load("glGetBufferSubData"); - contextPtr->glGetQueryObjectiv = (delegate*)load("glGetQueryObjectiv"); - contextPtr->glGetQueryObjectuiv = (delegate*)load("glGetQueryObjectuiv"); - contextPtr->glGetQueryiv = (delegate*)load("glGetQueryiv"); - contextPtr->glIsBuffer = (delegate*)load("glIsBuffer"); - contextPtr->glIsQuery = (delegate*)load("glIsQuery"); - contextPtr->glMapBuffer = (delegate*)load("glMapBuffer"); - contextPtr->glUnmapBuffer = (delegate*)load("glUnmapBuffer"); + contextPtr->glBeginQuery = ( delegate* )load( + "glBeginQuery" ); + contextPtr->glBindBuffer = ( delegate* )load( + "glBindBuffer" ); + contextPtr->glBufferData = ( delegate* )load( + "glBufferData" ); + contextPtr->glBufferSubData = ( delegate* )load( + "glBufferSubData" ); + contextPtr->glDeleteBuffers = ( delegate* )load( + "glDeleteBuffers" ); + contextPtr->glDeleteQueries = ( delegate* )load( + "glDeleteQueries" ); + contextPtr->glEndQuery = ( delegate* )load( + "glEndQuery" ); + contextPtr->glGenBuffers = ( delegate* )load( + "glGenBuffers" ); + contextPtr->glGenQueries = ( delegate* )load( + "glGenQueries" ); + contextPtr->glGetBufferParameteriv = ( delegate* )load( + "glGetBufferParameteriv" ); + contextPtr->glGetBufferPointerv = ( delegate* )load( + "glGetBufferPointerv" ); + contextPtr->glGetBufferSubData = ( delegate* )load( + "glGetBufferSubData" ); + contextPtr->glGetQueryObjectiv = ( delegate* )load( + "glGetQueryObjectiv" ); + contextPtr->glGetQueryObjectuiv = ( delegate* )load( + "glGetQueryObjectuiv" ); + contextPtr->glGetQueryiv = ( delegate* )load( + "glGetQueryiv" ); + contextPtr->glIsBuffer = ( delegate* )load( + "glIsBuffer" ); + contextPtr->glIsQuery = ( delegate* )load( "glIsQuery" ); + contextPtr->glMapBuffer = ( delegate* )load( + "glMapBuffer" ); + contextPtr->glUnmapBuffer = ( delegate* )load( + "glUnmapBuffer" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 1.5 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 1.5 APIs" ); } - internal static unsafe void LoadGLcore20(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore20( + OpenglContext* contextPtr, + delegate* load ) { - if (!core20) - { - InternalIO.InternalAppendLog("The core version 2.0 is not supported."); - throw new Exception("Final Version"); + if( !core20 ) { + InternalIO.InternalAppendLog( + "The core version 2.0 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glAttachShader = (delegate*)load("glAttachShader"); - contextPtr->glBindAttribLocation = (delegate*)load("glBindAttribLocation"); - contextPtr->glBlendEquationSeparate = (delegate*)load("glBlendEquationSeparate"); - contextPtr->glCompileShader = (delegate*)load("glCompileShader"); - contextPtr->glCreateProgram = (delegate*)load("glCreateProgram"); - contextPtr->glCreateShader = (delegate*)load("glCreateShader"); - contextPtr->glDeleteProgram = (delegate*)load("glDeleteProgram"); - contextPtr->glDeleteShader = (delegate*)load("glDeleteShader"); - contextPtr->glDetachShader = (delegate*)load("glDetachShader"); - contextPtr->glDisableVertexAttribArray = (delegate*)load("glDisableVertexAttribArray"); - contextPtr->glDrawBuffers = (delegate*)load("glDrawBuffers"); - contextPtr->glEnableVertexAttribArray = (delegate*)load("glEnableVertexAttribArray"); - contextPtr->glGetActiveAttrib = (delegate*)load("glGetActiveAttrib"); - contextPtr->glGetActiveUniform = (delegate*)load("glGetActiveUniform"); - contextPtr->glGetAttachedShaders = (delegate*)load("glGetAttachedShaders"); - contextPtr->glGetAttribLocation = (delegate*)load("glGetAttribLocation"); - contextPtr->glGetProgramInfoLog = (delegate*)load("glGetProgramInfoLog"); - contextPtr->glGetProgramiv = (delegate*)load("glGetProgramiv"); - contextPtr->glGetShaderInfoLog = (delegate*)load("glGetShaderInfoLog"); - contextPtr->glGetShaderSource = (delegate*)load("glGetShaderSource"); - contextPtr->glGetShaderiv = (delegate*)load("glGetShaderiv"); - contextPtr->glGetUniformLocation = (delegate*)load("glGetUniformLocation"); - contextPtr->glGetUniformfv = (delegate*)load("glGetUniformfv"); - contextPtr->glGetUniformiv = (delegate*)load("glGetUniformiv"); - contextPtr->glGetVertexAttribPointerv = (delegate*)load("glGetVertexAttribPointerv"); - contextPtr->glGetVertexAttribdv = (delegate*)load("glGetVertexAttribdv"); - contextPtr->glGetVertexAttribfv = (delegate*)load("glGetVertexAttribfv"); - contextPtr->glGetVertexAttribiv = (delegate*)load("glGetVertexAttribiv"); - contextPtr->glIsProgram = (delegate*)load("glIsProgram"); - contextPtr->glIsShader = (delegate*)load("glIsShader"); - contextPtr->glLinkProgram = (delegate*)load("glLinkProgram"); - contextPtr->glShaderSource = (delegate* unmanaged[Stdcall])load("glShaderSource"); - contextPtr->glStencilFuncSeparate = (delegate*)load("glStencilFuncSeparate"); - contextPtr->glStencilMaskSeparate = (delegate*)load("glStencilMaskSeparate"); - contextPtr->glStencilOpSeparate = (delegate*)load("glStencilOpSeparate"); - contextPtr->glUniform1f = (delegate*)load("glUniform1f"); - contextPtr->glUniform1fv = (delegate*)load("glUniform1fv"); - contextPtr->glUniform1i = (delegate*)load("glUniform1i"); - contextPtr->glUniform1iv = (delegate*)load("glUniform1iv"); - contextPtr->glUniform2f = (delegate*)load("glUniform2f"); - contextPtr->glUniform2fv = (delegate*)load("glUniform2fv"); - contextPtr->glUniform2i = (delegate*)load("glUniform2i"); - contextPtr->glUniform2iv = (delegate*)load("glUniform2iv"); - contextPtr->glUniform3f = (delegate*)load("glUniform3f"); - contextPtr->glUniform3fv = (delegate*)load("glUniform3fv"); - contextPtr->glUniform3i = (delegate*)load("glUniform3i"); - contextPtr->glUniform3iv = (delegate*)load("glUniform3iv"); - contextPtr->glUniform4f = (delegate*)load("glUniform4f"); - contextPtr->glUniform4fv = (delegate*)load("glUniform4fv"); - contextPtr->glUniform4i = (delegate*)load("glUniform4i"); - contextPtr->glUniform4iv = (delegate*)load("glUniform4iv"); - contextPtr->glUniformMatrix2fv = (delegate*)load("glUniformMatrix2fv"); - contextPtr->glUniformMatrix3fv = (delegate*)load("glUniformMatrix3fv"); - contextPtr->glUniformMatrix4fv = (delegate*)load("glUniformMatrix4fv"); - contextPtr->glUseProgram = (delegate*)load("glUseProgram"); - contextPtr->glValidateProgram = (delegate*)load("glValidateProgram"); - contextPtr->glVertexAttrib1d = (delegate*)load("glVertexAttrib1d"); - contextPtr->glVertexAttrib1dv = (delegate*)load("glVertexAttrib1dv"); - contextPtr->glVertexAttrib1f = (delegate*)load("glVertexAttrib1f"); - contextPtr->glVertexAttrib1fv = (delegate*)load("glVertexAttrib1fv"); - contextPtr->glVertexAttrib1s = (delegate*)load("glVertexAttrib1s"); - contextPtr->glVertexAttrib1sv = (delegate*)load("glVertexAttrib1sv"); - contextPtr->glVertexAttrib2d = (delegate*)load("glVertexAttrib2d"); - contextPtr->glVertexAttrib2dv = (delegate*)load("glVertexAttrib2dv"); - contextPtr->glVertexAttrib2f = (delegate*)load("glVertexAttrib2f"); - contextPtr->glVertexAttrib2fv = (delegate*)load("glVertexAttrib2fv"); - contextPtr->glVertexAttrib2s = (delegate*)load("glVertexAttrib2s"); - contextPtr->glVertexAttrib2sv = (delegate*)load("glVertexAttrib2sv"); - contextPtr->glVertexAttrib3d = (delegate*)load("glVertexAttrib3d"); - contextPtr->glVertexAttrib3dv = (delegate*)load("glVertexAttrib3dv"); - contextPtr->glVertexAttrib3f = (delegate*)load("glVertexAttrib3f"); - contextPtr->glVertexAttrib3fv = (delegate*)load("glVertexAttrib3fv"); - contextPtr->glVertexAttrib3s = (delegate*)load("glVertexAttrib3s"); - contextPtr->glVertexAttrib3sv = (delegate*)load("glVertexAttrib3sv"); - contextPtr->glVertexAttrib4Nbv = (delegate*)load("glVertexAttrib4Nbv"); - contextPtr->glVertexAttrib4Niv = (delegate*)load("glVertexAttrib4Niv"); - contextPtr->glVertexAttrib4Nsv = (delegate*)load("glVertexAttrib4Nsv"); - contextPtr->glVertexAttrib4Nub = (delegate*)load("glVertexAttrib4Nub"); - contextPtr->glVertexAttrib4Nubv = (delegate*)load("glVertexAttrib4Nubv"); - contextPtr->glVertexAttrib4Nuiv = (delegate*)load("glVertexAttrib4Nuiv"); - contextPtr->glVertexAttrib4Nusv = (delegate*)load("glVertexAttrib4Nusv"); - contextPtr->glVertexAttrib4bv = (delegate*)load("glVertexAttrib4bv"); - contextPtr->glVertexAttrib4d = (delegate*)load("glVertexAttrib4d"); - contextPtr->glVertexAttrib4dv = (delegate*)load("glVertexAttrib4dv"); - contextPtr->glVertexAttrib4f = (delegate*)load("glVertexAttrib4f"); - contextPtr->glVertexAttrib4fv = (delegate*)load("glVertexAttrib4fv"); - contextPtr->glVertexAttrib4iv = (delegate*)load("glVertexAttrib4iv"); - contextPtr->glVertexAttrib4s = (delegate*)load("glVertexAttrib4s"); - contextPtr->glVertexAttrib4sv = (delegate*)load("glVertexAttrib4sv"); - contextPtr->glVertexAttrib4ubv = (delegate*)load("glVertexAttrib4ubv"); - contextPtr->glVertexAttrib4uiv = (delegate*)load("glVertexAttrib4uiv"); - contextPtr->glVertexAttrib4usv = (delegate*)load("glVertexAttrib4usv"); - contextPtr->glVertexAttribPointer = (delegate*)load("glVertexAttribPointer"); + contextPtr->glAttachShader = ( delegate* )load( + "glAttachShader" ); + contextPtr->glBindAttribLocation = ( delegate* )load( + "glBindAttribLocation" ); + contextPtr->glBlendEquationSeparate = ( delegate* )load( + "glBlendEquationSeparate" ); + contextPtr->glCompileShader = ( delegate* )load( + "glCompileShader" ); + contextPtr->glCreateProgram = ( delegate* )load( + "glCreateProgram" ); + contextPtr->glCreateShader = ( delegate* )load( + "glCreateShader" ); + contextPtr->glDeleteProgram = ( delegate* )load( + "glDeleteProgram" ); + contextPtr->glDeleteShader = ( delegate* )load( + "glDeleteShader" ); + contextPtr->glDetachShader = ( delegate* )load( + "glDetachShader" ); + contextPtr->glDisableVertexAttribArray = ( delegate* )load( + "glDisableVertexAttribArray" ); + contextPtr->glDrawBuffers = ( delegate* )load( + "glDrawBuffers" ); + contextPtr->glEnableVertexAttribArray = ( delegate* )load( + "glEnableVertexAttribArray" ); + contextPtr->glGetActiveAttrib = ( delegate* )load( + "glGetActiveAttrib" ); + contextPtr->glGetActiveUniform = ( delegate* )load( + "glGetActiveUniform" ); + contextPtr->glGetAttachedShaders = ( delegate* )load( + "glGetAttachedShaders" ); + contextPtr->glGetAttribLocation = ( delegate* )load( + "glGetAttribLocation" ); + contextPtr->glGetProgramInfoLog = ( delegate* )load( + "glGetProgramInfoLog" ); + contextPtr->glGetProgramiv = ( delegate* )load( + "glGetProgramiv" ); + contextPtr->glGetShaderInfoLog = ( delegate* )load( + "glGetShaderInfoLog" ); + contextPtr->glGetShaderSource = ( delegate* )load( + "glGetShaderSource" ); + contextPtr->glGetShaderiv = ( delegate* )load( + "glGetShaderiv" ); + contextPtr->glGetUniformLocation = ( delegate* )load( + "glGetUniformLocation" ); + contextPtr->glGetUniformfv = ( delegate* )load( + "glGetUniformfv" ); + contextPtr->glGetUniformiv = ( delegate* )load( + "glGetUniformiv" ); + contextPtr->glGetVertexAttribPointerv = ( delegate* )load( + "glGetVertexAttribPointerv" ); + contextPtr->glGetVertexAttribdv = ( delegate* )load( + "glGetVertexAttribdv" ); + contextPtr->glGetVertexAttribfv = ( delegate* )load( + "glGetVertexAttribfv" ); + contextPtr->glGetVertexAttribiv = ( delegate* )load( + "glGetVertexAttribiv" ); + contextPtr->glIsProgram = ( delegate* )load( + "glIsProgram" ); + contextPtr->glIsShader = ( delegate* )load( + "glIsShader" ); + contextPtr->glLinkProgram = ( delegate* )load( + "glLinkProgram" ); + contextPtr->glShaderSource = ( delegate* unmanaged[Stdcall] )load( + "glShaderSource" ); + contextPtr->glStencilFuncSeparate = ( delegate* )load( + "glStencilFuncSeparate" ); + contextPtr->glStencilMaskSeparate = ( delegate* )load( + "glStencilMaskSeparate" ); + contextPtr->glStencilOpSeparate = ( delegate* )load( + "glStencilOpSeparate" ); + contextPtr->glUniform1f = ( delegate* )load( + "glUniform1f" ); + contextPtr->glUniform1fv = ( delegate* )load( + "glUniform1fv" ); + contextPtr->glUniform1i = ( delegate* )load( + "glUniform1i" ); + contextPtr->glUniform1iv = ( delegate* )load( + "glUniform1iv" ); + contextPtr->glUniform2f = ( delegate* )load( + "glUniform2f" ); + contextPtr->glUniform2fv = ( delegate* )load( + "glUniform2fv" ); + contextPtr->glUniform2i = ( delegate* )load( + "glUniform2i" ); + contextPtr->glUniform2iv = ( delegate* )load( + "glUniform2iv" ); + contextPtr->glUniform3f = ( delegate* )load( + "glUniform3f" ); + contextPtr->glUniform3fv = ( delegate* )load( + "glUniform3fv" ); + contextPtr->glUniform3i = ( delegate* )load( + "glUniform3i" ); + contextPtr->glUniform3iv = ( delegate* )load( + "glUniform3iv" ); + contextPtr->glUniform4f = ( delegate* )load( + "glUniform4f" ); + contextPtr->glUniform4fv = ( delegate* )load( + "glUniform4fv" ); + contextPtr->glUniform4i = ( delegate* )load( + "glUniform4i" ); + contextPtr->glUniform4iv = ( delegate* )load( + "glUniform4iv" ); + contextPtr->glUniformMatrix2fv = ( delegate* )load( + "glUniformMatrix2fv" ); + contextPtr->glUniformMatrix3fv = ( delegate* )load( + "glUniformMatrix3fv" ); + contextPtr->glUniformMatrix4fv = ( delegate* )load( + "glUniformMatrix4fv" ); + contextPtr->glUseProgram = ( delegate* )load( + "glUseProgram" ); + contextPtr->glValidateProgram = ( delegate* )load( + "glValidateProgram" ); + contextPtr->glVertexAttrib1d = ( delegate* )load( + "glVertexAttrib1d" ); + contextPtr->glVertexAttrib1dv = ( delegate* )load( + "glVertexAttrib1dv" ); + contextPtr->glVertexAttrib1f = ( delegate* )load( + "glVertexAttrib1f" ); + contextPtr->glVertexAttrib1fv = ( delegate* )load( + "glVertexAttrib1fv" ); + contextPtr->glVertexAttrib1s = ( delegate* )load( + "glVertexAttrib1s" ); + contextPtr->glVertexAttrib1sv = ( delegate* )load( + "glVertexAttrib1sv" ); + contextPtr->glVertexAttrib2d = ( delegate* )load( + "glVertexAttrib2d" ); + contextPtr->glVertexAttrib2dv = ( delegate* )load( + "glVertexAttrib2dv" ); + contextPtr->glVertexAttrib2f = ( delegate* )load( + "glVertexAttrib2f" ); + contextPtr->glVertexAttrib2fv = ( delegate* )load( + "glVertexAttrib2fv" ); + contextPtr->glVertexAttrib2s = ( delegate* )load( + "glVertexAttrib2s" ); + contextPtr->glVertexAttrib2sv = ( delegate* )load( + "glVertexAttrib2sv" ); + contextPtr->glVertexAttrib3d = ( delegate* )load( + "glVertexAttrib3d" ); + contextPtr->glVertexAttrib3dv = ( delegate* )load( + "glVertexAttrib3dv" ); + contextPtr->glVertexAttrib3f = ( delegate* )load( + "glVertexAttrib3f" ); + contextPtr->glVertexAttrib3fv = ( delegate* )load( + "glVertexAttrib3fv" ); + contextPtr->glVertexAttrib3s = ( delegate* )load( + "glVertexAttrib3s" ); + contextPtr->glVertexAttrib3sv = ( delegate* )load( + "glVertexAttrib3sv" ); + contextPtr->glVertexAttrib4Nbv = ( delegate* )load( + "glVertexAttrib4Nbv" ); + contextPtr->glVertexAttrib4Niv = ( delegate* )load( + "glVertexAttrib4Niv" ); + contextPtr->glVertexAttrib4Nsv = ( delegate* )load( + "glVertexAttrib4Nsv" ); + contextPtr->glVertexAttrib4Nub = ( delegate* )load( + "glVertexAttrib4Nub" ); + contextPtr->glVertexAttrib4Nubv = ( delegate* )load( + "glVertexAttrib4Nubv" ); + contextPtr->glVertexAttrib4Nuiv = ( delegate* )load( + "glVertexAttrib4Nuiv" ); + contextPtr->glVertexAttrib4Nusv = ( delegate* )load( + "glVertexAttrib4Nusv" ); + contextPtr->glVertexAttrib4bv = ( delegate* )load( + "glVertexAttrib4bv" ); + contextPtr->glVertexAttrib4d = ( delegate* )load( + "glVertexAttrib4d" ); + contextPtr->glVertexAttrib4dv = ( delegate* )load( + "glVertexAttrib4dv" ); + contextPtr->glVertexAttrib4f = ( delegate* )load( + "glVertexAttrib4f" ); + contextPtr->glVertexAttrib4fv = ( delegate* )load( + "glVertexAttrib4fv" ); + contextPtr->glVertexAttrib4iv = ( delegate* )load( + "glVertexAttrib4iv" ); + contextPtr->glVertexAttrib4s = ( delegate* )load( + "glVertexAttrib4s" ); + contextPtr->glVertexAttrib4sv = ( delegate* )load( + "glVertexAttrib4sv" ); + contextPtr->glVertexAttrib4ubv = ( delegate* )load( + "glVertexAttrib4ubv" ); + contextPtr->glVertexAttrib4uiv = ( delegate* )load( + "glVertexAttrib4uiv" ); + contextPtr->glVertexAttrib4usv = ( delegate* )load( + "glVertexAttrib4usv" ); + contextPtr->glVertexAttribPointer = ( delegate* )load( + "glVertexAttribPointer" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 2.0 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 2.0 APIs" ); } - internal static unsafe void LoadGLcore21(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore21( + OpenglContext* contextPtr, + delegate* load ) { - if (!core21) - { - InternalIO.InternalAppendLog("The core version 2.1 is not supported."); - throw new Exception("Final Version"); + if( !core21 ) { + InternalIO.InternalAppendLog( + "The core version 2.1 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glUniformMatrix2x3fv = (delegate*)load("glUniformMatrix2x3fv"); - contextPtr->glUniformMatrix2x4fv = (delegate*)load("glUniformMatrix2x4fv"); - contextPtr->glUniformMatrix3x2fv = (delegate*)load("glUniformMatrix3x2fv"); - contextPtr->glUniformMatrix3x4fv = (delegate*)load("glUniformMatrix3x4fv"); - contextPtr->glUniformMatrix4x2fv = (delegate*)load("glUniformMatrix4x2fv"); - contextPtr->glUniformMatrix4x3fv = (delegate*)load("glUniformMatrix4x3fv"); + contextPtr->glUniformMatrix2x3fv = ( delegate* )load( + "glUniformMatrix2x3fv" ); + contextPtr->glUniformMatrix2x4fv = ( delegate* )load( + "glUniformMatrix2x4fv" ); + contextPtr->glUniformMatrix3x2fv = ( delegate* )load( + "glUniformMatrix3x2fv" ); + contextPtr->glUniformMatrix3x4fv = ( delegate* )load( + "glUniformMatrix3x4fv" ); + contextPtr->glUniformMatrix4x2fv = ( delegate* )load( + "glUniformMatrix4x2fv" ); + contextPtr->glUniformMatrix4x3fv = ( delegate* )load( + "glUniformMatrix4x3fv" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 2.1 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 2.1 APIs" ); } - internal static unsafe void LoadGLcore30(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore30( + OpenglContext* contextPtr, + delegate* load ) { - if (!core30) - { - InternalIO.InternalAppendLog("The core version 3.0 is not supported."); - throw new Exception("Final Version"); + if( !core30 ) { + InternalIO.InternalAppendLog( + "The core version 3.0 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBeginConditionalRender = (delegate*)load("glBeginConditionalRender"); - contextPtr->glBeginTransformFeedback = (delegate*)load("glBeginTransformFeedback"); - contextPtr->glBindBufferBase = (delegate*)load("glBindBufferBase"); - contextPtr->glBindBufferRange = (delegate*)load("glBindBufferRange"); - contextPtr->glBindFragDataLocation = (delegate*)load("glBindFragDataLocation"); - contextPtr->glBindFramebuffer = (delegate*)load("glBindFramebuffer"); - contextPtr->glBindRenderbuffer = (delegate*)load("glBindRenderbuffer"); - contextPtr->glBindVertexArray = (delegate*)load("glBindVertexArray"); - contextPtr->glBlitFramebuffer = (delegate*)load("glBlitFramebuffer"); - contextPtr->glCheckFramebufferStatus = (delegate*)load("glCheckFramebufferStatus"); - contextPtr->glClampColor = (delegate*)load("glClampColor"); - contextPtr->glClearBufferfi = (delegate*)load("glClearBufferfi"); - contextPtr->glClearBufferfv = (delegate*)load("glClearBufferfv"); - contextPtr->glClearBufferiv = (delegate*)load("glClearBufferiv"); - contextPtr->glClearBufferuiv = (delegate*)load("glClearBufferuiv"); - contextPtr->glColorMaski = (delegate*)load("glColorMaski"); - contextPtr->glDeleteFramebuffers = (delegate*)load("glDeleteFramebuffers"); - contextPtr->glDeleteRenderbuffers = (delegate*)load("glDeleteRenderbuffers"); - contextPtr->glDeleteVertexArrays = (delegate*)load("glDeleteVertexArrays"); - contextPtr->glDisablei = (delegate*)load("glDisablei"); - contextPtr->glEnablei = (delegate*)load("glEnablei"); - contextPtr->glEndConditionalRender = (delegate*)load("glEndConditionalRender"); - contextPtr->glEndTransformFeedback = (delegate*)load("glEndTransformFeedback"); - contextPtr->glFlushMappedBufferRange = (delegate*)load("glFlushMappedBufferRange"); - contextPtr->glFramebufferRenderbuffer = (delegate*)load("glFramebufferRenderbuffer"); - contextPtr->glFramebufferTexture1D = (delegate*)load("glFramebufferTexture1D"); - contextPtr->glFramebufferTexture2D = (delegate*)load("glFramebufferTexture2D"); - contextPtr->glFramebufferTexture3D = (delegate*)load("glFramebufferTexture3D"); - contextPtr->glFramebufferTextureLayer = (delegate*)load("glFramebufferTextureLayer"); - contextPtr->glGenFramebuffers = (delegate*)load("glGenFramebuffers"); - contextPtr->glGenRenderbuffers = (delegate*)load("glGenRenderbuffers"); - contextPtr->glGenVertexArrays = (delegate*)load("glGenVertexArrays"); - contextPtr->glGenerateMipmap = (delegate*)load("glGenerateMipmap"); - contextPtr->glGetBooleani_v = (delegate*)load("glGetBooleani_v"); - contextPtr->glGetFragDataLocation = (delegate*)load("glGetFragDataLocation"); - contextPtr->glGetFramebufferAttachmentParameteriv = (delegate*)load("glGetFramebufferAttachmentParameteriv"); - contextPtr->glGetIntegeri_v = (delegate*)load("glGetIntegeri_v"); - contextPtr->glGetRenderbufferParameteriv = (delegate*)load("glGetRenderbufferParameteriv"); - contextPtr->glGetStringi = (delegate*)load("glGetStringi"); - contextPtr->glGetTexParameterIiv = (delegate*)load("glGetTexParameterIiv"); - contextPtr->glGetTexParameterIuiv = (delegate*)load("glGetTexParameterIuiv"); - contextPtr->glGetTransformFeedbackVarying = (delegate*)load("glGetTransformFeedbackVarying"); - contextPtr->glGetUniformuiv = (delegate*)load("glGetUniformuiv"); - contextPtr->glGetVertexAttribIiv = (delegate*)load("glGetVertexAttribIiv"); - contextPtr->glGetVertexAttribIuiv = (delegate*)load("glGetVertexAttribIuiv"); - contextPtr->glIsEnabledi = (delegate*)load("glIsEnabledi"); - contextPtr->glIsFramebuffer = (delegate*)load("glIsFramebuffer"); - contextPtr->glIsRenderbuffer = (delegate*)load("glIsRenderbuffer"); - contextPtr->glIsVertexArray = (delegate*)load("glIsVertexArray"); - contextPtr->glMapBufferRange = (delegate*)load("glMapBufferRange"); - contextPtr->glRenderbufferStorage = (delegate*)load("glRenderbufferStorage"); - contextPtr->glRenderbufferStorageMultisample = (delegate*)load("glRenderbufferStorageMultisample"); - contextPtr->glTexParameterIiv = (delegate*)load("glTexParameterIiv"); - contextPtr->glTexParameterIuiv = (delegate*)load("glTexParameterIuiv"); - contextPtr->glTransformFeedbackVaryings = (delegate*)load("glTransformFeedbackVaryings"); - contextPtr->glUniform1ui = (delegate*)load("glUniform1ui"); - contextPtr->glUniform1uiv = (delegate*)load("glUniform1uiv"); - contextPtr->glUniform2ui = (delegate*)load("glUniform2ui"); - contextPtr->glUniform2uiv = (delegate*)load("glUniform2uiv"); - contextPtr->glUniform3ui = (delegate*)load("glUniform3ui"); - contextPtr->glUniform3uiv = (delegate*)load("glUniform3uiv"); - contextPtr->glUniform4ui = (delegate*)load("glUniform4ui"); - contextPtr->glUniform4uiv = (delegate*)load("glUniform4uiv"); - contextPtr->glVertexAttribI1i = (delegate*)load("glVertexAttribI1i"); - contextPtr->glVertexAttribI1iv = (delegate*)load("glVertexAttribI1iv"); - contextPtr->glVertexAttribI1ui = (delegate*)load("glVertexAttribI1ui"); - contextPtr->glVertexAttribI1uiv = (delegate*)load("glVertexAttribI1uiv"); - contextPtr->glVertexAttribI2i = (delegate*)load("glVertexAttribI2i"); - contextPtr->glVertexAttribI2iv = (delegate*)load("glVertexAttribI2iv"); - contextPtr->glVertexAttribI2ui = (delegate*)load("glVertexAttribI2ui"); - contextPtr->glVertexAttribI2uiv = (delegate*)load("glVertexAttribI2uiv"); - contextPtr->glVertexAttribI3i = (delegate*)load("glVertexAttribI3i"); - contextPtr->glVertexAttribI3iv = (delegate*)load("glVertexAttribI3iv"); - contextPtr->glVertexAttribI3ui = (delegate*)load("glVertexAttribI3ui"); - contextPtr->glVertexAttribI3uiv = (delegate*)load("glVertexAttribI3uiv"); - contextPtr->glVertexAttribI4bv = (delegate*)load("glVertexAttribI4bv"); - contextPtr->glVertexAttribI4i = (delegate*)load("glVertexAttribI4i"); - contextPtr->glVertexAttribI4iv = (delegate*)load("glVertexAttribI4iv"); - contextPtr->glVertexAttribI4sv = (delegate*)load("glVertexAttribI4sv"); - contextPtr->glVertexAttribI4ubv = (delegate*)load("glVertexAttribI4ubv"); - contextPtr->glVertexAttribI4ui = (delegate*)load("glVertexAttribI4ui"); - contextPtr->glVertexAttribI4uiv = (delegate*)load("glVertexAttribI4uiv"); - contextPtr->glVertexAttribI4usv = (delegate*)load("glVertexAttribI4usv"); - contextPtr->glVertexAttribIPointer = (delegate*)load("glVertexAttribIPointer"); + contextPtr->glBeginConditionalRender = ( delegate* )load( + "glBeginConditionalRender" ); + contextPtr->glBeginTransformFeedback = ( delegate* )load( + "glBeginTransformFeedback" ); + contextPtr->glBindBufferBase = ( delegate* )load( + "glBindBufferBase" ); + contextPtr->glBindBufferRange = ( delegate* )load( + "glBindBufferRange" ); + contextPtr->glBindFragDataLocation = ( delegate* )load( + "glBindFragDataLocation" ); + contextPtr->glBindFramebuffer = ( delegate* )load( + "glBindFramebuffer" ); + contextPtr->glBindRenderbuffer = ( delegate* )load( + "glBindRenderbuffer" ); + contextPtr->glBindVertexArray = ( delegate* )load( + "glBindVertexArray" ); + contextPtr->glBlitFramebuffer = ( delegate* )load( + "glBlitFramebuffer" ); + contextPtr->glCheckFramebufferStatus = ( delegate* )load( + "glCheckFramebufferStatus" ); + contextPtr->glClampColor = ( delegate* )load( + "glClampColor" ); + contextPtr->glClearBufferfi = ( delegate* )load( + "glClearBufferfi" ); + contextPtr->glClearBufferfv = ( delegate* )load( + "glClearBufferfv" ); + contextPtr->glClearBufferiv = ( delegate* )load( + "glClearBufferiv" ); + contextPtr->glClearBufferuiv = ( delegate* )load( + "glClearBufferuiv" ); + contextPtr->glColorMaski = ( delegate* )load( + "glColorMaski" ); + contextPtr->glDeleteFramebuffers = ( delegate* )load( + "glDeleteFramebuffers" ); + contextPtr->glDeleteRenderbuffers = ( delegate* )load( + "glDeleteRenderbuffers" ); + contextPtr->glDeleteVertexArrays = ( delegate* )load( + "glDeleteVertexArrays" ); + contextPtr->glDisablei = ( delegate* )load( + "glDisablei" ); + contextPtr->glEnablei = ( delegate* )load( + "glEnablei" ); + contextPtr->glEndConditionalRender = ( delegate* )load( + "glEndConditionalRender" ); + contextPtr->glEndTransformFeedback = ( delegate* )load( + "glEndTransformFeedback" ); + contextPtr->glFlushMappedBufferRange = ( delegate* )load( + "glFlushMappedBufferRange" ); + contextPtr->glFramebufferRenderbuffer = ( delegate* )load( + "glFramebufferRenderbuffer" ); + contextPtr->glFramebufferTexture1D = ( delegate* )load( + "glFramebufferTexture1D" ); + contextPtr->glFramebufferTexture2D = ( delegate* )load( + "glFramebufferTexture2D" ); + contextPtr->glFramebufferTexture3D = ( delegate* )load( + "glFramebufferTexture3D" ); + contextPtr->glFramebufferTextureLayer = ( delegate* )load( + "glFramebufferTextureLayer" ); + contextPtr->glGenFramebuffers = ( delegate* )load( + "glGenFramebuffers" ); + contextPtr->glGenRenderbuffers = ( delegate* )load( + "glGenRenderbuffers" ); + contextPtr->glGenVertexArrays = ( delegate* )load( + "glGenVertexArrays" ); + contextPtr->glGenerateMipmap = ( delegate* )load( + "glGenerateMipmap" ); + contextPtr->glGetBooleani_v = ( delegate* )load( + "glGetBooleani_v" ); + contextPtr->glGetFragDataLocation = ( delegate* )load( + "glGetFragDataLocation" ); + contextPtr->glGetFramebufferAttachmentParameteriv = ( delegate* )load( + "glGetFramebufferAttachmentParameteriv" ); + contextPtr->glGetIntegeri_v = ( delegate* )load( + "glGetIntegeri_v" ); + contextPtr->glGetRenderbufferParameteriv = ( delegate* )load( + "glGetRenderbufferParameteriv" ); + contextPtr->glGetStringi = ( delegate* )load( + "glGetStringi" ); + contextPtr->glGetTexParameterIiv = ( delegate* )load( + "glGetTexParameterIiv" ); + contextPtr->glGetTexParameterIuiv = ( delegate* )load( + "glGetTexParameterIuiv" ); + contextPtr->glGetTransformFeedbackVarying = ( delegate* )load( + "glGetTransformFeedbackVarying" ); + contextPtr->glGetUniformuiv = ( delegate* )load( + "glGetUniformuiv" ); + contextPtr->glGetVertexAttribIiv = ( delegate* )load( + "glGetVertexAttribIiv" ); + contextPtr->glGetVertexAttribIuiv = ( delegate* )load( + "glGetVertexAttribIuiv" ); + contextPtr->glIsEnabledi = ( delegate* )load( + "glIsEnabledi" ); + contextPtr->glIsFramebuffer = ( delegate* )load( + "glIsFramebuffer" ); + contextPtr->glIsRenderbuffer = ( delegate* )load( + "glIsRenderbuffer" ); + contextPtr->glIsVertexArray = ( delegate* )load( + "glIsVertexArray" ); + contextPtr->glMapBufferRange = ( delegate* )load( + "glMapBufferRange" ); + contextPtr->glRenderbufferStorage = ( delegate* )load( + "glRenderbufferStorage" ); + contextPtr->glRenderbufferStorageMultisample = ( delegate* )load( + "glRenderbufferStorageMultisample" ); + contextPtr->glTexParameterIiv = ( delegate* )load( + "glTexParameterIiv" ); + contextPtr->glTexParameterIuiv = ( delegate* )load( + "glTexParameterIuiv" ); + contextPtr->glTransformFeedbackVaryings = ( delegate* )load( + "glTransformFeedbackVaryings" ); + contextPtr->glUniform1ui = ( delegate* )load( + "glUniform1ui" ); + contextPtr->glUniform1uiv = ( delegate* )load( + "glUniform1uiv" ); + contextPtr->glUniform2ui = ( delegate* )load( + "glUniform2ui" ); + contextPtr->glUniform2uiv = ( delegate* )load( + "glUniform2uiv" ); + contextPtr->glUniform3ui = ( delegate* )load( + "glUniform3ui" ); + contextPtr->glUniform3uiv = ( delegate* )load( + "glUniform3uiv" ); + contextPtr->glUniform4ui = ( delegate* )load( + "glUniform4ui" ); + contextPtr->glUniform4uiv = ( delegate* )load( + "glUniform4uiv" ); + contextPtr->glVertexAttribI1i = ( delegate* )load( + "glVertexAttribI1i" ); + contextPtr->glVertexAttribI1iv = ( delegate* )load( + "glVertexAttribI1iv" ); + contextPtr->glVertexAttribI1ui = ( delegate* )load( + "glVertexAttribI1ui" ); + contextPtr->glVertexAttribI1uiv = ( delegate* )load( + "glVertexAttribI1uiv" ); + contextPtr->glVertexAttribI2i = ( delegate* )load( + "glVertexAttribI2i" ); + contextPtr->glVertexAttribI2iv = ( delegate* )load( + "glVertexAttribI2iv" ); + contextPtr->glVertexAttribI2ui = ( delegate* )load( + "glVertexAttribI2ui" ); + contextPtr->glVertexAttribI2uiv = ( delegate* )load( + "glVertexAttribI2uiv" ); + contextPtr->glVertexAttribI3i = ( delegate* )load( + "glVertexAttribI3i" ); + contextPtr->glVertexAttribI3iv = ( delegate* )load( + "glVertexAttribI3iv" ); + contextPtr->glVertexAttribI3ui = ( delegate* )load( + "glVertexAttribI3ui" ); + contextPtr->glVertexAttribI3uiv = ( delegate* )load( + "glVertexAttribI3uiv" ); + contextPtr->glVertexAttribI4bv = ( delegate* )load( + "glVertexAttribI4bv" ); + contextPtr->glVertexAttribI4i = ( delegate* )load( + "glVertexAttribI4i" ); + contextPtr->glVertexAttribI4iv = ( delegate* )load( + "glVertexAttribI4iv" ); + contextPtr->glVertexAttribI4sv = ( delegate* )load( + "glVertexAttribI4sv" ); + contextPtr->glVertexAttribI4ubv = ( delegate* )load( + "glVertexAttribI4ubv" ); + contextPtr->glVertexAttribI4ui = ( delegate* )load( + "glVertexAttribI4ui" ); + contextPtr->glVertexAttribI4uiv = ( delegate* )load( + "glVertexAttribI4uiv" ); + contextPtr->glVertexAttribI4usv = ( delegate* )load( + "glVertexAttribI4usv" ); + contextPtr->glVertexAttribIPointer = ( delegate* )load( + "glVertexAttribIPointer" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 3.0 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 3.0 APIs" ); } - internal static unsafe void LoadGLcore31(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore31( + OpenglContext* contextPtr, + delegate* load ) { - if (!core31) - { - InternalIO.InternalAppendLog("The core version 3.1 is not supported."); - throw new Exception("Final Version"); + if( !core31 ) { + InternalIO.InternalAppendLog( + "The core version 3.1 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindBufferBase = (delegate*)load("glBindBufferBase"); - contextPtr->glBindBufferRange = (delegate*)load("glBindBufferRange"); - contextPtr->glCopyBufferSubData = (delegate*)load("glCopyBufferSubData"); - contextPtr->glDrawArraysInstanced = (delegate*)load("glDrawArraysInstanced"); - contextPtr->glDrawElementsInstanced = (delegate*)load("glDrawElementsInstanced"); - contextPtr->glGetActiveUniformBlockName = (delegate*)load("glGetActiveUniformBlockName"); - contextPtr->glGetActiveUniformBlockiv = (delegate*)load("glGetActiveUniformBlockiv"); - contextPtr->glGetActiveUniformName = (delegate*)load("glGetActiveUniformName"); - contextPtr->glGetActiveUniformsiv = (delegate*)load("glGetActiveUniformsiv"); - contextPtr->glGetIntegeri_v = (delegate*)load("glGetIntegeri_v"); - contextPtr->glGetUniformBlockIndex = (delegate*)load("glGetUniformBlockIndex"); - contextPtr->glGetUniformIndices = (delegate*)load("glGetUniformIndices"); - contextPtr->glPrimitiveRestartIndex = (delegate*)load("glPrimitiveRestartIndex"); - contextPtr->glTexBuffer = (delegate*)load("glTexBuffer"); - contextPtr->glUniformBlockBinding = (delegate*)load("glUniformBlockBinding"); + contextPtr->glBindBufferBase = ( delegate* )load( + "glBindBufferBase" ); + contextPtr->glBindBufferRange = ( delegate* )load( + "glBindBufferRange" ); + contextPtr->glCopyBufferSubData = ( delegate* )load( + "glCopyBufferSubData" ); + contextPtr->glDrawArraysInstanced = ( delegate* )load( + "glDrawArraysInstanced" ); + contextPtr->glDrawElementsInstanced = ( delegate* )load( + "glDrawElementsInstanced" ); + contextPtr->glGetActiveUniformBlockName = ( delegate* )load( + "glGetActiveUniformBlockName" ); + contextPtr->glGetActiveUniformBlockiv = ( delegate* )load( + "glGetActiveUniformBlockiv" ); + contextPtr->glGetActiveUniformName = ( delegate* )load( + "glGetActiveUniformName" ); + contextPtr->glGetActiveUniformsiv = ( delegate* )load( + "glGetActiveUniformsiv" ); + contextPtr->glGetIntegeri_v = ( delegate* )load( + "glGetIntegeri_v" ); + contextPtr->glGetUniformBlockIndex = ( delegate* )load( + "glGetUniformBlockIndex" ); + contextPtr->glGetUniformIndices = ( delegate* )load( + "glGetUniformIndices" ); + contextPtr->glPrimitiveRestartIndex = ( delegate* )load( + "glPrimitiveRestartIndex" ); + contextPtr->glTexBuffer = ( delegate* )load( + "glTexBuffer" ); + contextPtr->glUniformBlockBinding = ( delegate* )load( + "glUniformBlockBinding" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 3.1 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 3.1 APIs" ); } - internal static unsafe void LoadGLcore32(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore32( + OpenglContext* contextPtr, + delegate* load ) { - if (!core32) - { - InternalIO.InternalAppendLog("The core version 3.2 is not supported."); - throw new Exception("Final Version"); + if( !core32 ) { + InternalIO.InternalAppendLog( + "The core version 3.2 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glClientWaitSync = (delegate*)load("glClientWaitSync"); - contextPtr->glDeleteSync = (delegate*)load("glDeleteSync"); - contextPtr->glDrawElementsBaseVertex = (delegate*)load("glDrawElementsBaseVertex"); - contextPtr->glDrawElementsInstancedBaseVertex = (delegate*)load("glDrawElementsInstancedBaseVertex"); - contextPtr->glDrawRangeElementsBaseVertex = (delegate*)load("glDrawRangeElementsBaseVertex"); - contextPtr->glFenceSync = (delegate*)load("glFenceSync"); - contextPtr->glFramebufferTexture = (delegate*)load("glFramebufferTexture"); - contextPtr->glGetBufferParameteri64v = (delegate*)load("glGetBufferParameteri64v"); - contextPtr->glGetInteger64i_v = (delegate*)load("glGetInteger64i_v"); - contextPtr->glGetInteger64v = (delegate*)load("glGetInteger64v"); - contextPtr->glGetMultisamplefv = (delegate*)load("glGetMultisamplefv"); - contextPtr->glGetSynciv = (delegate*)load("glGetSynciv"); - contextPtr->glIsSync = (delegate*)load("glIsSync"); - contextPtr->glMultiDrawElementsBaseVertex = (delegate*)load("glMultiDrawElementsBaseVertex"); - contextPtr->glProvokingVertex = (delegate*)load("glProvokingVertex"); - contextPtr->glSampleMaski = (delegate*)load("glSampleMaski"); - contextPtr->glTexImage2DMultisample = (delegate*)load("glTexImage2DMultisample"); - contextPtr->glTexImage3DMultisample = (delegate*)load("glTexImage3DMultisample"); - contextPtr->glWaitSync = (delegate*)load("glWaitSync"); + contextPtr->glClientWaitSync = ( delegate* )load( + "glClientWaitSync" ); + contextPtr->glDeleteSync = ( delegate* )load( + "glDeleteSync" ); + contextPtr->glDrawElementsBaseVertex = ( delegate* )load( + "glDrawElementsBaseVertex" ); + contextPtr->glDrawElementsInstancedBaseVertex = ( delegate* )load( + "glDrawElementsInstancedBaseVertex" ); + contextPtr->glDrawRangeElementsBaseVertex = ( delegate* )load( + "glDrawRangeElementsBaseVertex" ); + contextPtr->glFenceSync = ( delegate* )load( + "glFenceSync" ); + contextPtr->glFramebufferTexture = ( delegate* )load( + "glFramebufferTexture" ); + contextPtr->glGetBufferParameteri64v = ( delegate* )load( + "glGetBufferParameteri64v" ); + contextPtr->glGetInteger64i_v = ( delegate* )load( + "glGetInteger64i_v" ); + contextPtr->glGetInteger64v = ( delegate* )load( + "glGetInteger64v" ); + contextPtr->glGetMultisamplefv = ( delegate* )load( + "glGetMultisamplefv" ); + contextPtr->glGetSynciv = ( delegate* )load( + "glGetSynciv" ); + contextPtr->glIsSync = ( delegate* )load( "glIsSync" ); + contextPtr->glMultiDrawElementsBaseVertex = ( delegate* )load( + "glMultiDrawElementsBaseVertex" ); + contextPtr->glProvokingVertex = ( delegate* )load( + "glProvokingVertex" ); + contextPtr->glSampleMaski = ( delegate* )load( + "glSampleMaski" ); + contextPtr->glTexImage2DMultisample = ( delegate* )load( + "glTexImage2DMultisample" ); + contextPtr->glTexImage3DMultisample = ( delegate* )load( + "glTexImage3DMultisample" ); + contextPtr->glWaitSync = ( delegate* )load( + "glWaitSync" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 3.2 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 3.2 APIs" ); } - internal static unsafe void LoadGLcore33(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore33( + OpenglContext* contextPtr, + delegate* load ) { - if (!core33) - { - InternalIO.InternalAppendLog("The core version 3.3 is not supported."); - throw new Exception("Final Version"); + if( !core33 ) { + InternalIO.InternalAppendLog( + "The core version 3.3 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindFragDataLocationIndexed = (delegate*)load("glBindFragDataLocationIndexed"); - contextPtr->glBindSampler = (delegate*)load("glBindSampler"); - contextPtr->glDeleteSamplers = (delegate*)load("glDeleteSamplers"); - contextPtr->glGenSamplers = (delegate*)load("glGenSamplers"); - contextPtr->glGetFragDataIndex = (delegate*)load("glGetFragDataIndex"); - contextPtr->glGetQueryObjecti64v = (delegate*)load("glGetQueryObjecti64v"); - contextPtr->glGetQueryObjectui64v = (delegate*)load("glGetQueryObjectui64v"); - contextPtr->glGetSamplerParameterIiv = (delegate*)load("glGetSamplerParameterIiv"); - contextPtr->glGetSamplerParameterIuiv = (delegate*)load("glGetSamplerParameterIuiv"); - contextPtr->glGetSamplerParameterfv = (delegate*)load("glGetSamplerParameterfv"); - contextPtr->glGetSamplerParameteriv = (delegate*)load("glGetSamplerParameteriv"); - contextPtr->glIsSampler = (delegate*)load("glIsSampler"); - contextPtr->glQueryCounter = (delegate*)load("glQueryCounter"); - contextPtr->glSamplerParameterIiv = (delegate*)load("glSamplerParameterIiv"); - contextPtr->glSamplerParameterIuiv = (delegate*)load("glSamplerParameterIuiv"); - contextPtr->glSamplerParameterf = (delegate*)load("glSamplerParameterf"); - contextPtr->glSamplerParameterfv = (delegate*)load("glSamplerParameterfv"); - contextPtr->glSamplerParameteri = (delegate*)load("glSamplerParameteri"); - contextPtr->glSamplerParameteriv = (delegate*)load("glSamplerParameteriv"); - contextPtr->glVertexAttribDivisor = (delegate*)load("glVertexAttribDivisor"); - contextPtr->glVertexAttribP1ui = (delegate*)load("glVertexAttribP1ui"); - contextPtr->glVertexAttribP1uiv = (delegate*)load("glVertexAttribP1uiv"); - contextPtr->glVertexAttribP2ui = (delegate*)load("glVertexAttribP2ui"); - contextPtr->glVertexAttribP2uiv = (delegate*)load("glVertexAttribP2uiv"); - contextPtr->glVertexAttribP3ui = (delegate*)load("glVertexAttribP3ui"); - contextPtr->glVertexAttribP3uiv = (delegate*)load("glVertexAttribP3uiv"); - contextPtr->glVertexAttribP4ui = (delegate*)load("glVertexAttribP4ui"); - contextPtr->glVertexAttribP4uiv = (delegate*)load("glVertexAttribP4uiv"); + contextPtr->glBindFragDataLocationIndexed = ( delegate* )load( + "glBindFragDataLocationIndexed" ); + contextPtr->glBindSampler = ( delegate* )load( + "glBindSampler" ); + contextPtr->glDeleteSamplers = ( delegate* )load( + "glDeleteSamplers" ); + contextPtr->glGenSamplers = ( delegate* )load( + "glGenSamplers" ); + contextPtr->glGetFragDataIndex = ( delegate* )load( + "glGetFragDataIndex" ); + contextPtr->glGetQueryObjecti64v = ( delegate* )load( + "glGetQueryObjecti64v" ); + contextPtr->glGetQueryObjectui64v = ( delegate* )load( + "glGetQueryObjectui64v" ); + contextPtr->glGetSamplerParameterIiv = ( delegate* )load( + "glGetSamplerParameterIiv" ); + contextPtr->glGetSamplerParameterIuiv = ( delegate* )load( + "glGetSamplerParameterIuiv" ); + contextPtr->glGetSamplerParameterfv = ( delegate* )load( + "glGetSamplerParameterfv" ); + contextPtr->glGetSamplerParameteriv = ( delegate* )load( + "glGetSamplerParameteriv" ); + contextPtr->glIsSampler = ( delegate* )load( + "glIsSampler" ); + contextPtr->glQueryCounter = ( delegate* )load( + "glQueryCounter" ); + contextPtr->glSamplerParameterIiv = ( delegate* )load( + "glSamplerParameterIiv" ); + contextPtr->glSamplerParameterIuiv = ( delegate* )load( + "glSamplerParameterIuiv" ); + contextPtr->glSamplerParameterf = ( delegate* )load( + "glSamplerParameterf" ); + contextPtr->glSamplerParameterfv = ( delegate* )load( + "glSamplerParameterfv" ); + contextPtr->glSamplerParameteri = ( delegate* )load( + "glSamplerParameteri" ); + contextPtr->glSamplerParameteriv = ( delegate* )load( + "glSamplerParameteriv" ); + contextPtr->glVertexAttribDivisor = ( delegate* )load( + "glVertexAttribDivisor" ); + contextPtr->glVertexAttribP1ui = ( delegate* )load( + "glVertexAttribP1ui" ); + contextPtr->glVertexAttribP1uiv = ( delegate* )load( + "glVertexAttribP1uiv" ); + contextPtr->glVertexAttribP2ui = ( delegate* )load( + "glVertexAttribP2ui" ); + contextPtr->glVertexAttribP2uiv = ( delegate* )load( + "glVertexAttribP2uiv" ); + contextPtr->glVertexAttribP3ui = ( delegate* )load( + "glVertexAttribP3ui" ); + contextPtr->glVertexAttribP3uiv = ( delegate* )load( + "glVertexAttribP3uiv" ); + contextPtr->glVertexAttribP4ui = ( delegate* )load( + "glVertexAttribP4ui" ); + contextPtr->glVertexAttribP4uiv = ( delegate* )load( + "glVertexAttribP4uiv" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 3.3 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 3.3 APIs" ); } - internal static unsafe void LoadGLcore40(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore40( + OpenglContext* contextPtr, + delegate* load ) { - if (!core40) - { - InternalIO.InternalAppendLog("The core version 4.0 is not supported."); - throw new Exception("Final Version"); + if( !core40 ) { + InternalIO.InternalAppendLog( + "The core version 4.0 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBeginQueryIndexed = (delegate*)load("glBeginQueryIndexed"); - contextPtr->glBindTransformFeedback = (delegate*)load("glBindTransformFeedback"); - contextPtr->glBlendEquationSeparatei = (delegate*)load("glBlendEquationSeparatei"); - contextPtr->glBlendEquationi = (delegate*)load("glBlendEquationi"); - contextPtr->glBlendFuncSeparatei = (delegate*)load("glBlendFuncSeparatei"); - contextPtr->glBlendFunci = (delegate*)load("glBlendFunci"); - contextPtr->glDeleteTransformFeedbacks = (delegate*)load("glDeleteTransformFeedbacks"); - contextPtr->glDrawArraysIndirect = (delegate*)load("glDrawArraysIndirect"); - contextPtr->glDrawElementsIndirect = (delegate*)load("glDrawElementsIndirect"); - contextPtr->glDrawTransformFeedback = (delegate*)load("glDrawTransformFeedback"); - contextPtr->glDrawTransformFeedbackStream = (delegate*)load("glDrawTransformFeedbackStream"); - contextPtr->glEndQueryIndexed = (delegate*)load("glEndQueryIndexed"); - contextPtr->glGenTransformFeedbacks = (delegate*)load("glGenTransformFeedbacks"); - contextPtr->glGetActiveSubroutineName = (delegate*)load("glGetActiveSubroutineName"); - contextPtr->glGetActiveSubroutineUniformName = (delegate*)load("glGetActiveSubroutineUniformName"); - contextPtr->glGetActiveSubroutineUniformiv = (delegate*)load("glGetActiveSubroutineUniformiv"); - contextPtr->glGetProgramStageiv = (delegate*)load("glGetProgramStageiv"); - contextPtr->glGetQueryIndexediv = (delegate*)load("glGetQueryIndexediv"); - contextPtr->glGetSubroutineIndex = (delegate*)load("glGetSubroutineIndex"); - contextPtr->glGetSubroutineUniformLocation = (delegate*)load("glGetSubroutineUniformLocation"); - contextPtr->glGetUniformSubroutineuiv = (delegate*)load("glGetUniformSubroutineuiv"); - contextPtr->glGetUniformdv = (delegate*)load("glGetUniformdv"); - contextPtr->glIsTransformFeedback = (delegate*)load("glIsTransformFeedback"); - contextPtr->glMinSampleShading = (delegate*)load("glMinSampleShading"); - contextPtr->glPatchParameterfv = (delegate*)load("glPatchParameterfv"); - contextPtr->glPatchParameteri = (delegate*)load("glPatchParameteri"); - contextPtr->glPauseTransformFeedback = (delegate*)load("glPauseTransformFeedback"); - contextPtr->glResumeTransformFeedback = (delegate*)load("glResumeTransformFeedback"); - contextPtr->glUniform1d = (delegate*)load("glUniform1d"); - contextPtr->glUniform1dv = (delegate*)load("glUniform1dv"); - contextPtr->glUniform2d = (delegate*)load("glUniform2d"); - contextPtr->glUniform2dv = (delegate*)load("glUniform2dv"); - contextPtr->glUniform3d = (delegate*)load("glUniform3d"); - contextPtr->glUniform3dv = (delegate*)load("glUniform3dv"); - contextPtr->glUniform4d = (delegate*)load("glUniform4d"); - contextPtr->glUniform4dv = (delegate*)load("glUniform4dv"); - contextPtr->glUniformMatrix2dv = (delegate*)load("glUniformMatrix2dv"); - contextPtr->glUniformMatrix2x3dv = (delegate*)load("glUniformMatrix2x3dv"); - contextPtr->glUniformMatrix2x4dv = (delegate*)load("glUniformMatrix2x4dv"); - contextPtr->glUniformMatrix3dv = (delegate*)load("glUniformMatrix3dv"); - contextPtr->glUniformMatrix3x2dv = (delegate*)load("glUniformMatrix3x2dv"); - contextPtr->glUniformMatrix3x4dv = (delegate*)load("glUniformMatrix3x4dv"); - contextPtr->glUniformMatrix4dv = (delegate*)load("glUniformMatrix4dv"); - contextPtr->glUniformMatrix4x2dv = (delegate*)load("glUniformMatrix4x2dv"); - contextPtr->glUniformMatrix4x3dv = (delegate*)load("glUniformMatrix4x3dv"); - contextPtr->glUniformSubroutinesuiv = (delegate*)load("glUniformSubroutinesuiv"); + contextPtr->glBeginQueryIndexed = ( delegate* )load( + "glBeginQueryIndexed" ); + contextPtr->glBindTransformFeedback = ( delegate* )load( + "glBindTransformFeedback" ); + contextPtr->glBlendEquationSeparatei = ( delegate* )load( + "glBlendEquationSeparatei" ); + contextPtr->glBlendEquationi = ( delegate* )load( + "glBlendEquationi" ); + contextPtr->glBlendFuncSeparatei = ( delegate* )load( + "glBlendFuncSeparatei" ); + contextPtr->glBlendFunci = ( delegate* )load( + "glBlendFunci" ); + contextPtr->glDeleteTransformFeedbacks = ( delegate* )load( + "glDeleteTransformFeedbacks" ); + contextPtr->glDrawArraysIndirect = ( delegate* )load( + "glDrawArraysIndirect" ); + contextPtr->glDrawElementsIndirect = ( delegate* )load( + "glDrawElementsIndirect" ); + contextPtr->glDrawTransformFeedback = ( delegate* )load( + "glDrawTransformFeedback" ); + contextPtr->glDrawTransformFeedbackStream = ( delegate* )load( + "glDrawTransformFeedbackStream" ); + contextPtr->glEndQueryIndexed = ( delegate* )load( + "glEndQueryIndexed" ); + contextPtr->glGenTransformFeedbacks = ( delegate* )load( + "glGenTransformFeedbacks" ); + contextPtr->glGetActiveSubroutineName = ( delegate* )load( + "glGetActiveSubroutineName" ); + contextPtr->glGetActiveSubroutineUniformName = ( delegate* )load( + "glGetActiveSubroutineUniformName" ); + contextPtr->glGetActiveSubroutineUniformiv = ( delegate* )load( + "glGetActiveSubroutineUniformiv" ); + contextPtr->glGetProgramStageiv = ( delegate* )load( + "glGetProgramStageiv" ); + contextPtr->glGetQueryIndexediv = ( delegate* )load( + "glGetQueryIndexediv" ); + contextPtr->glGetSubroutineIndex = ( delegate* )load( + "glGetSubroutineIndex" ); + contextPtr->glGetSubroutineUniformLocation = ( delegate* )load( + "glGetSubroutineUniformLocation" ); + contextPtr->glGetUniformSubroutineuiv = ( delegate* )load( + "glGetUniformSubroutineuiv" ); + contextPtr->glGetUniformdv = ( delegate* )load( + "glGetUniformdv" ); + contextPtr->glIsTransformFeedback = ( delegate* )load( + "glIsTransformFeedback" ); + contextPtr->glMinSampleShading = ( delegate* )load( + "glMinSampleShading" ); + contextPtr->glPatchParameterfv = ( delegate* )load( + "glPatchParameterfv" ); + contextPtr->glPatchParameteri = ( delegate* )load( + "glPatchParameteri" ); + contextPtr->glPauseTransformFeedback = ( delegate* )load( + "glPauseTransformFeedback" ); + contextPtr->glResumeTransformFeedback = ( delegate* )load( + "glResumeTransformFeedback" ); + contextPtr->glUniform1d = ( delegate* )load( + "glUniform1d" ); + contextPtr->glUniform1dv = ( delegate* )load( + "glUniform1dv" ); + contextPtr->glUniform2d = ( delegate* )load( + "glUniform2d" ); + contextPtr->glUniform2dv = ( delegate* )load( + "glUniform2dv" ); + contextPtr->glUniform3d = ( delegate* )load( + "glUniform3d" ); + contextPtr->glUniform3dv = ( delegate* )load( + "glUniform3dv" ); + contextPtr->glUniform4d = ( delegate* )load( + "glUniform4d" ); + contextPtr->glUniform4dv = ( delegate* )load( + "glUniform4dv" ); + contextPtr->glUniformMatrix2dv = ( delegate* )load( + "glUniformMatrix2dv" ); + contextPtr->glUniformMatrix2x3dv = ( delegate* )load( + "glUniformMatrix2x3dv" ); + contextPtr->glUniformMatrix2x4dv = ( delegate* )load( + "glUniformMatrix2x4dv" ); + contextPtr->glUniformMatrix3dv = ( delegate* )load( + "glUniformMatrix3dv" ); + contextPtr->glUniformMatrix3x2dv = ( delegate* )load( + "glUniformMatrix3x2dv" ); + contextPtr->glUniformMatrix3x4dv = ( delegate* )load( + "glUniformMatrix3x4dv" ); + contextPtr->glUniformMatrix4dv = ( delegate* )load( + "glUniformMatrix4dv" ); + contextPtr->glUniformMatrix4x2dv = ( delegate* )load( + "glUniformMatrix4x2dv" ); + contextPtr->glUniformMatrix4x3dv = ( delegate* )load( + "glUniformMatrix4x3dv" ); + contextPtr->glUniformSubroutinesuiv = ( delegate* )load( + "glUniformSubroutinesuiv" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.0 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.0 APIs" ); } - internal static unsafe void LoadGLcore41(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore41( + OpenglContext* contextPtr, + delegate* load ) { - if (!core41) - { - InternalIO.InternalAppendLog("The core version 4.1 is not supported."); - throw new Exception("Final Version"); + if( !core41 ) { + InternalIO.InternalAppendLog( + "The core version 4.1 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glActiveShaderProgram = (delegate*)load("glActiveShaderProgram"); - contextPtr->glBindProgramPipeline = (delegate*)load("glBindProgramPipeline"); - contextPtr->glClearDepthf = (delegate*)load("glClearDepthf"); - contextPtr->glCreateShaderProgramv = (delegate*)load("glCreateShaderProgramv"); - contextPtr->glDeleteProgramPipelines = (delegate*)load("glDeleteProgramPipelines"); - contextPtr->glDepthRangeArrayv = (delegate*)load("glDepthRangeArrayv"); - contextPtr->glDepthRangeIndexed = (delegate*)load("glDepthRangeIndexed"); - contextPtr->glDepthRangef = (delegate*)load("glDepthRangef"); - contextPtr->glGenProgramPipelines = (delegate*)load("glGenProgramPipelines"); - contextPtr->glGetDoublei_v = (delegate*)load("glGetDoublei_v"); - contextPtr->glGetFloati_v = (delegate*)load("glGetFloati_v"); - contextPtr->glGetProgramBinary = (delegate*)load("glGetProgramBinary"); - contextPtr->glGetProgramPipelineInfoLog = (delegate*)load("glGetProgramPipelineInfoLog"); - contextPtr->glGetProgramPipelineiv = (delegate*)load("glGetProgramPipelineiv"); - contextPtr->glGetShaderPrecisionFormat = (delegate*)load("glGetShaderPrecisionFormat"); - contextPtr->glGetVertexAttribLdv = (delegate*)load("glGetVertexAttribLdv"); - contextPtr->glIsProgramPipeline = (delegate*)load("glIsProgramPipeline"); - contextPtr->glProgramBinary = (delegate*)load("glProgramBinary"); - contextPtr->glProgramParameteri = (delegate*)load("glProgramParameteri"); - contextPtr->glProgramUniform1d = (delegate*)load("glProgramUniform1d"); - contextPtr->glProgramUniform1dv = (delegate*)load("glProgramUniform1dv"); - contextPtr->glProgramUniform1f = (delegate*)load("glProgramUniform1f"); - contextPtr->glProgramUniform1fv = (delegate*)load("glProgramUniform1fv"); - contextPtr->glProgramUniform1i = (delegate*)load("glProgramUniform1i"); - contextPtr->glProgramUniform1iv = (delegate*)load("glProgramUniform1iv"); - contextPtr->glProgramUniform1ui = (delegate*)load("glProgramUniform1ui"); - contextPtr->glProgramUniform1uiv = (delegate*)load("glProgramUniform1uiv"); - contextPtr->glProgramUniform2d = (delegate*)load("glProgramUniform2d"); - contextPtr->glProgramUniform2dv = (delegate*)load("glProgramUniform2dv"); - contextPtr->glProgramUniform2f = (delegate*)load("glProgramUniform2f"); - contextPtr->glProgramUniform2fv = (delegate*)load("glProgramUniform2fv"); - contextPtr->glProgramUniform2i = (delegate*)load("glProgramUniform2i"); - contextPtr->glProgramUniform2iv = (delegate*)load("glProgramUniform2iv"); - contextPtr->glProgramUniform2ui = (delegate*)load("glProgramUniform2ui"); - contextPtr->glProgramUniform2uiv = (delegate*)load("glProgramUniform2uiv"); - contextPtr->glProgramUniform3d = (delegate*)load("glProgramUniform3d"); - contextPtr->glProgramUniform3dv = (delegate*)load("glProgramUniform3dv"); - contextPtr->glProgramUniform3f = (delegate*)load("glProgramUniform3f"); - contextPtr->glProgramUniform3fv = (delegate*)load("glProgramUniform3fv"); - contextPtr->glProgramUniform3i = (delegate*)load("glProgramUniform3i"); - contextPtr->glProgramUniform3iv = (delegate*)load("glProgramUniform3iv"); - contextPtr->glProgramUniform3ui = (delegate*)load("glProgramUniform3ui"); - contextPtr->glProgramUniform3uiv = (delegate*)load("glProgramUniform3uiv"); - contextPtr->glProgramUniform4d = (delegate*)load("glProgramUniform4d"); - contextPtr->glProgramUniform4dv = (delegate*)load("glProgramUniform4dv"); - contextPtr->glProgramUniform4f = (delegate*)load("glProgramUniform4f"); - contextPtr->glProgramUniform4fv = (delegate*)load("glProgramUniform4fv"); - contextPtr->glProgramUniform4i = (delegate*)load("glProgramUniform4i"); - contextPtr->glProgramUniform4iv = (delegate*)load("glProgramUniform4iv"); - contextPtr->glProgramUniform4ui = (delegate*)load("glProgramUniform4ui"); - contextPtr->glProgramUniform4uiv = (delegate*)load("glProgramUniform4uiv"); - contextPtr->glProgramUniformMatrix2dv = (delegate*)load("glProgramUniformMatrix2dv"); - contextPtr->glProgramUniformMatrix2fv = (delegate*)load("glProgramUniformMatrix2fv"); - contextPtr->glProgramUniformMatrix2x3dv = (delegate*)load("glProgramUniformMatrix2x3dv"); - contextPtr->glProgramUniformMatrix2x3fv = (delegate*)load("glProgramUniformMatrix2x3fv"); - contextPtr->glProgramUniformMatrix2x4dv = (delegate*)load("glProgramUniformMatrix2x4dv"); - contextPtr->glProgramUniformMatrix2x4fv = (delegate*)load("glProgramUniformMatrix2x4fv"); - contextPtr->glProgramUniformMatrix3dv = (delegate*)load("glProgramUniformMatrix3dv"); - contextPtr->glProgramUniformMatrix3fv = (delegate*)load("glProgramUniformMatrix3fv"); - contextPtr->glProgramUniformMatrix3x2dv = (delegate*)load("glProgramUniformMatrix3x2dv"); - contextPtr->glProgramUniformMatrix3x2fv = (delegate*)load("glProgramUniformMatrix3x2fv"); - contextPtr->glProgramUniformMatrix3x4dv = (delegate*)load("glProgramUniformMatrix3x4dv"); - contextPtr->glProgramUniformMatrix3x4fv = (delegate*)load("glProgramUniformMatrix3x4fv"); - contextPtr->glProgramUniformMatrix4dv = (delegate*)load("glProgramUniformMatrix4dv"); - contextPtr->glProgramUniformMatrix4fv = (delegate*)load("glProgramUniformMatrix4fv"); - contextPtr->glProgramUniformMatrix4x2dv = (delegate*)load("glProgramUniformMatrix4x2dv"); - contextPtr->glProgramUniformMatrix4x2fv = (delegate*)load("glProgramUniformMatrix4x2fv"); - contextPtr->glProgramUniformMatrix4x3dv = (delegate*)load("glProgramUniformMatrix4x3dv"); - contextPtr->glProgramUniformMatrix4x3fv = (delegate*)load("glProgramUniformMatrix4x3fv"); - contextPtr->glReleaseShaderCompiler = (delegate*)load("glReleaseShaderCompiler"); - contextPtr->glScissorArrayv = (delegate*)load("glScissorArrayv"); - contextPtr->glScissorIndexed = (delegate*)load("glScissorIndexed"); - contextPtr->glScissorIndexedv = (delegate*)load("glScissorIndexedv"); - contextPtr->glShaderBinary = (delegate*)load("glShaderBinary"); - contextPtr->glUseProgramStages = (delegate*)load("glUseProgramStages"); - contextPtr->glValidateProgramPipeline = (delegate*)load("glValidateProgramPipeline"); - contextPtr->glVertexAttribL1d = (delegate*)load("glVertexAttribL1d"); - contextPtr->glVertexAttribL1dv = (delegate*)load("glVertexAttribL1dv"); - contextPtr->glVertexAttribL2d = (delegate*)load("glVertexAttribL2d"); - contextPtr->glVertexAttribL2dv = (delegate*)load("glVertexAttribL2dv"); - contextPtr->glVertexAttribL3d = (delegate*)load("glVertexAttribL3d"); - contextPtr->glVertexAttribL3dv = (delegate*)load("glVertexAttribL3dv"); - contextPtr->glVertexAttribL4d = (delegate*)load("glVertexAttribL4d"); - contextPtr->glVertexAttribL4dv = (delegate*)load("glVertexAttribL4dv"); - contextPtr->glVertexAttribLPointer = (delegate*)load("glVertexAttribLPointer"); - contextPtr->glViewportArrayv = (delegate*)load("glViewportArrayv"); - contextPtr->glViewportIndexedf = (delegate*)load("glViewportIndexedf"); - contextPtr->glViewportIndexedfv = (delegate*)load("glViewportIndexedfv"); + contextPtr->glActiveShaderProgram = ( delegate* )load( + "glActiveShaderProgram" ); + contextPtr->glBindProgramPipeline = ( delegate* )load( + "glBindProgramPipeline" ); + contextPtr->glClearDepthf = ( delegate* )load( + "glClearDepthf" ); + contextPtr->glCreateShaderProgramv = ( delegate* )load( + "glCreateShaderProgramv" ); + contextPtr->glDeleteProgramPipelines = ( delegate* )load( + "glDeleteProgramPipelines" ); + contextPtr->glDepthRangeArrayv = ( delegate* )load( + "glDepthRangeArrayv" ); + contextPtr->glDepthRangeIndexed = ( delegate* )load( + "glDepthRangeIndexed" ); + contextPtr->glDepthRangef = ( delegate* )load( + "glDepthRangef" ); + contextPtr->glGenProgramPipelines = ( delegate* )load( + "glGenProgramPipelines" ); + contextPtr->glGetDoublei_v = ( delegate* )load( + "glGetDoublei_v" ); + contextPtr->glGetFloati_v = ( delegate* )load( + "glGetFloati_v" ); + contextPtr->glGetProgramBinary = ( delegate* )load( + "glGetProgramBinary" ); + contextPtr->glGetProgramPipelineInfoLog = ( delegate* )load( + "glGetProgramPipelineInfoLog" ); + contextPtr->glGetProgramPipelineiv = ( delegate* )load( + "glGetProgramPipelineiv" ); + contextPtr->glGetShaderPrecisionFormat = ( delegate* )load( + "glGetShaderPrecisionFormat" ); + contextPtr->glGetVertexAttribLdv = ( delegate* )load( + "glGetVertexAttribLdv" ); + contextPtr->glIsProgramPipeline = ( delegate* )load( + "glIsProgramPipeline" ); + contextPtr->glProgramBinary = ( delegate* )load( + "glProgramBinary" ); + contextPtr->glProgramParameteri = ( delegate* )load( + "glProgramParameteri" ); + contextPtr->glProgramUniform1d = ( delegate* )load( + "glProgramUniform1d" ); + contextPtr->glProgramUniform1dv = ( delegate* )load( + "glProgramUniform1dv" ); + contextPtr->glProgramUniform1f = ( delegate* )load( + "glProgramUniform1f" ); + contextPtr->glProgramUniform1fv = ( delegate* )load( + "glProgramUniform1fv" ); + contextPtr->glProgramUniform1i = ( delegate* )load( + "glProgramUniform1i" ); + contextPtr->glProgramUniform1iv = ( delegate* )load( + "glProgramUniform1iv" ); + contextPtr->glProgramUniform1ui = ( delegate* )load( + "glProgramUniform1ui" ); + contextPtr->glProgramUniform1uiv = ( delegate* )load( + "glProgramUniform1uiv" ); + contextPtr->glProgramUniform2d = ( delegate* )load( + "glProgramUniform2d" ); + contextPtr->glProgramUniform2dv = ( delegate* )load( + "glProgramUniform2dv" ); + contextPtr->glProgramUniform2f = ( delegate* )load( + "glProgramUniform2f" ); + contextPtr->glProgramUniform2fv = ( delegate* )load( + "glProgramUniform2fv" ); + contextPtr->glProgramUniform2i = ( delegate* )load( + "glProgramUniform2i" ); + contextPtr->glProgramUniform2iv = ( delegate* )load( + "glProgramUniform2iv" ); + contextPtr->glProgramUniform2ui = ( delegate* )load( + "glProgramUniform2ui" ); + contextPtr->glProgramUniform2uiv = ( delegate* )load( + "glProgramUniform2uiv" ); + contextPtr->glProgramUniform3d = ( delegate* )load( + "glProgramUniform3d" ); + contextPtr->glProgramUniform3dv = ( delegate* )load( + "glProgramUniform3dv" ); + contextPtr->glProgramUniform3f = ( delegate* )load( + "glProgramUniform3f" ); + contextPtr->glProgramUniform3fv = ( delegate* )load( + "glProgramUniform3fv" ); + contextPtr->glProgramUniform3i = ( delegate* )load( + "glProgramUniform3i" ); + contextPtr->glProgramUniform3iv = ( delegate* )load( + "glProgramUniform3iv" ); + contextPtr->glProgramUniform3ui = ( delegate* )load( + "glProgramUniform3ui" ); + contextPtr->glProgramUniform3uiv = ( delegate* )load( + "glProgramUniform3uiv" ); + contextPtr->glProgramUniform4d = ( delegate* )load( + "glProgramUniform4d" ); + contextPtr->glProgramUniform4dv = ( delegate* )load( + "glProgramUniform4dv" ); + contextPtr->glProgramUniform4f = ( delegate* )load( + "glProgramUniform4f" ); + contextPtr->glProgramUniform4fv = ( delegate* )load( + "glProgramUniform4fv" ); + contextPtr->glProgramUniform4i = ( delegate* )load( + "glProgramUniform4i" ); + contextPtr->glProgramUniform4iv = ( delegate* )load( + "glProgramUniform4iv" ); + contextPtr->glProgramUniform4ui = ( delegate* )load( + "glProgramUniform4ui" ); + contextPtr->glProgramUniform4uiv = ( delegate* )load( + "glProgramUniform4uiv" ); + contextPtr->glProgramUniformMatrix2dv = ( delegate* )load( + "glProgramUniformMatrix2dv" ); + contextPtr->glProgramUniformMatrix2fv = ( delegate* )load( + "glProgramUniformMatrix2fv" ); + contextPtr->glProgramUniformMatrix2x3dv = ( delegate* )load( + "glProgramUniformMatrix2x3dv" ); + contextPtr->glProgramUniformMatrix2x3fv = ( delegate* )load( + "glProgramUniformMatrix2x3fv" ); + contextPtr->glProgramUniformMatrix2x4dv = ( delegate* )load( + "glProgramUniformMatrix2x4dv" ); + contextPtr->glProgramUniformMatrix2x4fv = ( delegate* )load( + "glProgramUniformMatrix2x4fv" ); + contextPtr->glProgramUniformMatrix3dv = ( delegate* )load( + "glProgramUniformMatrix3dv" ); + contextPtr->glProgramUniformMatrix3fv = ( delegate* )load( + "glProgramUniformMatrix3fv" ); + contextPtr->glProgramUniformMatrix3x2dv = ( delegate* )load( + "glProgramUniformMatrix3x2dv" ); + contextPtr->glProgramUniformMatrix3x2fv = ( delegate* )load( + "glProgramUniformMatrix3x2fv" ); + contextPtr->glProgramUniformMatrix3x4dv = ( delegate* )load( + "glProgramUniformMatrix3x4dv" ); + contextPtr->glProgramUniformMatrix3x4fv = ( delegate* )load( + "glProgramUniformMatrix3x4fv" ); + contextPtr->glProgramUniformMatrix4dv = ( delegate* )load( + "glProgramUniformMatrix4dv" ); + contextPtr->glProgramUniformMatrix4fv = ( delegate* )load( + "glProgramUniformMatrix4fv" ); + contextPtr->glProgramUniformMatrix4x2dv = ( delegate* )load( + "glProgramUniformMatrix4x2dv" ); + contextPtr->glProgramUniformMatrix4x2fv = ( delegate* )load( + "glProgramUniformMatrix4x2fv" ); + contextPtr->glProgramUniformMatrix4x3dv = ( delegate* )load( + "glProgramUniformMatrix4x3dv" ); + contextPtr->glProgramUniformMatrix4x3fv = ( delegate* )load( + "glProgramUniformMatrix4x3fv" ); + contextPtr->glReleaseShaderCompiler = ( delegate* )load( + "glReleaseShaderCompiler" ); + contextPtr->glScissorArrayv = ( delegate* )load( + "glScissorArrayv" ); + contextPtr->glScissorIndexed = ( delegate* )load( + "glScissorIndexed" ); + contextPtr->glScissorIndexedv = ( delegate* )load( + "glScissorIndexedv" ); + contextPtr->glShaderBinary = ( delegate* )load( + "glShaderBinary" ); + contextPtr->glUseProgramStages = ( delegate* )load( + "glUseProgramStages" ); + contextPtr->glValidateProgramPipeline = ( delegate* )load( + "glValidateProgramPipeline" ); + contextPtr->glVertexAttribL1d = ( delegate* )load( + "glVertexAttribL1d" ); + contextPtr->glVertexAttribL1dv = ( delegate* )load( + "glVertexAttribL1dv" ); + contextPtr->glVertexAttribL2d = ( delegate* )load( + "glVertexAttribL2d" ); + contextPtr->glVertexAttribL2dv = ( delegate* )load( + "glVertexAttribL2dv" ); + contextPtr->glVertexAttribL3d = ( delegate* )load( + "glVertexAttribL3d" ); + contextPtr->glVertexAttribL3dv = ( delegate* )load( + "glVertexAttribL3dv" ); + contextPtr->glVertexAttribL4d = ( delegate* )load( + "glVertexAttribL4d" ); + contextPtr->glVertexAttribL4dv = ( delegate* )load( + "glVertexAttribL4dv" ); + contextPtr->glVertexAttribLPointer = ( delegate* )load( + "glVertexAttribLPointer" ); + contextPtr->glViewportArrayv = ( delegate* )load( + "glViewportArrayv" ); + contextPtr->glViewportIndexedf = ( delegate* )load( + "glViewportIndexedf" ); + contextPtr->glViewportIndexedfv = ( delegate* )load( + "glViewportIndexedfv" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.1 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.1 APIs" ); } - internal static unsafe void LoadGLcore42(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore42( + OpenglContext* contextPtr, + delegate* load ) { - if (!core42) - { - InternalIO.InternalAppendLog("The core version 4.2 is not supported."); - throw new Exception("Final Version"); + if( !core42 ) { + InternalIO.InternalAppendLog( + "The core version 4.2 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindImageTexture = (delegate*)load("glBindImageTexture"); - contextPtr->glDrawArraysInstancedBaseInstance = (delegate*)load("glDrawArraysInstancedBaseInstance"); - contextPtr->glDrawElementsInstancedBaseInstance = (delegate*)load("glDrawElementsInstancedBaseInstance"); - contextPtr->glDrawElementsInstancedBaseVertexBaseInstance = (delegate*)load("glDrawElementsInstancedBaseVertexBaseInstance"); - contextPtr->glDrawTransformFeedbackInstanced = (delegate*)load("glDrawTransformFeedbackInstanced"); - contextPtr->glDrawTransformFeedbackStreamInstanced = (delegate*)load("glDrawTransformFeedbackStreamInstanced"); - contextPtr->glGetActiveAtomicCounterBufferiv = (delegate*)load("glGetActiveAtomicCounterBufferiv"); - contextPtr->glGetInternalformativ = (delegate*)load("glGetInternalformativ"); - contextPtr->glMemoryBarrier = (delegate*)load("glMemoryBarrier"); - contextPtr->glTexStorage1D = (delegate*)load("glTexStorage1D"); - contextPtr->glTexStorage2D = (delegate*)load("glTexStorage2D"); - contextPtr->glTexStorage3D = (delegate*)load("glTexStorage3D"); + contextPtr->glBindImageTexture = ( delegate* )load( + "glBindImageTexture" ); + contextPtr->glDrawArraysInstancedBaseInstance = ( delegate* )load( + "glDrawArraysInstancedBaseInstance" ); + contextPtr->glDrawElementsInstancedBaseInstance = ( delegate* )load( + "glDrawElementsInstancedBaseInstance" ); + contextPtr->glDrawElementsInstancedBaseVertexBaseInstance = ( delegate* )load( + "glDrawElementsInstancedBaseVertexBaseInstance" ); + contextPtr->glDrawTransformFeedbackInstanced = ( delegate* )load( + "glDrawTransformFeedbackInstanced" ); + contextPtr->glDrawTransformFeedbackStreamInstanced = ( delegate* )load( + "glDrawTransformFeedbackStreamInstanced" ); + contextPtr->glGetActiveAtomicCounterBufferiv = ( delegate* )load( + "glGetActiveAtomicCounterBufferiv" ); + contextPtr->glGetInternalformativ = ( delegate* )load( + "glGetInternalformativ" ); + contextPtr->glMemoryBarrier = ( delegate* )load( + "glMemoryBarrier" ); + contextPtr->glTexStorage1D = ( delegate* )load( + "glTexStorage1D" ); + contextPtr->glTexStorage2D = ( delegate* )load( + "glTexStorage2D" ); + contextPtr->glTexStorage3D = ( delegate* )load( + "glTexStorage3D" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.2 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.2 APIs" ); } - internal static unsafe void LoadGLcore43(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore43( + OpenglContext* contextPtr, + delegate* load ) { - if (!core43) - { - InternalIO.InternalAppendLog("The core version 4.3 is not supported."); - throw new Exception("Final Version"); + if( !core43 ) { + InternalIO.InternalAppendLog( + "The core version 4.3 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindVertexBuffer = (delegate*)load("glBindVertexBuffer"); - contextPtr->glClearBufferData = (delegate*)load("glClearBufferData"); - contextPtr->glClearBufferSubData = (delegate*)load("glClearBufferSubData"); - contextPtr->glCopyImageSubData = (delegate*)load("glCopyImageSubData"); - contextPtr->glDebugMessageCallback = (delegate*)load("glDebugMessageCallback"); - contextPtr->glDebugMessageControl = (delegate*)load("glDebugMessageControl"); - contextPtr->glDebugMessageInsert = (delegate*)load("glDebugMessageInsert"); - contextPtr->glDispatchCompute = (delegate*)load("glDispatchCompute"); - contextPtr->glDispatchComputeIndirect = (delegate*)load("glDispatchComputeIndirect"); - contextPtr->glFramebufferParameteri = (delegate*)load("glFramebufferParameteri"); - contextPtr->glGetDebugMessageLog = (delegate*)load("glGetDebugMessageLog"); - contextPtr->glGetFramebufferParameteriv = (delegate*)load("glGetFramebufferParameteriv"); - contextPtr->glGetInternalformati64v = (delegate*)load("glGetInternalformati64v"); - contextPtr->glGetObjectLabel = (delegate*)load("glGetObjectLabel"); - contextPtr->glGetObjectPtrLabel = (delegate*)load("glGetObjectPtrLabel"); - contextPtr->glGetPointerv = (delegate*)load("glGetPointerv"); - contextPtr->glGetProgramInterfaceiv = (delegate*)load("glGetProgramInterfaceiv"); - contextPtr->glGetProgramResourceIndex = (delegate*)load("glGetProgramResourceIndex"); - contextPtr->glGetProgramResourceLocation = (delegate*)load("glGetProgramResourceLocation"); - contextPtr->glGetProgramResourceLocationIndex = (delegate*)load("glGetProgramResourceLocationIndex"); - contextPtr->glGetProgramResourceName = (delegate*)load("glGetProgramResourceName"); - contextPtr->glGetProgramResourceiv = (delegate*)load("glGetProgramResourceiv"); - contextPtr->glInvalidateBufferData = (delegate*)load("glInvalidateBufferData"); - contextPtr->glInvalidateBufferSubData = (delegate*)load("glInvalidateBufferSubData"); - contextPtr->glInvalidateFramebuffer = (delegate*)load("glInvalidateFramebuffer"); - contextPtr->glInvalidateSubFramebuffer = (delegate*)load("glInvalidateSubFramebuffer"); - contextPtr->glInvalidateTexImage = (delegate*)load("glInvalidateTexImage"); - contextPtr->glInvalidateTexSubImage = (delegate*)load("glInvalidateTexSubImage"); - contextPtr->glMultiDrawArraysIndirect = (delegate*)load("glMultiDrawArraysIndirect"); - contextPtr->glMultiDrawElementsIndirect = (delegate*)load("glMultiDrawElementsIndirect"); - contextPtr->glObjectLabel = (delegate*)load("glObjectLabel"); - contextPtr->glObjectPtrLabel = (delegate*)load("glObjectPtrLabel"); - contextPtr->glPopDebugGroup = (delegate*)load("glPopDebugGroup"); - contextPtr->glPushDebugGroup = (delegate*)load("glPushDebugGroup"); - contextPtr->glShaderStorageBlockBinding = (delegate*)load("glShaderStorageBlockBinding"); - contextPtr->glTexBufferRange = (delegate*)load("glTexBufferRange"); - contextPtr->glTexStorage2DMultisample = (delegate*)load("glTexStorage2DMultisample"); - contextPtr->glTexStorage3DMultisample = (delegate*)load("glTexStorage3DMultisample"); - contextPtr->glTextureView = (delegate*)load("glTextureView"); - contextPtr->glVertexAttribBinding = (delegate*)load("glVertexAttribBinding"); - contextPtr->glVertexAttribFormat = (delegate*)load("glVertexAttribFormat"); - contextPtr->glVertexAttribIFormat = (delegate*)load("glVertexAttribIFormat"); - contextPtr->glClearBufferData = (delegate*)load("glClearBufferData"); - contextPtr->glVertexBindingDivisor = (delegate*)load("glVertexBindingDivisor"); + contextPtr->glBindVertexBuffer = ( delegate* )load( + "glBindVertexBuffer" ); + contextPtr->glClearBufferData = ( delegate* )load( + "glClearBufferData" ); + contextPtr->glClearBufferSubData = ( delegate* )load( + "glClearBufferSubData" ); + contextPtr->glCopyImageSubData = ( delegate* )load( + "glCopyImageSubData" ); + contextPtr->glDebugMessageCallback = ( delegate* )load( + "glDebugMessageCallback" ); + contextPtr->glDebugMessageControl = ( delegate* )load( + "glDebugMessageControl" ); + contextPtr->glDebugMessageInsert = ( delegate* )load( + "glDebugMessageInsert" ); + contextPtr->glDispatchCompute = ( delegate* )load( + "glDispatchCompute" ); + contextPtr->glDispatchComputeIndirect = ( delegate* )load( + "glDispatchComputeIndirect" ); + contextPtr->glFramebufferParameteri = ( delegate* )load( + "glFramebufferParameteri" ); + contextPtr->glGetDebugMessageLog = ( delegate* )load( + "glGetDebugMessageLog" ); + contextPtr->glGetFramebufferParameteriv = ( delegate* )load( + "glGetFramebufferParameteriv" ); + contextPtr->glGetInternalformati64v = ( delegate* )load( + "glGetInternalformati64v" ); + contextPtr->glGetObjectLabel = ( delegate* )load( + "glGetObjectLabel" ); + contextPtr->glGetObjectPtrLabel = ( delegate* )load( + "glGetObjectPtrLabel" ); + contextPtr->glGetPointerv = ( delegate* )load( + "glGetPointerv" ); + contextPtr->glGetProgramInterfaceiv = ( delegate* )load( + "glGetProgramInterfaceiv" ); + contextPtr->glGetProgramResourceIndex = ( delegate* )load( + "glGetProgramResourceIndex" ); + contextPtr->glGetProgramResourceLocation = ( delegate* )load( + "glGetProgramResourceLocation" ); + contextPtr->glGetProgramResourceLocationIndex = ( delegate* )load( + "glGetProgramResourceLocationIndex" ); + contextPtr->glGetProgramResourceName = ( delegate* )load( + "glGetProgramResourceName" ); + contextPtr->glGetProgramResourceiv = ( delegate* )load( + "glGetProgramResourceiv" ); + contextPtr->glInvalidateBufferData = ( delegate* )load( + "glInvalidateBufferData" ); + contextPtr->glInvalidateBufferSubData = ( delegate* )load( + "glInvalidateBufferSubData" ); + contextPtr->glInvalidateFramebuffer = ( delegate* )load( + "glInvalidateFramebuffer" ); + contextPtr->glInvalidateSubFramebuffer = ( delegate* )load( + "glInvalidateSubFramebuffer" ); + contextPtr->glInvalidateTexImage = ( delegate* )load( + "glInvalidateTexImage" ); + contextPtr->glInvalidateTexSubImage = ( delegate* )load( + "glInvalidateTexSubImage" ); + contextPtr->glMultiDrawArraysIndirect = ( delegate* )load( + "glMultiDrawArraysIndirect" ); + contextPtr->glMultiDrawElementsIndirect = ( delegate* )load( + "glMultiDrawElementsIndirect" ); + contextPtr->glObjectLabel = ( delegate* )load( + "glObjectLabel" ); + contextPtr->glObjectPtrLabel = ( delegate* )load( + "glObjectPtrLabel" ); + contextPtr->glPopDebugGroup = ( delegate* )load( + "glPopDebugGroup" ); + contextPtr->glPushDebugGroup = ( delegate* )load( + "glPushDebugGroup" ); + contextPtr->glShaderStorageBlockBinding = ( delegate* )load( + "glShaderStorageBlockBinding" ); + contextPtr->glTexBufferRange = ( delegate* )load( + "glTexBufferRange" ); + contextPtr->glTexStorage2DMultisample = ( delegate* )load( + "glTexStorage2DMultisample" ); + contextPtr->glTexStorage3DMultisample = ( delegate* )load( + "glTexStorage3DMultisample" ); + contextPtr->glTextureView = ( delegate* )load( + "glTextureView" ); + contextPtr->glVertexAttribBinding = ( delegate* )load( + "glVertexAttribBinding" ); + contextPtr->glVertexAttribFormat = ( delegate* )load( + "glVertexAttribFormat" ); + contextPtr->glVertexAttribIFormat = ( delegate* )load( + "glVertexAttribIFormat" ); + contextPtr->glClearBufferData = ( delegate* )load( + "glClearBufferData" ); + contextPtr->glVertexBindingDivisor = ( delegate* )load( + "glVertexBindingDivisor" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.3 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.3 APIs" ); } - internal static unsafe void LoadGLcore44(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore44( + OpenglContext* contextPtr, + delegate* load ) { - if (!core44) - { - InternalIO.InternalAppendLog("The core version 4.4 is not supported."); - throw new Exception("Final Version"); + if( !core44 ) { + InternalIO.InternalAppendLog( + "The core version 4.4 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindBuffersBase = (delegate*)load("glBindBuffersBase"); - contextPtr->glBindBuffersRange = (delegate*)load("glBindBuffersRange"); - contextPtr->glBindImageTextures = (delegate*)load("glBindImageTextures"); - contextPtr->glBindSamplers = (delegate*)load("glBindSamplers"); - contextPtr->glBindTextures = (delegate*)load("glBindTextures"); - contextPtr->glBindVertexBuffers = (delegate*)load("glBindVertexBuffers"); - contextPtr->glBufferStorage = (delegate*)load("glBufferStorage"); - contextPtr->glClearTexImage = (delegate*)load("glClearTexImage"); - contextPtr->glClearTexSubImage = (delegate*)load("glClearTexSubImage"); + contextPtr->glBindBuffersBase = ( delegate* )load( + "glBindBuffersBase" ); + contextPtr->glBindBuffersRange = ( delegate* )load( + "glBindBuffersRange" ); + contextPtr->glBindImageTextures = ( delegate* )load( + "glBindImageTextures" ); + contextPtr->glBindSamplers = ( delegate* )load( + "glBindSamplers" ); + contextPtr->glBindTextures = ( delegate* )load( + "glBindTextures" ); + contextPtr->glBindVertexBuffers = ( delegate* )load( + "glBindVertexBuffers" ); + contextPtr->glBufferStorage = ( delegate* )load( + "glBufferStorage" ); + contextPtr->glClearTexImage = ( delegate* )load( + "glClearTexImage" ); + contextPtr->glClearTexSubImage = ( delegate* )load( + "glClearTexSubImage" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.4 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.4 APIs" ); } - internal static unsafe void LoadGLcore45(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore45( + OpenglContext* contextPtr, + delegate* load ) { - if (!core45) - { - InternalIO.InternalAppendLog("The core version 4.5 is not supported."); - throw new Exception("Final Version"); + if( !core45 ) { + InternalIO.InternalAppendLog( + "The core version 4.5 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glBindTextureUnit = (delegate*)load("glBindTextureUnit"); - contextPtr->glBlitNamedFramebuffer = (delegate*)load("glBlitNamedFramebuffer"); - contextPtr->glCheckNamedFramebufferStatus = (delegate*)load("glCheckNamedFramebufferStatus"); - contextPtr->glClearNamedBufferData = (delegate*)load("glClearNamedBufferData"); - contextPtr->glClearNamedBufferSubData = (delegate*)load("glClearNamedBufferSubData"); - contextPtr->glClearNamedFramebufferfi = (delegate*)load("glClearNamedFramebufferfi"); - contextPtr->glClearNamedFramebufferfv = (delegate*)load("glClearNamedFramebufferfv"); - contextPtr->glClearNamedFramebufferiv = (delegate*)load("glClearNamedFramebufferiv"); - contextPtr->glClearNamedFramebufferuiv = (delegate*)load("glClearNamedFramebufferuiv"); - contextPtr->glClipControl = (delegate*)load("glClipControl"); - contextPtr->glCompressedTextureSubImage1D = (delegate*)load("glCompressedTextureSubImage1D"); - contextPtr->glCompressedTextureSubImage2D = (delegate*)load("glCompressedTextureSubImage2D"); - contextPtr->glCompressedTextureSubImage3D = (delegate*)load("glCompressedTextureSubImage3D"); - contextPtr->glCopyNamedBufferSubData = (delegate*)load("glCopyNamedBufferSubData"); - contextPtr->glCopyTextureSubImage1D = (delegate*)load("glCopyTextureSubImage1D"); - contextPtr->glCopyTextureSubImage2D = (delegate*)load("glCopyTextureSubImage2D"); - contextPtr->glCopyTextureSubImage3D = (delegate*)load("glCopyTextureSubImage3D"); - contextPtr->glCreateBuffers = (delegate*)load("glCreateBuffers"); - contextPtr->glCreateFramebuffers = (delegate*)load("glCreateFramebuffers"); - contextPtr->glCreateProgramPipelines = (delegate*)load("glCreateProgramPipelines"); - contextPtr->glCreateQueries = (delegate*)load("glCreateQueries"); - contextPtr->glCreateRenderbuffers = (delegate*)load("glCreateRenderbuffers"); - contextPtr->glCreateSamplers = (delegate*)load("glCreateSamplers"); - contextPtr->glCreateTextures = (delegate*)load("glCreateTextures"); - contextPtr->glCreateTransformFeedbacks = (delegate*)load("glCreateTransformFeedbacks"); - contextPtr->glCreateVertexArrays = (delegate*)load("glCreateVertexArrays"); - contextPtr->glDisableVertexArrayAttrib = (delegate*)load("glDisableVertexArrayAttrib"); - contextPtr->glEnableVertexArrayAttrib = (delegate*)load("glEnableVertexArrayAttrib"); - contextPtr->glFlushMappedNamedBufferRange = (delegate*)load("glFlushMappedNamedBufferRange"); - contextPtr->glGenerateTextureMipmap = (delegate*)load("glGenerateTextureMipmap"); - contextPtr->glGetCompressedTextureImage = (delegate*)load("glGetCompressedTextureImage"); - contextPtr->glGetCompressedTextureSubImage = (delegate*)load("glGetCompressedTextureSubImage"); - contextPtr->glGetGraphicsResetStatus = (delegate*)load("glGetGraphicsResetStatus"); - contextPtr->glGetNamedBufferParameteri64v = (delegate*)load("glGetNamedBufferParameteri64v"); - contextPtr->glGetNamedBufferParameteriv = (delegate*)load("glGetNamedBufferParameteriv"); - contextPtr->glGetNamedBufferPointerv = (delegate*)load("glGetNamedBufferPointerv"); - contextPtr->glGetNamedBufferSubData = (delegate*)load("glGetNamedBufferSubData"); - contextPtr->glGetNamedFramebufferAttachmentParameteriv = (delegate*)load("glGetNamedFramebufferAttachmentParameteriv"); - contextPtr->glGetNamedFramebufferParameteriv = (delegate*)load("glGetNamedFramebufferParameteriv"); - contextPtr->glGetNamedRenderbufferParameteriv = (delegate*)load("glGetNamedRenderbufferParameteriv"); - contextPtr->glGetQueryBufferObjecti64v = (delegate*)load("glGetQueryBufferObjecti64v"); - contextPtr->glGetQueryBufferObjectiv = (delegate*)load("glGetQueryBufferObjectiv"); - contextPtr->glGetQueryBufferObjectui64v = (delegate*)load("glGetQueryBufferObjectui64v"); - contextPtr->glGetQueryBufferObjectuiv = (delegate*)load("glGetQueryBufferObjectuiv"); - contextPtr->glGetTextureImage = (delegate*)load("glGetTextureImage"); - contextPtr->glGetTextureLevelParameterfv = (delegate*)load("glGetTextureLevelParameterfv"); - contextPtr->glGetTextureLevelParameteriv = (delegate*)load("glGetTextureLevelParameteriv"); - contextPtr->glGetTextureParameterIiv = (delegate*)load("glGetTextureParameterIiv"); - contextPtr->glGetTextureParameterIuiv = (delegate*)load("glGetTextureParameterIuiv"); - contextPtr->glGetTextureParameterfv = (delegate*)load("glGetTextureParameterfv"); - contextPtr->glGetTextureParameteriv = (delegate*)load("glGetTextureParameteriv"); - contextPtr->glGetTextureSubImage = (delegate*)load("glGetTextureSubImage"); - contextPtr->glGetTransformFeedbacki64_v = (delegate*)load("glGetTransformFeedbacki64_v"); - contextPtr->glGetTransformFeedbacki_v = (delegate*)load("glGetTransformFeedbacki_v"); - contextPtr->glGetTransformFeedbackiv = (delegate*)load("glGetTransformFeedbackiv"); - contextPtr->glGetVertexArrayIndexed64iv = (delegate*)load("glGetVertexArrayIndexed64iv"); - contextPtr->glGetVertexArrayIndexediv = (delegate*)load("glGetVertexArrayIndexediv"); - contextPtr->glGetVertexArrayiv = (delegate*)load("glGetVertexArrayiv"); - contextPtr->glGetnCompressedTexImage = (delegate*)load("glGetnCompressedTexImage"); - contextPtr->glGetnTexImage = (delegate*)load("glGetnTexImage"); - contextPtr->glGetnUniformdv = (delegate*)load("glGetnUniformdv"); - contextPtr->glGetnUniformfv = (delegate*)load("glGetnUniformfv"); - contextPtr->glGetnUniformiv = (delegate*)load("glGetnUniformiv"); - contextPtr->glGetnUniformuiv = (delegate*)load("glGetnUniformuiv"); - contextPtr->glInvalidateNamedFramebufferData = (delegate*)load("glInvalidateNamedFramebufferData"); - contextPtr->glInvalidateNamedFramebufferSubData = (delegate*)load("glInvalidateNamedFramebufferSubData"); - contextPtr->glMapNamedBuffer = (delegate*)load("glMapNamedBuffer"); - contextPtr->glMapNamedBufferRange = (delegate*)load("glMapNamedBufferRange"); - contextPtr->glMemoryBarrierByRegion = (delegate*)load("glMemoryBarrierByRegion"); - contextPtr->glNamedBufferData = (delegate*)load("glNamedBufferData"); - contextPtr->glNamedBufferStorage = (delegate*)load("glNamedBufferStorage"); - contextPtr->glNamedBufferSubData = (delegate*)load("glNamedBufferSubData"); - contextPtr->glNamedFramebufferDrawBuffer = (delegate*)load("glNamedFramebufferDrawBuffer"); - contextPtr->glNamedFramebufferDrawBuffers = (delegate*)load("glNamedFramebufferDrawBuffers"); - contextPtr->glNamedFramebufferParameteri = (delegate*)load("glNamedFramebufferParameteri"); - contextPtr->glNamedFramebufferReadBuffer = (delegate*)load("glNamedFramebufferReadBuffer"); - contextPtr->glNamedFramebufferRenderbuffer = (delegate*)load("glNamedFramebufferRenderbuffer"); - contextPtr->glNamedFramebufferTexture = (delegate*)load("glNamedFramebufferTexture"); - contextPtr->glNamedFramebufferTextureLayer = (delegate*)load("glNamedFramebufferTextureLayer"); - contextPtr->glNamedRenderbufferStorage = (delegate*)load("glNamedRenderbufferStorage"); - contextPtr->glNamedRenderbufferStorageMultisample = (delegate*)load("glNamedRenderbufferStorageMultisample"); - contextPtr->glReadnPixels = (delegate*)load("glReadnPixels"); - contextPtr->glTextureBarrier = (delegate*)load("glTextureBarrier"); - contextPtr->glTextureBuffer = (delegate*)load("glTextureBuffer"); - contextPtr->glTextureBufferRange = (delegate*)load("glTextureBufferRange"); - contextPtr->glTextureParameterIiv = (delegate*)load("glTextureParameterIiv"); - contextPtr->glTextureParameterIuiv = (delegate*)load("glTextureParameterIuiv"); - contextPtr->glTextureParameterf = (delegate*)load("glTextureParameterf"); - contextPtr->glTextureParameterfv = (delegate*)load("glTextureParameterfv"); - contextPtr->glTextureParameteri = (delegate*)load("glTextureParameteri"); - contextPtr->glTextureParameteriv = (delegate*)load("glTextureParameteriv"); - contextPtr->glTextureStorage1D = (delegate*)load("glTextureStorage1D"); - contextPtr->glTextureStorage2D = (delegate*)load("glTextureStorage2D"); - contextPtr->glTextureStorage2DMultisample = (delegate*)load("glTextureStorage2DMultisample"); - contextPtr->glTextureStorage3D = (delegate*)load("glTextureStorage3D"); - contextPtr->glTextureStorage3DMultisample = (delegate*)load("glTextureStorage3DMultisample"); - contextPtr->glTextureSubImage1D = (delegate*)load("glTextureSubImage1D"); - contextPtr->glTextureSubImage2D = (delegate*)load("glTextureSubImage2D"); - contextPtr->glTextureSubImage3D = (delegate*)load("glTextureSubImage3D"); - contextPtr->glTransformFeedbackBufferBase = (delegate*)load("glTransformFeedbackBufferBase"); - contextPtr->glTransformFeedbackBufferRange = (delegate*)load("glTransformFeedbackBufferRange"); - contextPtr->glUnmapNamedBuffer = (delegate*)load("glUnmapNamedBuffer"); - contextPtr->glVertexArrayAttribBinding = (delegate*)load("glVertexArrayAttribBinding"); - contextPtr->glVertexArrayAttribFormat = (delegate*)load("glVertexArrayAttribFormat"); - contextPtr->glVertexArrayAttribIFormat = (delegate*)load("glVertexArrayAttribIFormat"); - contextPtr->glVertexArrayAttribLFormat = (delegate*)load("glVertexArrayAttribLFormat"); - contextPtr->glVertexArrayBindingDivisor = (delegate*)load("glVertexArrayBindingDivisor"); - contextPtr->glVertexArrayElementBuffer = (delegate*)load("glVertexArrayElementBuffer"); - contextPtr->glVertexArrayVertexBuffer = (delegate*)load("glVertexArrayVertexBuffer"); - contextPtr->glVertexArrayVertexBuffers = (delegate*)load("glVertexArrayVertexBuffers"); + contextPtr->glBindTextureUnit = ( delegate* )load( + "glBindTextureUnit" ); + contextPtr->glBlitNamedFramebuffer = ( delegate* )load( + "glBlitNamedFramebuffer" ); + contextPtr->glCheckNamedFramebufferStatus = ( delegate* )load( + "glCheckNamedFramebufferStatus" ); + contextPtr->glClearNamedBufferData = ( delegate* )load( + "glClearNamedBufferData" ); + contextPtr->glClearNamedBufferSubData = ( delegate* )load( + "glClearNamedBufferSubData" ); + contextPtr->glClearNamedFramebufferfi = ( delegate* )load( + "glClearNamedFramebufferfi" ); + contextPtr->glClearNamedFramebufferfv = ( delegate* )load( + "glClearNamedFramebufferfv" ); + contextPtr->glClearNamedFramebufferiv = ( delegate* )load( + "glClearNamedFramebufferiv" ); + contextPtr->glClearNamedFramebufferuiv = ( delegate* )load( + "glClearNamedFramebufferuiv" ); + contextPtr->glClipControl = ( delegate* )load( + "glClipControl" ); + contextPtr->glCompressedTextureSubImage1D = ( delegate* )load( + "glCompressedTextureSubImage1D" ); + contextPtr->glCompressedTextureSubImage2D = ( delegate* )load( + "glCompressedTextureSubImage2D" ); + contextPtr->glCompressedTextureSubImage3D = ( delegate* )load( + "glCompressedTextureSubImage3D" ); + contextPtr->glCopyNamedBufferSubData = ( delegate* )load( + "glCopyNamedBufferSubData" ); + contextPtr->glCopyTextureSubImage1D = ( delegate* )load( + "glCopyTextureSubImage1D" ); + contextPtr->glCopyTextureSubImage2D = ( delegate* )load( + "glCopyTextureSubImage2D" ); + contextPtr->glCopyTextureSubImage3D = ( delegate* )load( + "glCopyTextureSubImage3D" ); + contextPtr->glCreateBuffers = ( delegate* )load( + "glCreateBuffers" ); + contextPtr->glCreateFramebuffers = ( delegate* )load( + "glCreateFramebuffers" ); + contextPtr->glCreateProgramPipelines = ( delegate* )load( + "glCreateProgramPipelines" ); + contextPtr->glCreateQueries = ( delegate* )load( + "glCreateQueries" ); + contextPtr->glCreateRenderbuffers = ( delegate* )load( + "glCreateRenderbuffers" ); + contextPtr->glCreateSamplers = ( delegate* )load( + "glCreateSamplers" ); + contextPtr->glCreateTextures = ( delegate* )load( + "glCreateTextures" ); + contextPtr->glCreateTransformFeedbacks = ( delegate* )load( + "glCreateTransformFeedbacks" ); + contextPtr->glCreateVertexArrays = ( delegate* )load( + "glCreateVertexArrays" ); + contextPtr->glDisableVertexArrayAttrib = ( delegate* )load( + "glDisableVertexArrayAttrib" ); + contextPtr->glEnableVertexArrayAttrib = ( delegate* )load( + "glEnableVertexArrayAttrib" ); + contextPtr->glFlushMappedNamedBufferRange = ( delegate* )load( + "glFlushMappedNamedBufferRange" ); + contextPtr->glGenerateTextureMipmap = ( delegate* )load( + "glGenerateTextureMipmap" ); + contextPtr->glGetCompressedTextureImage = ( delegate* )load( + "glGetCompressedTextureImage" ); + contextPtr->glGetCompressedTextureSubImage = ( delegate* )load( + "glGetCompressedTextureSubImage" ); + contextPtr->glGetGraphicsResetStatus = ( delegate* )load( + "glGetGraphicsResetStatus" ); + contextPtr->glGetNamedBufferParameteri64v = ( delegate* )load( + "glGetNamedBufferParameteri64v" ); + contextPtr->glGetNamedBufferParameteriv = ( delegate* )load( + "glGetNamedBufferParameteriv" ); + contextPtr->glGetNamedBufferPointerv = ( delegate* )load( + "glGetNamedBufferPointerv" ); + contextPtr->glGetNamedBufferSubData = ( delegate* )load( + "glGetNamedBufferSubData" ); + contextPtr->glGetNamedFramebufferAttachmentParameteriv = ( delegate* )load( + "glGetNamedFramebufferAttachmentParameteriv" ); + contextPtr->glGetNamedFramebufferParameteriv = ( delegate* )load( + "glGetNamedFramebufferParameteriv" ); + contextPtr->glGetNamedRenderbufferParameteriv = ( delegate* )load( + "glGetNamedRenderbufferParameteriv" ); + contextPtr->glGetQueryBufferObjecti64v = ( delegate* )load( + "glGetQueryBufferObjecti64v" ); + contextPtr->glGetQueryBufferObjectiv = ( delegate* )load( + "glGetQueryBufferObjectiv" ); + contextPtr->glGetQueryBufferObjectui64v = ( delegate* )load( + "glGetQueryBufferObjectui64v" ); + contextPtr->glGetQueryBufferObjectuiv = ( delegate* )load( + "glGetQueryBufferObjectuiv" ); + contextPtr->glGetTextureImage = ( delegate* )load( + "glGetTextureImage" ); + contextPtr->glGetTextureLevelParameterfv = ( delegate* )load( + "glGetTextureLevelParameterfv" ); + contextPtr->glGetTextureLevelParameteriv = ( delegate* )load( + "glGetTextureLevelParameteriv" ); + contextPtr->glGetTextureParameterIiv = ( delegate* )load( + "glGetTextureParameterIiv" ); + contextPtr->glGetTextureParameterIuiv = ( delegate* )load( + "glGetTextureParameterIuiv" ); + contextPtr->glGetTextureParameterfv = ( delegate* )load( + "glGetTextureParameterfv" ); + contextPtr->glGetTextureParameteriv = ( delegate* )load( + "glGetTextureParameteriv" ); + contextPtr->glGetTextureSubImage = ( delegate* )load( + "glGetTextureSubImage" ); + contextPtr->glGetTransformFeedbacki64_v = ( delegate* )load( + "glGetTransformFeedbacki64_v" ); + contextPtr->glGetTransformFeedbacki_v = ( delegate* )load( + "glGetTransformFeedbacki_v" ); + contextPtr->glGetTransformFeedbackiv = ( delegate* )load( + "glGetTransformFeedbackiv" ); + contextPtr->glGetVertexArrayIndexed64iv = ( delegate* )load( + "glGetVertexArrayIndexed64iv" ); + contextPtr->glGetVertexArrayIndexediv = ( delegate* )load( + "glGetVertexArrayIndexediv" ); + contextPtr->glGetVertexArrayiv = ( delegate* )load( + "glGetVertexArrayiv" ); + contextPtr->glGetnCompressedTexImage = ( delegate* )load( + "glGetnCompressedTexImage" ); + contextPtr->glGetnTexImage = ( delegate* )load( + "glGetnTexImage" ); + contextPtr->glGetnUniformdv = ( delegate* )load( + "glGetnUniformdv" ); + contextPtr->glGetnUniformfv = ( delegate* )load( + "glGetnUniformfv" ); + contextPtr->glGetnUniformiv = ( delegate* )load( + "glGetnUniformiv" ); + contextPtr->glGetnUniformuiv = ( delegate* )load( + "glGetnUniformuiv" ); + contextPtr->glInvalidateNamedFramebufferData = ( delegate* )load( + "glInvalidateNamedFramebufferData" ); + contextPtr->glInvalidateNamedFramebufferSubData = ( delegate* )load( + "glInvalidateNamedFramebufferSubData" ); + contextPtr->glMapNamedBuffer = ( delegate* )load( + "glMapNamedBuffer" ); + contextPtr->glMapNamedBufferRange = ( delegate* )load( + "glMapNamedBufferRange" ); + contextPtr->glMemoryBarrierByRegion = ( delegate* )load( + "glMemoryBarrierByRegion" ); + contextPtr->glNamedBufferData = ( delegate* )load( + "glNamedBufferData" ); + contextPtr->glNamedBufferStorage = ( delegate* )load( + "glNamedBufferStorage" ); + contextPtr->glNamedBufferSubData = ( delegate* )load( + "glNamedBufferSubData" ); + contextPtr->glNamedFramebufferDrawBuffer = ( delegate* )load( + "glNamedFramebufferDrawBuffer" ); + contextPtr->glNamedFramebufferDrawBuffers = ( delegate* )load( + "glNamedFramebufferDrawBuffers" ); + contextPtr->glNamedFramebufferParameteri = ( delegate* )load( + "glNamedFramebufferParameteri" ); + contextPtr->glNamedFramebufferReadBuffer = ( delegate* )load( + "glNamedFramebufferReadBuffer" ); + contextPtr->glNamedFramebufferRenderbuffer = ( delegate* )load( + "glNamedFramebufferRenderbuffer" ); + contextPtr->glNamedFramebufferTexture = ( delegate* )load( + "glNamedFramebufferTexture" ); + contextPtr->glNamedFramebufferTextureLayer = ( delegate* )load( + "glNamedFramebufferTextureLayer" ); + contextPtr->glNamedRenderbufferStorage = ( delegate* )load( + "glNamedRenderbufferStorage" ); + contextPtr->glNamedRenderbufferStorageMultisample = ( delegate* )load( + "glNamedRenderbufferStorageMultisample" ); + contextPtr->glReadnPixels = ( delegate* )load( + "glReadnPixels" ); + contextPtr->glTextureBarrier = ( delegate* )load( + "glTextureBarrier" ); + contextPtr->glTextureBuffer = ( delegate* )load( + "glTextureBuffer" ); + contextPtr->glTextureBufferRange = ( delegate* )load( + "glTextureBufferRange" ); + contextPtr->glTextureParameterIiv = ( delegate* )load( + "glTextureParameterIiv" ); + contextPtr->glTextureParameterIuiv = ( delegate* )load( + "glTextureParameterIuiv" ); + contextPtr->glTextureParameterf = ( delegate* )load( + "glTextureParameterf" ); + contextPtr->glTextureParameterfv = ( delegate* )load( + "glTextureParameterfv" ); + contextPtr->glTextureParameteri = ( delegate* )load( + "glTextureParameteri" ); + contextPtr->glTextureParameteriv = ( delegate* )load( + "glTextureParameteriv" ); + contextPtr->glTextureStorage1D = ( delegate* )load( + "glTextureStorage1D" ); + contextPtr->glTextureStorage2D = ( delegate* )load( + "glTextureStorage2D" ); + contextPtr->glTextureStorage2DMultisample = ( delegate* )load( + "glTextureStorage2DMultisample" ); + contextPtr->glTextureStorage3D = ( delegate* )load( + "glTextureStorage3D" ); + contextPtr->glTextureStorage3DMultisample = ( delegate* )load( + "glTextureStorage3DMultisample" ); + contextPtr->glTextureSubImage1D = ( delegate* )load( + "glTextureSubImage1D" ); + contextPtr->glTextureSubImage2D = ( delegate* )load( + "glTextureSubImage2D" ); + contextPtr->glTextureSubImage3D = ( delegate* )load( + "glTextureSubImage3D" ); + contextPtr->glTransformFeedbackBufferBase = ( delegate* )load( + "glTransformFeedbackBufferBase" ); + contextPtr->glTransformFeedbackBufferRange = ( delegate* )load( + "glTransformFeedbackBufferRange" ); + contextPtr->glUnmapNamedBuffer = ( delegate* )load( + "glUnmapNamedBuffer" ); + contextPtr->glVertexArrayAttribBinding = ( delegate* )load( + "glVertexArrayAttribBinding" ); + contextPtr->glVertexArrayAttribFormat = ( delegate* )load( + "glVertexArrayAttribFormat" ); + contextPtr->glVertexArrayAttribIFormat = ( delegate* )load( + "glVertexArrayAttribIFormat" ); + contextPtr->glVertexArrayAttribLFormat = ( delegate* )load( + "glVertexArrayAttribLFormat" ); + contextPtr->glVertexArrayBindingDivisor = ( delegate* )load( + "glVertexArrayBindingDivisor" ); + contextPtr->glVertexArrayElementBuffer = ( delegate* )load( + "glVertexArrayElementBuffer" ); + contextPtr->glVertexArrayVertexBuffer = ( delegate* )load( + "glVertexArrayVertexBuffer" ); + contextPtr->glVertexArrayVertexBuffers = ( delegate* )load( + "glVertexArrayVertexBuffers" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.5 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.5 APIs" ); } - internal static unsafe void LoadGLcore46(OpenglContext* contextPtr, delegate* load) + internal static unsafe void LoadGLcore46( + OpenglContext* contextPtr, + delegate* load ) { - if (!core46) - { - InternalIO.InternalAppendLog("The core version 4.6 is not supported."); - throw new Exception("Final Version"); + if( !core46 ) { + InternalIO.InternalAppendLog( + "The core version 4.6 is not supported." ); + throw new Exception( "Final Version" ); } #region load - contextPtr->glMultiDrawArraysIndirectCount = (delegate*)load("glMultiDrawArraysIndirectCount"); - contextPtr->glMultiDrawElementsIndirectCount = (delegate*)load("glMultiDrawElementsIndirectCount"); - contextPtr->glPolygonOffsetClamp = (delegate*)load("glPolygonOffsetClamp"); - contextPtr->glSpecializeShader = (delegate*)load("glSpecializeShader"); + contextPtr->glMultiDrawArraysIndirectCount = ( delegate* )load( + "glMultiDrawArraysIndirectCount" ); + contextPtr->glMultiDrawElementsIndirectCount = ( delegate* )load( + "glMultiDrawElementsIndirectCount" ); + contextPtr->glPolygonOffsetClamp = ( delegate* )load( + "glPolygonOffsetClamp" ); + contextPtr->glSpecializeShader = ( delegate* )load( + "glSpecializeShader" ); #endregion load - InternalIO.InternalAppendLog("Successfully load all OpenGL 4.6 APIs"); + InternalIO.InternalAppendLog( + "Successfully load all OpenGL 4.6 APIs" ); } } diff --git a/源代码/StgSharp/Graphics/OpenGL/glApiManagerConst.cs b/源代码/StgSharp/Graphics/OpenGL/glApiManagerConst.cs index 40ca87ef..f3ccd5c3 100644 --- a/源代码/StgSharp/Graphics/OpenGL/glApiManagerConst.cs +++ b/源代码/StgSharp/Graphics/OpenGL/glApiManagerConst.cs @@ -36,6 +36,7 @@ namespace StgSharp.Graphics.OpenGL { public static partial class glManager { + #region coreVersion private static bool core10 = false; @@ -682,8 +683,6 @@ namespace StgSharp.Graphics.OpenGL private static bool WIN_phong_shading; private static bool WIN_specular_fog; - #endregion - } } diff --git a/源代码/StgSharp/Graphics/OpenGL/glFucntionSourceManager.cs b/源代码/StgSharp/Graphics/OpenGL/glFucntionSourceManager.cs new file mode 100644 index 00000000..bc2231fa --- /dev/null +++ b/源代码/StgSharp/Graphics/OpenGL/glFucntionSourceManager.cs @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="glFucntionSourceManager.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the ¡°Software¡±), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED ¡°AS IS¡±, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace StgSharp.Graphics.OpenGL +{ + public partial class OpenGLFunction + { + + private Lazy textureUnitCountGetter; + private Lazy> unusedTextureImageUintInitilizing; + + public int TextureUnitCount + { + get => textureUnitCountGetter.Value; + } + + private ConcurrentQueue UnusedTextureImageUint + { + get => unusedTextureImageUintInitilizing.Value; + } + + internal void ReturnAvailableUnit( IEnumerable source ) + { + int v = GLconst.TEXTURE0 + TextureUnitCount; + foreach( TextureUnit unit in source ) { + if( ( int )unit > v ) { + throw new InvalidOperationException( + "Source contains texture unit beyond context support." ); + } + } + } + + internal int TryGetAvailableTextureUnit( + int count, + out IEnumerable result ) + { + result = new Queue(); + for( int i = 0; i < count; i++ ) { + if( UnusedTextureImageUint.TryDequeue( out TextureUnit unit ) ) { + ( result as Queue )!.Enqueue( unit ); + } else { + return i; + } + } + return count; + } + + private ConcurrentQueue InitializeUnusedTextureImageUint() + { + ConcurrentQueue result = new ConcurrentQueue( + ); + for( int index = 0; index < TextureUnitCount; index++ ) { + result.Enqueue( ( TextureUnit )( GLconst.TEXTURE0 + index ) ); + } + return result; + } + + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Graphics/OpenGL/glFunction.cs b/源代码/StgSharp/Graphics/OpenGL/glFunction.cs index 175b8a5b..3097e8ae 100644 --- a/源代码/StgSharp/Graphics/OpenGL/glFunction.cs +++ b/源代码/StgSharp/Graphics/OpenGL/glFunction.cs @@ -40,246 +40,286 @@ using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Text; +using System.Threading; namespace StgSharp { internal static unsafe partial class InternalIO { - [DllImport(SSC_libName, EntryPoint = "glCheckShaderStat", - CallingConvention = CallingConvention.Cdecl)] -#pragma warning disable CA5392 - internal static extern int glCheckShaderStatus(ref OpenglContext context, uint shaderHandle, int key, ref IntPtr logPtr); + [DllImport( + SSC_libName, + EntryPoint = "glCheckShaderStat", + CallingConvention = CallingConvention.Cdecl )] + #pragma warning disable CA5392 + internal static extern int glCheckShaderStatus( + ref OpenglContext context, + uint shaderHandle, + int key, + ref IntPtr logPtr ); #pragma warning restore CA5392 - - } } namespace StgSharp.Graphics.OpenGL { - - public unsafe partial class OpenGLFunction { - private static Dictionary contextToGLMap = new Dictionary(); + private static Dictionary contextToGLMap = new Dictionary( + ); + private static ThreadLocal _currentGL = new ThreadLocal( + ); private OpenglContext* _context; + private Lazy _attachmentColorRange; + private OpenGLFunction() { - textureUnitCountGetter = new Lazy(() => GetMaskInteger(GLconst.MAX_TEXTURE_IMAGE_UNITS)); - unusedTextureImageUintInitilizing = new Lazy>(InitializeUnusedTextureImageUint); + textureUnitCountGetter = new Lazy( + () => GetMaskInteger( GLconst.MAX_TEXTURE_IMAGE_UNITS ) ); + unusedTextureImageUintInitilizing = new Lazy>( + InitializeUnusedTextureImageUint ); + _attachmentColorRange = new Lazy( + () => { + return GetMaskInteger( + ( uint )GLconst.MAX_COLOR_ATTACHMENTS ); + } ); } - internal IntPtr ContextHandle => (IntPtr)_context; + public int AttachmentColorRange + { + get => _attachmentColorRange.Value; + } - internal static OpenGLFunction CurrentGL { get; set; } + public static OpenGLFunction CurrentGL + { + get { return _currentGL.Value; } + internal set { _currentGL.Value = value; } + } + + internal IntPtr ContextHandle => ( IntPtr )_context; protected ref OpenglContext Context { get { -#if DEBUG - if ((IntPtr)_context == IntPtr.Zero) - { + #if DEBUG + if( ( IntPtr )_context == IntPtr.Zero ) { throw new NullReferenceException(); } -#endif - return ref (*_context); + #endif + return ref ( *_context ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void ActiveTextureUnit(uint type) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void ActiveTextureUnit( uint type ) { - Context.glActiveTexture(type); + Context.glActiveTexture( type ); } - [Conditional("DEBUG")] - public void Assert(bool shouldReportWhenNormal) + [Conditional( "DEBUG" )] + public void Assert( bool shouldReportWhenNormal ) { - try - { - uint code = Context.glGetError(); - if (code != GLconst.NO_ERROR) - { - throw new GlExecutionException(code); - } - if (shouldReportWhenNormal) - { - Console.WriteLine("OpenGL runs normally"); - } + uint code = Context.glGetError(); + if( code != GLconst.NO_ERROR ) { + throw new GlExecutionException( code ); } - catch (GlExecutionException ex) - { - throw ex; + if( shouldReportWhenNormal ) { + Console.WriteLine( "OpenGL runs normally" ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void AttachShader(GlHandle program, GlHandle shader) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void AttachShader( GlHandle program, GlHandle shader ) { - Context.glAttachShader(program.Value, shader.Value); + Context.glAttachShader( program.Value, shader.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void BindBuffer(BufferType bufferType, GlHandle handle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void BindBuffer( BufferType bufferType, GlHandle handle ) { - Context.glBindBuffer((uint)bufferType, handle.Value); + Context.glBindBuffer( ( uint )bufferType, handle.Value ); } /// - /// Bind a frame buffer to a frame buffer target - /// Same function as glBindFramebuffer. + /// Bind a frame buffer to a frame buffer target Same function as glBindFramebuffer. /// - /// The frame buffer target of the binding operation. - /// The handle of the frame buffer object to bind. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void BindFrameBuffer(FrameBufferTarget target, GlHandle handle) + /// The frame buffer target of the binding operation. + /// The handle of the frame buffer object to bind. + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void BindFrameBuffer( FrameBufferTarget target, GlHandle handle ) { - Context.glBindFramebuffer((uint)target, handle.Value); + Context.glBindFramebuffer( ( uint )target, handle.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void BindRenderBuffer(GlHandle handle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void BindRenderBuffer( GlHandle handle ) { - Context.glBindRenderbuffer(GLconst.RENDERBUFFER, handle.Value); + Context.glBindRenderbuffer( GLconst.RENDERBUFFER, handle.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void BindTexture(uint type, GlHandle texture) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void BindTexture( uint type, GlHandle texture ) { - Context.glBindTexture(type, texture.Value); + Context.glBindTexture( type, texture.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void BindVertexArray(GlHandle handle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void BindVertexArray( GlHandle handle ) { - Context.glBindVertexArray(handle.Value); + Context.glBindVertexArray( handle.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public FrameBufferStatus CheckFrameBufferStatus(FrameBufferTarget target) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public FrameBufferStatus CheckFrameBufferStatus( + FrameBufferTarget target ) { - return (FrameBufferStatus)Context.glCheckFramebufferStatus((uint)target); + return ( FrameBufferStatus )Context.glCheckFramebufferStatus( + ( uint )target ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Clear(MaskBufferBit mask) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void Clear( MaskBufferBit mask ) { - Context.glClear((uint)mask); + Context.glClear( ( uint )mask ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void ClearColor(float R, float G, float B, float A) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void ClearColor( float R, float G, float B, float A ) { - Context.glClearColor(R, G, B, A); + Context.glClearColor( R, G, B, A ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public void ClearError() { - while (Context.glGetError() != 0) { } + uint code = 0; + for( int i = 0; i < 1024; i++ ) { + code = Context.glGetError(); + if( code == 0 ) { + return; + } + + //Console.WriteLine(code); + } + foreach( ProcessThread thread in Process.GetCurrentProcess().Threads ) { + Debugger.Break(); + } + throw new GlErrorOverflowException( 1024, code ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public unsafe void ClearGraphicError() { - while (Context.glGetError() != 0) { } + while( Context.glGetError() != 0 ) { } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void CombineFrameBufferRenderBuffer(FrameBufferAttachment attachment, GlHandle rboHandle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void CombineFrameBufferRenderBuffer( + FrameBufferAttachment attachment, + GlHandle rboHandle ) { - Context.glFramebufferRenderbuffer(GLconst.FRAMEBUFFER, (uint)attachment, GLconst.RENDERBUFFER, rboHandle.Value); + Context.glFramebufferRenderbuffer( + GLconst.FRAMEBUFFER, ( uint )attachment, GLconst.RENDERBUFFER, + rboHandle.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void CompileShader(GlHandle shaderhandle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void CompileShader( GlHandle shaderhandle ) { - Context.glCompileShader(shaderhandle.Value); + Context.glCompileShader( shaderhandle.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public unsafe GlHandle CreateGraphicProgram() { - return GlHandle.Alloc(Context.glCreateProgram()); + return GlHandle.Alloc( Context.glCreateProgram() ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public GlHandle CreateProgram() { - return GlHandle.Alloc(Context.glCreateProgram()); + return GlHandle.Alloc( Context.glCreateProgram() ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe GlHandle[] CreateProgram(int count) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe GlHandle[] CreateProgram( int count ) { GlHandle[] h = new GlHandle[count]; - for (int i = 0; i < count; i++) - { - h.SetValue(i, Context.glCreateProgram()); + for( int i = 0; i < count; i++ ) { + h.SetValue( i, Context.glCreateProgram() ); } return h; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public GlHandle[] CreateShaderSet(int count, ShaderType type) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public GlHandle[] CreateShaderSet( int count, ShaderType type ) { GlHandle[] ret = new GlHandle[count]; - uint t = (uint)type; - for (int i = 0; i < count; i++) - { - uint id = Context.glCreateShader(t); - if (id == 0) - { + uint t = ( uint )type; + for( int i = 0; i < count; i++ ) { + uint id = Context.glCreateShader( t ); + if( id == 0 ) { uint error = Context.glGetError(); - throw new InvalidOperationException($"Failed in creating shader: {error}"); + throw new InvalidOperationException( + $"Failed in creating shader: {error}" ); } - ret[i] = GlHandle.Alloc(id); + ret[ i ] = GlHandle.Alloc( id ); } return ret; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void DeleteBuffer(GlHandle handle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void DeleteBuffer( GlHandle handle ) { - Context.glDeleteBuffers(1, (uint*)&handle); + Context.glDeleteBuffers( 1, ( uint* )&handle ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void DeleteBuffers(GlHandle[] handle) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void DeleteBuffers( GlHandle[] handle ) { - if ((handle == null) || (handle.Length == 0)) - { - throw new ArgumentNullException(nameof(handle)); + if( ( handle == null ) || ( handle.Length == 0 ) ) { + throw new ArgumentNullException( nameof( handle ) ); } - fixed (GlHandle* hptr = handle) - { - uint* iptr = (uint*)hptr; - for (int i = 0; i < handle.Length; i++) - { - Context.glDeleteBuffers(1, iptr + i); + fixed( GlHandle* hptr = handle ) { + uint* iptr = ( uint* )hptr; + for( int i = 0; i < handle.Length; i++ ) { + Context.glDeleteBuffers( 1, iptr + i ); } } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void DeleteVertexArrays(GlHandle[] arrays) + /// + /// Delete a render buffer object Very simlilar function as glDeleteRenderbuffers. The only + /// deifference is that this mehtod can only delete one renderbuffer at the same time. + /// + /// Handle to buffer to delete. + public unsafe void DeleteRenderBuffer( GlHandle bufferHandle ) { - fixed (GlHandle* hptr = arrays) - { - uint* iptr = (uint*)hptr; - for (int i = 0; i < arrays.Length; i++) - { - Context.glDeleteVertexArrays(1, iptr + i); + Context.glDeleteRenderbuffers( 1, &bufferHandle.Value ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void DeleteVertexArrays( GlHandle[] arrays ) + { + fixed( GlHandle* hptr = arrays ) { + uint* iptr = ( uint* )hptr; + for( int i = 0; i < arrays.Length; i++ ) { + Context.glDeleteVertexArrays( 1, iptr + i ); } } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void DrawElements(GeometryType mode, uint count, TypeCode type, IntPtr ptr) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void DrawElements( + GeometryType mode, + uint count, + TypeCode type, + IntPtr ptr ) { uint a; a = type switch @@ -288,19 +328,21 @@ namespace StgSharp.Graphics.OpenGL TypeCode.UInt16 => GLconst.UNSIGNED_SHORT, TypeCode.Byte => GLconst.UNSIGNED_BYTE, _ => throw new ArgumentException( - $"{$"{$"Parameter error in parameter {nameof(type)} method DrawElements. "}"}{$"{$"Only {typeof(uint).Name},{typeof(ushort).Name},{typeof(byte).Name} types are supported."}"}") + $"{$"{$"Parameter error in parameter {nameof(type)} method DrawElements. "}"}{$"{$"Only {typeof(uint).Name},{typeof(ushort).Name},{typeof(byte).Name} types are supported."}"}" ) }; - Context.glDrawElements((uint)mode, count, a, (void*)ptr); + Context.glDrawElements( ( uint )mode, count, a, ( void* )ptr ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public void DrawElementsInstanced( - GeometryType mode, uint count, TypeCode type, IntPtr ptr, uint amount - ) + GeometryType mode, + uint count, + TypeCode type, + IntPtr ptr, + uint amount ) { uint a; - switch (type) - { + switch( type ) { case TypeCode.UInt32: a = GLconst.UNSIGNED_INT; break; @@ -316,434 +358,489 @@ namespace StgSharp.Graphics.OpenGL default: InternalIO.InternalWriteLog( $"{$"Parameter error in parameter {nameof(type)} method DrawElements. "}{$"Only {typeof(uint).Name},{typeof(ushort).Name},{typeof(byte).Name} types are supported."}", - LogType.Error); + LogType.Error ); return; } - Context.glDrawElementsInstanced((uint)mode, count, a, (void*)ptr, amount); + Context.glDrawElementsInstanced( + ( uint )mode, count, a, ( void* )ptr, amount ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Enable(GLOperation operation) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void Enable( GLOperation operation ) { - Context.glEnable((uint)operation); + Context.glEnable( ( uint )operation ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void FrameBufferTexture2d(FrameBufferTarget target, uint attachment, Texture2DTarget texTarget, GlHandle textureHandle, int level) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void FrameBufferTexture2d( + FrameBufferTarget target, + uint attachment, + Texture2DTarget texTarget, + GlHandle textureHandle, + int level ) { Context.glFramebufferTexture2D( - (uint)target, attachment, (uint)texTarget, textureHandle.Value, level - ); + ( uint )target, attachment, ( uint )texTarget, + textureHandle.Value, level ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe GlHandle[] GenBuffers(int count) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe GlHandle[] GenBuffers( int count ) { GlHandle[] h = new GlHandle[count]; - fixed (GlHandle* hptr = h) - { - for (int i = 0; i < count; i++) - { - Context.glGenBuffers(count, ((uint*)hptr) + i); + fixed( GlHandle* hptr = h ) { + for( int i = 0; i < count; i++ ) { + Context.glGenBuffers( count, ( ( uint* )hptr ) + i ); } } return h; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void GenerateMipmap(Texture2DTarget target) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void GenerateMipmap( Texture2DTarget target ) { - Context.glGenerateMipmap((uint)target); + Context.glGenerateMipmap( ( uint )target ); } - public unsafe GlHandle[] GenFrameBuffers(int count) + public unsafe GlHandle[] GenFrameBuffers( int count ) { GlHandle[] h = new GlHandle[count]; - fixed (GlHandle* hptr = h) - { - Context.glGenFramebuffers(1, (uint*)hptr); + fixed( GlHandle* hptr = h ) { + Context.glGenFramebuffers( 1, ( uint* )hptr ); } return h; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe GlHandle[] GenRenderBuffer(int count) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe GlHandle[] GenRenderBuffer( int count ) { GlHandle[] h = new GlHandle[count]; - fixed (GlHandle* hptr = h) - { - Context.glGenRenderbuffers(count, (uint*)hptr); + fixed( GlHandle* hptr = h ) { + Context.glGenRenderbuffers( count, ( uint* )hptr ); } return h; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe GlHandle[] GenTextures(int count) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe GlHandle[] GenTextures( int count ) { - GlHandle[] h = new GlHandle[count]; - fixed (GlHandle* hptr = h) - { - Context.glGenTextures(count, (uint*)hptr); + fixed( GlHandle* hptr = h ) { + Context.glGenTextures( count, ( uint* )hptr ); } return h; } - - public unsafe GlHandle[] GenVertexArrays(int count) + public unsafe GlHandle[] GenVertexArrays( int count ) { - GlHandle[] h = new GlHandle[count]; - fixed (GlHandle* hptr = h) - { - Context.glGenVertexArrays(count, (uint*)hptr); + fixed( GlHandle* hptr = h ) { + Context.glGenVertexArrays( count, ( uint* )hptr ); } return h; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public uint GetError() { return Context.glGetError(); } - public unsafe int GetMaskInteger(uint statusCode) + public unsafe int GetMaskInteger( uint statusCode ) { int ret = 0; - Context.glGetIntegerv(statusCode, &ret); + Context.glGetIntegerv( statusCode, &ret ); return ret; } - public string GetShaderStatus(Shader s, int index, int key) + public string GetShaderStatus( Shader s, int index, int key ) { IntPtr sptr = IntPtr.Zero; - if (InternalIO.glCheckShaderStatus(ref Context, s.handle[index].Value, key, ref sptr) == 0) - { - return Marshal.PtrToStringAnsi(sptr); + if( InternalIO.glCheckShaderStatus( + ref Context, s.handle[ index ].Value, key, ref sptr ) == 0 ) { + return Marshal.PtrToStringAnsi( sptr ); } return string.Empty; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void GetTextureImage(Texture2DTarget target, int level, ImageChannel channel, PixelChannelLayout channelLayout, T[] dataStream) - where T : struct, + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void GetTextureImage( + Texture2DTarget target, + int level, + ImageChannel channel, + PixelChannelLayout channelLayout, + T[] dataStream ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { -#pragma warning disable CS8500 - fixed (T* tptr = dataStream) - { - Context.glGetTexImage((uint)target, level, (uint)channel, (uint)channelLayout, tptr); + #pragma warning disable CS8500 + fixed( T* tptr = dataStream ) { + Context.glGetTexImage( + ( uint )target, level, ( uint )channel, + ( uint )channelLayout, tptr ); } -#pragma warning restore CS8500 + #pragma warning restore CS8500 } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe GlHandle GetUniformLocation(GlHandle program, string name) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void GetTextureLevelProperty( + uint textureTypeMask, + int level, + uint propertyMask, + out int propertyValue ) { - byte[] code = Encoding.UTF8.GetBytes(name); - fixed (byte* ptr = code) - { - int ret = Context.glGetUniformLocation(program.Value, ptr); -#if DEBUG - if ((ret == GLconst.INVALID_OPERATION) || - (ret == GLconst.INVALID_VALUE)) - { + fixed( int* iptr = &propertyValue ) { + Context.glGetTexLevelParameteriv( + textureTypeMask, level, propertyMask, iptr ); + } + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe GlHandle GetUniformLocation( + GlHandle program, + string name ) + { + byte[] code = Encoding.UTF8.GetBytes( name ); + fixed( byte* ptr = code ) { + int ret = Context.glGetUniformLocation( program.Value, ptr ); + #if DEBUG + if( ( ret == GLconst.INVALID_OPERATION ) || ( ret == GLconst.INVALID_VALUE ) ) { throw new InvalidOperationException(); } - if (ret == -1) - { - throw new UniformEmptyReferenceException(nameof(program), name); + if( ret == -1 ) { + throw new UniformEmptyReferenceException( + nameof( program ), name ); } -#endif - return GlHandle.SignedAlloc(ret); + #endif + return GlHandle.SignedAlloc( ret ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void LoadShaderSource(GlHandle shaderHandle, byte[] codeStream) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void LoadShaderSource( + GlHandle shaderHandle, + byte[] codeStream ) { - fixed (byte* streamPtr = codeStream) - { - Context.glShaderSource(shaderHandle.Value, 1, &streamPtr, (void*)0); + fixed( byte* streamPtr = codeStream ) { + Context.glShaderSource( + shaderHandle.Value, 1, &streamPtr, ( void* )0 ); } } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public void ReadPixels( - (int X, int Y) beginPosition, (int width, int height) size, FrameBufferChannel format, PixelChannelLayout dataType, ref byte[] stream - ) + (int X, int Y) beginPosition, + (int width, int height) size, + FrameBufferChannel format, + PixelChannelLayout dataType, + ref byte[] stream ) { - fixed (byte* bptr = stream) - { + fixed( byte* bptr = stream ) { Context.glReadPixels( - beginPosition.X, beginPosition.Y, - size.width, size.height, (uint)format, (uint)dataType, bptr); + beginPosition.X, beginPosition.Y, size.width, size.height, + ( uint )format, ( uint )dataType, bptr ); } } public void RereadImage( - in Image i, (int X, int Y) beginPosition, FrameBufferChannel format, PixelChannelLayout dataType) + in Image i, + (int X, int Y) beginPosition, + FrameBufferChannel format, + PixelChannelLayout dataType ) { byte[] pixels = i.PixelBuffer; - if (!pixels.CheckArrayFormat(dataType)) - { - throw new GlArrayFormatException(dataType, "i.PixelArray"); + if( !pixels.CheckArrayFormat( dataType ) ) { + throw new GlArrayFormatException( dataType, "i.PixelArray" ); } - fixed (byte* bptr = pixels) - { + fixed( byte* bptr = pixels ) { Context.glReadPixels( - beginPosition.X, beginPosition.Y, i.Width, i.Height, (uint)format, (uint)dataType, bptr); + beginPosition.X, beginPosition.Y, i.Width, i.Height, + ( uint )format, ( uint )dataType, bptr ); } i.PixelUpdateCount++; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetBufferData(BufferType bufferType, T bufferData, BufferUsage usage) - where T : struct + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetBufferData( + BufferType bufferType, + T bufferData, + BufferUsage usage ) + where T: struct { int size = Marshal.SizeOf(); -#pragma warning disable CS8500 + #pragma warning disable CS8500 T* p = &bufferData; -#pragma warning restore CS8500 + #pragma warning restore CS8500 Context.glBufferData( - (uint)bufferType, - (IntPtr)size, - (IntPtr)p, - (uint)usage); + ( uint )bufferType, ( IntPtr )size, ( IntPtr )p, + ( uint )usage ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetBufferData(BufferType bufferType, T[] bufferArray, BufferUsage usage) - where T : struct, + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetBufferData( + BufferType bufferType, + T[] bufferArray, + BufferUsage usage ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { - int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); - if (bufferArray == null) - { + int size = bufferArray.Length * Marshal.SizeOf( typeof( T ) ); + if( bufferArray == null ) { return; } -#pragma warning disable CS8500 - fixed (void* bufferPtr = bufferArray) -#pragma warning restore CS8500 - { + #pragma warning disable CS8500 + fixed( void* bufferPtr = bufferArray ) + #pragma warning restore CS8500 + { Context.glBufferData( - (uint)bufferType, - (IntPtr)size, - (IntPtr)bufferPtr, - (uint)usage); + ( uint )bufferType, ( IntPtr )size, ( IntPtr )bufferPtr, + ( uint )usage ); } } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetBufferData(BufferType bufferType, ReadOnlySpan bufferArray, BufferUsage usage) - where T : struct, + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetBufferData( + BufferType bufferType, + ReadOnlySpan bufferArray, + BufferUsage usage ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { - int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); - if (bufferArray == null) - { + int size = bufferArray.Length * Marshal.SizeOf( typeof( T ) ); + if( bufferArray == null ) { return; } -#pragma warning disable CS8500 - fixed (void* bufferPtr = bufferArray) -#pragma warning restore CS8500 - { + #pragma warning disable CS8500 + fixed( void* bufferPtr = bufferArray ) + #pragma warning restore CS8500 + { Context.glBufferData( - (uint)bufferType, - (IntPtr)size, - (IntPtr)bufferPtr, - (uint)usage); + ( uint )bufferType, ( IntPtr )size, ( IntPtr )bufferPtr, + ( uint )usage ); } } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetBufferData(BufferType bufferType, Span bufferArray, BufferUsage usage) - where T : struct, + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetBufferData( + BufferType bufferType, + Span bufferArray, + BufferUsage usage ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { - int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); - if (bufferArray == null) - { + int size = bufferArray.Length * Marshal.SizeOf( typeof( T ) ); + if( bufferArray == null ) { return; } -#pragma warning disable CS8500 - fixed (void* bufferPtr = &bufferArray.GetPinnableReference()) -#pragma warning restore CS8500 - { + #pragma warning disable CS8500 + fixed( void* bufferPtr = &bufferArray.GetPinnableReference() ) + #pragma warning restore CS8500 + { Context.glBufferData( - (uint)bufferType, - (IntPtr)size, - (IntPtr)bufferPtr, - (uint)usage); + ( uint )bufferType, ( IntPtr )size, ( IntPtr )bufferPtr, + ( uint )usage ); } } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetBufferVectorData(BufferType bufferType, ReadOnlySpan bufferArray, BufferUsage usage) - where T : struct, IVector + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetBufferVectorData( + BufferType bufferType, + ReadOnlySpan bufferArray, + BufferUsage usage ) + where T: struct, IVector { - int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); - if (bufferArray == null) - { + int size = bufferArray.Length * Marshal.SizeOf( typeof( T ) ); + if( bufferArray == null ) { return; } -#pragma warning disable CS8500 - fixed (void* bufferPtr = &bufferArray.GetPinnableReference()) -#pragma warning restore CS8500 - { + #pragma warning disable CS8500 + fixed( void* bufferPtr = &bufferArray.GetPinnableReference() ) + #pragma warning restore CS8500 + { Context.glBufferData( - (uint)bufferType, - (IntPtr)size, - (IntPtr)bufferPtr, - (uint)usage); + ( uint )bufferType, ( IntPtr )size, ( IntPtr )bufferPtr, + ( uint )usage ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetBufferVectorData(BufferType bufferType, T[] bufferArray, BufferUsage usage) - where T : struct, IVector + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetBufferVectorData( + BufferType bufferType, + T[] bufferArray, + BufferUsage usage ) + where T: struct, IVector { - int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); - if (bufferArray == null) - { + int size = bufferArray.Length * Marshal.SizeOf( typeof( T ) ); + if( bufferArray == null ) { return; } -#pragma warning disable CS8500 - fixed (void* bufferPtr = bufferArray) -#pragma warning restore CS8500 - { + #pragma warning disable CS8500 + fixed( void* bufferPtr = bufferArray ) + #pragma warning restore CS8500 + { Context.glBufferData( - (uint)bufferType, - (IntPtr)size, - (IntPtr)bufferPtr, - (uint)usage); + ( uint )bufferType, ( IntPtr )size, ( IntPtr )bufferPtr, + ( uint )usage ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe void SetRenderBufferStorage(RenderBufferInternalFormat internalFormat, (int width, int height) size) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetRenderBufferStorage( + RenderBufferInternalFormat internalFormat, + (int width, int height) size ) { Context.glRenderbufferStorage( - GLconst.RENDERBUFFER, (uint)internalFormat, size.width, size.height - ); + GLconst.RENDERBUFFER, ( uint )internalFormat, size.width, + size.height ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetVertexAttribute(uint index, int size, TypeCode t, bool normalized, uint stride, int pointer) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public unsafe void SetRenderBufferStorage( + RenderBufferInternalFormat internalFormat, + (uint width, uint height) size ) { - uint type = InternalIO.GLtype[t]; - Context.glVertexAttribPointer(index, size, type, normalized ? 1 : 0, stride, (void*)pointer); - Context.glEnableVertexAttribArray(index); + Context.glRenderbufferStorage( + GLconst.RENDERBUFFER, ( uint )internalFormat, ( int )size.width, + ( int )size.height ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void TextureImage2d(Texture2DTarget target, int level, uint internalformat, uint width, uint height, - uint format, PixelChannelLayout type, T[] pixels) where T : struct, + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetVertexAttribute( + uint index, + int size, + TypeCode t, + bool normalized, + uint stride, + int pointer ) + { + uint type = InternalIO.GLtype[ t ]; + Context.glVertexAttribPointer( + index, size, type, normalized ? 1 : 0, stride, + ( void* )pointer ); + Context.glEnableVertexAttribArray( index ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void TextureImage2d( + Texture2DTarget target, + int level, + ImageChannel sourceChannel, + uint width, + uint height, + ImageChannel targetChannel, + PixelChannelLayout type, + T[] pixels ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { -#pragma warning disable CS8500 - fixed (T* tptr = ((pixels == null) || (pixels.Length == 0)) ? null : pixels) - { + #pragma warning disable CS8500 + fixed( T* tptr = pixels ) { + T* ptr = ( ( pixels == null ) || ( pixels.Length == 0 ) ) ? + ( T* )IntPtr.Zero : tptr; Context.glTexImage2D( - (uint)target, level, internalformat, width, height, 0, format, (uint)type, tptr); + ( uint )target, level, ( uint )sourceChannel, width, height, + 0, ( uint )targetChannel, ( uint )type, tptr ); } -#pragma warning restore CS8500 + #pragma warning restore CS8500 } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void TextureImage2d(Texture2DTarget target, int level, uint internalformat, uint width, uint height, - uint format, PixelChannelLayout type, Span pixelSpan) where T : struct, + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void TextureImage2d( + Texture2DTarget target, + int level, + ImageChannel sourceChannel, + uint width, + uint height, + ImageChannel targetChannel, + PixelChannelLayout type, + Span pixelSpan ) + where T: struct, #if NET8_0_OR_GREATER INumber #else IConvertible -#endif + #endif { -#pragma warning disable CS8500 - fixed (T* tptr = pixelSpan) - { + #pragma warning disable CS8500 + fixed( T* tptr = pixelSpan ) { Context.glTexImage2D( - (uint)target, level, internalformat, width, height, 0, format, (uint)type, tptr); + ( uint )target, level, ( uint )sourceChannel, width, height, + 0, ( uint )targetChannel, ( uint )type, tptr ); } -#pragma warning restore CS8500 + #pragma warning restore CS8500 } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void TextureParameter(int target, uint pname, int param) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void TextureParameter( int target, uint pname, int param ) { - Context.glTexParameteri((uint)target, pname, param); + Context.glTexParameteri( ( uint )target, pname, param ); } - public static bool TryGetFunctionPackage(IntPtr handle, out OpenGLFunction functionPackage) + public static bool TryGetFunctionPackage( + IntPtr handle, + out OpenGLFunction functionPackage ) { - return contextToGLMap.TryGetValue(handle, out functionPackage); + return contextToGLMap.TryGetValue( handle, out functionPackage ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void UseProgram(GlHandle program) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void UseProgram( GlHandle program ) { - Context.glUseProgram(program.Value); + Context.glUseProgram( program.Value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void VertexAttributeDivisor(uint layoutIndex, uint divisor) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void VertexAttributeDivisor( uint layoutIndex, uint divisor ) { - Context.glVertexAttribDivisor(layoutIndex, divisor); + Context.glVertexAttribDivisor( layoutIndex, divisor ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Viewport(int x, int y, uint width, uint height) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void Viewport( int x, int y, uint width, uint height ) { - Context.glViewport(x, y, width, height); + Context.glViewport( x, y, width, height ); } - public void WaitAccomplishment() { Context.glFinish(); } - internal static OpenGLFunction BuildGlFunctionPackage(IntPtr handle) + internal static OpenGLFunction BuildGlFunctionPackage( IntPtr handle ) { OpenGLFunction pack; - if (contextToGLMap.TryGetValue(handle, out pack)) - { + if( contextToGLMap.TryGetValue( handle, out pack ) ) { return pack; } - pack = new OpenGLFunction { _context = (OpenglContext*)handle }; - contextToGLMap.Add(handle, pack); + pack = new OpenGLFunction { _context = ( OpenglContext* )handle }; + contextToGLMap.Add( handle, pack ); return pack; } ~OpenGLFunction() { - contextToGLMap.Remove(ContextHandle); + contextToGLMap.Remove( ContextHandle ); } } diff --git a/源代码/StgSharp/Graphics/OpenGL/glRenderSourceGenrator.cs b/源代码/StgSharp/Graphics/OpenGL/glRenderSourceGenrator.cs new file mode 100644 index 00000000..c5411b1f --- /dev/null +++ b/源代码/StgSharp/Graphics/OpenGL/glRenderSourceGenrator.cs @@ -0,0 +1,107 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="glRenderSourceGenrator.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + public partial class glRender + { + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected AutoTextureGL CreateAutoTexture( int count ) + { + return new AutoTextureGL( count, this ); + } + + /// + /// Create a set of . + /// + /// Amount of EBO to be created. + /// + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected ElementBuffer CreateElementBuffer( int count ) + { + return new ElementBuffer( count, this ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected FrameBuffer CreateFrameBuffer( int count ) + { + return new FrameBuffer( count, this ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected RenderBuffer CreateRenderBuffer( int count ) + { + return new RenderBuffer( count, this ); + } + + /// + /// Create a sets of + /// + /// Amount of textures to be created. + /// + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected TextureGL CreateTexture( int count ) + { + return new TextureGL( count, this ); + } + + /// + /// Create a set of . + /// + /// Amount of VAO to be created. + /// + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected VertexArray CreateVertexArray( int count ) + { + return new VertexArray( count, this ); + } + + /// + /// Create a set of . + /// + /// Amount of Object to be created. + /// + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected VertexBuffer CreateVertexBuffer( int count ) + { + return new VertexBuffer( count, this ); + } + + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Graphics/OpenGL/glRenderStream.cs b/源代码/StgSharp/Graphics/OpenGL/glRenderStream.cs index 63b86dc8..478b6ef9 100644 --- a/源代码/StgSharp/Graphics/OpenGL/glRenderStream.cs +++ b/源代码/StgSharp/Graphics/OpenGL/glRenderStream.cs @@ -1,6 +1,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- -// file="glRender.cs" +// file="glRenderStream.cs" // Project: StgSharp // AuthorGroup: Nitload Space // Copyright (c) Nitload Space. All rights reserved. @@ -28,24 +28,28 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using StgSharp.Math; +using StgSharp.Threading; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace StgSharp.Graphics.OpenGL { - public abstract partial class glRender : RenderStream { + private protected static readonly ConcurrentDictionary renderToThread + = new ConcurrentDictionary(); + private OpenGLFunction _context; protected internal OpenGLFunction GL @@ -54,93 +58,134 @@ namespace StgSharp.Graphics.OpenGL } /// - /// Initialize an OpenGl viewPortDisplay if current form has not been binded to any viewPortDisplay. - /// and set the viewPortDisplay binded to current form as current OpenGL viewPortDisplay. + /// Initialize an opengl context and load all opengl functions. + /// + public unsafe void InitializeContext() + { + if( ContextHandle == default ) { + ContextHandle = Marshal.AllocHGlobal( + Marshal.SizeOf( typeof( OpenglContext ) ) ); + OpenglContext* contextID = ( OpenglContext* )ContextHandle; + contextID->glGetString = ( delegate* )IntPtr.Zero; + } + if( GL == null ) { + _context = OpenGLFunction.BuildGlFunctionPackage( + ContextHandle ); + } + } + + /// + /// Initialize an OpenGl viewPortDisplay if current form has not been binded to any + /// viewPortDisplay. and set the viewPortDisplay binded to current form as current OpenGL + /// viewPortDisplay. /// /// /// Something goes wrong and StgSharp fails in creating a new OpenGL viewPortDisplay. /// public unsafe void MakeAsCurrentContext() { - if (ContextHandle == default) - { - ContextHandle = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(OpenglContext))); - OpenglContext* contextID = (OpenglContext*)ContextHandle; - contextID->glGetString = (delegate*)IntPtr.Zero; - } - if (GL == null) - { - _context = OpenGLFunction.BuildGlFunctionPackage(ContextHandle); - } - if (OpenGLFunction.CurrentGL != GL) - { - OpenGLFunction.CurrentGL = GL; - InternalIO.glfwMakeContextCurrent(CanvasHandle); - } + InternalIO.glfwMakeContextCurrent( CanvasHandle ); + OpenGLFunction.CurrentGL = this.GL; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public override void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight) + /// + public override void RenderEnd() { - InternalIO.glfwSetWindowSizeLimits(this.CanvasHandle, minWidth, minHeight, maxWidth, maxHeight); + if( !renderToThread.TryGetValue( this, + out Thread t ) || t != Thread.CurrentThread ) { + throw new InvalidOperationException( + $"Current render has had been binded to thread {t!.ManagedThreadId}" ); + } + SwapBuffers(); + renderToThread[ this ] = ThreadHelper.EmptyThread; + InternalIO.glfwMakeContextCurrent( IntPtr.Zero ); + OpenGLFunction.CurrentGL = null; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal override sealed void Draw() + /// + public override void RenderStart() { - MakeAsCurrentContext(); - Main(); + Thread current = Thread.CurrentThread; + if( !renderToThread.TryGetValue( this, + out Thread t ) || t == ThreadHelper.EmptyThread ) { + renderToThread[ this ] = current; + MakeAsCurrentContext(); + return; + } + if( t != current ) { + throw new InvalidOperationException( + $"Current render has had been binded to thread {t!.ManagedThreadId}" ); + } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public override void SetSizeLimit( + int minWidth, + int minHeight, + int maxWidth, + int maxHeight ) + { + InternalIO.glfwSetWindowSizeLimits( + this.CanvasHandle, minWidth, minHeight, maxWidth, maxHeight ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal override sealed void PlatformSpecifiedInitialize() { + InitializeContext(); MakeAsCurrentContext(); - glManager.LoadOpenGLApiTo(Port.GraphicHandle); + glManager.LoadOpenGLApiTo( BindedViewPortContext.GraphicHandle ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal override sealed void Terminate() { CustomizeDeinit(); } - protected override sealed Uniform NativeCameraUniform(ShaderProgram source, string name) + protected override sealed Uniform NativeCameraUniform( + ShaderProgram source, + string name ) { - NativeCamera.GainAllUniforms(source, name); + NativeCamera.GainAllUniforms( source, name ); return NativeCamera.convertedUniform; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - protected override sealed void NativeCameraViewRange(Radius fieldOfRange, vec2d offset, (float frontDepth, float backDepth) viewDepth) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + protected override sealed void NativeCameraViewRange( + Radius fieldOfRange, + Vec2 offset, + (float frontDepth, float backDepth) viewDepth ) { - NativeCamera.SetViewRange(fieldOfRange, this.Size, offset, viewDepth); + NativeCamera.SetViewRange( + fieldOfRange, this.Size, offset, viewDepth ); } - protected override sealed void NativeCameraViewTarget(vec3d position, vec3d direction, vec3d up) + protected override sealed void NativeCameraViewTarget( + Vec3 position, + Vec3 direction, + Vec3 up ) { - NativeCamera.SetViewDirection(position, direction, up); + NativeCamera.SetViewDirection( position, direction, up ); } #region Key Control - protected KeyStatus CheckKey(KeyboardKey key) + protected KeyStatus CheckKey( KeyboardKey key ) { - return InternalIO.glfwGetKey(this.CanvasHandle, (int)key); + return InternalIO.glfwGetKey( this.CanvasHandle, ( int )key ); } - protected KeyStatus CheckKey(Mouse key) + protected KeyStatus CheckKey( Mouse key ) { - return InternalIO.glfwGetKey(this.CanvasHandle, (int)key); + return InternalIO.glfwGetKey( this.CanvasHandle, ( int )key ); } - protected KeyStatus CheckKey(Joystick key) + protected KeyStatus CheckKey( Joystick key ) { - return InternalIO.glfwGetKey(this.CanvasHandle, (int)key); + return InternalIO.glfwGetKey( this.CanvasHandle, ( int )key ); } #endregion - - } } diff --git a/源代码/StgSharp/Graphics/OpenGL/glRenderThreadSecurity.cs b/源代码/StgSharp/Graphics/OpenGL/glRenderThreadSecurity.cs new file mode 100644 index 00000000..c0dca674 --- /dev/null +++ b/源代码/StgSharp/Graphics/OpenGL/glRenderThreadSecurity.cs @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="glRenderThreadSecurity.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + public partial class glRender + { + + private static ConcurrentDictionary threadLocalIndex + = new ConcurrentDictionary(); + private readonly SynchronizationContext mainThreadContext = SynchronizationContext.Current; + + } +} diff --git a/源代码/StgSharp/Graphics/Pixels.cs b/源代码/StgSharp/Graphics/Pixels.cs index 330a94bd..5220b7b2 100644 --- a/源代码/StgSharp/Graphics/Pixels.cs +++ b/源代码/StgSharp/Graphics/Pixels.cs @@ -38,26 +38,44 @@ namespace StgSharp.Graphics public interface IPixel { - public float Red { get; set; } - public float Green { get; set; } - public float Blue { get; set; } - public float Alpha { get; set; } + public float Red + { + get; + set; + } - internal int Size { get; } + public float Green + { + get; + set; + } + public float Blue + { + get; + set; + } + + public float Alpha + { + get; + set; + } + + internal int Size + { + get; + } } - [StructLayout(LayoutKind.Explicit, Size = 32)] + [StructLayout( LayoutKind.Explicit, Size = 32 )] public unsafe struct Pixel32 { - [FieldOffset(0)] private unsafe fixed byte data[4]; + [FieldOffset( 0 )] private unsafe fixed byte data[ 4 ]; internal int Size => 4; } - - - } diff --git a/源代码/StgSharp/Graphics/PlainGeometryMesh.cs b/源代码/StgSharp/Graphics/PlainGeometryMesh.cs index a1f24ff5..0f506367 100644 --- a/源代码/StgSharp/Graphics/PlainGeometryMesh.cs +++ b/源代码/StgSharp/Graphics/PlainGeometryMesh.cs @@ -46,52 +46,57 @@ namespace StgSharp.Graphics private PlainGeometry _shape; private TextureProvider _texture; - public PlainGeometryMesh([NotNull] PlainGeometry shape, [NotNull] TextureProvider texture) + public PlainGeometryMesh( + [NotNull] PlainGeometry shape, + [NotNull] TextureProvider texture ) { - if (shape.VertexCount > texture.TextureCoordinate.Length) - { - throw new ArgumentException(paramName: nameof(texture), message: "Amount of texture coordination is too less"); + if( shape.VertexCount > texture.TextureCoordinate.Length ) { + throw new ArgumentException( + paramName: nameof( texture ), + message: "Amount of texture coordination is too less" ); } _texture = texture; _shape = shape; } + //private Image _texture; public PlainGeometryMesh( - PlainGeometry shape, Image texture, vec2d[] texCoord - ) + PlainGeometry shape, + Image texture, + Vec2[] texCoord ) { - if (shape == null) - { - throw new ArgumentNullException(nameof(shape)); + if( shape == null ) { + throw new ArgumentNullException( nameof( shape ) ); } - if (texCoord == null) - { - throw new ArgumentNullException(nameof(texCoord)); + if( texCoord == null ) { + throw new ArgumentNullException( nameof( texCoord ) ); } - if (shape.VertexCount > texCoord.Length) - { - throw new ArgumentException(paramName: nameof(texCoord), message: "Amount of texture coordination is too less"); + if( shape.VertexCount > texCoord.Length ) { + throw new ArgumentException( + paramName: nameof( texCoord ), + message: "Amount of texture coordination is too less" ); } - _texture = new TextureProvider(texture, texCoord); + _texture = new TextureProvider( texture, texCoord ); } - public vec4d[] VertexArray => _shape.VertexStream; + public Vec4[] VertexArray => _shape.VertexStream; public Image TextureImage { get => _texture.ProvideImage(); - internal set => _texture.ReadImage(value); + internal set => _texture.ReadImage( value ); } public ReadOnlySpan MeshIndices => _shape.VertexIndices; - public ReadOnlySpan TextureCoord => MemoryMarshal.Cast(_texture.TextureCoordinate); + public ReadOnlySpan TextureCoord => MemoryMarshal.Cast( + _texture.TextureCoordinate ); - public PlainGeometryMesh Resize(PlainGeometry newShape) + public PlainGeometryMesh Resize( PlainGeometry newShape ) { - return new PlainGeometryMesh(newShape, _texture); + return new PlainGeometryMesh( newShape, _texture ); } } diff --git a/源代码/StgSharp/Graphics/RenderStream.cs b/源代码/StgSharp/Graphics/RenderStream.cs index fc72d233..574a72a4 100644 --- a/源代码/StgSharp/Graphics/RenderStream.cs +++ b/源代码/StgSharp/Graphics/RenderStream.cs @@ -29,15 +29,16 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- using StgSharp.Graphics.OpenGL; -using StgSharp.Timing; - using StgSharp.Math; + using StgSharp.MVVM; using StgSharp.MVVM.View; +using StgSharp.Timing; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -57,12 +58,6 @@ namespace StgSharp.Graphics public (int width, int height) Size { get => (Width, Height); - internal set - { - primeArgs.Height = value.width; - primeArgs.Width = value.height; - InternalIO.glfwSetWindowSize(this.CanvasHandle, Width, Height); - } } public abstract bool IsContextSharable @@ -73,13 +68,11 @@ namespace StgSharp.Graphics public int Height { get => primeArgs.Height; - internal set { primeArgs.Height = value; } } public int Width { get => primeArgs.Width; - internal set { primeArgs.Width = value; } } public IntPtr Monitor @@ -93,21 +86,18 @@ namespace StgSharp.Graphics get => primeArgs.Name; } - protected bool IsWaitingUserEvent - { - get => primeArgs.IsWaitingEvent; - } + public Vec2 GlobalCoordSize => (( Width * 1.0f ) / _coordStretch.x, ( Height * 1.0f ) / _coordStretch.y); - public vec2d GlobalCoordSize => ((Width * 1.0f) / _coordStretch.x, (Height * 1.0f) / _coordStretch.y); - - public ViewPort Port + public ViewPort BindedViewPortContext { get => primeArgs; internal set => primeArgs = value; } - internal IntPtr CanvasHandle { get => primeArgs.ViewPortID; } - + internal IntPtr CanvasHandle + { + get => primeArgs.ViewPortID; + } internal IntPtr ContextHandle { @@ -144,19 +134,26 @@ namespace StgSharp.Graphics /// /// Set the size limit of current form /// - /// Minimum width of current form - /// Minimum height of current form - /// Maximum width of current form - /// Maximum height of current form - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public abstract void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight); + /// Minimum width of current form + /// Minimum height of current form + /// Maximum width of current form + /// Maximum height of current form + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public abstract void SetSizeLimit( + int minWidth, + int minHeight, + int maxWidth, + int maxHeight ); - public static TTarget ShareContextFrom(TSource source) - where TSource : RenderStream - where TTarget : RenderStream, new() + public static TTarget ShareContextFrom( + [NotNull]TSource source ) + where TSource: RenderStream + where TTarget: RenderStream, new() { TTarget target = new TTarget(); - target.Initialize(source.Port, source._coordStretch, source._timeProvider); + target.Initialize( + source.BindedViewPortContext, source._coordStretch, + source._timeProvider ); return target; } @@ -166,38 +163,52 @@ namespace StgSharp.Graphics InternalIO.glfwPollEvents(); } - protected internal void SwapBuffers() + private protected void SwapBuffers() { - InternalIO.glfwSwapBuffers(CanvasHandle); + InternalIO.glfwSwapBuffers( CanvasHandle ); } + /**/ + #region native camera operation - protected abstract void NativeCameraViewRange(Radius fieldOfRange, vec2d offset, (float frontDepth, float backDepth) viewDepth); - protected abstract void NativeCameraViewTarget(vec3d position, vec3d direction, vec3d up); + + protected abstract void NativeCameraViewRange( + Radius fieldOfRange, + Vec2 offset, + (float frontDepth, float backDepth) viewDepth ); + + protected abstract void NativeCameraViewTarget( + Vec3 position, + Vec3 direction, + Vec3 up ); /// - /// Get (TView is ) uniform from a shader. - /// This uniform will be used as projection matrix of this camera. - /// Additionally, for multi-shader rendering, each shader requires a uniform, - /// so do not ignore return value of this method. + /// Get (TView is ) uniform from a shader. + /// This uniform will be used as projection matrix of this camera. Additionally, for multi- + /// shader rendering, each shader requires a uniform, so do not ignore return value of this + /// method. /// - /// Shader using this camera - /// ContextName of projection camera named in shader + /// Shader using this camera + /// ContextName of projection camera named in shader /// - /// (TView is ) representing - /// projection matrix in shader program. + /// (TView is ) representing projection + /// matrix in shader program. /// - protected abstract Uniform NativeCameraUniform(ShaderProgram source, string name); + protected abstract Uniform NativeCameraUniform( + ShaderProgram source, + string name ); + #endregion #region internal operation - internal abstract void Draw(); - public void Initialize(ViewPort v, (int, int, int) unitCubeSize, TimeSpanProvider timeProvider) + public void Initialize( + ViewPort v, + (int, int, int) unitCubeSize, + TimeSpanProvider timeProvider ) { - if (v == null) - { - throw new ArgumentNullException(nameof(v)); + if( v == null ) { + throw new ArgumentNullException( nameof( v ) ); } primeArgs = v; this._timeProvider = timeProvider; @@ -205,30 +216,42 @@ namespace StgSharp.Graphics nativeCamera = new Camera(); PlatformSpecifiedInitialize(); CustomizeInit(); + InternalIO.glfwMakeContextCurrent( IntPtr.Zero ); } internal abstract void PlatformSpecifiedInitialize(); internal abstract void Terminate(); + #endregion #region public operation + protected abstract void CustomizeDeinit(); + protected abstract void CustomizeInit(); - protected abstract void Main(); + /// + /// Marking the start of current render operations, and set this renser context as current. + /// + public abstract void RenderStart(); + /// + /// Marking the end of current render operations, and release the binding of this renser + /// context to current, making it available for another thread as current. + /// + public abstract void RenderEnd(); #endregion #region public resource generator - protected abstract Shader CreateShaderSegment(ShaderType type, int count); + protected abstract Shader CreateShaderSegment( + ShaderType type, + int count ); + protected abstract ShaderProgram CreateShaderProgram(); - #endregion - - + #endregion } - } diff --git a/源代码/StgSharp/Graphics/ShaderEdit/ShaderGenerator.cs b/源代码/StgSharp/Graphics/ShaderEdit/ShaderGenerator.cs index ed7e7a97..bfec23b0 100644 --- a/源代码/StgSharp/Graphics/ShaderEdit/ShaderGenerator.cs +++ b/源代码/StgSharp/Graphics/ShaderEdit/ShaderGenerator.cs @@ -48,10 +48,13 @@ namespace StgSharp.Graphics.ShaderEdit private List codeList; private List usedShaderFunctions; - public Uniform DefineUniform(string name, int index) where T : struct + public Uniform DefineUniform( string name, int index ) + where T: struct { - ShaderParameter p = new ShaderParameter(name, ShaderParameter.TypeMarshal()); - uniformDefine.Add(index, p); + ShaderParameter p = new ShaderParameter( + name, ShaderParameter.TypeMarshal() ); + uniformDefine.Add( index, p ); + //return new Uniform(); throw new NotImplementedException(); } @@ -68,38 +71,39 @@ namespace StgSharp.Graphics.ShaderEdit public int ParameterCount => inputList.Count; - public void EmitCall(ShaderFunction function, ShaderParameter outPut, params ShaderParameter[] inputParams) + public void EmitCall( + ShaderFunction function, + ShaderParameter outPut, + params ShaderParameter[] inputParams ) { - if (inputParams.Length != function.ParameterCount) - { + if( inputParams.Length != function.ParameterCount ) { // Param list length not equal - throw new ArgumentException("Provided parameters does not match function's parameter list."); + throw new ArgumentException( + "Provided parameters does not match function's parameter list." ); } - if (!ShaderParameter.IsSameType(outPut, function.outPut)) - { + if( !ShaderParameter.IsSameType( outPut, function.outPut ) ) { // Type of returning value not qual - throw new Exception("Provided parameters does not match function's parameter list."); + throw new Exception( + "Provided parameters does not match function's parameter list." ); } - for (int i = 0; i < inputParams.Length; i++) - { - if (!ShaderParameter.IsSameType(function.inputList[i], inputParams[i])) - { + for( int i = 0; i < inputParams.Length; i++ ) { + if( !ShaderParameter.IsSameType( + function.inputList[ i ], inputParams[ i ] ) ) { // Input type not match - throw new Exception("Provided parameters does not match function's parameter list."); + throw new Exception( + "Provided parameters does not match function's parameter list." ); } } string codeLine = string.Empty; // adding a line like " outvalue = Func(input1, input2,...); " - if (outPut != ShaderParameter.Void) - { + if( outPut != ShaderParameter.Void ) { codeLine += $"{outPut.name} = "; } codeLine += $"{function.name}("; - foreach (ShaderParameter inputParam in inputParams) - { + foreach( ShaderParameter inputParam in inputParams ) { codeLine += inputParam.name; } codeLine += ");\n"; - codeList.Add(codeLine); + codeList.Add( codeLine ); } } @@ -107,34 +111,33 @@ namespace StgSharp.Graphics.ShaderEdit public class ShaderParameter { - public static readonly ShaderParameter Void = new ShaderParameter(string.Empty, InternalShaderType.Void); + public static readonly ShaderParameter Void = new ShaderParameter( + string.Empty, InternalShaderType.Void ); internal readonly bool isReadOnly; internal readonly InternalShaderType type; internal readonly string name; - public ShaderParameter(string name, InternalShaderType type) + public ShaderParameter( string name, InternalShaderType type ) { this.name = name; this.type = type; isReadOnly = false; } - public static bool IsSameType(ShaderParameter param1, ShaderParameter param2) + public static bool IsSameType( + ShaderParameter param1, + ShaderParameter param2 ) { - if (param1.type != InternalShaderType.Struct) - { + if( param1.type != InternalShaderType.Struct ) { return param1.type == param2.type; - } - else - { - throw new Exception("Struct is currently not supported."); + } else { + throw new Exception( "Struct is currently not supported." ); } } - public static InternalShaderType TypeMarshal() where T : struct + public static InternalShaderType TypeMarshal() where T: struct { - switch (Type.GetTypeCode(typeof(T))) - { + switch( Type.GetTypeCode( typeof( T ) ) ) { case TypeCode.Single: return InternalShaderType.Float; case TypeCode.Double: @@ -146,8 +149,7 @@ namespace StgSharp.Graphics.ShaderEdit default: break; } - switch (typeof(T).Name) - { + switch( typeof( T ).Name ) { case "vec4d": return InternalShaderType.Vector4; case "Matrix2x2": @@ -169,7 +171,8 @@ namespace StgSharp.Graphics.ShaderEdit case "Matrix4x4": return InternalShaderType.Matrix4x4; default: - throw new ArgumentException("Not supported shader data type."); + throw new ArgumentException( + "Not supported shader data type." ); } } @@ -178,14 +181,27 @@ namespace StgSharp.Graphics.ShaderEdit public enum InternalShaderType { #pragma warning disable CS1591 - Struct, Void, - Int, UInt, - Float, Double, - Vector2, Vector3, Vector4, - VectorD2, VectorD3, VectorD4, - Matrix2x2, Matrix2x3, Matrix2x4, - Matrix3x2, Matrix3x3, Matrix3x4, - Matrix4x2, Matrix4x3, Matrix4x4, + Struct, + Void, + Int, + UInt, + Float, + Double, + Vector2, + Vector3, + Vector4, + VectorD2, + VectorD3, + VectorD4, + Matrix2x2, + Matrix2x3, + Matrix2x4, + Matrix3x2, + Matrix3x3, + Matrix3x4, + Matrix4x2, + Matrix4x3, + Matrix4x4, #pragma warning restore CS1591 } } \ No newline at end of file diff --git a/源代码/StgSharp/Graphics/ShaderEdit/ShaderStruct.cs b/源代码/StgSharp/Graphics/ShaderEdit/ShaderStruct.cs index cd64c87a..eecd6187 100644 --- a/源代码/StgSharp/Graphics/ShaderEdit/ShaderStruct.cs +++ b/源代码/StgSharp/Graphics/ShaderEdit/ShaderStruct.cs @@ -53,47 +53,42 @@ namespace StgSharp.Graphics.ShaderEdit internal ShaderStruct() { } - public ShaderStruct(params (GlHandle, ShaderStructMember)[] uniformPairs) + public ShaderStruct( + params (GlHandle, ShaderStructMember)[] uniformPairs ) { uniformPair = new Dictionary(); - if (uniformPairs.Length == 0) - { + if( uniformPairs.Length == 0 ) { return; } - foreach ((GlHandle, ShaderStructMember) item in uniformPairs) - { - uniformPair.Add(item.Item1, item.Item2); + foreach( (GlHandle, ShaderStructMember) item in uniformPairs ) { + uniformPair.Add( item.Item1, item.Item2 ); } - } - public unsafe void SetAllUniforms() { - OpenglContext* gl = (OpenglContext*)OpenGL.OpenGLFunction.CurrentGL.ContextHandle; - foreach (KeyValuePair uniform in uniformPair) - { + OpenglContext* gl = ( OpenglContext* )OpenGL.OpenGLFunction.CurrentGL.ContextHandle; + foreach( KeyValuePair uniform in uniformPair ) { int id = uniform.Key.SignedValue; ShaderStructMember s = uniform.Value; - switch (s.type) - { + switch( s.type ) { case InternalShaderType.Struct: throw new ArgumentException( - "Incorrect type \"Struct\" defined in this self define type"); + "Incorrect type \"Struct\" defined in this self define type" ); case InternalShaderType.Void: throw new ArgumentException( - "Incorrect type \"Void\" defined in this self define type"); + "Incorrect type \"Void\" defined in this self define type" ); case InternalShaderType.Float: - gl->glUniform1f(id, (float)s.value); + gl->glUniform1f( id, ( float )s.value ); break; case InternalShaderType.Int: - gl->glUniform1f(id, (int)s.value); + gl->glUniform1f( id, ( int )s.value ); break; default: throw new NotImplementedException(); throw new ArgumentException( - "Incorrect type \"Unknown\" defined in this self define type"); + "Incorrect type \"Unknown\" defined in this self define type" ); } } }//------------------------------------ End of Class --------------------------------------- diff --git a/源代码/StgSharp/Graphics/TextureBufferImage.cs b/源代码/StgSharp/Graphics/TextureBufferImage.cs new file mode 100644 index 00000000..2625c774 --- /dev/null +++ b/源代码/StgSharp/Graphics/TextureBufferImage.cs @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TextureBufferImage.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the ¡°Software¡±), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED ¡°AS IS¡±, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- + +using StgSharp; +using StgSharp.Graphics.OpenGL; +using StgSharp.Math; + +using System; + +namespace StgSharp.Graphics +{ + public class TextureImage : IImageProvider + { + + private byte[] _data; + private ImageInfo _imageInfo; + private int _pixelUpdateCount = 0; + + public TextureImage( + Vec2 size, + ImageChannel channel, + PixelChannelLayout layout, + int bufferSize ) + { + this._imageInfo = new ImageInfo + { + Width = ( int )size.X, + Height = ( int )size.Y, + Channel = channel, + pixelLayout = layout, + }; + if( bufferSize < _imageInfo.Width * _imageInfo.Height * GlHelper.GetPixelSize( + layout, channel ) ) { + throw new OverflowException( + "Size of data buffer is smaller than default image size." ); + } + _data = new byte[bufferSize]; + } + + public int Width + { + get => _imageInfo.Width; + internal set => _imageInfo.Width = value; + } + + public int Height + { + get => _imageInfo.Height; + internal set => _imageInfo.Height = value; + } + + public Image ProvideImage() + { + return Image.FromMemory( _imageInfo, _data, _pixelUpdateCount ); + } + + public void Resize( int width, int height ) + { + if( _data.Length < width * height * GlHelper.GetPixelSize( + _imageInfo.pixelLayout, _imageInfo.Channel ) ) { + throw new OverflowException( + "Size of image is larger than capacity of sata buffer." ); + } + Width = width; + Height = height; + _pixelUpdateCount++; + } + + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Graphics/TexturePipeline.cs b/源代码/StgSharp/Graphics/TexturePipeline.cs index a205733d..ace7ca87 100644 --- a/源代码/StgSharp/Graphics/TexturePipeline.cs +++ b/源代码/StgSharp/Graphics/TexturePipeline.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using StgSharp.BluePrint; using System; @@ -45,7 +44,7 @@ namespace StgSharp.Graphics private Image _value; - public TexturePipeline(Image i) + public TexturePipeline( Image i ) { _value = i; } @@ -53,7 +52,8 @@ namespace StgSharp.Graphics public new Image Value { get => _value; - set => _value = value ?? throw new ArgumentNullException(nameof(value)); + set => _value = value ?? + throw new ArgumentNullException( nameof( value ) ); } } diff --git a/源代码/StgSharp/Graphics/TextureProvider.cs b/源代码/StgSharp/Graphics/TextureProvider.cs index 47839799..5baf7f60 100644 --- a/源代码/StgSharp/Graphics/TextureProvider.cs +++ b/源代码/StgSharp/Graphics/TextureProvider.cs @@ -40,23 +40,23 @@ namespace StgSharp.Graphics public class TextureProvider : IImageProvider { - private vec2d[] _texCoord; + private Vec2[] _texCoord; private Image _tex; - public TextureProvider(Image image, vec2d[] coord) + public TextureProvider( Image image, Vec2[] coord ) { _tex = image; _texCoord = coord; } - public ref vec2d this[int index] + public ref Vec2 this[ int index ] { - get => ref _texCoord[index]; + get => ref _texCoord[ index ]; } - public Span TextureCoordinate + public Span TextureCoordinate { - get => new Span(_texCoord); + get => new Span( _texCoord ); } public Image ProvideImage() @@ -64,26 +64,22 @@ namespace StgSharp.Graphics return _tex; } - public void ReadImage(IImageProvider provider) + public void ReadImage( IImageProvider provider ) { _tex = provider.ProvideImage(); } - public void UpdateFromImage(Image i) + public void UpdateFromImage( Image i ) { - if (i == _tex) - { + if( i == _tex ) { return; } - if (i.Size == _tex.Size) - { + if( i.Size == _tex.Size ) { _tex = i; + } else { + throw new ArgumentException( + $"Size of {nameof(i)} does not equals to current image." ); } - else - { - throw new ArgumentException($"Size of {nameof(i)} does not equals to current image."); - } - } } diff --git a/源代码/StgSharp/Graphics/Vulkan/vkHandle.cs b/源代码/StgSharp/Graphics/Vulkan/vkHandle.cs new file mode 100644 index 00000000..5396a1f7 --- /dev/null +++ b/源代码/StgSharp/Graphics/Vulkan/vkHandle.cs @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="vkHandle.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.Vulkan +{ + [StructLayout( LayoutKind.Explicit, Size = 8 )] + public struct vkHandle + { + + [FieldOffset( 0 )] public int SignedHalfValue; + [FieldOffset( 0 )] public IntPtr Handle; + [FieldOffset( 0 )] public IntPtr UnsignedHandle; + [FieldOffset( 0 )] public uint HalfValue; + + } +} diff --git a/源代码/StgSharp/Graphics/framework.cs b/源代码/StgSharp/Graphics/framework.cs index 77b4217c..9692f3f5 100644 --- a/源代码/StgSharp/Graphics/framework.cs +++ b/源代码/StgSharp/Graphics/framework.cs @@ -32,6 +32,7 @@ using StgSharp.Graphics; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -45,239 +46,459 @@ namespace StgSharp { internal partial class InternalIO { + #region api call - [DllImport(SSC_libName, EntryPoint = "glfwInit")] internal static extern unsafe int glfwInit(); + [DllImport( SSC_libName, EntryPoint = "glfwInit" )] internal static extern unsafe int glfwInit( + ); - [DllImport(SSC_libName, EntryPoint = "glfwTerminate")] internal static extern unsafe void glfwTerminate(); + [DllImport( SSC_libName, EntryPoint = "glfwTerminate" )] internal static extern unsafe void glfwTerminate( + ); - [DllImport(SSC_libName, EntryPoint = "glfwInitHint")] internal static extern unsafe void glfwInitHint(int hint, int value); + [DllImport( SSC_libName, EntryPoint = "glfwInitHint" )] internal static extern unsafe void glfwInitHint( + int hint, + int value ); - [DllImport(SSC_libName, EntryPoint = "glfwGetVersion")] internal static extern unsafe void glfwGetVersion(int* major, int* minor, int* rev); + [DllImport( SSC_libName, EntryPoint = "glfwGetVersion" )] internal static extern unsafe void glfwGetVersion( + int* major, + int* minor, + int* rev ); - [DllImport(SSC_libName, EntryPoint = "glfwGetVersionString")] internal static extern unsafe byte* glfwGetVersionString(); + [DllImport( SSC_libName, EntryPoint = "glfwGetVersionString" )] internal static extern unsafe byte* glfwGetVersionString( + ); - [DllImport(SSC_libName, EntryPoint = "glfwGetError")] internal static extern unsafe int glfwGetError(byte** description); + [DllImport( SSC_libName, EntryPoint = "glfwGetError" )] internal static extern unsafe int glfwGetError( + byte** description ); - [DllImport(SSC_libName, EntryPoint = "glfwSetErrorCallback")] internal static extern unsafe GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback); + [DllImport( SSC_libName, EntryPoint = "glfwSetErrorCallback" )] internal static extern unsafe GLFWerrorfun glfwSetErrorCallback( + GLFWerrorfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitors")] internal static extern unsafe IntPtr* glfwGetMonitors(int* count); + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitors" )] internal static extern unsafe IntPtr* glfwGetMonitors( + int* count ); - [DllImport(SSC_libName, EntryPoint = "glfwGetPrimaryMonitor")] internal static extern unsafe IntPtr glfwGetPrimaryMonitor(); + [DllImport( SSC_libName, EntryPoint = "glfwGetPrimaryMonitor" )] internal static extern unsafe IntPtr glfwGetPrimaryMonitor( + ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitorPos")] internal static extern unsafe void glfwGetMonitorPos(IntPtr monitor, int* xpos, int* ypos); + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitorPos" )] internal static extern unsafe void glfwGetMonitorPos( + IntPtr monitor, + int* xpos, + int* ypos ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitorWorkarea")] internal static extern unsafe void glfwGetMonitorWorkarea(IntPtr monitor, int* xpos, int* ypos, int* width, int* height); + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitorWorkarea" )] internal static extern unsafe void glfwGetMonitorWorkarea( + IntPtr monitor, + int* xpos, + int* ypos, + int* width, + int* height ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitorPhysicalSize")] internal static extern unsafe void glfwGetMonitorPhysicalSize(IntPtr monitor, int* widthMM, int* heightMM); + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitorPhysicalSize" )] internal static extern unsafe void glfwGetMonitorPhysicalSize( + IntPtr monitor, + int* widthMM, + int* heightMM ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitorContentScale")] internal static extern unsafe void glfwGetMonitorContentScale(IntPtr monitor, float* xscale, float* yscale); + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitorContentScale" )] internal static extern unsafe void glfwGetMonitorContentScale( + IntPtr monitor, + float* xscale, + float* yscale ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitorName" )] internal static extern unsafe byte* glfwGetMonitorName( + IntPtr monitor ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetMonitorUserPointer" )] internal static extern unsafe void glfwSetMonitorUserPointer( + IntPtr monitor, + void* pointer ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetMonitorUserPointer" )] internal static extern unsafe void* glfwGetMonitorUserPointer( + IntPtr monitor ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetMonitorCallback" )] internal static extern unsafe GLFWmonitorfun glfwSetMonitorCallback( + GLFWmonitorfun callback ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetVideoModes" )] internal static extern unsafe glfwVideomode* glfwGetVideoModes( + IntPtr monitor, + int* count ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetVideoMode" )] internal static extern unsafe glfwVideomode* glfwGetVideoMode( + IntPtr monitor ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetGamma" )] internal static extern unsafe void glfwSetGamma( + IntPtr monitor, + float gamma ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetGammaRamp" )] internal static extern unsafe glfwGammaramp* glfwGetGammaRamp( + IntPtr monitor ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetGammaRamp" )] internal static extern unsafe void glfwSetGammaRamp( + IntPtr monitor, + glfwGammaramp* ramp ); + + [DllImport( SSC_libName, EntryPoint = "glfwDefaultWindowHints" )] internal static extern unsafe void glfwDefaultWindowHints( + ); + + [DllImport( SSC_libName, EntryPoint = "glfwWindowHint" )] internal static extern unsafe void glfwWindowHint( + int hint, + int value ); + + [DllImport( SSC_libName, EntryPoint = "glfwWindowHintString" )] internal static extern unsafe void glfwWindowHintString( + int hint, + byte* value ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitorName")] internal static extern unsafe byte* glfwGetMonitorName(IntPtr monitor); + [DllImport( SSC_libName, EntryPoint = "glfwCreateWindow" )] internal static extern unsafe IntPtr glfwCreateWindow( + int width, + int height, + byte[] title, + IntPtr monitor, + IntPtr share ); - [DllImport(SSC_libName, EntryPoint = "glfwSetMonitorUserPointer")] internal static extern unsafe void glfwSetMonitorUserPointer(IntPtr monitor, void* pointer); + [DllImport( SSC_libName, EntryPoint = "glfwDestroyWindow" )] internal static extern unsafe void glfwDestroyWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwWindowShouldClose" )] internal static extern unsafe int glfwWindowShouldClose( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowShouldClose" )] internal static extern unsafe void glfwSetWindowShouldClose( + IntPtr window, + int value ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowTitle" )] internal static extern unsafe void glfwSetWindowTitle( + IntPtr window, + byte* title ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowIcon" )] internal static extern unsafe void glfwSetWindowIcon( + IntPtr window, + int count, + GLFWimage* images ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowPos" )] internal static extern unsafe void glfwGetWindowPos( + IntPtr window, + int* xpos, + int* ypos ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowPos" )] internal static extern unsafe void glfwSetWindowPos( + IntPtr window, + int xpos, + int ypos ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowSize" )] internal static extern unsafe void glfwGetWindowSize( + IntPtr window, + int* width, + int* height ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowSizeLimits" )] internal static extern unsafe void glfwSetWindowSizeLimits( + IntPtr window, + int minwidth, + int minheight, + int maxwidth, + int maxheight ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowAspectRatio" )] internal static extern unsafe void glfwSetWindowAspectRatio( + IntPtr window, + int numer, + int denom ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowSize" )] internal static extern unsafe void glfwSetWindowSize( + IntPtr window, + int width, + int height ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetFramebufferSize" )] internal static extern unsafe void glfwGetFramebufferSize( + IntPtr window, + int* width, + int* height ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowFrameSize" )] internal static extern unsafe void glfwGetWindowFrameSize( + IntPtr window, + int* left, + int* top, + int* right, + int* bottom ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowContentScale" )] internal static extern unsafe void glfwGetWindowContentScale( + IntPtr window, + float* xscale, + float* yscale ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowOpacity" )] internal static extern unsafe float glfwGetWindowOpacity( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowOpacity" )] internal static extern unsafe void glfwSetWindowOpacity( + IntPtr window, + float opacity ); + + [DllImport( SSC_libName, EntryPoint = "glfwIconifyWindow" )] internal static extern unsafe void glfwIconifyWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwRestoreWindow" )] internal static extern unsafe void glfwRestoreWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwMaximizeWindow" )] internal static extern unsafe void glfwMaximizeWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwShowWindow" )] internal static extern unsafe void glfwShowWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwHideWindow" )] internal static extern unsafe void glfwHideWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwFocusWindow" )] internal static extern unsafe void glfwFocusWindow( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwRequestWindowAttention" )] internal static extern unsafe void glfwRequestWindowAttention( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowMonitor" )] internal static extern unsafe IntPtr glfwGetWindowMonitor( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowMonitor" )] internal static extern unsafe void glfwSetWindowMonitor( + IntPtr window, + IntPtr monitor, + int xpos, + int ypos, + int width, + int height, + int refreshRate ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowAttrib" )] internal static extern unsafe int glfwGetWindowAttrib( + IntPtr window, + int attrib ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowAttrib" )] internal static extern unsafe void glfwSetWindowAttrib( + IntPtr window, + int attrib, + int value ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowUserPointer" )] internal static extern unsafe void glfwSetWindowUserPointer( + IntPtr window, + void* pointer ); + + [DllImport( SSC_libName, EntryPoint = "glfwGetWindowUserPointer" )] internal static extern unsafe void* glfwGetWindowUserPointer( + IntPtr window ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowPosCallback" )] internal static extern unsafe GLFWwindowposfun glfwSetWindowPosCallback( + IntPtr window, + IntPtr callback ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowSizeCallback" )] internal static extern unsafe GLFWwindowsizefun glfwSetWindowSizeCallback( + IntPtr window, + GLFWwindowsizefun callback ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowCloseCallback" )] internal static extern unsafe GLFWwindowclosefun glfwSetWindowCloseCallback( + IntPtr window, + GLFWwindowclosefun callback ); + + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowRefreshCallback" )] internal static extern unsafe GLFWwindowrefreshfun glfwSetWindowRefreshCallback( + IntPtr window, + GLFWwindowrefreshfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetMonitorUserPointer")] internal static extern unsafe void* glfwGetMonitorUserPointer(IntPtr monitor); + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowFocusCallback" )] internal static extern unsafe GLFWwindowfocusfun glfwSetWindowFocusCallback( + IntPtr window, + GLFWwindowfocusfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwSetMonitorCallback")] internal static extern unsafe GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowIconifyCallback" )] internal static extern unsafe GLFWwindowiconifyfun glfwSetWindowIconifyCallback( + IntPtr window, + GLFWwindowiconifyfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetVideoModes")] internal static extern unsafe glfwVideomode* glfwGetVideoModes(IntPtr monitor, int* count); + [DllImport( SSC_libName, EntryPoint = "glfwSetWindowMaximizeCallback" )] internal static extern unsafe GLFWwindowmaximizefun glfwSetWindowMaximizeCallback( + IntPtr window, + GLFWwindowmaximizefun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetVideoMode")] internal static extern unsafe glfwVideomode* glfwGetVideoMode(IntPtr monitor); + [DllImport( SSC_libName, EntryPoint = "glfwSetFramebufferSizeCallback" )] internal static extern unsafe FrameBufferSizeHandler glfwSetFramebufferSizeCallback( + IntPtr window, + IntPtr callback ); - [DllImport(SSC_libName, EntryPoint = "glfwSetGamma")] internal static extern unsafe void glfwSetGamma(IntPtr monitor, float gamma); + [DllImport( + SSC_libName, + EntryPoint = "glfwSetWindowContentScaleCallback" )] internal static extern unsafe GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback( + IntPtr window, + GLFWwindowcontentscalefun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetGammaRamp")] internal static extern unsafe glfwGammaramp* glfwGetGammaRamp(IntPtr monitor); + [DllImport( SSC_libName, EntryPoint = "glfwPollEvents" )] internal static extern unsafe void glfwPollEvents( + ); - [DllImport(SSC_libName, EntryPoint = "glfwSetGammaRamp")] internal static extern unsafe void glfwSetGammaRamp(IntPtr monitor, glfwGammaramp* ramp); + [DllImport( SSC_libName, EntryPoint = "glfwWaitEvents" )] internal static extern unsafe void glfwWaitEvents( + ); - [DllImport(SSC_libName, EntryPoint = "glfwDefaultWindowHints")] internal static extern unsafe void glfwDefaultWindowHints(); + [DllImport( SSC_libName, EntryPoint = "glfwWaitEventsTimeout" )] internal static extern unsafe void glfwWaitEventsTimeout( + double timeout ); - [DllImport(SSC_libName, EntryPoint = "glfwWindowHint")] internal static extern unsafe void glfwWindowHint(int hint, int value); + [DllImport( SSC_libName, EntryPoint = "glfwPostEmptyEvent" )] internal static extern unsafe void glfwPostEmptyEvent( + ); - [DllImport(SSC_libName, EntryPoint = "glfwWindowHintString")] internal static extern unsafe void glfwWindowHintString(int hint, byte* value); + [DllImport( SSC_libName, EntryPoint = "glfwGetInputMode" )] internal static extern unsafe int glfwGetInputMode( + IntPtr window, + int mode ); - [DllImport(SSC_libName, EntryPoint = "glfwCreateWindow")] internal static extern unsafe IntPtr glfwCreateWindow(int width, int height, byte[] title, IntPtr monitor, IntPtr share); + [DllImport( SSC_libName, EntryPoint = "glfwSetInputMode" )] internal static extern unsafe void glfwSetInputMode( + IntPtr window, + int mode, + int value ); - [DllImport(SSC_libName, EntryPoint = "glfwDestroyWindow")] internal static extern unsafe void glfwDestroyWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwRawMouseMotionSupported" )] internal static extern unsafe int glfwRawMouseMotionSupported( + ); - [DllImport(SSC_libName, EntryPoint = "glfwWindowShouldClose")] internal static extern unsafe int glfwWindowShouldClose(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwGetKeyName" )] internal static extern unsafe byte* glfwGetKeyName( + int key, + int scancode ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowShouldClose")] internal static extern unsafe void glfwSetWindowShouldClose(IntPtr window, int value); + [DllImport( SSC_libName, EntryPoint = "glfwGetKeyScancode" )] internal static extern unsafe int glfwGetKeyScancode( + int key ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowTitle")] internal static extern unsafe void glfwSetWindowTitle(IntPtr window, byte* title); + [DllImport( SSC_libName, EntryPoint = "glfwGetKey" )] internal static extern unsafe KeyStatus glfwGetKey( + IntPtr window, + int key ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowIcon")] internal static extern unsafe void glfwSetWindowIcon(IntPtr window, int count, GLFWimage* images); + [DllImport( SSC_libName, EntryPoint = "glfwGetMouseButton" )] internal static extern unsafe int glfwGetMouseButton( + IntPtr window, + int button ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowPos")] internal static extern unsafe void glfwGetWindowPos(IntPtr window, int* xpos, int* ypos); + [DllImport( SSC_libName, EntryPoint = "glfwGetCursorPos" )] internal static extern unsafe void glfwGetCursorPos( + IntPtr window, + double* xpos, + double* ypos ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowPos")] internal static extern unsafe void glfwSetWindowPos(IntPtr window, int xpos, int ypos); + [DllImport( SSC_libName, EntryPoint = "glfwSetCursorPos" )] internal static extern unsafe void glfwSetCursorPos( + IntPtr window, + double xpos, + double ypos ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowSize")] internal static extern unsafe void glfwGetWindowSize(IntPtr window, int* width, int* height); + [DllImport( SSC_libName, EntryPoint = "glfwCreateCursor" )] internal static extern unsafe GLFWcursor* glfwCreateCursor( + GLFWimage* image, + int xhot, + int yhot ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowSizeLimits")] internal static extern unsafe void glfwSetWindowSizeLimits(IntPtr window, int minwidth, int minheight, int maxwidth, int maxheight); + [DllImport( SSC_libName, EntryPoint = "glfwCreateStandardCursor" )] internal static extern unsafe GLFWcursor* glfwCreateStandardCursor( + int shape ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowAspectRatio")] internal static extern unsafe void glfwSetWindowAspectRatio(IntPtr window, int numer, int denom); + [DllImport( SSC_libName, EntryPoint = "glfwDestroyCursor" )] internal static extern unsafe void glfwDestroyCursor( + GLFWcursor* cursor ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowSize")] internal static extern unsafe void glfwSetWindowSize(IntPtr window, int width, int height); + [DllImport( SSC_libName, EntryPoint = "glfwSetCursor" )] internal static extern unsafe void glfwSetCursor( + IntPtr window, + GLFWcursor* cursor ); - [DllImport(SSC_libName, EntryPoint = "glfwGetFramebufferSize")] internal static extern unsafe void glfwGetFramebufferSize(IntPtr window, int* width, int* height); + [DllImport( SSC_libName, EntryPoint = "glfwSetKeyCallback" )] internal static extern unsafe GLFWkeyfun glfwSetKeyCallback( + IntPtr window, + GLFWkeyfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowFrameSize")] internal static extern unsafe void glfwGetWindowFrameSize(IntPtr window, int* left, int* top, int* right, int* bottom); + [DllImport( SSC_libName, EntryPoint = "glfwSetCharCallback" )] internal static extern unsafe GLFWcharfun glfwSetCharCallback( + IntPtr window, + GLFWcharfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowContentScale")] internal static extern unsafe void glfwGetWindowContentScale(IntPtr window, float* xscale, float* yscale); + [DllImport( SSC_libName, EntryPoint = "glfwSetCharModsCallback" )] internal static extern unsafe GLFWcharmodsfun glfwSetCharModsCallback( + IntPtr window, + GLFWcharmodsfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowOpacity")] internal static extern unsafe float glfwGetWindowOpacity(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwSetMouseButtonCallback" )] internal static extern unsafe GLFWmousebuttonfun glfwSetMouseButtonCallback( + IntPtr window, + GLFWmousebuttonfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowOpacity")] internal static extern unsafe void glfwSetWindowOpacity(IntPtr window, float opacity); + [DllImport( SSC_libName, EntryPoint = "glfwSetCursorPosCallback" )] internal static extern unsafe GLFWcursorposfun glfwSetCursorPosCallback( + IntPtr window, + GLFWcursorposfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwIconifyWindow")] internal static extern unsafe void glfwIconifyWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwSetCursorEnterCallback" )] internal static extern unsafe GLFWcursorenterfun glfwSetCursorEnterCallback( + IntPtr window, + GLFWcursorenterfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwRestoreWindow")] internal static extern unsafe void glfwRestoreWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwSetScrollCallback" )] internal static extern unsafe GLFWscrollfun glfwSetScrollCallback( + IntPtr window, + GLFWscrollfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwMaximizeWindow")] internal static extern unsafe void glfwMaximizeWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwSetDropCallback" )] internal static extern unsafe GLFWdropfun glfwSetDropCallback( + IntPtr window, + GLFWdropfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwShowWindow")] internal static extern unsafe void glfwShowWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwJoystickPresent" )] internal static extern unsafe int glfwJoystickPresent( + int jid ); - [DllImport(SSC_libName, EntryPoint = "glfwHideWindow")] internal static extern unsafe void glfwHideWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwGetJoystickAxes" )] internal static extern unsafe float* glfwGetJoystickAxes( + int jid, + int* count ); - [DllImport(SSC_libName, EntryPoint = "glfwFocusWindow")] internal static extern unsafe void glfwFocusWindow(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwGetJoystickButtons" )] internal static extern unsafe byte* glfwGetJoystickButtons( + int jid, + int* count ); - [DllImport(SSC_libName, EntryPoint = "glfwRequestWindowAttention")] internal static extern unsafe void glfwRequestWindowAttention(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwGetJoystickHats" )] internal static extern unsafe byte* glfwGetJoystickHats( + int jid, + int* count ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowMonitor")] internal static extern unsafe IntPtr glfwGetWindowMonitor(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwGetJoystickName" )] internal static extern unsafe byte* glfwGetJoystickName( + int jid ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowMonitor")] internal static extern unsafe void glfwSetWindowMonitor(IntPtr window, IntPtr monitor, int xpos, int ypos, int width, int height, int refreshRate); + [DllImport( SSC_libName, EntryPoint = "glfwGetJoystickGUID" )] internal static extern unsafe byte* glfwGetJoystickGUID( + int jid ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowAttrib")] internal static extern unsafe int glfwGetWindowAttrib(IntPtr window, int attrib); + [DllImport( SSC_libName, EntryPoint = "glfwSetJoystickUserPointer" )] internal static extern unsafe void glfwSetJoystickUserPointer( + int jid, + void* pointer ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowAttrib")] internal static extern unsafe void glfwSetWindowAttrib(IntPtr window, int attrib, int value); + [DllImport( SSC_libName, EntryPoint = "glfwGetJoystickUserPointer" )] internal static extern unsafe void* glfwGetJoystickUserPointer( + int jid ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowUserPointer")] internal static extern unsafe void glfwSetWindowUserPointer(IntPtr window, void* pointer); + [DllImport( SSC_libName, EntryPoint = "glfwJoystickIsGamepad" )] internal static extern unsafe int glfwJoystickIsGamepad( + int jid ); - [DllImport(SSC_libName, EntryPoint = "glfwGetWindowUserPointer")] internal static extern unsafe void* glfwGetWindowUserPointer(IntPtr window); + [DllImport( SSC_libName, EntryPoint = "glfwSetJoystickCallback" )] internal static extern unsafe GLFWjoystickfun glfwSetJoystickCallback( + GLFWjoystickfun callback ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowPosCallback")] internal static extern unsafe GLFWwindowposfun glfwSetWindowPosCallback(IntPtr window, IntPtr callback); + [DllImport( SSC_libName, EntryPoint = "glfwUpdateGamepadMappings" )] internal static extern unsafe int glfwUpdateGamepadMappings( + byte* str ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowSizeCallback")] internal static extern unsafe GLFWwindowsizefun glfwSetWindowSizeCallback(IntPtr window, GLFWwindowsizefun callback); + [DllImport( SSC_libName, EntryPoint = "glfwGetGamepadName" )] internal static extern unsafe byte* glfwGetGamepadName( + int jid ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowCloseCallback")] internal static extern unsafe GLFWwindowclosefun glfwSetWindowCloseCallback(IntPtr window, GLFWwindowclosefun callback); + [DllImport( SSC_libName, EntryPoint = "glfwGetGamepadState" )] internal static extern unsafe int glfwGetGamepadState( + int jid, + GLFWgamepadstate* state ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowRefreshCallback")] internal static extern unsafe GLFWwindowrefreshfun glfwSetWindowRefreshCallback(IntPtr window, GLFWwindowrefreshfun callback); + [DllImport( SSC_libName, EntryPoint = "glfwSetClipboardString" )] internal static extern unsafe void glfwSetClipboardString( + IntPtr window, + byte* str ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowFocusCallback")] internal static extern unsafe GLFWwindowfocusfun glfwSetWindowFocusCallback(IntPtr window, GLFWwindowfocusfun callback); + [DllImport( SSC_libName, EntryPoint = "glfwGetClipboardString" )] internal static extern unsafe byte* glfwGetClipboardString( + IntPtr window ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowIconifyCallback")] internal static extern unsafe GLFWwindowiconifyfun glfwSetWindowIconifyCallback(IntPtr window, GLFWwindowiconifyfun callback); + [DllImport( SSC_libName, EntryPoint = "glfwGetTime" )] internal static extern unsafe double glfwGetTime( + ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowMaximizeCallback")] internal static extern unsafe GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(IntPtr window, GLFWwindowmaximizefun callback); + [DllImport( SSC_libName, EntryPoint = "glfwSetTime" )] internal static extern unsafe void glfwSetTime( + double time ); - [DllImport(SSC_libName, EntryPoint = "glfwSetFramebufferSizeCallback")] internal static extern unsafe FrameBufferSizeHandler glfwSetFramebufferSizeCallback(IntPtr window, IntPtr callback); + [DllImport( SSC_libName, EntryPoint = "glfwGetTimerValue" )] internal static extern unsafe ulong* glfwGetTimerValue( + ); - [DllImport(SSC_libName, EntryPoint = "glfwSetWindowContentScaleCallback")] internal static extern unsafe GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(IntPtr window, GLFWwindowcontentscalefun callback); + [DllImport( SSC_libName, EntryPoint = "glfwGetTimerFrequency" )] internal static extern unsafe ulong* glfwGetTimerFrequency( + ); - [DllImport(SSC_libName, EntryPoint = "glfwPollEvents")] internal static extern unsafe void glfwPollEvents(); + [DllImport( SSC_libName, EntryPoint = "glfwMakeContextCurrent" )] internal static extern unsafe void glfwMakeContextCurrent( + IntPtr window ); - [DllImport(SSC_libName, EntryPoint = "glfwWaitEvents")] internal static extern unsafe void glfwWaitEvents(); + [DllImport( SSC_libName, EntryPoint = "glfwGetCurrentContext" )] internal static extern unsafe IntPtr glfwGetCurrentContext( + ); - [DllImport(SSC_libName, EntryPoint = "glfwWaitEventsTimeout")] internal static extern unsafe void glfwWaitEventsTimeout(double timeout); + [DllImport( SSC_libName, EntryPoint = "glfwSwapBuffers" )] internal static extern unsafe void glfwSwapBuffers( + IntPtr window ); - [DllImport(SSC_libName, EntryPoint = "glfwPostEmptyEvent")] internal static extern unsafe void glfwPostEmptyEvent(); + [DllImport( SSC_libName, EntryPoint = "glfwSwapInterval" )] internal static extern unsafe void glfwSwapInterval( + int interval ); - [DllImport(SSC_libName, EntryPoint = "glfwGetInputMode")] internal static extern unsafe int glfwGetInputMode(IntPtr window, int mode); + [DllImport( SSC_libName, EntryPoint = "glfwExtensionSupported" )] internal static extern unsafe int glfwExtensionSupported( + byte* extension ); - [DllImport(SSC_libName, EntryPoint = "glfwSetInputMode")] internal static extern unsafe void glfwSetInputMode(IntPtr window, int mode, int value); + [DllImport( + SSC_libName, + EntryPoint = "glfwGetProcAddress", + CharSet = CharSet.Ansi )] internal static extern unsafe IntPtr glfwGetProcAddress( + string procname ); - [DllImport(SSC_libName, EntryPoint = "glfwRawMouseMotionSupported")] internal static extern unsafe int glfwRawMouseMotionSupported(); + [DllImport( SSC_libName, EntryPoint = "glfwVulkanSupported" )] internal static extern unsafe int glfwVulkanSupported( + ); - [DllImport(SSC_libName, EntryPoint = "glfwGetKeyName")] internal static extern unsafe byte* glfwGetKeyName(int key, int scancode); - - [DllImport(SSC_libName, EntryPoint = "glfwGetKeyScancode")] internal static extern unsafe int glfwGetKeyScancode(int key); - - [DllImport(SSC_libName, EntryPoint = "glfwGetKey")] internal static extern unsafe KeyStatus glfwGetKey(IntPtr window, int key); - - [DllImport(SSC_libName, EntryPoint = "glfwGetMouseButton")] internal static extern unsafe int glfwGetMouseButton(IntPtr window, int button); - - [DllImport(SSC_libName, EntryPoint = "glfwGetCursorPos")] internal static extern unsafe void glfwGetCursorPos(IntPtr window, double* xpos, double* ypos); - - [DllImport(SSC_libName, EntryPoint = "glfwSetCursorPos")] internal static extern unsafe void glfwSetCursorPos(IntPtr window, double xpos, double ypos); - - [DllImport(SSC_libName, EntryPoint = "glfwCreateCursor")] internal static extern unsafe GLFWcursor* glfwCreateCursor(GLFWimage* image, int xhot, int yhot); - - [DllImport(SSC_libName, EntryPoint = "glfwCreateStandardCursor")] internal static extern unsafe GLFWcursor* glfwCreateStandardCursor(int shape); - - [DllImport(SSC_libName, EntryPoint = "glfwDestroyCursor")] internal static extern unsafe void glfwDestroyCursor(GLFWcursor* cursor); - - [DllImport(SSC_libName, EntryPoint = "glfwSetCursor")] internal static extern unsafe void glfwSetCursor(IntPtr window, GLFWcursor* cursor); - - [DllImport(SSC_libName, EntryPoint = "glfwSetKeyCallback")] internal static extern unsafe GLFWkeyfun glfwSetKeyCallback(IntPtr window, GLFWkeyfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetCharCallback")] internal static extern unsafe GLFWcharfun glfwSetCharCallback(IntPtr window, GLFWcharfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetCharModsCallback")] internal static extern unsafe GLFWcharmodsfun glfwSetCharModsCallback(IntPtr window, GLFWcharmodsfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetMouseButtonCallback")] internal static extern unsafe GLFWmousebuttonfun glfwSetMouseButtonCallback(IntPtr window, GLFWmousebuttonfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetCursorPosCallback")] internal static extern unsafe GLFWcursorposfun glfwSetCursorPosCallback(IntPtr window, GLFWcursorposfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetCursorEnterCallback")] internal static extern unsafe GLFWcursorenterfun glfwSetCursorEnterCallback(IntPtr window, GLFWcursorenterfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetScrollCallback")] internal static extern unsafe GLFWscrollfun glfwSetScrollCallback(IntPtr window, GLFWscrollfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwSetDropCallback")] internal static extern unsafe GLFWdropfun glfwSetDropCallback(IntPtr window, GLFWdropfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwJoystickPresent")] internal static extern unsafe int glfwJoystickPresent(int jid); - - [DllImport(SSC_libName, EntryPoint = "glfwGetJoystickAxes")] internal static extern unsafe float* glfwGetJoystickAxes(int jid, int* count); - - [DllImport(SSC_libName, EntryPoint = "glfwGetJoystickButtons")] internal static extern unsafe byte* glfwGetJoystickButtons(int jid, int* count); - - [DllImport(SSC_libName, EntryPoint = "glfwGetJoystickHats")] internal static extern unsafe byte* glfwGetJoystickHats(int jid, int* count); - - [DllImport(SSC_libName, EntryPoint = "glfwGetJoystickName")] internal static extern unsafe byte* glfwGetJoystickName(int jid); - - [DllImport(SSC_libName, EntryPoint = "glfwGetJoystickGUID")] internal static extern unsafe byte* glfwGetJoystickGUID(int jid); - - [DllImport(SSC_libName, EntryPoint = "glfwSetJoystickUserPointer")] internal static extern unsafe void glfwSetJoystickUserPointer(int jid, void* pointer); - - [DllImport(SSC_libName, EntryPoint = "glfwGetJoystickUserPointer")] internal static extern unsafe void* glfwGetJoystickUserPointer(int jid); - - [DllImport(SSC_libName, EntryPoint = "glfwJoystickIsGamepad")] internal static extern unsafe int glfwJoystickIsGamepad(int jid); - - [DllImport(SSC_libName, EntryPoint = "glfwSetJoystickCallback")] internal static extern unsafe GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback); - - [DllImport(SSC_libName, EntryPoint = "glfwUpdateGamepadMappings")] internal static extern unsafe int glfwUpdateGamepadMappings(byte* str); - - [DllImport(SSC_libName, EntryPoint = "glfwGetGamepadName")] internal static extern unsafe byte* glfwGetGamepadName(int jid); - - [DllImport(SSC_libName, EntryPoint = "glfwGetGamepadState")] internal static extern unsafe int glfwGetGamepadState(int jid, GLFWgamepadstate* state); - - [DllImport(SSC_libName, EntryPoint = "glfwSetClipboardString")] internal static extern unsafe void glfwSetClipboardString(IntPtr window, byte* str); - - [DllImport(SSC_libName, EntryPoint = "glfwGetClipboardString")] internal static extern unsafe byte* glfwGetClipboardString(IntPtr window); - - [DllImport(SSC_libName, EntryPoint = "glfwGetTime")] internal static extern unsafe double glfwGetTime(); - - [DllImport(SSC_libName, EntryPoint = "glfwSetTime")] internal static extern unsafe void glfwSetTime(double time); - - [DllImport(SSC_libName, EntryPoint = "glfwGetTimerValue")] internal static extern unsafe ulong* glfwGetTimerValue(); - - [DllImport(SSC_libName, EntryPoint = "glfwGetTimerFrequency")] internal static extern unsafe ulong* glfwGetTimerFrequency(); - - [DllImport(SSC_libName, EntryPoint = "glfwMakeContextCurrent")] internal static extern unsafe void glfwMakeContextCurrent(IntPtr window); - - [DllImport(SSC_libName, EntryPoint = "glfwGetCurrentContext")] internal static extern unsafe IntPtr glfwGetCurrentContext(); - - [DllImport(SSC_libName, EntryPoint = "glfwSwapBuffers")] internal static extern unsafe void glfwSwapBuffers(IntPtr window); - - [DllImport(SSC_libName, EntryPoint = "glfwSwapInterval")] internal static extern unsafe void glfwSwapInterval(int interval); - - [DllImport(SSC_libName, EntryPoint = "glfwExtensionSupported")] internal static extern unsafe int glfwExtensionSupported(byte* extension); - - [DllImport(SSC_libName, EntryPoint = "glfwGetProcAddress", CharSet = CharSet.Ansi)] internal static extern unsafe IntPtr glfwGetProcAddress(string procname); - - [DllImport(SSC_libName, EntryPoint = "glfwVulkanSupported")] internal static extern unsafe int glfwVulkanSupported(); - - [DllImport(SSC_libName, EntryPoint = "glfwGetRequiredInstanceExtensions")] internal static extern unsafe byte** glfwGetRequiredInstanceExtensions(uint* count); + [DllImport( + SSC_libName, + EntryPoint = "glfwGetRequiredInstanceExtensions" )] internal static extern unsafe byte** glfwGetRequiredInstanceExtensions( + uint* count ); //[DllImport(InternalIO.SSC_libname, EntryPoint = "glfwGetInstanceProcAddress")] internal extern unsafe static GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, byte* procname); //[DllImport(InternalIO.SSC_libname, EntryPoint = "glfwGetPhysicalDevicePresentationSupport")] internal extern unsafe static int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint* queuefamily); diff --git a/源代码/StgSharp/Graphics/frameworkSyncContext.cs b/源代码/StgSharp/Graphics/frameworkSyncContext.cs new file mode 100644 index 00000000..661b20d1 --- /dev/null +++ b/源代码/StgSharp/Graphics/frameworkSyncContext.cs @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="frameworkSyncContext.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + public class FrameworkSyncContext : SynchronizationContext + { + + private static readonly FrameworkSyncContext _mainThreadContext = new FrameworkSyncContext( + ); + + private readonly BlockingCollection _syncContexts = new BlockingCollection( + ); + private readonly Thread _mainThread = Thread.CurrentThread; + + public FrameworkSyncContext() + { + _syncContexts = new BlockingCollection(); + _mainThread = Thread.CurrentThread; + } + + public static FrameworkSyncContext MainThreadContext + { + get => _mainThreadContext; + } + + public override void Post( SendOrPostCallback d, object state ) + { + _syncContexts.Add( d ); + } + + public override void Send( SendOrPostCallback d, object state ) + { + if( Thread.CurrentThread == _mainThread ) { + d( state ); + } else { + Post( d, state ); + } + } + + } +} diff --git a/源代码/StgSharp/Logic/Blueprint/Blueprint.cs b/源代码/StgSharp/Logic/Blueprint/Blueprint.cs index 2f763dce..a8211062 100644 --- a/源代码/StgSharp/Logic/Blueprint/Blueprint.cs +++ b/源代码/StgSharp/Logic/Blueprint/Blueprint.cs @@ -30,7 +30,6 @@ //----------------------------------------------------------------------- using StgSharp; - using System; using System.Collections.Generic; using System.Linq; @@ -46,9 +45,8 @@ using System.Xml.Serialization; namespace StgSharp.BluePrint { /// - /// A sets of complex logic designed for running in multi threads environment. - /// Warning: do not run a instance in multi threads more than once. - /// + /// A sets of complex logic designed for running in multi threads environment. Warning: do not + /// run a instance in multi threads more than once. /// public partial class Blueprint : IConvertableToBlueprintNode { @@ -71,12 +69,13 @@ namespace StgSharp.BluePrint allNode = new Dictionary(); globalNodeList = new List(); nativeNodeList = new List(); - runningStat = new SemaphoreSlim(1, 1); - beginNode = new BeginningNode(this); - endNode = new EndingNode(this); + runningStat = new SemaphoreSlim( 1, 1 ); + beginNode = new BeginningNode( this ); + endNode = new EndingNode( this ); } public BlueprintNode BeginLayer => beginNode; + public BlueprintNode EndLayer => endNode; public bool IsRunning @@ -97,20 +96,21 @@ namespace StgSharp.BluePrint } /**/ - public void AddNode(BlueprintNode node, bool isNative) + public void AddNode( BlueprintNode node, bool isNative ) { - _ = node ?? throw new ArgumentNullException(nameof(node)); + _ = node ?? throw new ArgumentNullException( nameof( node ) ); node.IsNative = isNative; - allNode.Add(node.Name, node); + allNode.Add( node.Name, node ); } - public void ExecuteMain(in Dictionary input, - in Dictionary output) + public void ExecuteMain( + in Dictionary input, + in Dictionary output ) { - BlueprintRunner.Run(this, () => true); + BlueprintRunner.Run( this, () => true ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public (string name, BlueprintPipelineArgs arg)[] GetOutput() { return endNode.OutputData; @@ -118,52 +118,46 @@ namespace StgSharp.BluePrint public void Init() { - foreach (KeyValuePair item in allNode) - { - if (item.Value.IsNative) - { - nativeNodeList.Add(item.Value); - } - else - { - globalNodeList.Add(item.Value); + foreach( KeyValuePair item in allNode ) { + if( item.Value.IsNative ) { + nativeNodeList.Add( item.Value ); + } else { + globalNodeList.Add( item.Value ); } } nativeNodeList.Sort(); globalNodeList.Sort(); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetInput(params (string name, BlueprintPipelineArgs arg)[] parameters) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetInput( + params (string name, BlueprintPipelineArgs arg)[] parameters ) { beginNode.InputData = parameters; } public void Terminate() { - Interlocked.Exchange(ref currentGlobalNodeIndex, int.MaxValue); - Interlocked.Exchange(ref currentNativeNodeIndex, int.MaxValue); + Interlocked.Exchange( ref currentGlobalNodeIndex, int.MaxValue ); + Interlocked.Exchange( ref currentNativeNodeIndex, int.MaxValue ); } - internal bool RequestNexGlobalNode(out BlueprintNode node) + internal bool RequestNexGlobalNode( out BlueprintNode node ) { - if (currentGlobalNodeIndex < globalNodeList.Count) - { - node = globalNodeList[currentGlobalNodeIndex]; - Interlocked.Increment(ref currentGlobalNodeIndex); + if( currentGlobalNodeIndex < globalNodeList.Count ) { + node = globalNodeList[ currentGlobalNodeIndex ]; + Interlocked.Increment( ref currentGlobalNodeIndex ); return true; } node = default!; return false; } - internal bool RequestNextNativeNode(out BlueprintNode node) + internal bool RequestNextNativeNode( out BlueprintNode node ) { - - if (currentNativeNodeIndex < nativeNodeList.Count) - { - node = nativeNodeList[currentNativeNodeIndex]; - Interlocked.Increment(ref currentNativeNodeIndex); + if( currentNativeNodeIndex < nativeNodeList.Count ) { + node = nativeNodeList[ currentNativeNodeIndex ]; + Interlocked.Increment( ref currentNativeNodeIndex ); return true; } node = default!; @@ -172,14 +166,17 @@ namespace StgSharp.BluePrint string[] IConvertableToBlueprintNode.InputInterfacesName { - get { return beginNode.OutputInterfaces.Select(p => p.Key).ToArray(); } + get { return beginNode.OutputInterfaces + .Select( p => p.Key ) + .ToArray(); } } string[] IConvertableToBlueprintNode.OutputInterfacesName { - get { return beginNode.OutputInterfaces.Select(p => p.Key).ToArray(); } + get { return beginNode.OutputInterfaces + .Select( p => p.Key ) + .ToArray(); } } } - } diff --git a/源代码/StgSharp/Logic/Blueprint/BlueprintActionNode.cs b/源代码/StgSharp/Logic/Blueprint/BlueprintActionNode.cs index e8004707..ae04557e 100644 --- a/源代码/StgSharp/Logic/Blueprint/BlueprintActionNode.cs +++ b/源代码/StgSharp/Logic/Blueprint/BlueprintActionNode.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using System; using System.Collections.Generic; using System.Linq; @@ -45,18 +44,17 @@ namespace StgSharp.BluePrint private string[] outPorts; private Action, Dictionary> mainAction; - internal BlueprintActionNode() - { - - } + internal BlueprintActionNode() { } public string[] InputInterfacesName => inPorts; public string[] OutputInterfacesName => outPorts; - public void ExecuteMain(in Dictionary input, in Dictionary output) + public void ExecuteMain( + in Dictionary input, + in Dictionary output ) { - mainAction?.Invoke(input, output); + mainAction?.Invoke( input, output ); } } diff --git a/源代码/StgSharp/Logic/Blueprint/BlueprintNode.cs b/源代码/StgSharp/Logic/Blueprint/BlueprintNode.cs index aab06cbe..c32b1129 100644 --- a/源代码/StgSharp/Logic/Blueprint/BlueprintNode.cs +++ b/源代码/StgSharp/Logic/Blueprint/BlueprintNode.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using StgSharp.Entities; using System; @@ -44,17 +43,16 @@ using System.Threading.Tasks; namespace StgSharp.BluePrint { - /// - /// + /// /// /// - /// Reset pipeline has risk, this operation is a direct operation to port - /// in current node, the port on the other node cannot get the change. + /// Reset pipeline has risk, this operation is a direct operation to port in current node, the + /// port on the other node cannot get the change. /// #pragma warning disable CA1036 public class BlueprintNode : IComparable -#pragma warning restore CA1036 + #pragma warning restore CA1036 { private protected bool levelAvailable, nativeRequested; @@ -64,8 +62,10 @@ namespace StgSharp.BluePrint private IConvertableToBlueprintNode mainOperation; private string name; - internal BlueprintNode(string name, - IConvertableToBlueprintNode node, bool isNative) + internal BlueprintNode( + string name, + IConvertableToBlueprintNode node, + bool isNative ) { this.levelAvailable = false; this.name = name; @@ -73,45 +73,39 @@ namespace StgSharp.BluePrint mainOperation = node; _inputInterfaces = new Dictionary(); _outputInterfaces = new Dictionary(); - foreach (string portName in node.InputInterfacesName) - { - _inputInterfaces.Add(portName, null!); + foreach( string portName in node.InputInterfacesName ) { + _inputInterfaces.Add( portName, null! ); } - foreach (string portName in node.OutputInterfacesName) - { - _outputInterfaces.Add(portName, null!); + foreach( string portName in node.OutputInterfacesName ) { + _outputInterfaces.Add( portName, null! ); } } - -#pragma warning disable CS8618 - internal BlueprintNode(string name, bool isNative, + #pragma warning disable CS8618 + internal BlueprintNode( + string name, + bool isNative, string[] inputPorts, - string[] outputPorts - ) -#pragma warning restore CS8618 + string[] outputPorts ) + #pragma warning restore CS8618 { - if ((inputPorts == null) || (inputPorts.Length == 0)) - { - throw new ArgumentNullException(nameof(inputPorts)); + if( ( inputPorts == null ) || ( inputPorts.Length == 0 ) ) { + throw new ArgumentNullException( nameof( inputPorts ) ); } - if ((outputPorts == null) || (outputPorts.Length == 0)) - { - throw new ArgumentNullException(nameof(outputPorts)); + if( ( outputPorts == null ) || ( outputPorts.Length == 0 ) ) { + throw new ArgumentNullException( nameof( outputPorts ) ); } levelAvailable = false; this.name = name; IsNative = isNative; _inputInterfaces = new Dictionary(); _outputInterfaces = new Dictionary(); - foreach (string portName in inputPorts) - { - _inputInterfaces.Add(portName, null!); + foreach( string portName in inputPorts ) { + _inputInterfaces.Add( portName, null! ); } - foreach (string portName in outputPorts) - { - _outputInterfaces.Add(portName, null!); + foreach( string portName in outputPorts ) { + _outputInterfaces.Add( portName, null! ); } } @@ -125,19 +119,15 @@ namespace StgSharp.BluePrint { get { - if (levelAvailable) - { + if( levelAvailable ) { return _level; } _level = 0; - foreach (KeyValuePair item in _inputInterfaces) - { - if (item.Value == null) - { + foreach( KeyValuePair item in _inputInterfaces ) { + if( item.Value == null ) { continue; } - if (_level <= item.Value.Level) - { + if( _level <= item.Value.Level ) { _level = item.Value.Level; } } @@ -149,6 +139,7 @@ namespace StgSharp.BluePrint public string Name => name; internal Dictionary InputInterfaces => _inputInterfaces; + internal Dictionary OutputInterfaces => _outputInterfaces; internal IConvertableToBlueprintNode Value @@ -156,140 +147,124 @@ namespace StgSharp.BluePrint get => mainOperation; } - public void AddAfter( BlueprintNode former, string formerOutputPortName, - string thisInputPortName) + string thisInputPortName ) { this.levelAvailable = false; - BlueprintPipeline pipeline = new BlueprintPipeline(former, this); - if (former is BeginningNode bnode) - { - bnode.SetCertainOutputPort(formerOutputPortName, pipeline); + BlueprintPipeline pipeline = new BlueprintPipeline( former, this ); + if( former is BeginningNode bnode ) { + bnode.SetCertainOutputPort( formerOutputPortName, pipeline ); + } else { + former.SetCertainOutputPort( formerOutputPortName, pipeline ); } - else - { - former.SetCertainOutputPort(formerOutputPortName, pipeline); - } - SetCertainInputPort(thisInputPortName, pipeline); + SetCertainInputPort( thisInputPortName, pipeline ); } - public void AddBefore( BlueprintNode after, string thisOutputPortName, - string afterInputPortName) + string afterInputPortName ) { this.levelAvailable = false; - BlueprintPipeline pipeline = new BlueprintPipeline(this, after); - if (after is EndingNode enode) - { - enode.SetCertainInputPort(afterInputPortName, pipeline); + BlueprintPipeline pipeline = new BlueprintPipeline( this, after ); + if( after is EndingNode enode ) { + enode.SetCertainInputPort( afterInputPortName, pipeline ); + } else { + after.SetCertainInputPort( afterInputPortName, pipeline ); } - else - { - after.SetCertainInputPort(afterInputPortName, pipeline); - } - SetCertainOutputPort(thisOutputPortName, pipeline); + SetCertainOutputPort( thisOutputPortName, pipeline ); } - public int CompareTo(BlueprintNode other) + public int CompareTo( BlueprintNode other ) { -#pragma warning disable CA1062 - return this.Level.CompareTo(other.Level); -#pragma warning restore CA1062 + #pragma warning disable CA1062 + return this.Level.CompareTo( other.Level ); + #pragma warning restore CA1062 } - public virtual void Run() { - try - { + try { //Console.WriteLine(name); - BlueprintPipeline.WaitAll(_inputInterfaces); - if (mainOperation != null) - { - mainOperation.ExecuteMain(in _inputInterfaces, in _outputInterfaces); + BlueprintPipeline.WaitAll( _inputInterfaces ); + if( mainOperation != null ) { + mainOperation.ExecuteMain( + in _inputInterfaces, in _outputInterfaces ); } } - catch (Exception) - { + catch( Exception ) { throw; } } #region port operation - public BlueprintPipeline GetCertainInputPort(string name) + public BlueprintPipeline GetCertainInputPort( string name ) { BlueprintPipeline ret; - if (!_inputInterfaces.TryGetValue(name, out ret)) - { - throw new Exception($"Cannot find the interface named {name} in node {Name}."); + if( !_inputInterfaces.TryGetValue( name, out ret ) ) { + throw new Exception( + $"Cannot find the interface named {name} in node {Name}." ); } return ret; } - - public BlueprintPipeline GetCertainOutputPort(string name) + public BlueprintPipeline GetCertainOutputPort( string name ) { BlueprintPipeline ret; - if (!_outputInterfaces.TryGetValue(name, out ret)) - { - throw new Exception($"Cannot find the interface named {name} in node {Name}."); + if( !_outputInterfaces.TryGetValue( name, out ret ) ) { + throw new Exception( + $"Cannot find the interface named {name} in node {Name}." ); } return ret; } - public void SetCertainInputPort(string name, BlueprintPipeline pipeline) + public void SetCertainInputPort( + string name, + BlueprintPipeline pipeline ) { - if (!_inputInterfaces.ContainsKey(name)) - { - throw new Exception($"Cannot find the interface named {name} in node {Name}."); + if( !_inputInterfaces.ContainsKey( name ) ) { + throw new Exception( + $"Cannot find the interface named {name} in node {Name}." ); } - _inputInterfaces[name] = pipeline; + _inputInterfaces[ name ] = pipeline; } - public void SetCertainOutputPort(string name, BlueprintPipeline pipeline) + public void SetCertainOutputPort( + string name, + BlueprintPipeline pipeline ) { - if (!_outputInterfaces.ContainsKey(name)) - { - throw new Exception($"Cannot find the interface named {name} in node {Name}."); + if( !_outputInterfaces.ContainsKey( name ) ) { + throw new Exception( + $"Cannot find the interface named {name} in node {Name}." ); } - _outputInterfaces[name] = pipeline; + _outputInterfaces[ name ] = pipeline; } #endregion - - }//--------------------------------- end of class ----------------------------------- - - public class BlueprintNodeRunException : Exception { - protected BlueprintNodeRunException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } + protected BlueprintNodeRunException( + SerializationInfo info, + StreamingContext context ) + : base( info, context ) { } - public BlueprintNodeRunException() - { - } + public BlueprintNodeRunException() { } - public BlueprintNodeRunException(Exception ex) : base(string.Empty, ex) - { - } + public BlueprintNodeRunException( Exception ex ) + : base( string.Empty, ex ) { } - public BlueprintNodeRunException(string message) : base(message) - { - } + public BlueprintNodeRunException( string message ) : base( message ) { } - public BlueprintNodeRunException(string message, Exception innerException) : base(message, innerException) - { - } + public BlueprintNodeRunException( + string message, + Exception innerException ) + : base( message, innerException ) { } } - } diff --git a/源代码/StgSharp/Logic/Blueprint/BlueprintRunner.cs b/源代码/StgSharp/Logic/Blueprint/BlueprintRunner.cs index 9d26ca71..2ff43f7b 100644 --- a/源代码/StgSharp/Logic/Blueprint/BlueprintRunner.cs +++ b/源代码/StgSharp/Logic/Blueprint/BlueprintRunner.cs @@ -28,6 +28,9 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- + +using StgSharp.Threading; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -36,9 +39,8 @@ using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; -using System.Threading.Tasks; -using StgSharp.Threading; +using System.Threading.Tasks; namespace StgSharp.BluePrint { @@ -46,33 +48,32 @@ namespace StgSharp.BluePrint { private static NodeRunner[] allAvailableTask = new NodeRunner[1]; - private static CancellationTokenSource cts = new CancellationTokenSource(); - private static ConcurrentStack blueprintInWaiting = new ConcurrentStack(); + private static CancellationTokenSource cts = new CancellationTokenSource( + ); + private static ConcurrentStack blueprintInWaiting = new ConcurrentStack( + ); private static int _callingThread; - private static SemaphoreSlim bpLock = new SemaphoreSlim(0, 1); + private static SemaphoreSlim bpLock = new SemaphoreSlim( 0, 1 ); internal static bool IsValidCalling { get { - if ((NodeRunner.CurrentBlueprint == null) || //no bp running at all - ((blueprintInWaiting.Count == 0) && (NodeRunner.CurrentBlueprint.IsRunning == false))) // a bp is quiting + if( ( NodeRunner.CurrentBlueprint == null ) || //no bp running at all + ( ( blueprintInWaiting.Count == 0 ) && ( NodeRunner.CurrentBlueprint.IsRunning == false ) ) ) // a bp is quiting { //in case no bp is running return true; } int? id = Task.CurrentId; - if (id is null) - { + if( id is null ) { // in case calling from main thread and current running bp //Console.WriteLine($"\t{_callingThread}"); //Console.WriteLine($"\t{Thread.CurrentThread.ManagedThreadId}"); return _callingThread == Thread.CurrentThread.ManagedThreadId; } - foreach (NodeRunner item in allAvailableTask) - { - if (item.Id == id) - { + foreach( NodeRunner item in allAvailableTask ) { + if( item.Id == id ) { //if calling from any bp running task return true; } @@ -81,116 +82,105 @@ namespace StgSharp.BluePrint } } - public static void Run(Blueprint blueprint, Func terminateInstructor) + public static void Run( + Blueprint blueprint, + Func terminateInstructor ) { //Console.WriteLine(); - if (blueprint == null) - { + if( blueprint == null ) { return; } - if (terminateInstructor == null) - { - throw new ArgumentNullException(nameof(terminateInstructor)); + if( terminateInstructor == null ) { + throw new ArgumentNullException( nameof( terminateInstructor ) ); } - if (blueprint.IsRunning) - { - throw new InvalidOperationException("Attempt to run a blueprint instance twice."); + if( blueprint.IsRunning ) { + throw new InvalidOperationException( + "Attempt to run a blueprint instance twice." ); } blueprint.ShouldClose = terminateInstructor; - if (IsValidCalling) - { + if( IsValidCalling ) { //Console.WriteLine("valid and run"); - if (InterruptAndRunNewBp(blueprint)) - { - do { } while (InterruptAndRunNewBp(NodeRunner.CurrentBlueprint)); + if( InterruptAndRunNewBp( blueprint ) ) { + do { } while (InterruptAndRunNewBp( + NodeRunner.CurrentBlueprint )); } - } - else - { + } else { bpLock.Wait(); - if (InterruptAndRunNewBp(blueprint)) - { - do { } while (InterruptAndRunNewBp(NodeRunner.CurrentBlueprint)); + if( InterruptAndRunNewBp( blueprint ) ) { + do { } while (InterruptAndRunNewBp( + NodeRunner.CurrentBlueprint )); } bpLock.Release(); } - Interlocked.Exchange(ref _callingThread, -1); + Interlocked.Exchange( ref _callingThread, -1 ); } - - public static void SetMaxTaskCount(int size) + public static void SetMaxTaskCount( int size ) { - if (size < 1) - { + if( size < 1 ) { size = 1; } - if (allAvailableTask.Length >= size) - { - for (int i = size; i < allAvailableTask.Length; i++) - { - if (allAvailableTask[i] != null) - { - allAvailableTask[i].Cancel(); + if( allAvailableTask.Length >= size ) { + for( int i = size; i < allAvailableTask.Length; i++ ) { + if( allAvailableTask[ i ] != null ) { + allAvailableTask[ i ].Cancel(); } } } - Array.Resize(ref allAvailableTask, size); + Array.Resize( ref allAvailableTask, size ); } public static void Terminate() { cts.Cancel(); NodeRunner.CurrentBlueprint.Terminate(); - foreach (NodeRunner task in allAvailableTask) - { + foreach( NodeRunner task in allAvailableTask ) { task.Cts.Cancel(); } - foreach (Blueprint bp in blueprintInWaiting) - { + foreach( Blueprint bp in blueprintInWaiting ) { bp.Terminate(); } blueprintInWaiting.Clear(); } - internal static bool InterruptAndRunNewBp(Blueprint newBp) + internal static bool InterruptAndRunNewBp( Blueprint newBp ) { - Debug.Assert(newBp != null); - if ((newBp != NodeRunner.CurrentBlueprint) && (NodeRunner.CurrentBlueprint != null)) - { + Debug.Assert( newBp != null ); + if( ( newBp != NodeRunner.CurrentBlueprint ) && ( NodeRunner.CurrentBlueprint != null ) ) { //if a running bp exists - blueprintInWaiting.Push(NodeRunner.CurrentBlueprint); + blueprintInWaiting.Push( NodeRunner.CurrentBlueprint ); } + //load new bp to current bp - Interlocked.Exchange(ref NodeRunner.CurrentBlueprint!, newBp); - Interlocked.Exchange(ref _callingThread, Thread.CurrentThread.ManagedThreadId); + Interlocked.Exchange( ref NodeRunner.CurrentBlueprint!, newBp ); + Interlocked.Exchange( + ref _callingThread, Thread.CurrentThread.ManagedThreadId ); + //run beginning node to init it first. - if (!NodeRunner.CurrentBlueprint.IsRunning) - { - (NodeRunner.CurrentBlueprint.BeginLayer as BeginningNode)!.Run(); + if( !NodeRunner.CurrentBlueprint.IsRunning ) { + ( NodeRunner.CurrentBlueprint.BeginLayer as BeginningNode )!.Run( + ); } + //refresh all tasks - for (int i = 0; i < allAvailableTask.Length; i++) - { - NodeRunner item = allAvailableTask[i]; - if ((item is null) || item.IsCompleted) - { - allAvailableTask[i] = NodeRunner.Run(); + for( int i = 0; i < allAvailableTask.Length; i++ ) { + NodeRunner item = allAvailableTask[ i ]; + if( ( item is null ) || item.IsCompleted ) { + allAvailableTask[ i ] = NodeRunner.Run(); } } BlueprintNode node; - while (!cts.Token.IsCancellationRequested - && NodeRunner.CurrentBlueprint.RequestNextNativeNode(out node)) - { + while( !cts.Token.IsCancellationRequested && NodeRunner.CurrentBlueprint + .RequestNextNativeNode( out node ) ) { node.Run(); - if (!NodeRunner.CurrentBlueprint.IsRunning) - { + if( !NodeRunner.CurrentBlueprint.IsRunning ) { break; } } - (NodeRunner.CurrentBlueprint.EndLayer as EndingNode)!.Run(); - return blueprintInWaiting.TryPeek(out NodeRunner.CurrentBlueprint); + ( NodeRunner.CurrentBlueprint.EndLayer as EndingNode )!.Run(); + return blueprintInWaiting.TryPeek( out NodeRunner.CurrentBlueprint ); } } @@ -200,7 +190,8 @@ namespace StgSharp.BluePrint private static Blueprint _current; - internal NodeRunner() : base() + internal NodeRunner() + : base() { _startup = InternalRun; } @@ -213,20 +204,20 @@ namespace StgSharp.BluePrint internal static NodeRunner Run() { NodeRunner ret = new NodeRunner { _startup = InternalRun }; - ret.taskInternal = Task.Run(ret.InternalAction); + ret._internalTask = Task.Run( ret.InternalAction ); return ret; } - private static void InternalRun(CancellationToken token) + private static void InternalRun( CancellationToken token ) { //Console.WriteLine("Task Begin"); BlueprintNode item; - while ((CurrentBlueprint != null) && CurrentBlueprint.IsRunning && !token.IsCancellationRequested - && CurrentBlueprint.RequestNexGlobalNode(out item)) - { + while( ( CurrentBlueprint != null ) && CurrentBlueprint.IsRunning && !token.IsCancellationRequested && CurrentBlueprint.RequestNexGlobalNode( + out item ) ) { //Console.WriteLine($"Get node of {item.Name}, going to run."); item.Run(); } + //Console.WriteLine("Task Completed"); } diff --git a/源代码/StgSharp/Logic/Blueprint/BpNodeActionAttribute.cs b/源代码/StgSharp/Logic/Blueprint/BpNodeActionAttribute.cs index 0f7bedcf..3862f2a9 100644 --- a/源代码/StgSharp/Logic/Blueprint/BpNodeActionAttribute.cs +++ b/源代码/StgSharp/Logic/Blueprint/BpNodeActionAttribute.cs @@ -34,8 +34,7 @@ using System.Text; namespace StgSharp.BluePrint { - - [AttributeUsage(AttributeTargets.Method)] + [AttributeUsage( AttributeTargets.Method )] public sealed class BpNodeActionAttribute : Attribute { @@ -43,21 +42,24 @@ namespace StgSharp.BluePrint private string[] _output; private int _operationSpan; - public BpNodeActionAttribute(int operationSpan) + public BpNodeActionAttribute( int operationSpan ) { _input = Array.Empty(); _output = Array.Empty(); _operationSpan = operationSpan; } - public BpNodeActionAttribute(string[] inputPort, string[] outputPort) + public BpNodeActionAttribute( string[] inputPort, string[] outputPort ) { _input = inputPort; _output = outputPort; this._operationSpan = 1; } - public BpNodeActionAttribute(string[] inputPort, string[] outputPort, int operationSpan) + public BpNodeActionAttribute( + string[] inputPort, + string[] outputPort, + int operationSpan ) { _input = inputPort; _output = outputPort; @@ -65,7 +67,9 @@ namespace StgSharp.BluePrint } public string[] InputPort => _input; + public string[] OutputPort => _output; + public int OperationSpan => _operationSpan; } diff --git a/源代码/StgSharp/Logic/Blueprint/BpNodeBuilder.cs b/源代码/StgSharp/Logic/Blueprint/BpNodeBuilder.cs index 488d7edb..6d10d3ce 100644 --- a/源代码/StgSharp/Logic/Blueprint/BpNodeBuilder.cs +++ b/源代码/StgSharp/Logic/Blueprint/BpNodeBuilder.cs @@ -37,34 +37,39 @@ namespace StgSharp.BluePrint public static class BpNodeConverter { - public static IConvertableToBlueprintNode AsBlueprintNodeMainExecution(this BlueprintNodeOperation startUp) + public static IConvertableToBlueprintNode AsBlueprintNodeMainExecution( + this BlueprintNodeOperation startUp ) { - if (startUp == null) - { - throw new ArgumentNullException(nameof(startUp)); + if( startUp == null ) { + throw new ArgumentNullException( nameof( startUp ) ); } - object[] attributeArray = startUp.Method.GetCustomAttributes(typeof(BpNodeActionAttribute), false); - BpNodeActionAttribute attri = (BpNodeActionAttribute)attributeArray[0]; - if ((attributeArray.Length < 0) || (attri == null)) - { - throw new InvalidCastException($"Delegate {nameof(startUp)} is not marked by {typeof(BpNodeActionAttribute)}"); + object[] attributeArray = startUp.Method + .GetCustomAttributes( typeof( BpNodeActionAttribute ), false ); + BpNodeActionAttribute attri = ( BpNodeActionAttribute )attributeArray[ + 0 ]; + if( ( attributeArray.Length < 0 ) || ( attri == null ) ) { + throw new InvalidCastException( + $"Delegate {nameof(startUp)} is not marked by {typeof(BpNodeActionAttribute)}" ); } - return new DefaultConvertableToBlueprintNode(startUp, attri.InputPort, attri.OutputPort); + return new DefaultConvertableToBlueprintNode( + startUp, attri.InputPort, attri.OutputPort ); } - public static IConvertableToBlueprintNode AsBlueprintNodeMainExecution(this Action startUp) + public static IConvertableToBlueprintNode AsBlueprintNodeMainExecution( + this Action startUp ) { - if (startUp == null) - { - throw new ArgumentNullException(nameof(startUp)); + if( startUp == null ) { + throw new ArgumentNullException( nameof( startUp ) ); } - object[] attributeArray = startUp.Method.GetCustomAttributes(typeof(BpNodeActionAttribute), false); - BpNodeActionAttribute attri = (BpNodeActionAttribute)attributeArray[0]; - if ((attributeArray.Length < 0) || (attri == null)) - { - throw new InvalidCastException($"Delegate {nameof(startUp)} is not marked by {typeof(BpNodeActionAttribute)}"); + object[] attributeArray = startUp.Method + .GetCustomAttributes( typeof( BpNodeActionAttribute ), false ); + BpNodeActionAttribute attri = ( BpNodeActionAttribute )attributeArray[ + 0 ]; + if( ( attributeArray.Length < 0 ) || ( attri == null ) ) { + throw new InvalidCastException( + $"Delegate {nameof(startUp)} is not marked by {typeof(BpNodeActionAttribute)}" ); } - return new CrossFrameOperation(startUp, attri.OperationSpan); + return new CrossFrameOperation( startUp, attri.OperationSpan ); } } diff --git a/源代码/StgSharp/Logic/Blueprint/CrossFrameBlueprintNode.cs b/源代码/StgSharp/Logic/Blueprint/CrossFrameBlueprintNode.cs index 77c2085a..69fd1192 100644 --- a/源代码/StgSharp/Logic/Blueprint/CrossFrameBlueprintNode.cs +++ b/源代码/StgSharp/Logic/Blueprint/CrossFrameBlueprintNode.cs @@ -45,34 +45,39 @@ namespace StgSharp.BluePrint private readonly int cycleCount; - public CrossFrameOperation(Action startup, int cycleCount) + public CrossFrameOperation( Action startup, int cycleCount ) { MainExecution = startup; - this.cycleCount = (cycleCount > 1) ? cycleCount : throw new ArgumentException( - $"{$"The {typeof(CrossFrameOperation).Name} crosses only one cycle, "}{$"please use a {typeof(BlueprintNode).Name} instead."}"); + this.cycleCount = ( cycleCount > 1 ) ? + cycleCount : throw new ArgumentException( + $"{$"The {typeof(CrossFrameOperation).Name} crosses only one cycle, "}{$"please use a {typeof(BlueprintNode).Name} instead."}" ); this.cycleCount = cycleCount; currentCount = cycleCount; } - public Action MainExecution { get; private protected set; } + public Action MainExecution + { + get; + private protected set; + } public static string InputInterfacesName => "TaskIn"; public static string OutputInterfacesName => "TaskOut"; - public void ExecuteMain(in Dictionary input, in Dictionary output) + public void ExecuteMain( + in Dictionary input, + in Dictionary output ) { - if (currentCount < cycleCount) - { - Interlocked.Increment(ref currentCount); - } - else - { - Interlocked.Exchange(ref currentCount, 0); - Task.Run(MainExecution); + if( currentCount < cycleCount ) { + Interlocked.Increment( ref currentCount ); + } else { + Interlocked.Exchange( ref currentCount, 0 ); + Task.Run( MainExecution ); } + //Console.WriteLine(currentCount); - BlueprintPipeline.SkipAll(output); + BlueprintPipeline.SkipAll( output ); } string[] IConvertableToBlueprintNode.InputInterfacesName => [InputInterfacesName]; diff --git a/源代码/StgSharp/Logic/Blueprint/IConvertableToBlueprintNode.cs b/源代码/StgSharp/Logic/Blueprint/IConvertableToBlueprintNode.cs index 0201d8a2..7a3575da 100644 --- a/源代码/StgSharp/Logic/Blueprint/IConvertableToBlueprintNode.cs +++ b/源代码/StgSharp/Logic/Blueprint/IConvertableToBlueprintNode.cs @@ -35,25 +35,30 @@ using System.Text; namespace StgSharp.BluePrint { - - public delegate void BlueprintNodeOperation(in Dictionary input, in Dictionary output); + public delegate void BlueprintNodeOperation( + in Dictionary input, + in Dictionary output ); public interface IConvertableToBlueprintNode { - #pragma warning disable CA1819 - public string[] InputInterfacesName { get; } -#pragma warning restore CA1819 + public string[] InputInterfacesName + { + get; + } + #pragma warning restore CA1819 -#pragma warning disable CA1819 - public string[] OutputInterfacesName { get; } -#pragma warning restore CA1819 + #pragma warning disable CA1819 + public string[] OutputInterfacesName + { + get; + } + #pragma warning restore CA1819 - - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public void ExecuteMain( - in Dictionary input, - in Dictionary output); + in Dictionary input, + in Dictionary output ); } @@ -64,16 +69,21 @@ namespace StgSharp.BluePrint private string[] _output; private BlueprintNodeOperation _execution; - public DefaultConvertableToBlueprintNode(BlueprintNodeOperation execution, string[] input, string[] output) + public DefaultConvertableToBlueprintNode( + BlueprintNodeOperation execution, + string[] input, + string[] output ) { _input = input; _output = output; _execution = execution; } - void IConvertableToBlueprintNode.ExecuteMain(in Dictionary input, in Dictionary output) + void IConvertableToBlueprintNode.ExecuteMain( + in Dictionary input, + in Dictionary output ) { - _execution(in input, in output); + _execution( in input, in output ); } string[] IConvertableToBlueprintNode.InputInterfacesName => _input; diff --git a/源代码/StgSharp/Logic/Blueprint/PipeLine.cs b/源代码/StgSharp/Logic/Blueprint/PipeLine.cs index 4f32c541..c40da366 100644 --- a/源代码/StgSharp/Logic/Blueprint/PipeLine.cs +++ b/源代码/StgSharp/Logic/Blueprint/PipeLine.cs @@ -40,7 +40,6 @@ using System.Threading.Tasks; namespace StgSharp.BluePrint { - public class BlueprintPipeline { @@ -49,11 +48,12 @@ namespace StgSharp.BluePrint private BlueprintPipelineArgs args; private SemaphoreSlim formerCompleteSemaphore; - public BlueprintPipeline(BlueprintNode former, BlueprintNode after) + public BlueprintPipeline( BlueprintNode former, BlueprintNode after ) { this.former = former; this.after = after; - formerCompleteSemaphore = new SemaphoreSlim(initialCount: 0, maxCount: 1); + formerCompleteSemaphore = new SemaphoreSlim( + initialCount: 0, maxCount: 1 ); } public BlueprintNode After => after; @@ -68,31 +68,27 @@ namespace StgSharp.BluePrint public int Level => former.Level; - public static void SkipAll(Dictionary ports) + public static void SkipAll( + Dictionary ports ) { - if (ports == null) - { - throw new ArgumentNullException(nameof(ports)); + if( ports == null ) { + throw new ArgumentNullException( nameof( ports ) ); } - foreach (KeyValuePair item in ports) - { - if (item.Value != null) - { + foreach( KeyValuePair item in ports ) { + if( item.Value != null ) { item.Value.CompleteAndSkip(); } } } - public static void WaitAll(Dictionary ports) + public static void WaitAll( + Dictionary ports ) { - if (ports == null) - { - throw new ArgumentNullException(nameof(ports)); + if( ports == null ) { + throw new ArgumentNullException( nameof( ports ) ); } - foreach (KeyValuePair item in ports) - { - if (item.Value != null) - { + foreach( KeyValuePair item in ports ) { + if( item.Value != null ) { item.Value.WaitForStart(); } } @@ -111,30 +107,31 @@ namespace StgSharp.BluePrint #region pipline op - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public void CompleteAndSkip() { //Console.WriteLine($"Complete\t{former.Name}\t->\t{after.Name}"); formerCompleteSemaphore.Release(); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void CompleteAndWriteData(BlueprintPipelineArgs args) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void CompleteAndWriteData( BlueprintPipelineArgs args ) { this.args = args; CompleteAndSkip(); } #endregion - - - } public abstract class BlueprintPipelineArgs { - public object? Value { get; set; } + public object? Value + { + get; + set; + } } } diff --git a/源代码/StgSharp/Logic/Blueprint/RouteSwitch.cs b/源代码/StgSharp/Logic/Blueprint/RouteSwitch.cs index 88edae4e..79fa1c90 100644 --- a/源代码/StgSharp/Logic/Blueprint/RouteSwitch.cs +++ b/源代码/StgSharp/Logic/Blueprint/RouteSwitch.cs @@ -42,28 +42,27 @@ namespace StgSharp.BluePrint private protected Dictionary openingRule)> outputDictionary; - public RouteSwitch(string name, bool isNative, string inputPorts) : - base(name, isNative, [inputPorts], [string.Empty]) + public RouteSwitch( string name, bool isNative, string inputPorts ) + : base( name, isNative, [inputPorts], [string.Empty] ) { - outputDictionary = new Dictionary openingRule)>(); + outputDictionary = new Dictionary openingRule)>( + ); } public new int Level { get { - if (levelAvailable) - { + if( levelAvailable ) { return _level; } _level = 0; - KeyValuePair item = _inputInterfaces.First(); - if (item.Value == null) - { + KeyValuePair item = _inputInterfaces.First( + ); + if( item.Value == null ) { throw new InvalidOperationException(); } - if (_level <= item.Value.Level) - { + if( _level <= item.Value.Level ) { _level = item.Value.Level; } return _level; @@ -73,43 +72,40 @@ namespace StgSharp.BluePrint public new void AddBefore( BlueprintNode after, string thisOutputPortName, - string afterInputPortName) + string afterInputPortName ) { - this.AppendNode(after, afterInputPortName, () => true); + this.AppendNode( after, afterInputPortName, () => true ); } - public void AppendNode(BlueprintNode node, string portName, Func openningRule) + public void AppendNode( + BlueprintNode node, + string portName, + Func openningRule ) { - if (node == null) - { - throw new ArgumentNullException(nameof(node)); + if( node == null ) { + throw new ArgumentNullException( nameof( node ) ); } string indexName = $"{node.Name}.{portName}"; - BlueprintPipeline p = new BlueprintPipeline(this, node); - node.InputInterfaces[portName] = p; - outputDictionary.Add(indexName, (p, openningRule)); + BlueprintPipeline p = new BlueprintPipeline( this, node ); + node.InputInterfaces[ portName ] = p; + outputDictionary.Add( indexName, (p, openningRule) ); } public new void Run() { - try - { + try { BlueprintPipeline input = InputInterfaces.First().Value; input.WaitForStart(); - foreach (KeyValuePair openingRule)> item in outputDictionary) - { - if (item.Value.openingRule()) - { - item.Value.pipeline.CompleteAndWriteData(input.Args); + foreach( KeyValuePair openingRule)> item in outputDictionary ) { + if( item.Value.openingRule() ) { + item.Value.pipeline.CompleteAndWriteData( input.Args ); } } } - catch (Exception) - { + catch( Exception ) { throw; } } } - } diff --git a/源代码/StgSharp/Logic/Blueprint/SideNode.cs b/源代码/StgSharp/Logic/Blueprint/SideNode.cs index 9e580b2c..e0d0238f 100644 --- a/源代码/StgSharp/Logic/Blueprint/SideNode.cs +++ b/源代码/StgSharp/Logic/Blueprint/SideNode.cs @@ -29,7 +29,6 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using System; using System.Collections.Generic; using System.Globalization; @@ -45,8 +44,8 @@ namespace StgSharp.BluePrint private Blueprint _bp; - public BeginningNode(Blueprint bp) : base(name: "BeginningNode", true, ["default"], ["default"] - ) + public BeginningNode( Blueprint bp ) + : base( name: "BeginningNode", true, ["default"], ["default"] ) { _bp = bp; } @@ -55,13 +54,11 @@ namespace StgSharp.BluePrint { set { - if (value == null) - { + if( value == null ) { return; } - foreach ((string name, BlueprintPipelineArgs arg) parameter in value) - { - OutputInterfaces[parameter.name].Args = parameter.arg; + foreach( (string name, BlueprintPipelineArgs arg) parameter in value ) { + OutputInterfaces[ parameter.name ].Args = parameter.arg; } } } @@ -69,16 +66,17 @@ namespace StgSharp.BluePrint public override void Run() { _bp.RunningStat.Wait(); - BlueprintPipeline.SkipAll(_outputInterfaces); + BlueprintPipeline.SkipAll( _outputInterfaces ); } - public new void SetCertainOutputPort(string name, BlueprintPipeline pipeline) + public new void SetCertainOutputPort( + string name, + BlueprintPipeline pipeline ) { - if (_outputInterfaces.ContainsKey(name)) - { - _outputInterfaces[name] = pipeline; + if( _outputInterfaces.ContainsKey( name ) ) { + _outputInterfaces[ name ] = pipeline; } - _outputInterfaces.Add(name, pipeline); + _outputInterfaces.Add( name, pipeline ); } } @@ -88,32 +86,35 @@ namespace StgSharp.BluePrint private Blueprint _bp; - public EndingNode(Blueprint bp) : base(name: "EndingNode", true, ["default"], ["default"] - ) + public EndingNode( Blueprint bp ) + : base( name: "EndingNode", true, ["default"], ["default"] ) { _bp = bp; } internal (string name, BlueprintPipelineArgs arg)[] OutputData { - get { return InputInterfaces.Select(key => (key.Key, key.Value.Args)).ToArray(); } + get { return InputInterfaces.Select( + key => (key.Key, key.Value.Args) ) + .ToArray(); } } public override void Run() { - BlueprintPipeline.WaitAll(_inputInterfaces); - Interlocked.Exchange(ref _bp.currentGlobalNodeIndex, 0); - Interlocked.Exchange(ref _bp.currentNativeNodeIndex, 0); + BlueprintPipeline.WaitAll( _inputInterfaces ); + Interlocked.Exchange( ref _bp.currentGlobalNodeIndex, 0 ); + Interlocked.Exchange( ref _bp.currentNativeNodeIndex, 0 ); _bp.RunningStat.Release(); } - public new void SetCertainInputPort(string name, BlueprintPipeline pipeline) + public new void SetCertainInputPort( + string name, + BlueprintPipeline pipeline ) { - if (_inputInterfaces.ContainsKey(name)) - { - _inputInterfaces[name] = pipeline; + if( _inputInterfaces.ContainsKey( name ) ) { + _inputInterfaces[ name ] = pipeline; } - _inputInterfaces.Add(name, pipeline); + _inputInterfaces.Add( name, pipeline ); } } diff --git a/源代码/StgSharp/Logic/Collections/BidirectionalDictionary.cs b/源代码/StgSharp/Logic/Collections/BidirectionalDictionary.cs index 98846ba6..4bba9800 100644 --- a/源代码/StgSharp/Logic/Collections/BidirectionalDictionary.cs +++ b/源代码/StgSharp/Logic/Collections/BidirectionalDictionary.cs @@ -49,53 +49,47 @@ namespace StgSharp.Collections _reverse = new Dictionary(); } - public TFirst this[TSecond key] + public TFirst this[ TSecond key ] { get { - if (_reverse.TryGetValue(key,out TFirst value)) - { + if( _reverse.TryGetValue( key, out TFirst value ) ) { return value; } - throw new ArgumentException($"Cannot find key {key!.ToString()} in dictionary."); + throw new ArgumentException( + $"Cannot find key {key!.ToString()} in dictionary." ); } set { - if (_reverse.TryGetValue(key,out TFirst origin)) - { - _reverse[key] = value; - _forward.Remove(origin); + if( _reverse.TryGetValue( key, out TFirst origin ) ) { + _reverse[ key ] = value; + _forward.Remove( origin ); + } else { + _reverse.Add( key, value ); } - else - { - _reverse.Add(key, value); - } - _forward.Add(value, key); + _forward.Add( value, key ); } } - public TSecond this[TFirst key] + public TSecond this[ TFirst key ] { get { - if (_forward.TryGetValue(key, out TSecond value)) - { + if( _forward.TryGetValue( key, out TSecond value ) ) { return value; } - throw new ArgumentException($"Cannot find key {key!.ToString()} in dictionary."); + throw new ArgumentException( + $"Cannot find key {key!.ToString()} in dictionary." ); } set { - if (_forward.TryGetValue(key, out TSecond origin)) - { - _forward[key] = value; - _reverse.Remove(origin); + if( _forward.TryGetValue( key, out TSecond origin ) ) { + _forward[ key ] = value; + _reverse.Remove( origin ); + } else { + _forward.Add( key, value ); } - else - { - _forward.Add(key, value); - } - _reverse.Add(value, key); + _reverse.Add( value, key ); } } @@ -107,28 +101,29 @@ namespace StgSharp.Collections public int Count => _forward.Count; - public IReadOnlyDictionary Forward => new ReadOnlyDictionary(_forward); + public IReadOnlyDictionary Forward => new ReadOnlyDictionary( + _forward ); - public IReadOnlyDictionary Reverse => new ReadOnlyDictionary(_reverse); + public IReadOnlyDictionary Reverse => new ReadOnlyDictionary( + _reverse ); public void Add( KeyValuePair item ) { - if (_forward.ContainsKey(item.Key) || _reverse.ContainsKey(item.Value)) - { - throw new ArgumentException("Duplicate key or value."); + if( _forward.ContainsKey( item.Key ) || _reverse.ContainsKey( + item.Value ) ) { + throw new ArgumentException( "Duplicate key or value." ); } - _forward.Add(item.Key,item.Value); - _reverse.Add(item.Value, item.Key); + _forward.Add( item.Key, item.Value ); + _reverse.Add( item.Value, item.Key ); } - public void Add( TFirst key, TSecond value ) + public void Add( TFirst key, TSecond value ) { - if (_forward.ContainsKey(key) || _reverse.ContainsKey(value)) - { - throw new ArgumentException("Duplicate key or value."); + if( _forward.ContainsKey( key ) || _reverse.ContainsKey( value ) ) { + throw new ArgumentException( "Duplicate key or value." ); } - _forward.Add(key, value); - _reverse.Add(value, key); + _forward.Add( key, value ); + _reverse.Add( value, key ); } public void Clear() @@ -139,75 +134,74 @@ namespace StgSharp.Collections public bool Contains( KeyValuePair item ) { - return _forward.Contains(item) && _reverse.TryGetValue(item.Value, out TFirst var) && var!.Equals(item.Key) ; + return _forward.Contains( item ) && _reverse.TryGetValue( + item.Value, out TFirst var ) && var!.Equals( item.Key ); } - public bool Contains(TSecond key) + public bool Contains( TSecond key ) { - return _reverse.ContainsKey(key); + return _reverse.ContainsKey( key ); } - public bool Contains(TFirst key) + public bool Contains( TFirst key ) { - return _forward.ContainsKey(key); + return _forward.ContainsKey( key ); } - public void CopyTo( KeyValuePair[] array, int arrayIndex ) + public void CopyTo( + KeyValuePair[] array, + int arrayIndex ) { - if (array == null) - { - throw new ArgumentNullException(nameof(array)); + if( array == null ) { + throw new ArgumentNullException( nameof( array ) ); } - if (arrayIndex < 0 || arrayIndex > array.Length) - { - throw new ArgumentOutOfRangeException(nameof(arrayIndex)); + if( arrayIndex < 0 || arrayIndex > array.Length ) { + throw new ArgumentOutOfRangeException( nameof( arrayIndex ) ); } - if (array.Length - arrayIndex < _forward.Count) - { - throw new ArgumentException("The array is too small to copy the elements."); + if( array.Length - arrayIndex < _forward.Count ) { + throw new ArgumentException( + "The array is too small to copy the elements." ); } - foreach (var pair in _forward) - { - array[arrayIndex ++] = pair; + foreach( KeyValuePair pair in _forward ) { + array[ arrayIndex++ ] = pair; } } public IEnumerator> GetEnumerator() { - foreach (var pair in _forward) - { + foreach( KeyValuePair pair in _forward ) { yield return pair; } } - public bool Remove( TFirst key ) { throw new NotImplementedException(); } + public bool Remove( TFirst key ) + { + throw new NotImplementedException(); + } public bool Remove( KeyValuePair item ) { - if (_forward.Remove(item.Key)) - { - return _reverse.Remove(item.Value); + if( _forward.Remove( item.Key ) ) { + return _reverse.Remove( item.Value ); } return false; - } public bool TryGetValue( TFirst key, out TSecond value ) { - return _forward.TryGetValue(key, out value); + return _forward.TryGetValue( key, out value ); } - public bool TryGetValue(TSecond key, out TFirst value) + public bool TryGetValue( TSecond key, out TFirst value ) { - return _reverse.TryGetValue(key, out value); + return _reverse.TryGetValue( key, out value ); } - IEnumerator IEnumerable.GetEnumerator() + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } - } \ No newline at end of file diff --git a/源代码/StgSharp/Logic/Collections/IBidrirectionalDictionary.cs b/源代码/StgSharp/Logic/Collections/IBidrirectionalDictionary.cs index 418497c0..94b59c1e 100644 --- a/源代码/StgSharp/Logic/Collections/IBidrirectionalDictionary.cs +++ b/源代码/StgSharp/Logic/Collections/IBidrirectionalDictionary.cs @@ -1,3 +1,33 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="IBidrirectionalDictionary.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the ¡°Software¡±), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED ¡°AS IS¡±, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; @@ -5,46 +35,66 @@ using System.Threading.Tasks; namespace StgSharp.Collections { - public interface IBidirectionalDictionary : - IDictionary + public interface IBidirectionalDictionary : IDictionary { -#pragma warning disable CA1033 + + public TFirst this[ TSecond key ] + { + get; + set; + } + + public ICollection FirstIndex + { + get; + } + + public ICollection SecondIndex + { + get; + } + + public IReadOnlyDictionary Forward + { + get; + } + + public IReadOnlyDictionary Reverse + { + get; + } + + /// + /// Determines whether the contains + /// the specified key. + /// + /// The value to locate in the . + /// + /// true if the contains an element + /// with the specified key; otherwise, false. + /// + public bool Contains( TSecond key ); + + /// + /// Determines whether the contains + /// the specified key. + /// + /// The value to locate in the . + /// + /// true if the contains an element + /// with the specified key; otherwise, false. + /// + public bool Contains( TFirst key ); + + public bool TryGetValue( TSecond key, out TFirst value ); + + #pragma warning disable CA1033 ICollection IDictionary.Keys => FirstIndex; + ICollection IDictionary.Values => SecondIndex; - bool IDictionary.ContainsKey(TFirst key) => Contains(key); + + bool IDictionary.ContainsKey( TFirst key ) => Contains( + key ); #pragma warning restore CA1033 - - public IReadOnlyDictionary Forward { get; } - public IReadOnlyDictionary Reverse { get; } - - public ICollection FirstIndex { get;} - - public ICollection SecondIndex { get; } - - public TFirst this[TSecond key] { get;set; } - - /// - /// Determines whether the contains the - /// specified key. - /// - /// The value to locate in the . - /// - /// true if the contains an element with the - /// specified key; otherwise, false. - /// - public bool Contains(TSecond key); - - /// - /// Determines whether the contains the - /// specified key. - /// - /// The value to locate in the . - /// - /// true if the contains an element with the - /// specified key; otherwise, false. - /// - public bool Contains(TFirst key); - - public bool TryGetValue(TSecond key, out TFirst value); } } \ No newline at end of file diff --git a/源代码/StgSharp/Logic/Collections/SizeFixedList.cs b/源代码/StgSharp/Logic/Collections/SizeFixedList.cs index fd53c866..71fe7037 100644 --- a/源代码/StgSharp/Logic/Collections/SizeFixedList.cs +++ b/源代码/StgSharp/Logic/Collections/SizeFixedList.cs @@ -42,23 +42,22 @@ namespace StgSharp.Collections private T[] values; private int capacity, _index; - public SizeFixedList(int size) + public SizeFixedList( int size ) { values = new T[size]; } - public T this[int index] + public T this[ int index ] { - get => (index < _index) ? values[index] : throw new ArgumentOutOfRangeException(nameof(index)); + get => ( index < _index ) ? + values[ index ] : throw new ArgumentOutOfRangeException( + nameof( index ) ); set { - if (index < _index) - { - values[index] = value; - } - else - { - throw new ArgumentOutOfRangeException(nameof(index)); + if( index < _index ) { + values[ index ] = value; + } else { + throw new ArgumentOutOfRangeException( nameof( index ) ); } } } @@ -67,12 +66,11 @@ namespace StgSharp.Collections public int Count => _index + 1; - public void Add(T item) + public void Add( T item ) { - if (_index < capacity - 1) - { + if( _index < capacity - 1 ) { _index++; - this[_index] = item; + this[ _index ] = item; } } @@ -82,56 +80,43 @@ namespace StgSharp.Collections _index = 0; } - public bool Contains(T item) + public bool Contains( T item ) { - for (int i = 0; i <= _index; i++) - { - if (item.Equals(values[i])) - { + for( int i = 0; i <= _index; i++ ) { + if( item.Equals( values[ i ] ) ) { return true; } } return false; } - public void CopyTo(T[] array, int arrayIndex) + public void CopyTo( T[] array, int arrayIndex ) { throw new NotImplementedException(); } public IEnumerator GetEnumerator() { - for (int i = 0; i <= _index; i++) - { - yield return values[i]; + for( int i = 0; i <= _index; i++ ) { + yield return values[ i ]; } } - public int IndexOf(T item) + public int IndexOf( T item ) { - for (int i = 0; i <= _index; i++) - { - if (values[i].Equals(item)) - { + for( int i = 0; i <= _index; i++ ) { + if( values[ i ].Equals( item ) ) { return i; } } return -1; } - void IList.Insert(int index, T item) + public bool Remove( T item ) { - throw new NotSupportedException(); - } - - public bool Remove(T item) - { - - for (int i = 0; i <= _index; i++) - { - if (values[i].Equals(item)) - { - values[i] = values[_index]; + for( int i = 0; i <= _index; i++ ) { + if( values[ i ].Equals( item ) ) { + values[ i ] = values[ _index ]; _index--; return true; } @@ -139,30 +124,27 @@ namespace StgSharp.Collections return false; } - public void RemoveAll(Predicate predicate) + public void RemoveAll( Predicate predicate ) { - for (int i = _index; i > 0; i--) - { - if (predicate(values[i])) - { - values[i] = values[_index]; + for( int i = _index; i > 0; i-- ) { + if( predicate( values[ i ] ) ) { + values[ i ] = values[ _index ]; _index--; } } } - public void RemoveAt(int index) + public void RemoveAt( int index ) { - if (index <= _index) - { - values[index] = values[_index]; + if( index <= _index ) { + values[ index ] = values[ _index ]; _index--; } } - public void Resize(int newSize) + public void Resize( int newSize ) { - Array.Resize(ref values, newSize); + Array.Resize( ref values, newSize ); } IEnumerator IEnumerable.GetEnumerator() @@ -170,5 +152,10 @@ namespace StgSharp.Collections yield return GetEnumerator(); } + void IList.Insert( int index, T item ) + { + throw new NotSupportedException(); + } + }//------------------------------------- End of Class ------------------------------------------ } diff --git a/源代码/StgSharp/Logic/Counter.cs b/源代码/StgSharp/Logic/Counter.cs index a70d5731..1cf42fa4 100644 --- a/源代码/StgSharp/Logic/Counter.cs +++ b/源代码/StgSharp/Logic/Counter.cs @@ -33,11 +33,11 @@ using System.Xml.Serialization; namespace StgSharp { - - public class Counter where T : struct, IConvertible, IFormattable, IComparable -#if NET8_OR_GREATER + public class Counter + where T: struct, IConvertible, IFormattable, IComparable + #if NET8_OR_GREATER ,INumber -#endif + #endif { @@ -47,11 +47,10 @@ namespace StgSharp internal readonly T _defualtSubValue; internal readonly T _defualtValue; - public Counter(T defualtValue, T defualtAddValue, T defualtSubValue) + public Counter( T defualtValue, T defualtAddValue, T defualtSubValue ) { - TypeCode type = Type.GetTypeCode(defualtValue.GetType()); - switch (type) - { + TypeCode type = Type.GetTypeCode( defualtValue.GetType() ); + switch( type ) { case TypeCode.Byte: break; @@ -83,7 +82,8 @@ namespace StgSharp break; default: - throw new ArgumentException("Input is not number value type"); + throw new ArgumentException( + "Input is not number value type" ); break; } _value = defualtValue; @@ -104,7 +104,7 @@ namespace StgSharp set => _value = value; } - public void Add(T value) + public void Add( T value ) { _value += value; } @@ -124,7 +124,7 @@ namespace StgSharp _value = _defualtValue; } - public void Sub(T value) + public void Sub( T value ) { _value -= value; } @@ -134,19 +134,19 @@ namespace StgSharp return Value.ToString(); } - public static Counter operator --(Counter counter) + public static Counter operator --( Counter counter ) { counter.QuickSub(); return counter; } - public static Counter operator ++(Counter counter) + public static Counter operator ++( Counter counter ) { counter.QuickAdd(); return counter; } - public static implicit operator T(Counter counter) + public static implicit operator T( Counter counter ) { return counter.Value; } diff --git a/源代码/StgSharp/Logic/Sensor.cs b/源代码/StgSharp/Logic/Sensor.cs index e247f31f..085656ab 100644 --- a/源代码/StgSharp/Logic/Sensor.cs +++ b/源代码/StgSharp/Logic/Sensor.cs @@ -32,8 +32,9 @@ using StgSharp.Geometries; namespace StgSharp { - - public delegate bool SensorRuleHandler(PlainGeometry target, PlainGeometry boarder); + public delegate bool SensorRuleHandler( + PlainGeometry target, + PlainGeometry boarder ); public class Sensor { @@ -42,7 +43,6 @@ namespace StgSharp internal PlainGeometry _target; internal SensorRuleHandler _rule; - public PlainGeometry boarder => _boarder; public PlainGeometry target @@ -57,13 +57,17 @@ namespace StgSharp set => _rule = value; } - public static Sensor operator -(Sensor sensor, SensorRuleHandler rule) + public static Sensor operator -( + Sensor sensor, + SensorRuleHandler rule ) { sensor._rule -= rule; return sensor; } - public static Sensor operator +(Sensor sensor, SensorRuleHandler rule) + public static Sensor operator +( + Sensor sensor, + SensorRuleHandler rule ) { sensor._rule += rule; return sensor; diff --git a/源代码/StgSharp/Logic/StateMachine.cs b/源代码/StgSharp/Logic/StateMachine.cs new file mode 100644 index 00000000..a3599e21 --- /dev/null +++ b/源代码/StgSharp/Logic/StateMachine.cs @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="StateMachine.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public interface IStateMachine where T: Enum + { + + public T LastStableState + { + get; + } + + public bool TryEnterState(); + + public bool TryExitState(); + + public bool TrySwitchState(); + + } + + public interface IStateMachineWithSwitchSpan : IStateMachine + where TState: Enum + { + + public bool IsInStabelState + { + get; + } + + public TState NextStableState + { + get; + } + + public bool TrySwitchState(); + + } +} diff --git a/源代码/StgSharp/Logic/Threading/CancellableTask.cs b/源代码/StgSharp/Logic/Threading/CancellableTask.cs new file mode 100644 index 00000000..092ba2c1 --- /dev/null +++ b/源代码/StgSharp/Logic/Threading/CancellableTask.cs @@ -0,0 +1,122 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="CancellableTask.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + internal class CancellableTask + { + + private protected Action _startup; + private protected Task _internalTask; + private CancellationTokenSource cts; + + private protected CancellableTask() + { + cts = new CancellationTokenSource(); + } + + private protected CancellableTask( Action action ) + { + _internalTask = new Task( InternalAction ); + cts = new CancellationTokenSource(); + } + + public bool IsCompleted + { + get => _internalTask.IsCompleted; + } + + public CancellationTokenSource Cts + { + get => cts; + } + + public int Id + { + get => _internalTask.Id; + } + + public void Cancel() + { + Cts.Cancel(); + } + + public void CancelAndWait() + { + Cts.Cancel(); + _internalTask.Wait(); + } + + public static CancellableTask Run( Action startup ) + { + CancellableTask ret = new CancellableTask { _startup = startup }; + ret._internalTask = Task.Run( ret.InternalAction ); + return ret; + } + + public void Wait() + { + _internalTask.Wait(); + } + + public static void WaitAll( IEnumerable tasks ) + { + IEnumerable convertedTasks = tasks.Select( + ct => ct._internalTask ); + Task.WaitAll( convertedTasks.ToArray() ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + internal void InternalAction() + { + //Console.WriteLine($"Task {Task.CurrentId} is running."); + _startup( Cts.Token ); + } + + public static implicit operator Task( CancellableTask task ) + { + return task._internalTask; + } + + ~CancellableTask() + { + Cts.Dispose(); + } + + } +} diff --git a/源代码/StgSharp/Logic/Threading/EmptyThread.cs b/源代码/StgSharp/Logic/Threading/EmptyThread.cs new file mode 100644 index 00000000..1340b9f2 --- /dev/null +++ b/源代码/StgSharp/Logic/Threading/EmptyThread.cs @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="EmptyThread.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + public static partial class ThreadHelper + { + + private static readonly Thread _emptyThreadCache = new Thread( + () => { } ); + + static ThreadHelper() + { + _emptyThreadCache.Start(); + } + + /// + /// An individual thread doing nothing, and its always returns false. + /// + public static Thread EmptyThread + { + get => _emptyThreadCache; + } + + } +} diff --git a/源代码/StgSharp/Logic/Threading/MainThreadAssert.cs b/源代码/StgSharp/Logic/Threading/MainThreadAssert.cs new file mode 100644 index 00000000..d15dd7d0 --- /dev/null +++ b/源代码/StgSharp/Logic/Threading/MainThreadAssert.cs @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="MainThreadAssert.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + public static partial class ThreadHelper + { + + private static readonly int mainThreadId = Thread.CurrentThread.ManagedThreadId; + private static readonly ThreadLocal isNotMainThread = new ThreadLocal( + () => Thread.CurrentThread.ManagedThreadId != mainThreadId ); + + [Conditional( "DEBUG" )] + internal static void MainThreadAssert() + { + if( isNotMainThread.Value ) { + throw new InvalidOperationException( + $"Attempt to call sensitive operation which can be only called from main thread " + $"from thread {Thread.CurrentThread.ManagedThreadId}." ); + } + } + + } +} diff --git a/源代码/StgSharp/Logic/Threading/frameworkSyncContext.cs b/源代码/StgSharp/Logic/Threading/frameworkSyncContext.cs new file mode 100644 index 00000000..369ebd05 --- /dev/null +++ b/源代码/StgSharp/Logic/Threading/frameworkSyncContext.cs @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="frameworkSyncContext.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Graphics +{ + public class FrameworkSyncContext : SynchronizationContext + { + + private ConcurrentQueue _syncContexts = new ConcurrentQueue( + ); + private readonly Thread _mainThread = Thread.CurrentThread; + + public override void Post( SendOrPostCallback d, object state ) + { + base.Post( d, state ); + } + + } +} diff --git a/源代码/StgSharp/Logic/Timing/TimeFunction.cs b/源代码/StgSharp/Logic/Timing/TimeFunction.cs index d96fb40d..388f07c3 100644 --- a/源代码/StgSharp/Logic/Timing/TimeFunction.cs +++ b/源代码/StgSharp/Logic/Timing/TimeFunction.cs @@ -46,12 +46,11 @@ namespace StgSharp.Timing public TimeFunction( TimeSpanProvider timeSpanProvider, Func timeRelatedCalculation, - float range) + float range ) { _timeProvider = timeSpanProvider; _timeRelatedCalculation = timeRelatedCalculation; - if (timeSpanProvider == null) - { + if( timeSpanProvider == null ) { return; } _beginning = _timeProvider.CurrentSecond; @@ -82,28 +81,33 @@ namespace StgSharp.Timing public virtual float Calculate() { - if (_timeProvider.CurrentSecond < _ending) - { + if( _timeProvider.CurrentSecond < _ending ) { return 0; } - return _timeRelatedCalculation(_timeProvider.CurrentSecond - _beginning); + return _timeRelatedCalculation( + _timeProvider.CurrentSecond - _beginning ); } - public static TimeFunction Proportional(TimeSpanProvider time, float begin, float range) + public static TimeFunction Proportional( + TimeSpanProvider time, + float begin, + float range ) + { + return new TimeFunction( time, ( float t ) => t + begin, range ); + } + + public virtual TimeFunction Renew( + (Func func, float range) funcPair ) { return new TimeFunction( - time, (float t) => t + begin, range - ); + _timeProvider, funcPair.func, funcPair.range ); } - public virtual TimeFunction Renew((Func func, float range) funcPair) + public virtual TimeFunction Renew( + Func func, + float range ) { - return new TimeFunction(_timeProvider, funcPair.func, funcPair.range); - } - - public virtual TimeFunction Renew(Func func, float range) - { - return new TimeFunction(_timeProvider, func, range); + return new TimeFunction( _timeProvider, func, range ); } public void Reset() @@ -116,18 +120,17 @@ namespace StgSharp.Timing public virtual TimeFunction Reverse() { float range = _ending - _beginning; - return new TimeFunction(_timeProvider, p => _timeRelatedCalculation(range - p), range); + return new TimeFunction( + _timeProvider, p => _timeRelatedCalculation( range - p ), + range ); } } - public sealed class TimeFunctionOne : TimeFunction { - internal TimeFunctionOne() : base() - { - } + internal TimeFunctionOne() : base() { } public override bool IsComplete { @@ -139,22 +142,23 @@ namespace StgSharp.Timing return 1; } - public override TimeFunction Renew((Func func, float range) funcPair) + public override TimeFunction Renew( + (Func func, float range) funcPair ) { throw new NotSupportedException(); } - public override TimeFunction Renew(Func func, float range) + public override TimeFunction Renew( + Func func, + float range ) { throw new NotSupportedException(); } -#pragma warning disable CA1822 + #pragma warning disable CA1822 public new void Reset() -#pragma warning restore CA1822 - { - - } + #pragma warning restore CA1822 + { } } } diff --git a/源代码/StgSharp/Logic/Timing/TimeProvider.cs b/源代码/StgSharp/Logic/Timing/TimeProvider.cs new file mode 100644 index 00000000..f045b73c --- /dev/null +++ b/源代码/StgSharp/Logic/Timing/TimeProvider.cs @@ -0,0 +1,152 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TimeProvider.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- + +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace StgSharp +{ + public static partial class StgSharp + { + + internal static StgSharpTime mainTimeProvider = new StgSharpTime(); + + internal static TimeSourceProviderBase MainTimeProvider => mainTimeProvider; + + } + + public sealed class StgSharpTime : TimeSourceProviderBase + { + + private static List subscriberList = new List( + ); + private static long accuracy; + private static Stopwatch mainProvider = new Stopwatch(); + private static Thread timeProvideThread; + + internal StgSharpTime() { } + + public static TimeSourceProviderBase OnlyInstance => StgSharp.MainTimeProvider; + + public override sealed void StartProvidingTime() + { + if( mainProvider.IsRunning ) { + return; + } + mainProvider.Start(); + + //speed test + long totalMS, internalFrequncy = Stopwatch.Frequency; + for( int i = 0; i < 100; i++ ) { + totalMS = mainProvider.ElapsedTicks / ( internalFrequncy / ( 1000L * 1000L ) ); + for( int t = 0; t < 10; t++ ) { + if( totalMS < 1000 ) { + subscriberList.Add( + new TimeSpanProvider( + 100L, TimeSpanProvider.DefaultProvider ) ); + } + } + } + mainProvider.Stop(); + subscriberList.Clear(); + totalMS = mainProvider.ElapsedTicks / ( internalFrequncy / ( 1000L * 1000L ) ) / 100L; + accuracy = ( totalMS * 2 ) / 3; + mainProvider.Reset(); + timeProvideThread = new Thread( new ThreadStart( ProvideTime ) ); + timeProvideThread.Start(); + } + + public override void StopProvidingTime() + { + lock( mainProvider ) { + mainProvider.Stop(); + } + } + + public void Terminate() + { + lock( mainProvider ) { + mainProvider.Stop(); + } + } + + protected override sealed void AddSubscriberUnsynced( + TimeSpanProvider subscriber ) + { + subscriberList.Add( subscriber ); + } + + protected override sealed void RemoveSubscriberUnsynced( + TimeSpanProvider subscriber ) + { + subscriberList.Remove( subscriber ); + } + + private void ProvideTime() + { + long totalMS, internalFrequncy = Stopwatch.Frequency; + lock( mainProvider ) { + mainProvider.Restart(); + } + while( mainProvider.IsRunning ) { + totalMS = mainProvider.ElapsedTicks / ( internalFrequncy / ( 1000L * 1000L ) ); + if( subscriberList.Count == 0 ) { + continue; + } + CheckSubscriberSemaphore.Wait(); + List toRemoveList = new List( + ); + foreach( TimeSpanProvider subscriber in subscriberList ) { + if( !subscriber.CheckTime( totalMS ) ) { + toRemoveList.Add( subscriber ); + InternalIO.InternalWriteLog( + $"Time subscriber {subscriber} is to be removed.", + LogType.Info ); + } + ; + } + if( toRemoveList.Count != 0 ) { + foreach( TimeSpanProvider subscriber in toRemoveList ) { + subscriberList.Remove( subscriber ); + } + } + CheckSubscriberSemaphore.Release(); + } + } + + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Logic/Timing/TimeSourceProvider.cs b/源代码/StgSharp/Logic/Timing/TimeSourceProvider.cs index a8ba8b56..ea1fdacc 100644 --- a/源代码/StgSharp/Logic/Timing/TimeSourceProvider.cs +++ b/源代码/StgSharp/Logic/Timing/TimeSourceProvider.cs @@ -39,54 +39,51 @@ namespace StgSharp.Timing public abstract class TimeSourceProviderBase { - private SemaphoreSlim _addSubscriberSemaphore = new SemaphoreSlim(1, 1); + private SemaphoreSlim _addSubscriberSemaphore = new SemaphoreSlim( + 1, 1 ); protected SemaphoreSlim CheckSubscriberSemaphore { get => _addSubscriberSemaphore; } - public void AddSubscriber(TimeSpanProvider subscriber) + public void AddSubscriber( TimeSpanProvider subscriber ) { - _addSubscriberSemaphore.Wait(); - try - { - AddSubscriberUnsynced(subscriber); + try { + _addSubscriberSemaphore.Wait(); + AddSubscriberUnsynced( subscriber ); } - catch (Exception) - { + catch( Exception ) { throw; } - finally - { + finally { _addSubscriberSemaphore.Release(); } } - public void RemoveSubscriber(TimeSpanProvider subscriber) + public void RemoveSubscriber( TimeSpanProvider subscriber ) { _addSubscriberSemaphore.Wait(); - try - { - RemoveSubscriberUnsynced(subscriber); + try { + RemoveSubscriberUnsynced( subscriber ); } - catch (Exception) - { + catch( Exception ) { throw; } - finally - { + finally { _addSubscriberSemaphore.Release(); } } public abstract void StartProvidingTime(); + public abstract void StopProvidingTime(); + protected abstract void AddSubscriberUnsynced( + TimeSpanProvider subscriber ); - protected abstract void AddSubscriberUnsynced(TimeSpanProvider subscriber); - protected abstract void RemoveSubscriberUnsynced(TimeSpanProvider subscriber); + protected abstract void RemoveSubscriberUnsynced( + TimeSpanProvider subscriber ); } - } diff --git a/源代码/StgSharp/Logic/Timing/TimeSpanAwaitingToken.cs b/源代码/StgSharp/Logic/Timing/TimeSpanAwaitingToken.cs new file mode 100644 index 00000000..7621d81c --- /dev/null +++ b/源代码/StgSharp/Logic/Timing/TimeSpanAwaitingToken.cs @@ -0,0 +1,165 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TimeSpanAwaitingToken.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Timing +{ + #nullable enable + + public sealed class TimeSpanAwaitingToken : IDisposable + { + + private static readonly ConcurrentStack s_unusedID = new ConcurrentStack( + [0] ); + private static int s_maxID; + private static readonly object s_lock = new object(); + + private EventHandler? _refreshHandler,_missHandler; + private int _size, _id; + + private object _participantObject = new object(); + private SemaphoreSlim _awaitingSemaphore; + + private TimeSpanProvider _provider; + + internal TimeSpanAwaitingToken( TimeSpanProvider provider ) + { + if( s_unusedID.Count == 1 ) { + lock( s_lock ) { + s_unusedID.TryPop( out int id ); + TokenID = id; + s_unusedID.Push( s_maxID++ ); + } + } else { + s_unusedID.TryPop( out int id ); + TokenID = id; + } + _provider = provider; + _size = 1; + _awaitingSemaphore = new SemaphoreSlim( 0, 1 ); + } + + internal TimeSpanAwaitingToken( TimeSpanProvider provider, int count ) + { + if( s_unusedID.Count == 1 ) { + lock( s_lock ) { + s_unusedID.TryPop( out int id ); + TokenID = id; + s_unusedID.Push( s_maxID++ ); + } + } else { + s_unusedID.TryPop( out int id ); + TokenID = id; + } + _provider = provider; + _size = count; + _awaitingSemaphore = new SemaphoreSlim( 0, _size ); + } + + public event EventHandler MissTimeSpanRefreshed + { + add { _missHandler += value; } + remove { _missHandler -= value; } + } + + public event EventHandler TimeSpanRefreshed + { + add { _refreshHandler += value; } + remove { _refreshHandler -= value; } + } + + public int TokenID + { + get => _id; + private set => _id = value; + } + + internal SemaphoreSlim AwaitingSemaphoreSlim + { + get => _awaitingSemaphore; + } + + public void Dispose() + { + _provider.QuitSpanAwaiting( this ); + s_unusedID.Push( TokenID ); + _awaitingSemaphore.Dispose(); + GC.SuppressFinalize( this ); + } + + public override int GetHashCode() + { + return _id; + } + + public void Participant() + { + lock( _participantObject ) { + _size++; + SemaphoreSlim newSemaphore = new SemaphoreSlim( + _awaitingSemaphore.CurrentCount, _size ); + Interlocked.Exchange( ref _awaitingSemaphore, newSemaphore ) + .Dispose(); + } + } + + public void WaitNextSpan() + { + _awaitingSemaphore.Wait(); + } + + internal void MissRefresh() + { + _missHandler?.Invoke( this, EventArgs.Empty ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + internal void Refresh() + { + _refreshHandler?.Invoke( this, EventArgs.Empty ); + } + + ~TimeSpanAwaitingToken() + { + Dispose(); + } + + } + #nullable restore +} diff --git a/源代码/StgSharp/Logic/Timing/TimeSpanProvider.cs b/源代码/StgSharp/Logic/Timing/TimeSpanProvider.cs index 96e57b9e..3c327842 100644 --- a/源代码/StgSharp/Logic/Timing/TimeSpanProvider.cs +++ b/源代码/StgSharp/Logic/Timing/TimeSpanProvider.cs @@ -29,104 +29,110 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- - using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Runtime.InteropServices; using System.Threading; namespace StgSharp.Timing { - /// /// A microsecond-accuracy timer. It will refresh every a certain time span. /// public class TimeSpanProvider { - private Action _frameUpdateMissCallback = () => { }; - private Action _refreshCallback; private bool _subscribed; - private Counter timeSpanCount = new Counter(-1, 1, 1); - private readonly int _maxSpanCount; + + private ConcurrentQueue _tokenToAdd = new ConcurrentQueue( + ); + private ConcurrentQueue _tokenToQuit; + private Counter timeSpanCount = new Counter( -1, 1, 1 ); + private HashSet _awaitingTokens; + private long _maxSpanCount; private long _spanBegin; private readonly long _spanLength; - private SemaphoreSlim _refreshSemaphore = new SemaphoreSlim(0, 1); private readonly TimeSourceProviderBase _timeSource; - - /// - /// Create a new and define the length of time span. Length of a single time span is defined in microseconds. + /// Create a new and define the length of time span. Length + /// of a single time span is defined in microseconds. /// /// /// - public TimeSpanProvider(long spanMicroSeconds, TimeSourceProviderBase provider) + public TimeSpanProvider( + long spanMicroSeconds, + TimeSourceProviderBase provider ) { - if (provider == null) - { - throw new ArgumentNullException(nameof(provider)); + if( provider == null ) { + throw new ArgumentNullException( nameof( provider ) ); } _timeSource = provider; _spanLength = spanMicroSeconds; _maxSpanCount = int.MaxValue; - provider.AddSubscriber(this); + provider.AddSubscriber( this ); _subscribed = true; - _refreshCallback = new Action(() => { }); + _awaitingTokens = new HashSet(); + _tokenToQuit = new ConcurrentQueue(); } /// - /// Create a new and define the length of time span. - /// Length of a single time span is defined in seconds. + /// Create a new and define the length of time span. Length + /// of a single time span is defined in seconds. /// /// /// - public TimeSpanProvider(double spanSeconds, TimeSourceProviderBase provider) + public TimeSpanProvider( + double spanSeconds, + TimeSourceProviderBase provider ) { - if (provider == null) - { - throw new ArgumentNullException(nameof(provider)); + if( provider == null ) { + throw new ArgumentNullException( nameof( provider ) ); } - _spanLength = (long)(spanSeconds * 1000L * 1000L); + _timeSource = provider; + _spanLength = ( long )( spanSeconds * 1000L * 1000L ); _spanBegin = -_spanLength; - _maxSpanCount = int.MaxValue; - provider.AddSubscriber(this); + _maxSpanCount = long.MaxValue; + provider.AddSubscriber( this ); _subscribed = true; - _refreshCallback = new Action(() => { }); + _awaitingTokens = new HashSet(); + _tokenToQuit = new ConcurrentQueue(); } /// - /// Create a new and define the length of time span. Length of a single time span is defined in microseconds. + /// Create a new and define the length of time span. Length + /// of a single time span is defined in microseconds. /// /// /// /// - public TimeSpanProvider(long spanLength, int maxSpan, TimeSourceProviderBase provider) + public TimeSpanProvider( + long spanLength, + long maxSpan, + TimeSourceProviderBase provider ) { - if (provider == null) - { - throw new ArgumentNullException(nameof(provider)); + if( provider == null ) { + throw new ArgumentNullException( nameof( provider ) ); } - if (maxSpan <= 0) - { - maxSpan = int.MaxValue; + if( maxSpan <= 0 ) { + throw new ArgumentException( + "Sapn count cannot be smaller than zero" ); } - _spanLength = spanLength; _spanBegin = -_spanLength; - provider.AddSubscriber(this); + _timeSource = provider; + _spanLength = spanLength; + _spanBegin = -_spanLength; + provider.AddSubscriber( this ); _subscribed = true; - } - - /// - /// The method this will call every time a new time span started. - /// - public Action SpanRefreshCallback - { - get => _refreshCallback; - set => _refreshCallback = value; + _awaitingTokens = new HashSet(); + _tokenToQuit = new ConcurrentQueue(); } public double SpanLength { - get => (_spanLength * 1.0) / (1000L * 1000L); + get => ( _spanLength * 1.0 ) / ( 1000L * 1000L ); } public float CurrentSecond @@ -136,7 +142,7 @@ namespace StgSharp.Timing public float SpanLengthLowPrecession { - get => (_spanLength * 1.0f) / (1000 * 1000); + get => ( _spanLength * 1.0f ) / ( 1000 * 1000 ); } public int CurrentSpan @@ -145,22 +151,39 @@ namespace StgSharp.Timing } /// - /// Time source provider provided in internal framework. + /// Time source provider provided in internal framework. /// public static TimeSourceProviderBase DefaultProvider => StgSharpTime.OnlyInstance; - public void SubscribeToTimeSource(TimeSourceProviderBase serviceHandler) + public TimeSpanAwaitingToken ParticipantSpanAwaiting( int count ) { - if (serviceHandler == null) - { - throw new ArgumentNullException(nameof(serviceHandler)); + TimeSpanAwaitingToken token = new TimeSpanAwaitingToken( + this, count ); + _tokenToAdd.Enqueue( token ); + return token; + } + + public void QuitSpanAwaiting( TimeSpanAwaitingToken token ) + { + _tokenToQuit.Enqueue( token ); + } + + public void StopSpanProviding() + { + Interlocked.Exchange( ref _maxSpanCount, 0 ); + } + + public void SubscribeToTimeSource( + TimeSourceProviderBase serviceHandler ) + { + if( serviceHandler == null ) { + throw new ArgumentNullException( nameof( serviceHandler ) ); } - if (_subscribed) - { + if( _subscribed ) { return; } _subscribed = true; - serviceHandler.AddSubscriber(this); + serviceHandler.AddSubscriber( this ); } public int ToInt32() @@ -168,49 +191,41 @@ namespace StgSharp.Timing return timeSpanCount.Value; } - public void WaitNextSpan() + internal bool CheckTime( long microseconds ) { - _refreshSemaphore.Wait(); - } - - internal bool CheckTime(long microseconds) - { - //Console.Write("1 "); - if (microseconds - _spanBegin < _spanLength) - { + if( microseconds - _spanBegin < _spanLength ) { return true; } - //Console.Write("2 "); + while( !_tokenToAdd.IsEmpty ) { + _tokenToAdd.TryDequeue( out TimeSpanAwaitingToken tokenAdd ); + _awaitingTokens.Add( tokenAdd ); + } + while( !_tokenToQuit.IsEmpty ) { + _tokenToQuit.TryDequeue( out TimeSpanAwaitingToken tokenQuit ); + _awaitingTokens.Remove( tokenQuit ); + InternalIO.InternalWriteLog( + $"Awaiting token {tokenQuit!.TokenID} has been removed.", + LogType.Info ); + } + _spanBegin = microseconds; timeSpanCount++; - //Console.Write("3 "); - if (_refreshCallback != null) - { - _refreshCallback(); - } - //Console.Write("4 "); - if (_refreshSemaphore.CurrentCount == 0) - { - _refreshSemaphore.Release(); - } - else - { - if (_frameUpdateMissCallback != null) - { - _frameUpdateMissCallback(); + + foreach( TimeSpanAwaitingToken item in _awaitingTokens ) { + if( item.AwaitingSemaphoreSlim.CurrentCount == 0 ) { + item.AwaitingSemaphoreSlim.Release(); + item.Refresh(); + } else { + item.MissRefresh(); } } - //Console.Write("5 "); - //Console.WriteLine( $"{timeSpanCount}\n" ); + return timeSpanCount < _maxSpanCount; } - public static implicit operator int(TimeSpanProvider provider) + public static explicit operator int( + [NotNull]TimeSpanProvider provider ) { - if (provider == null) - { - return 0; - } return provider.ToInt32(); } diff --git a/源代码/StgSharp/MVVM/OpenGLControllingItemRender.cs b/源代码/StgSharp/MVVM/OpenGLControllingItemRender.cs index 28c0cf08..79f6649e 100644 --- a/源代码/StgSharp/MVVM/OpenGLControllingItemRender.cs +++ b/源代码/StgSharp/MVVM/OpenGLControllingItemRender.cs @@ -53,10 +53,5 @@ namespace StgSharp.MVVM throw new NotImplementedException(); } - protected override void Main() - { - throw new NotImplementedException(); - } - } } diff --git a/源代码/StgSharp/MVVM/View/ViewBase.cs b/源代码/StgSharp/MVVM/View/ViewBase.cs index 617dfe71..ac76c765 100644 --- a/源代码/StgSharp/MVVM/View/ViewBase.cs +++ b/源代码/StgSharp/MVVM/View/ViewBase.cs @@ -29,13 +29,14 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- using StgSharp.Graphics; -using StgSharp.Timing; using StgSharp.Math; using StgSharp.MVVM.ViewModel; +using StgSharp.Timing; using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Numerics; using System.Reflection; @@ -44,15 +45,16 @@ using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Threading; -using System.Diagnostics.CodeAnalysis; namespace StgSharp.MVVM.View { /// - /// ViewBase is the base type for all view types, providing context binding and control element binding. - /// A complete view should contain one complete , , and , - /// which provide layout descriptions of control elements, user responses, and rendering implementations in the view. - /// Data between instances of , , and is shared through . + /// ViewBase is the base type for all view types, providing context binding and control element + /// binding. A complete view should contain one complete , , and , which provide layout + /// descriptions of control elements, user responses, and rendering implementations in the view. + /// Data between instances of , , + /// and is shared through . /// public abstract unsafe partial class ViewBase @@ -70,46 +72,43 @@ namespace StgSharp.MVVM.View private ViewPort context; - private delegate bool GetDataBindingEntryDelegate(string name, out DataBindingEntry entry); + private delegate bool GetDataBindingEntryDelegate( + string name, + out DataBindingEntry entry ); - public DataBindingEntry this[string name] + public DataBindingEntry this[ string name ] { get { - if (TryGetObjectReference(name, out DataBindingEntry entry)) - { + if( getDataBindingEntry( name, out DataBindingEntry entry ) ) { return entry; } - if (getDataBindingEntry(name, out entry)) - { + if( TryGetObjectReference( name, out entry ) ) { return entry; } throw new KeyNotFoundException(); } } - internal bool IsWaitingWindowEvent - { - get => context.IsWaitingEvent; - } - public (int x, int y, int z) UnitCubeSize { get => unitCubeSize; } - public bool Activated { get; internal set; } + public bool Activated + { + get; + internal set; + } public int Height { get => context.Height; - private set { context.Height = value; } } public int Width { get => context.Width; - private set { context.Width = value; } } public IntPtr Monitor => context.Monitor; @@ -124,7 +123,11 @@ namespace StgSharp.MVVM.View public string ContextName => context.Name; - public string SelfName { get; set; } + public string SelfName + { + get; + set; + } public ViewPort Port { @@ -136,7 +139,7 @@ namespace StgSharp.MVVM.View get => time; } - protected IViewRender Render + protected internal IViewRender Render { get => _render; set => _render = value; @@ -148,20 +151,24 @@ namespace StgSharp.MVVM.View set => _responder = value; } - public abstract void CustomizedInitialize([NotNull]ViewModelBase viewModelBinding); + public abstract void CustomizedInitialize( + [NotNull]ViewModelBase viewModelBinding ); /// /// Get the status of a certain key on the keyboard. /// /// - /// representing if a key is pressed or released. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public KeyStatus GetKeyStatus(KeyboardKey key) + /// representing if a key is pressed or released. + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public KeyStatus GetKeyStatus( KeyboardKey key ) { - return InternalIO.glfwGetKey(context.ViewPortID, (int)key); + return InternalIO.glfwGetKey( context.ViewPortID, ( int )key ); } - public void InternalInitialize(string name, (int, int, int) cubeSize, [NotNull]ViewModelBase viewModelBinding) + public void InternalInitialize( + string name, + (int, int, int) cubeSize, + [NotNull]ViewModelBase viewModelBinding ) { SelfName = name; unitCubeSize = cubeSize; @@ -169,32 +176,33 @@ namespace StgSharp.MVVM.View context = viewModelBinding.ViewPortBinding; time = viewModelBinding.frameTimeProvider; - CustomizedInitialize(viewModelBinding); + CustomizedInitialize( viewModelBinding ); } - public abstract bool TryGetObjectReference(string name, out DataBindingEntry entry); + public abstract bool TryGetObjectReference( + string name, + out DataBindingEntry entry ); public void Use() { - if (usedFrame == 0) - { - if (!ValidateInitialization()) - { - throw new InvalidOperationException("This view is not correctly initialized before rendering."); + if( usedFrame == 0 ) { + if( !ValidateInitialization() ) { + throw new InvalidOperationException( + "This view is not correctly initialized before rendering." ); } } Show(); + usedFrame++; } public bool ValidateInitialization() { - return (_design != null) && (_render != null) && (getDataBindingEntry != null) && (_responder != null) - && _design.ValidateInitializing() && _responder.ValidateInitializing() && _render.ValidateInitializing() - ; + return ( _design != null ) && ( _render != null ) && ( getDataBindingEntry != null ) && ( _responder != null ) && _design.ValidateInitializing( + ) && _responder.ValidateInitializing() && _render.ValidateInitializing( + ); } protected internal abstract void Show(); } - } \ No newline at end of file diff --git a/源代码/StgSharp/MVVM/View/ViewDesigner.cs b/源代码/StgSharp/MVVM/View/ViewDesigner.cs index 6e681253..c0d1cb9f 100644 --- a/源代码/StgSharp/MVVM/View/ViewDesigner.cs +++ b/源代码/StgSharp/MVVM/View/ViewDesigner.cs @@ -44,10 +44,12 @@ namespace StgSharp.MVVM.View { public abstract partial class ViewBase { - public interface IViewDesigner where TView : ViewBase + + public interface IViewDesigner where TView: ViewBase { abstract void CustomizedInitialize(); + abstract void Initialize(); abstract bool ValidateInitializing(); @@ -55,11 +57,12 @@ namespace StgSharp.MVVM.View } /// - /// ViewDesigner provides descriptions of various controls in the view, - /// binds the controls to specific user actions and behaviors, - /// and describes the layout and interactions of each control. + /// ViewDesigner provides descriptions of various controls in the view, binds the controls + /// to specific user actions and behaviors, and describes the layout and interactions of + /// each control. /// - public abstract class ViewDesigner : IViewDesigner where TView : ViewBase + public abstract class ViewDesigner : IViewDesigner + where TView: ViewBase { private KeyboardButtonGroup currentButtonGroup; @@ -67,7 +70,7 @@ namespace StgSharp.MVVM.View private List _controlList; protected TView _binding; - public ViewDesigner(TView binding) + public ViewDesigner( TView binding ) { _binding = binding; _controlList = new List(); @@ -79,52 +82,52 @@ namespace StgSharp.MVVM.View } public CharacterLineIndexImage CreateCharacterLine( - int length, char blankFilling, PlainGeometryMesh tittle, IEnumerable<(char, PlainGeometryMesh)> charList - ) + int length, + char blankFilling, + PlainGeometryMesh tittle, + IEnumerable<(char, PlainGeometryMesh)> charList ) { - CharacterLineIndexImage ret = new CharacterLineIndexImage(length, blankFilling, tittle, charList); - _controlList.Add(ret); + CharacterLineIndexImage ret = new CharacterLineIndexImage( + length, blankFilling, tittle, charList ); + _controlList.Add( ret ); return ret; } public TriggerButton CreateKeyboardButton( - Rectangle bonding, TextureProvider defaultAnimation, bool isEnable - ) + Rectangle bonding, + TextureProvider defaultAnimation, + bool isEnable ) { TriggerButton ret = new TriggerButton(); ret.BoundingBox = bonding; ret.Texture = defaultAnimation; - if (isEnable) - { + if( isEnable ) { ret.IsDisabled = false; ret.Enable(); - } - else - { + } else { ret.IsDisabled = true; ret.Disable(); } - currentButtonGroup.AddButton(ret); + currentButtonGroup.AddButton( ret ); return ret; } public TButtonGroup CreateKeyboardButtonGroup( - ITrigger leftBidning, - ITrigger rightBinding, - ITrigger upBinding, - ITrigger downBinding, - ITrigger confirmBinding - ) - where TButtonGroup : KeyboardButtonGroup, new() + IClickTrigger leftBidning, + IClickTrigger rightBinding, + IClickTrigger upBinding, + IClickTrigger downBinding, + IClickTrigger confirmBinding ) + where TButtonGroup: KeyboardButtonGroup, new() { TButtonGroup ret = new TButtonGroup(); - _controlList.Add(ret); + _controlList.Add( ret ); currentButtonGroup = ret; - _binding.Responder[leftBidning] = ret.MoveLeft; - _binding.Responder[rightBinding] = ret.MoveRight; - _binding.Responder[upBinding] = ret.MoveUp; - _binding.Responder[downBinding] = ret.MoveDown; - _binding.Responder[confirmBinding] = ret.Confirm; + _binding.Responder[ leftBidning ] = ret.MoveLeft; + _binding.Responder[ rightBinding ] = ret.MoveRight; + _binding.Responder[ upBinding ] = ret.MoveUp; + _binding.Responder[ downBinding ] = ret.MoveDown; + _binding.Responder[ confirmBinding ] = ret.Confirm; return ret; } diff --git a/源代码/StgSharp/MVVM/View/ViewRender.cs b/源代码/StgSharp/MVVM/View/ViewRender.cs index 0e44093b..a2816551 100644 --- a/源代码/StgSharp/MVVM/View/ViewRender.cs +++ b/源代码/StgSharp/MVVM/View/ViewRender.cs @@ -28,9 +28,9 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data; using StgSharp.Graphics; - using StgSharp.Math; using StgSharp.MVVM.ViewModel; @@ -48,13 +48,20 @@ namespace StgSharp.MVVM.View { public abstract partial class ViewBase { - protected interface IViewRender where TView : ViewBase + + protected internal interface IViewRender + where TView: ViewBase { - RenderStream this[string renderName] { get; } + RenderStream this[ DataLabel renderName ] + { + get; + } void CustomizedInitialize(); + IEnumerator GetEnumerator(); + void Initialize(); bool ValidateInitializing(); @@ -62,27 +69,26 @@ namespace StgSharp.MVVM.View } protected abstract class ViewRender : IViewRender - where TView : ViewBase + where TView: ViewBase { - protected ViewRender(TView binding) + protected ViewRender( TView binding ) { _binding = binding; + _render = new Dictionary(); } - public RenderStream this[string renderName] + public RenderStream this[ DataLabel renderName ] { - get => _render.TryGetValue(renderName, out RenderStream stream) ? stream : (null!); + get => _render.TryGetValue( + renderName, out RenderStream stream ) ? + stream : ( null! ); protected set { - - if (_render.ContainsKey(renderName)) - { - _render[renderName] = value; - } - else - { - _render.Add(renderName, value); + if( _render.ContainsKey( renderName ) ) { + _render[ renderName ] = value; + } else { + _render.Add( renderName, value ); } } } @@ -91,31 +97,43 @@ namespace StgSharp.MVVM.View protected ViewPort ContextBinding => _binding.context; - protected ViewDesigner Design => (_binding.Designer as ViewDesigner)!; + protected ViewDesigner Design => ( _binding.Designer as ViewDesigner )!; - protected Dictionary Render + protected Dictionary Render { get => _render; } - protected ViewResponder Responder => (_binding.Responder as ViewResponder)!; + protected ViewResponder Responder => ( _binding.Responder as ViewResponder )!; - public T CreateRenderStream((int x, int y, int z) unitCubeSize) where T : RenderStream, new() + public T CreateRenderStream( (int x, int y, int z) unitCubeSize ) + where T: RenderStream, new() { T ret = new T(); - ret.Initialize(_binding.context, unitCubeSize, Binding.TimeProvider); + ret.Initialize( + _binding.context, unitCubeSize, Binding.TimeProvider ); return ret; } - public T CreateRenderStream(ViewPort vp, (int x, int y, int z) unitCubeSize) where T : RenderStream, new() + public T CreateRenderStream( + ViewPort vp, + (int x, int y, int z) unitCubeSize ) + where T: RenderStream, new() { T ret = new T(); - ret.Initialize(vp, unitCubeSize, Binding.TimeProvider); + ret.Initialize( vp, unitCubeSize, Binding.TimeProvider ); return ret; } public abstract void CustomizedInitialize(); + public IEnumerator GetEnumerator() + { + foreach( RenderStream item in Render.Values ) { + yield return item.BindedViewPortContext; + } + } + public void Initialize() { CustomizedInitialize(); @@ -123,12 +141,11 @@ namespace StgSharp.MVVM.View public abstract bool ValidateInitializing(); -#pragma warning disable CS8618 - private Dictionary _render; + #pragma warning disable CS8618 + private Dictionary _render; private TView _binding; #pragma warning restore CS8618 - - } + } } diff --git a/源代码/StgSharp/MVVM/View/ViewResponder.cs b/源代码/StgSharp/MVVM/View/ViewResponder.cs index 19c1f0de..d7719d27 100644 --- a/源代码/StgSharp/MVVM/View/ViewResponder.cs +++ b/源代码/StgSharp/MVVM/View/ViewResponder.cs @@ -29,6 +29,7 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- using StgSharp.Controlling.UsrActivity; +using StgSharp.MVVM.ViewModel; using System; using System.Collections.Generic; @@ -40,14 +41,20 @@ namespace StgSharp.MVVM.View { public partial class ViewBase { - protected interface IViewResponder where TVIew : ViewBase + + protected interface IViewResponder where TVIew: ViewBase { - Action? this[ITrigger trigger] { get; set; } + Action? this[ IClickTrigger trigger ] + { + get; + set; + } - void CustomizedInitialize(Func keyRegister); + void CustomizedInitialize( + Func keyRegister ); - void Initialize(Func keyGetter); + void Initialize( MethodLookUpDelegate methodGetter ); void ProcessUserInput(); @@ -55,67 +62,75 @@ namespace StgSharp.MVVM.View } - protected abstract class ViewResponder : IViewResponder where TView : ViewBase + protected abstract class ViewResponder : IViewResponder + where TView: ViewBase { private bool _isInitialized; - private Dictionary keyCallbackIndex; + private Dictionary keyCallbackIndex; private Dictionary nameToCallbackMap; private TView _binding; - protected ViewResponder(TView binding) + protected ViewResponder( TView binding ) { - keyCallbackIndex = new Dictionary(); + keyCallbackIndex = new Dictionary(); nameToCallbackMap = new Dictionary(); _binding = binding; } - public Action? this[ITrigger trigger] + #pragma warning disable CA1043 + public Action? this[ IClickTrigger trigger ] + #pragma warning restore CA1043 { - get => keyCallbackIndex.TryGetValue(trigger, out Action callback) ? callback : null; + get => keyCallbackIndex.TryGetValue( + trigger, out Action callback ) ? + callback : null; set { - if (keyCallbackIndex.TryGetValue(trigger, out Action callback)) - { + if( keyCallbackIndex.TryGetValue( + trigger, out Action callback ) ) { callback += value; - } - else - { - keyCallbackIndex.Add(trigger, value ?? throw new ArgumentNullException(nameof(value))); + } else { + keyCallbackIndex.Add( + trigger, + value ?? + throw new ArgumentNullException( + nameof( value ) ) ); } } } protected TView Binding => _binding; - public abstract void CustomizedInitialize(Func keyRegister); + public abstract void CustomizedInitialize( + Func keyRegister ); - public void Initialize(Func keyGetter) + public void Initialize( MethodLookUpDelegate methodGetter ) { - if (_isInitialized) - { + if( _isInitialized ) { return; } CustomizedInitialize( - (trigger, name) => - { - if (!nameToCallbackMap.TryGetValue(name, out Action ret)) - { - ret = keyGetter.Invoke(name) ?? - throw new InvalidOperationException($"Cannot find method named {name} in binded view model"); + ( trigger, name ) => { + if( !nameToCallbackMap.TryGetValue( + name, out Action ret ) ) { + if( methodGetter( name, out Action lookup ) ) { + this[ trigger ] = lookup; + } else { + throw new InvalidOperationException( + $"Cannot find method named {name} in binded view model" ); + } } - this[trigger] = ret; return ret; - } - ); + } ); } public void ProcessUserInput() { - foreach (KeyValuePair pair in keyCallbackIndex) - { - if (InternalIO.glfwGetKey(_binding.ViewHandle, pair.Key.TargetKeyOrButtonID) == pair.Key.TriggeredStatus) - { + foreach( KeyValuePair pair in keyCallbackIndex ) { + if( InternalIO.glfwGetKey( + _binding.ViewHandle, + pair.Key.TargetKeyOrButtonID ) == pair.Key.TriggeredStatus ) { pair.Value(); } } diff --git a/源代码/StgSharp/MVVM/ViewModel/DataBinding.cs b/源代码/StgSharp/MVVM/ViewModel/DataBinding.cs index eadf576d..57329dec 100644 --- a/源代码/StgSharp/MVVM/ViewModel/DataBinding.cs +++ b/源代码/StgSharp/MVVM/ViewModel/DataBinding.cs @@ -28,8 +28,7 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- -using StgSharp.Data; - +using StgSharp.Data.Intrinsic; using System; using System.Collections.Generic; using System.Data.Common; @@ -45,50 +44,59 @@ namespace StgSharp.MVVM.ViewModel { #nullable enable - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate ref object BindingDataGetter(); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void BindingDataSetter(ref object value); +[UnmanagedFunctionPointer( CallingConvention.Cdecl )] + public delegate ref object BindingDataGetter(); +[UnmanagedFunctionPointer( CallingConvention.Cdecl )] + public delegate void BindingDataSetter( ref object value ); +[UnmanagedFunctionPointer( CallingConvention.Cdecl )] + public delegate bool MethodLookUpDelegate( + string name, + out Action callback ); public abstract partial class ViewModelBase { - public bool MethodLookup(string methodName, out Action callback) + + public bool MethodLookup( string methodName, out Action callback ) { - MethodInfo method = GetType().GetMethod(methodName); - try - { - callback = (Action)Delegate.CreateDelegate(typeof(Action), this, methodName); + MethodInfo method = GetType().GetMethod( methodName )!; + if( method == null ) { + callback = null!; + return false; + } + try { + callback = ( Action )Delegate.CreateDelegate( + typeof( Action ), this, methodName ); return true; } - catch (MissingMethodException) - { + catch( MissingMethodException ) { callback = null!; return false; } - catch (MethodAccessException) - { + catch( MethodAccessException ) { callback = null!; return false; } - catch (Exception) - { + catch( Exception ) { throw; } - } + } - [StructLayout(LayoutKind.Explicit)] + [StructLayout( LayoutKind.Explicit )] public unsafe struct DataBindingEntry { - [FieldOffset(0)] private M128 _mask; - [FieldOffset(0)] private IntPtr getterPtr; - [FieldOffset(8)] private IntPtr setterPtr; + + [FieldOffset( 0 )] private IntPtr getterPtr; + [FieldOffset( 8 )] private IntPtr setterPtr; + [FieldOffset( 0 )] private M128 _mask; public DataBindingEntry( [NotNull] BindingDataGetter gettingCallback, - [NotNull] BindingDataSetter settingCallback) + [NotNull] BindingDataSetter settingCallback ) { - getterPtr = Marshal.GetFunctionPointerForDelegate(gettingCallback); - setterPtr = Marshal.GetFunctionPointerForDelegate(settingCallback); + getterPtr = Marshal.GetFunctionPointerForDelegate( gettingCallback ); + setterPtr = Marshal.GetFunctionPointerForDelegate( settingCallback ); } public static DataBindingEntry NullBinding @@ -96,49 +104,54 @@ namespace StgSharp.MVVM.ViewModel get => new DataBindingEntry(); } - public bool ExactEqual(DataBindingEntry other) + public bool Equals( DataBindingEntry other ) { - return (getterPtr == other.getterPtr) && (setterPtr == other.setterPtr); + return ( _mask == other._mask ); } - public ref object GetValue() + public override bool Equals( object obj ) { - return ref ((delegate* unmanaged[Cdecl])getterPtr)(); - } - - public void SetValue(ref object value) - { - ((delegate* unmanaged[Cdecl])setterPtr)(ref value); - } - - public static bool operator ==(DataBindingEntry left, DataBindingEntry right) - { - return left._mask == right._mask; - } - - public static bool operator !=(DataBindingEntry left, DataBindingEntry right) - { - return left._mask != right._mask; - } - - public bool Equals(DataBindingEntry other) - { - return (_mask == other._mask); - } - - public override bool Equals(object obj) - { - if (obj is not DataBindingEntry other) - { + if( obj is not DataBindingEntry other ) { return false; } - return Equals(other); + return Equals( other ); + } + + public bool ExactEqual( DataBindingEntry other ) + { + return ( getterPtr == other.getterPtr ) && ( setterPtr == other.setterPtr ); } public override int GetHashCode() { return _mask.GetHashCode(); } + + public ref object GetValue() + { + return ref ( ( delegate* unmanaged[Cdecl] )getterPtr )(); + } + + public void SetValue( ref object value ) + { + ( ( delegate* unmanaged[Cdecl] )setterPtr )( + ref value ); + } + + public static bool operator !=( + DataBindingEntry left, + DataBindingEntry right ) + { + return left._mask != right._mask; + } + + public static bool operator ==( + DataBindingEntry left, + DataBindingEntry right ) + { + return left._mask == right._mask; + } + } #nullable restore diff --git a/源代码/StgSharp/MVVM/ViewModel/ShowViewPort.cs b/源代码/StgSharp/MVVM/ViewModel/ShowViewPort.cs index a53a729d..e4a30aba 100644 --- a/源代码/StgSharp/MVVM/ViewModel/ShowViewPort.cs +++ b/源代码/StgSharp/MVVM/ViewModel/ShowViewPort.cs @@ -28,8 +28,11 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Controls; using StgSharp.Graphics; using StgSharp.MVVM.View; +using StgSharp.Threading; +using StgSharp.Timing; using System; using System.Collections.Generic; @@ -40,6 +43,8 @@ namespace StgSharp.MVVM.ViewModel { public abstract partial class ViewModelBase { + + private volatile bool _closed = true; private ViewBase _nextView, _currentView; protected ViewBase CurrentView @@ -51,46 +56,91 @@ namespace StgSharp.MVVM.ViewModel /// /// CustomizeInit this form and render it on screen, and respond with operation /// - public unsafe void UseViewModel(string viewEntryName) + public unsafe void UseViewModel( string viewEntryName ) { CustomizeInitialize(); - //BuildGlobalKeyControl(); - UseViewInNextFrame(viewEntryName); - while (0 == InternalIO.glfwWindowShouldClose(this.viewPortDisplay.ViewPortID)) - { - ShowFrameOnce(); + UseViewInNextFrame( viewEntryName ); + TimeSpanAwaitingToken fpsCountingToken = fpsCountProvider.ParticipantSpanAwaiting( + 1 ); + fpsCountingToken.TimeSpanRefreshed += CountFps; + fpsCountingToken.MissTimeSpanRefreshed += CountFps; + if( _nextView != _currentView ) { + Interlocked.Exchange( ref _currentView, _nextView ); } + Thread renderThread = new Thread( + ( token ) => { + try { + ProcessFrameWithoutEvent(); + } + catch( Exception ex ) { + InternalIO.InternalWriteLog( + $"Critical error when rendering:\n" + $"{ex}", + LogType.Error ); + ShouldClose = true; + } + } ); + renderThread.Start(); + /**/ + using( TimeSpanAwaitingToken eventAwaitingToken = frameTimeProvider.ParticipantSpanAwaiting( + 1 ) ) { + while( _closed ) { + if( _nextView != _currentView ) { + Interlocked.Exchange( ref _currentView, _nextView ); + } + InternalIO.glfwPollEvents(); + eventAwaitingToken.WaitNextSpan(); + _closed = !ShouldClose; + } + } + /**/ + renderThread.Join(); + fpsCountingToken.Dispose(); + fpsCountProvider.StopSpanProviding(); + frameTimeProvider.StopSpanProviding(); } - protected void UseViewInNextFrame(string name) + protected void UseViewInNextFrame( string name ) { - if (!allView.TryGetValue(name, out ViewBase v)) - { - throw new KeyNotFoundException($"{$"Cannot find View named {name} "}{$"in current View Model of {GetType().FullName}"}"); + if( !allView.TryGetValue( name, out ViewBase v ) ) { + throw new KeyNotFoundException( + $"{$"Cannot find View named {name} "}{$"in current View Model of {GetType().FullName}"}" ); } CurrentView = v; } + private void CountFps( object sender, EventArgs e ) + { + Interlocked.Exchange( ref _frameSpeed, _frameCount ); + Interlocked.Exchange( ref _frameCount, 0 ); + /**/ + Console.Clear(); + Console.WriteLine( FrameSpeed ); + /**/ + } + private unsafe void PrivateShow() { - if (0 == InternalIO.glfwWindowShouldClose(this.viewPortDisplay.ViewPortID)) - { + if( 0 == InternalIO.glfwWindowShouldClose( + this.viewPortDisplay.ViewPortID ) ) { CurrentView.Use(); RenderStream.PollEvents(); } } - private void ShowFrameOnce() + private void ProcessFrameWithoutEvent() { - viewPortDisplay.FlushSize(); - if (_nextView != _currentView) - { - Interlocked.Exchange(ref _currentView, _nextView); + using( TimeSpanAwaitingToken renderAwaitingToken = frameTimeProvider.ParticipantSpanAwaiting( + 1 ) ) { + renderAwaitingToken.TimeSpanRefreshed += ( _, _ ) => { }; + while( _closed ) { + foreach( ViewPort context in CurrentView.Render ) { + context.FlushSize(); + } + CurrentView.Use(); + renderAwaitingToken.WaitNextSpan(); + Interlocked.Add( ref _frameCount, 1 ); + } } - CurrentView.Use(); - RenderStream.PollEvents(); - frameTimeProvider.WaitNextSpan(); - Interlocked.Add(ref _frameCount, 1); } } diff --git a/源代码/StgSharp/MVVM/ViewModel/ViewManage.cs b/源代码/StgSharp/MVVM/ViewModel/ViewManage.cs index dc77d997..a8959655 100644 --- a/源代码/StgSharp/MVVM/ViewModel/ViewManage.cs +++ b/源代码/StgSharp/MVVM/ViewModel/ViewManage.cs @@ -44,13 +44,15 @@ namespace StgSharp.MVVM.ViewModel private Dictionary allView; - public T CreateAndBindView(string name, (int x, int y, int z) unitCubeSize) - where T : ViewBase, new() + public T CreateAndBindView( + string name, + (int x, int y, int z) unitCubeSize ) + where T: ViewBase, new() { T ret = new T(); ret.SelfName = name; - ret.InternalInitialize(name, unitCubeSize, this); - allView.Add(name, ret); + ret.InternalInitialize( name, unitCubeSize, this ); + allView.Add( name, ret ); return ret; } diff --git a/源代码/StgSharp/MVVM/ViewModel/ViewModel.cs b/源代码/StgSharp/MVVM/ViewModel/ViewModel.cs index 455a8c63..16249f86 100644 --- a/源代码/StgSharp/MVVM/ViewModel/ViewModel.cs +++ b/源代码/StgSharp/MVVM/ViewModel/ViewModel.cs @@ -34,6 +34,7 @@ using StgSharp.Graphics.OpenGL; using StgSharp.Math; using StgSharp.MVVM.View; using StgSharp.MVVM.ViewModel; +using StgSharp.Threading; using StgSharp.Timing; using System; @@ -51,6 +52,7 @@ namespace StgSharp.MVVM.ViewModel public abstract partial class ViewModelBase { + private FrameBufferSizeHandler _resizeCallback; private int _frameCount; private int _frameSpeed; private ViewPort viewPortDisplay; @@ -61,135 +63,72 @@ namespace StgSharp.MVVM.ViewModel internal TimeSpanProvider frameTimeProvider; internal Vector4 backgroundColor; - protected ViewModelBase(int frameSpeed) + protected ViewModelBase( int frameSpeed ) { viewPortDisplay = new ViewPort(); allView = new(); - fpsCountProvider = new TimeSpanProvider(1.0, TimeSpanProvider.DefaultProvider); + fpsCountProvider = new TimeSpanProvider( + 1.0, TimeSpanProvider.DefaultProvider ); _frameSpeed = 0; _frameCount = 0; - fpsCountProvider.SpanRefreshCallback = CountFps; - long frameLength = (FrameSpeed > 0) ? ((1000L * 1000L) / FrameSpeed) : 0; + long frameLength = ( FrameSpeed > 0 ) ? + ( ( 1000L * 1000L ) / FrameSpeed ) : 0; frameTimeProvider = new TimeSpanProvider( - frameLength, TimeSpanProvider.DefaultProvider - ); - frameTimeProvider.SpanRefreshCallback = - () => - { - }; - - viewPortDisplay.FrameSizeCallback = (handle, width, height) - => - { - InternalIO.glfwMakeContextCurrent(viewPortDisplay.ViewPortID); - OpenGLFunction.CurrentGL.Viewport(0, 0, width, height); - PrivateShow(); - }; - viewPortDisplay.FramePostionCallback = (handle, xpos, ypos) - => - { - PrivateShow(); - }; + frameLength, TimeSpanProvider.DefaultProvider ); + FrameSizeCallback = DefaultFrameRewsizeCallback; } - protected ViewModelBase(float frameLength) + protected ViewModelBase( float frameLength ) { viewPortDisplay = new ViewPort(); allView = new(); - fpsCountProvider = new TimeSpanProvider(1.0, TimeSpanProvider.DefaultProvider); + fpsCountProvider = new TimeSpanProvider( + 1.0, TimeSpanProvider.DefaultProvider ); _frameSpeed = 0; _frameCount = 0; - fpsCountProvider.SpanRefreshCallback = CountFps; - long _frameLength = (FrameSpeed > 0) ? ((long)(1000 * frameLength)) : 0; + long _frameLength = ( FrameSpeed > 0 ) ? + ( ( long )( 1000 * frameLength ) ) : 0; frameTimeProvider = new TimeSpanProvider( - _frameLength, TimeSpanProvider.DefaultProvider - ); - frameTimeProvider.SpanRefreshCallback = - () => - { - }; - - viewPortDisplay.FrameSizeCallback = (handle, width, height) - => - { - InternalIO.glfwMakeContextCurrent(viewPortDisplay.ViewPortID); - OpenGLFunction.CurrentGL.Viewport(0, 0, width, height); - PrivateShow(); - }; - viewPortDisplay.FramePostionCallback = (handle, xpos, ypos) - => - { - PrivateShow(); - }; + _frameLength, TimeSpanProvider.DefaultProvider ); + FrameSizeCallback = DefaultFrameRewsizeCallback; } - public ViewModelBase(ViewPort vBinding, int frameSpeed) + public ViewModelBase( ViewPort vBinding, int frameSpeed ) { viewPortDisplay = vBinding; allView = new(); - fpsCountProvider = new TimeSpanProvider(1.0, TimeSpanProvider.DefaultProvider); + fpsCountProvider = new TimeSpanProvider( + 1.0, TimeSpanProvider.DefaultProvider ); _frameSpeed = 0; _frameCount = 0; - fpsCountProvider.SpanRefreshCallback = CountFps; - long frameLength = (frameSpeed > 0) ? ((1000L * 1000L) / frameSpeed) : 0; + long frameLength = ( frameSpeed > 0 ) ? + ( ( 1000L * 1000L ) / frameSpeed ) : 0; frameTimeProvider = new TimeSpanProvider( - frameLength, TimeSpanProvider.DefaultProvider - ); - frameTimeProvider.SpanRefreshCallback = - () => - { - }; - viewPortDisplay.FrameSizeCallback = (handle, width, height) - => - { - InternalIO.glfwMakeContextCurrent(viewPortDisplay.ViewPortID); - OpenGLFunction.CurrentGL.Viewport(0, 0, width, height); - PrivateShow(); - }; - viewPortDisplay.FramePostionCallback = (handle, xpos, ypos) - => - { - PrivateShow(); - }; + frameLength, TimeSpanProvider.DefaultProvider ); + FrameSizeCallback = DefaultFrameRewsizeCallback; } - public ViewModelBase(ViewPort vBinding, float frameLength) + public ViewModelBase( ViewPort vBinding, float frameLength ) { viewPortDisplay = vBinding; allView = new(); - fpsCountProvider = new TimeSpanProvider(1.0, TimeSpanProvider.DefaultProvider); + fpsCountProvider = new TimeSpanProvider( + 1.0, TimeSpanProvider.DefaultProvider ); _frameSpeed = 0; _frameCount = 0; - fpsCountProvider.SpanRefreshCallback = CountFps; - long _frameLength = (frameLength > 0) ? ((long)(1000 * frameLength)) : 0; + long _frameLength = ( frameLength > 0 ) ? + ( ( long )( 1000 * frameLength ) ) : 0; frameTimeProvider = new TimeSpanProvider( - _frameLength, TimeSpanProvider.DefaultProvider - ); - frameTimeProvider.SpanRefreshCallback = - () => - { - }; - - viewPortDisplay.FrameSizeCallback = (handle, width, height) - => - { - InternalIO.glfwMakeContextCurrent(viewPortDisplay.ViewPortID); - OpenGLFunction.CurrentGL.Viewport(0, 0, width, height); - PrivateShow(); - }; - viewPortDisplay.FramePostionCallback = (handle, xpos, ypos) - => - { - PrivateShow(); - }; + _frameLength, TimeSpanProvider.DefaultProvider ); + FrameSizeCallback = DefaultFrameRewsizeCallback; } - public DataBindingEntry this[string name] + public DataBindingEntry this[ string name ] { get { - if (this.TryGetObjectReference(name, out DataBindingEntry entry)) - { + if( this.TryGetObjectReference( + name, out DataBindingEntry entry ) ) { return entry; } throw new KeyNotFoundException(); @@ -198,8 +137,10 @@ namespace StgSharp.MVVM.ViewModel public bool ShouldClose { - get => InternalIO.glfwWindowShouldClose(viewPortDisplay.ViewPortID) != 0; - set => InternalIO.glfwSetWindowShouldClose(viewPortDisplay.ViewPortID, value ? 1 : 0); + get => InternalIO.glfwWindowShouldClose( + viewPortDisplay.ViewPortID ) != 0; + set => InternalIO.glfwSetWindowShouldClose( + viewPortDisplay.ViewPortID, value ? 1 : 0 ); } public int CurrentFrameCount => frameTimeProvider.CurrentSpan; @@ -207,28 +148,19 @@ namespace StgSharp.MVVM.ViewModel public int FrameSpeed => _frameSpeed; /// - /// Height of this form, represent in + /// Height of this form, represent in /// public int Height { get => viewPortDisplay.Height; - set { viewPortDisplay.Height = value; } } /// - /// Width of this form, represent in + /// Width of this form, represent in /// public int Width { get => viewPortDisplay.Width; - set - { - viewPortDisplay.Width = value; - if (WindowID != IntPtr.Zero) - { - InternalIO.glfwSetWindowSize(viewPortDisplay.ViewPortID, Width, Height); - } - } } public unsafe IntPtr WindowID @@ -242,20 +174,11 @@ namespace StgSharp.MVVM.ViewModel } /// - /// Width of this form, represent in + /// Width of this form, represent in /// - public vec2d Size + public Vec2 Size { - get => new vec2d(Width, Height); - set - { - Width = (int)value.X; - Height = (int)value.Y; - if (WindowID != IntPtr.Zero) - { - InternalIO.glfwSetWindowSize(viewPortDisplay.ViewPortID, Width, Height); - } - } + get => new Vec2( Width, Height ); } public ViewPort ViewPortBinding @@ -263,79 +186,74 @@ namespace StgSharp.MVVM.ViewModel get => viewPortDisplay; } -#pragma warning disable CA1044 + #pragma warning disable CA1044 protected FrameBufferSizeHandler FrameSizeCallback { set { - IntPtr handlerPtr = Marshal.GetFunctionPointerForDelegate(value); - InternalIO.glfwSetFramebufferSizeCallback(viewPortDisplay.ViewPortID, handlerPtr); + _resizeCallback = value; + IntPtr handlerPtr = Marshal.GetFunctionPointerForDelegate( + value ); + InternalIO.glfwSetFramebufferSizeCallback( + viewPortDisplay.ViewPortID, handlerPtr ); } } -#pragma warning restore CA1044 - + #pragma warning restore CA1044 public abstract void CustomizeInitialize(); - /// - /// Resize the current form - /// - /// - /// A (width,height) representing the new size of current form - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetSize(vec2d size) - { - this.Size = size; - InternalIO.glfwSetWindowSize(this.viewPortDisplay.ViewPortID, (int)size.X, (int)size.Y); - } - /// /// Set the size limit of current form /// /// - /// Minimum size of current form. In form of a of (width,height) + /// Minimum size of current form. In form of a of (width,height) /// /// - /// Maximum size of current form. In form of a of (width,height) + /// Maximum size of current form. In form of a of (width,height) /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetSizeLimit(vec2d minSize, vec2d maxSize) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetSizeLimit( Vec2 minSize, Vec2 maxSize ) { + ThreadHelper.MainThreadAssert(); InternalIO.glfwSetWindowSizeLimits( - this.viewPortDisplay.ViewPortID, - (int)minSize.X, - (int)minSize.Y, - (int)maxSize.X, - (int)maxSize.Y); + this.viewPortDisplay.ViewPortID, ( int )minSize.X, + ( int )minSize.Y, ( int )maxSize.X, ( int )maxSize.Y ); } /// /// Set the size limit of current form /// - /// Minimum width of current form - /// Minimum height of current form - /// Maximum width of current form - /// Maximum height of current form - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight) + /// Minimum width of current form + /// Minimum height of current form + /// Maximum width of current form + /// Maximum height of current form + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public void SetSizeLimit( + int minWidth, + int minHeight, + int maxWidth, + int maxHeight ) { - //TODO 重做form的尺寸极限控制 - InternalIO.glfwSetWindowSizeLimits(this.viewPortDisplay.ViewPortID, minWidth, minHeight, maxWidth, maxHeight); + ThreadHelper.MainThreadAssert(); + InternalIO.glfwSetWindowSizeLimits( + this.viewPortDisplay.ViewPortID, minWidth, minHeight, maxWidth, + maxHeight ); } - public abstract bool TryGetObjectReference(string name, out DataBindingEntry entry); + public abstract bool TryGetObjectReference( + string name, + out DataBindingEntry entry ); - private void CountFps() + private void DefaultFrameRewsizeCallback( + IntPtr windowHandle, + int width, + int height ) { - /**/ - Console.Clear(); - Console.WriteLine(FrameSpeed); - /**/ - Interlocked.Exchange(ref _frameSpeed, _frameCount); - Interlocked.Exchange(ref _frameCount, 0); + ViewPort.GetExistedViewPort( windowHandle, out ViewPort vp ); + vp.RequestFlushSizeInNextFrame( width, height ); + + //Console.WriteLine($"{width} {height}"); } } - } diff --git a/源代码/StgSharp/MVVM/ViewPort.cs b/源代码/StgSharp/MVVM/ViewPort.cs index 742b9969..e10ae33b 100644 --- a/源代码/StgSharp/MVVM/ViewPort.cs +++ b/源代码/StgSharp/MVVM/ViewPort.cs @@ -30,11 +30,14 @@ //----------------------------------------------------------------------- using StgSharp.Graphics; using StgSharp.Math; +using StgSharp.Threading; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Threading; @@ -43,106 +46,101 @@ namespace StgSharp.MVVM { public class ViewPort { - private FrameBufferSizeHandler _sizeHandler; - private FramePositionHandler _positionHandler; - private int _width, _height; + + private static ConcurrentDictionary _handleToViewPortIndex = new ConcurrentDictionary( + ); + private int _shouldCloseMask, _closeRequestedMask; + private int _width, _height, _newWidth, _newHeight; internal ViewPort() { - _height = 600; - _width = 800; - Name = new StackFrame(1, false). + _newHeight = 600; + _newWidth = 800; + FlushSize(); + Name = new StackFrame( 1, false ). GetMethod()!.DeclaringType!.Name; Monitor = IntPtr.Zero; - ViewPortID = InternalIO.glfwCreateWindow(_width, _height, - Encoding.UTF8.GetBytes(Name), Monitor, IntPtr.Zero - ); - if (ViewPortID == IntPtr.Zero) - { - throw new InvalidOperationException("Unable to create viewport handle."); + ViewPortID = InternalIO.glfwCreateWindow( + _newWidth, _newHeight, Encoding.UTF8.GetBytes( Name ), Monitor, + IntPtr.Zero ); + if( ViewPortID == IntPtr.Zero ) { + throw new InvalidOperationException( + "Unable to create viewport handle." ); } + _handleToViewPortIndex.TryAdd( ViewPortID, this ); } - public ViewPort(vec2d size, string name, IntPtr monitor) + internal ViewPort( Vec2 size, string name, IntPtr monitor ) { - _width = (int)size.X; - _height = (int)size.Y; + _newWidth = ( int )size.X; + _newHeight = ( int )size.Y; + FlushSize(); Name = name; Monitor = monitor; - ViewPortID = InternalIO.glfwCreateWindow(_width, _height, - Encoding.UTF8.GetBytes(Name), Monitor, IntPtr.Zero - ); - if (ViewPortID == IntPtr.Zero) - { - throw new InvalidOperationException("Unable to create viewport handle."); - } - } - - public FrameBufferSizeHandler FrameSizeCallback - { - set - { - _sizeHandler = value; - IntPtr handlerPtr = Marshal.GetFunctionPointerForDelegate(_sizeHandler); - InternalIO.glfwSetFramebufferSizeCallback(ViewPortID, handlerPtr); - } - } - - public FramePositionHandler FramePostionCallback - { - set - { - _positionHandler = value; - IntPtr handlerPtr = Marshal.GetFunctionPointerForDelegate(_positionHandler); - InternalIO.glfwSetWindowPosCallback(ViewPortID, handlerPtr); + ViewPortID = InternalIO.glfwCreateWindow( + _newWidth, _newHeight, Encoding.UTF8.GetBytes( Name ), Monitor, + IntPtr.Zero ); + if( ViewPortID == IntPtr.Zero ) { + throw new InvalidOperationException( + "Unable to create viewport handle." ); } + _handleToViewPortIndex.TryAdd( ViewPortID, this ); } public unsafe int Height { get { return _height; } - set { InternalIO.glfwSetWindowSize(ViewPortID, _width, value); } + internal set { Interlocked.Exchange( ref _height, value ); } } public unsafe int Width { get { return _width; } - set { InternalIO.glfwSetWindowSize(ViewPortID, value, _height); } + internal set { Interlocked .Exchange( ref _width, value ); } } - public IntPtr GraphicHandle { get; internal set; } - - public IntPtr Monitor { get; internal set; } - - public IntPtr ViewPortID { get; private set; } - - public string Name { get; set; } - - public void Close() + public IntPtr GraphicHandle { - InternalIO.glfwSetWindowShouldClose(ViewPortID, 1); + get; + internal set; + } + + public IntPtr Monitor + { + get; + internal set; + } + + public IntPtr ViewPortID + { + get; + private set; + } + + public string Name + { + get; + set; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool GetExistedViewPort( + IntPtr handle, + out ViewPort port ) + { + return _handleToViewPortIndex.TryGetValue( handle, out port ); } internal unsafe void FlushSize() { - fixed (int* wptr = &_width, hptr = &_height) - { - InternalIO.glfwGetWindowSize(ViewPortID, wptr, hptr); - } + Interlocked.Exchange( ref _height, _newHeight ); + Interlocked.Exchange( ref _width, _newWidth ); } - private int _eventWaitingMask; - - internal bool IsWaitingEvent + internal void RequestFlushSizeInNextFrame( int width, int height ) { - get => _eventWaitingMask == 1; - } - - internal unsafe void InternalShowViewModelMain() - { - Interlocked.Exchange(ref _eventWaitingMask, 1); - InternalIO.glfwWaitEvents(); - Interlocked.Exchange(ref _eventWaitingMask, 0); + Interlocked.Exchange( ref _newHeight, height ); + Interlocked .Exchange( ref _newWidth, width ); } } diff --git a/源代码/StgSharp/Math/GLfixed.cs b/源代码/StgSharp/Math/GLfixed.cs index dd4984c0..7d0abd62 100644 --- a/源代码/StgSharp/Math/GLfixed.cs +++ b/源代码/StgSharp/Math/GLfixed.cs @@ -37,13 +37,13 @@ using System.Threading.Tasks; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = 8)] + [StructLayout( LayoutKind.Explicit, Size = 8 )] public struct GLfixed { - [FieldOffset(0)] public int All; - [FieldOffset(0)] public short Decimals; - [FieldOffset(4)] public short Inertger; + [FieldOffset( 0 )] public int All; + [FieldOffset( 0 )] public short Decimals; + [FieldOffset( 4 )] public short Inertger; } } diff --git a/源代码/StgSharp/Math/Graphic/Camera.cs b/源代码/StgSharp/Math/Graphic/Camera.cs index c4277b90..309fda64 100644 --- a/源代码/StgSharp/Math/Graphic/Camera.cs +++ b/源代码/StgSharp/Math/Graphic/Camera.cs @@ -55,39 +55,37 @@ namespace StgSharp.Graphics internal Radius _row; internal Radius _yaw; internal Uniform convertedUniform; - internal vec3d _target, up; - + internal Vec3 _target, up; public Camera() { cameraAtt = Matrix44.Unit; - _target = Vec3d.Zero; - up = Vec3d.Zero; + _target = Vec3.Zero; + up = Vec3.Zero; _isLookAtAvailable = false; _lookAt = Matrix44.Unit; rotationAtt = Matrix44.Unit; _projection = new Matrix44(); } - public Camera(vec3d position, vec3d target, vec3d up) : this() + public Camera( Vec3 position, Vec3 target, Vec3 up ) + : this() { rotationAtt = Matrix44.Unit; cameraAtt = new Matrix44(); - SetViewDirection(position, target, up); + SetViewDirection( position, target, up ); _pitch = Radius.Zero; _row = Radius.Zero; _yaw = Radius.Zero; } - public Matrix44 Projection -=> _projection; + public Matrix44 Projection => _projection; public Matrix44 View { get { - if (_isLookAtAvailable) - { + if( _isLookAtAvailable ) { return _lookAt; } Matrix44 move = Matrix44.Unit; @@ -100,67 +98,66 @@ namespace StgSharp.Graphics public void DisplayGLtypeDefinition() { - Console.WriteLine("uniform matrix4x4 cameraName;"); + Console.WriteLine( "uniform matrix4x4 cameraName;" ); } /// - /// Get all uniform related to this . + /// Get all uniform related to this . /// - /// Shader program requires this camera. + /// Shader program requires this camera. /// - /// ContextName of all related uniforms. - /// If you fallow form from + /// ContextName of all related uniforms. If you fallow form from /// /// - public unsafe void GainAllUniforms(ShaderProgram source, params string[] uniformName) + public unsafe void GainAllUniforms( + ShaderProgram source, + params string[] uniformName ) { - if (uniformName.Length != 1) - { - throw new ArgumentException("Camera needs only one uniform.", nameof(uniformName)); + if( uniformName.Length != 1 ) { + throw new ArgumentException( + "Camera needs only one uniform.", nameof( uniformName ) ); } - convertedUniform = source.GetUniform(uniformName[0]); + convertedUniform = source.GetUniform( uniformName[ 0 ] ); } - public void MoveNear(float distance) + public void MoveNear( float distance ) { cameraAtt.colum3.Z -= distance; _isLookAtAvailable = false; } - public void MoveRight(float distance) + public void MoveRight( float distance ) { cameraAtt.colum3.X -= distance; _isLookAtAvailable = false; } - public void MoveUp(float distance) + public void MoveUp( float distance ) { cameraAtt.colum3.Y -= distance; _isLookAtAvailable = false; } - public unsafe void SetAllUniforms() { //Console.WriteLine(Projection * ViewBase); - OpenGL.OpenGLFunction.CurrentGL.SetUniformValue(convertedUniform, Projection * View); + OpenGL.OpenGLFunction.CurrentGL + .SetUniformValue( convertedUniform, Projection * View ); } - public void SetViewDirection(vec3d position, vec3d target, vec3d up) + public void SetViewDirection( Vec3 position, Vec3 target, Vec3 up ) { - vec3d direction = position - target; - if ((position.vec == cameraAtt.colum3.vec) && (this.up == up) && (cameraAtt.colum2.vec == direction.vec)) - { + Vec3 direction = position - target; + if( ( position.vec == cameraAtt.colum3.vec ) && ( this.up == up ) && ( cameraAtt.colum2.vec == direction.vec ) ) { //no difference with precious value return; } - if (direction.GetLength() == 0) - { + if( direction.GetLength() == 0 ) { //deadlock throw new ArgumentException(); } - if (Vec3d.IsParallel(direction, up)) - { + if( Vec3.IsParallel( direction, up ) ) { throw new ArgumentException(); } _target = direction; @@ -168,9 +165,9 @@ namespace StgSharp.Graphics _isLookAtAvailable = false; - Linear.Orthogonalize(ref direction, ref up); + Linear.Orthogonalize( ref direction, ref up ); - vec3d right = Linear.Orthogonalize(Linear.Cross(up, direction)); + Vec3 right = Linear.Orthogonalize( Linear.Cross( up, direction ) ); cameraAtt.colum0.vec = right.vec; cameraAtt.colum1.vec = up.vec; @@ -180,10 +177,13 @@ namespace StgSharp.Graphics InternalPitch(); InternalRow(); InternalYaw(); - } - public void SetViewRange(Radius fovRadius, vec2d size, vec2d offset, (float front, float back) dephRange) + public void SetViewRange( + Radius fovRadius, + Vec2 size, + Vec2 offset, + (float front, float back) dephRange ) { float distance = _target.GetLength(), @@ -191,28 +191,27 @@ namespace StgSharp.Graphics far = distance + dephRange.back, offsetX = offset.X, offsetY = offset.Y, - width = Scaler.Abs(GeometryScaler.Tan(fovRadius / 2) * near * 2), - height = (width * size.Y) / size.X; + width = Scaler.Abs( + GeometryScaler.Tan( fovRadius / 2 ) * near * 2 ), + height = ( width * size.Y ) / size.X; - _projection.colum0.X = (2 * near) / width; - _projection.colum1.Y = (2 * near) / height; - _projection.colum2.X = (2 * offsetX) / width; - _projection.colum2.Y = (2 * offsetY) / height; - _projection.colum2.Z = (far + near) / (near - far); + _projection.colum0.X = ( 2 * near ) / width; + _projection.colum1.Y = ( 2 * near ) / height; + _projection.colum2.X = ( 2 * offsetX ) / width; + _projection.colum2.Y = ( 2 * offsetY ) / height; + _projection.colum2.Z = ( far + near ) / ( near - far ); _projection.colum2.W = -1; - _projection.colum3.Z = (2 * near * far) / (near - far); - + _projection.colum3.Z = ( 2 * near * far ) / ( near - far ); } - public void Test(params vec4d[] vec) + public void Test( params Vec4[] vec ) { - Console.WriteLine(View); - Console.WriteLine(Projection); - Console.WriteLine(Projection * View); - Console.WriteLine(View); - foreach (vec4d item in vec) - { - Console.Write($"{Projection * View * item};"); + Console.WriteLine( View ); + Console.WriteLine( Projection ); + Console.WriteLine( Projection * View ); + Console.WriteLine( View ); + foreach( Vec4 item in vec ) { + Console.Write( $"{Projection * View * item};" ); } } @@ -221,31 +220,32 @@ namespace StgSharp.Graphics throw new NotImplementedException(); } - ~Camera() - { - } + ~Camera() { } #region rotation - public void Yaw(Radius r) + public void Yaw( Radius r ) { _yaw -= r; + //Console.WriteLine(_yaw._radius); //Console.WriteLine(rotationAtt); InternalYaw(); } - public void Pitch(Radius r) + public void Pitch( Radius r ) { _pitch -= r; + //Console.WriteLine(_pitch._radius); //Console.WriteLine(rotationAtt); InternalPitch(); } - public void Row(Radius r) + public void Row( Radius r ) { _row -= r; + //Console.WriteLine(_row._radius); //Console.WriteLine(rotationAtt); InternalRow(); @@ -256,15 +256,12 @@ namespace StgSharp.Graphics _isLookAtAvailable = false; Matrix32 partialCoord = new Matrix32( - cameraAtt.colum1.vec, - cameraAtt.colum2.vec - ); + cameraAtt.colum1.vec, cameraAtt.colum2.vec ); float angle = _pitch._radius; Matrix22 rotation = new Matrix22( - Scaler.Cos(angle), -Scaler.Sin(angle), - Scaler.Sin(angle), Scaler.Cos(angle) - ); + Scaler.Cos( angle ), -Scaler.Sin( angle ), Scaler.Sin( angle ), + Scaler.Cos( angle ) ); partialCoord *= rotation; rotationAtt.colum1.vec = partialCoord.colum0.vec; @@ -277,15 +274,12 @@ namespace StgSharp.Graphics _isLookAtAvailable = false; Matrix32 partialCoord = new Matrix32( - cameraAtt.colum0.vec, - cameraAtt.colum1.vec - ); + cameraAtt.colum0.vec, cameraAtt.colum1.vec ); float angle = _row._radius; Matrix22 rotation = new Matrix22( - Scaler.Cos(angle), -Scaler.Sin(angle), - Scaler.Sin(angle), Scaler.Cos(angle) - ); + Scaler.Cos( angle ), -Scaler.Sin( angle ), Scaler.Sin( angle ), + Scaler.Cos( angle ) ); partialCoord *= rotation; rotationAtt.colum0.vec = partialCoord.colum0.vec; @@ -298,25 +292,18 @@ namespace StgSharp.Graphics _isLookAtAvailable = false; Matrix32 partialCoord = new Matrix32( - cameraAtt.colum0.vec, - cameraAtt.colum2.vec - ); + cameraAtt.colum0.vec, cameraAtt.colum2.vec ); float angle = _yaw._radius; Matrix22 rotation = new Matrix22( - Scaler.Cos(angle), -Scaler.Sin(angle), - Scaler.Sin(angle), Scaler.Cos(angle) - ); + Scaler.Cos( angle ), -Scaler.Sin( angle ), Scaler.Sin( angle ), + Scaler.Cos( angle ) ); partialCoord *= rotation; rotationAtt.colum0.vec = partialCoord.colum0.vec; rotationAtt.colum2.vec = partialCoord.colum1.vec; rotationAtt.isTransposed = false; - } - #endregion - - } } diff --git a/源代码/StgSharp/Math/Linear/Cordination.cs b/源代码/StgSharp/Math/Linear/Cordination.cs index a444628e..225ceb3f 100644 --- a/源代码/StgSharp/Math/Linear/Cordination.cs +++ b/源代码/StgSharp/Math/Linear/Cordination.cs @@ -30,11 +30,12 @@ //----------------------------------------------------------------------- namespace StgSharp.Math { - public enum CoordinatePlain { + XY, YZ, XZ, + } } diff --git a/源代码/StgSharp/Math/Linear/IVector.cs b/源代码/StgSharp/Math/Linear/IVector.cs index a97cf3de..3b65e829 100644 --- a/源代码/StgSharp/Math/Linear/IVector.cs +++ b/源代码/StgSharp/Math/Linear/IVector.cs @@ -31,6 +31,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; @@ -38,5 +39,12 @@ namespace StgSharp.Math { public interface IVector { + /* + public static T Create(Vector4 source) where T : IVector + { + return T + } + /**/ + } } diff --git a/源代码/StgSharp/Math/Linear/MatInterface.cs b/源代码/StgSharp/Math/Linear/MatInterface.cs index 8e0ba0d3..bc5fdd44 100644 --- a/源代码/StgSharp/Math/Linear/MatInterface.cs +++ b/源代码/StgSharp/Math/Linear/MatInterface.cs @@ -34,7 +34,5 @@ using System.Text; namespace StgSharp.Math { - public interface IMat - { - } + public interface IMat { } } diff --git a/源代码/StgSharp/Math/Linear/Matrix22.cs b/源代码/StgSharp/Math/Linear/Matrix22.cs index 6f3e3d53..df23f724 100644 --- a/源代码/StgSharp/Math/Linear/Matrix22.cs +++ b/源代码/StgSharp/Math/Linear/Matrix22.cs @@ -28,47 +28,44 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = (2 * 2 * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( 2 * 2 * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix22 : IMat { - [FieldOffset(2 * 2 * 4 * sizeof(float))] + [FieldOffset( 2 * 2 * 4 * sizeof( float ) )] internal bool isTransposed; - [FieldOffset(0)] - internal Mat2 mat; - [FieldOffset(2 * 4 * sizeof(float))] - internal Mat2 transpose; + [FieldOffset( 0 )] + internal ColumnSet2 mat; + [FieldOffset( 2 * 4 * sizeof( float ) )] + internal ColumnSet2 transpose; - internal Matrix22( - Mat2 mat - ) + internal Matrix22( ColumnSet2 mat ) { this.mat = mat; } - internal Matrix22( - Vector4 c0, - Vector4 c1 - ) + internal Matrix22( Vector4 c0, Vector4 c1 ) { mat.colum0 = c0; mat.colum1 = c1; } - public Matrix22( - float a00, float a01, - float a10, float a11 - ) + public Matrix22( float a00, float a01, float a10, float a11 ) { - mat.colum0 = new Vector4(a00, a10, 0, 0); - mat.colum1 = new Vector4(a01, a11, 0, 0); + mat.colum0 = new Vector4( a00, a10, 0, 0 ); + mat.colum1 = new Vector4( a01, a11, 0, 0 ); } public Matrix22 Transpose @@ -76,21 +73,20 @@ namespace StgSharp.Math get { InternalTranspose(); - return new Matrix22(this.transpose); + return new Matrix22( this.transpose ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public float Det() { - return (mat.m00 * mat.m11) - (mat.m10 * mat.m01); + return ( mat.m00 * mat.m11 ) - ( mat.m10 * mat.m01 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal void InternalTranspose() { - if (!isTransposed) - { + if( !isTransposed ) { transpose = mat; float cache = transpose.m10; transpose.m10 = transpose.m01; @@ -100,89 +96,79 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix22 operator -(Matrix22 left, Matrix22 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix22 operator -( Matrix22 left, Matrix22 right ) { return new Matrix22( left.mat.colum0 + right.mat.colum0, - left.mat.colum1 + right.mat.colum1 - ); + left.mat.colum1 + right.mat.colum1 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix22 operator *(Matrix22 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix22 operator *( Matrix22 mat, float value ) { return new Matrix22( - mat.mat.colum0 * value, - mat.mat.colum1 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix22 operator *(Matrix22 left, Matrix22 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix22 operator *( Matrix22 left, Matrix22 right ) { left.InternalTranspose(); return new Matrix22( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator *(Matrix22 left, Matrix23 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator *( Matrix22 left, Matrix23 right ) { left.InternalTranspose(); return new Matrix23( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator *(Matrix22 left, Matrix24 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator *( Matrix22 left, Matrix24 right ) { left.InternalTranspose(); return new Matrix24( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix22 operator /(Matrix22 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix22 operator /( Matrix22 mat, float value ) { return new Matrix22( - mat.mat.colum0 / value, - mat.mat.colum1 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value ); } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix22 operator +(Matrix22 left, Matrix22 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix22 operator +( + Matrix22 left, + Matrix22 right ) { - Mat2* refmat = InternalIO.add_mat2(&left.mat, &right.mat); - Matrix22 ret = new Matrix22(*refmat); - InternalIO.deinit_mat2(refmat); - return ret; + return new Matrix22( + left.mat.colum0 + right.mat.colum0, + left.mat.colum1 + right.mat.colum1 ); } - - } } diff --git a/源代码/StgSharp/Math/Linear/Matrix23.cs b/源代码/StgSharp/Math/Linear/Matrix23.cs index bb9e4cd7..32970ff8 100644 --- a/源代码/StgSharp/Math/Linear/Matrix23.cs +++ b/源代码/StgSharp/Math/Linear/Matrix23.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Numerics; using System.Runtime.CompilerServices; @@ -35,20 +37,19 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = ((3 + 2) * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( ( 3 + 2 ) * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix23 : IMat { - [FieldOffset(5 * 4 * sizeof(float))] internal bool isTransposed; - [FieldOffset(3 * 4 * sizeof(float))] internal Mat2 transpose; + [FieldOffset( 5 * 4 * sizeof( float ) )] internal bool isTransposed; + [FieldOffset( 3 * 4 * sizeof( float ) )] internal ColumnSet2 transpose; - [FieldOffset(0)] internal Mat3 mat; + [FieldOffset( 0 )] internal ColumnSet3 mat; - internal Matrix23( - Vector4 c0, - Vector4 c1, - Vector4 c2 - ) + internal Matrix23( Vector4 c0, Vector4 c1, Vector4 c2 ) { mat.colum0 = c0; mat.colum1 = c1; @@ -56,68 +57,58 @@ namespace StgSharp.Math } public Matrix23( - float a00, float a01, float a02, - float a10, float a11, float a12 - ) + float a00, + float a01, + float a02, + float a10, + float a11, + float a12 ) { - mat.colum0 = new Vector4(a00, a10, 0, 0); - mat.colum1 = new Vector4(a01, a11, 0, 0); - mat.colum2 = new Vector4(a02, a12, 0, 0); + mat.colum0 = new Vector4( a00, a10, 0, 0 ); + mat.colum1 = new Vector4( a01, a11, 0, 0 ); + mat.colum2 = new Vector4( a02, a12, 0, 0 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 1) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 1 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 2) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 2 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 1) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 1 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 2) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 2 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat3* source = &this.mat) - { - fixed (Mat2* target = &this.transpose) - { - InternalIO.Transpose3to2_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet3* source = &this.mat ) { + fixed( ColumnSet2* target = &this.transpose ) { + InternalIO.Intrinsic.transpose32( source, target ); } } @@ -125,93 +116,81 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator -(Matrix23 left, Matrix23 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator -( Matrix23 left, Matrix23 right ) { return new Matrix23( left.mat.colum0 - right.mat.colum0, left.mat.colum1 - right.mat.colum1, - left.mat.colum2 - right.mat.colum2 - ); + left.mat.colum2 - right.mat.colum2 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator *(Matrix23 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator *( Matrix23 mat, float value ) { return new Matrix23( - mat.mat.colum0 * value, - mat.mat.colum1 * value, - mat.mat.colum2 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value, + mat.mat.colum2 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix22 operator *(Matrix23 left, Matrix32 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix22 operator *( Matrix23 left, Matrix32 right ) { left.InternalTranspose(); return new Matrix22( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator *(Matrix23 left, Matrix33 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator *( Matrix23 left, Matrix33 right ) { left.InternalTranspose(); return new Matrix23( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator *(Matrix23 left, Matrix34 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator *( Matrix23 left, Matrix34 right ) { left.InternalTranspose(); return new Matrix24( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator /(Matrix23 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator /( Matrix23 mat, float value ) { return new Matrix23( - mat.mat.colum0 / value, - mat.mat.colum1 / value, - mat.mat.colum2 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value, + mat.mat.colum2 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator +(Matrix23 left, Matrix23 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator +( Matrix23 left, Matrix23 right ) { return new Matrix23( left.mat.colum0 + right.mat.colum0, left.mat.colum1 + right.mat.colum1, - left.mat.colum2 + right.mat.colum2 - ); + left.mat.colum2 + right.mat.colum2 ); } - - } - } diff --git a/源代码/StgSharp/Math/Linear/Matrix24.cs b/源代码/StgSharp/Math/Linear/Matrix24.cs index 0c93bb23..87bd4123 100644 --- a/源代码/StgSharp/Math/Linear/Matrix24.cs +++ b/源代码/StgSharp/Math/Linear/Matrix24.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Numerics; using System.Runtime.CompilerServices; @@ -35,26 +37,24 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = ((4 + 2) * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( ( 4 + 2 ) * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix24 : IMat { - [FieldOffset(6 * 4 * sizeof(float))] internal bool isTransposed; - [FieldOffset(4 * 4 * sizeof(float))] internal Mat2 transpose; + [FieldOffset( 6 * 4 * sizeof( float ) )] internal bool isTransposed; + [FieldOffset( 4 * 4 * sizeof( float ) )] internal ColumnSet2 transpose; - [FieldOffset(0)] internal Mat4 mat; + [FieldOffset( 0 )] internal ColumnSet4 mat; - [FieldOffset(0)] public vec2d Colum0; - [FieldOffset(16)] public vec2d Colum1; - [FieldOffset(32)] public vec2d Colum2; - [FieldOffset(48)] public vec2d Colum3; + [FieldOffset( 0 )] public Vec2 Colum0; + [FieldOffset( 16 )] public Vec2 Colum1; + [FieldOffset( 32 )] public Vec2 Colum2; + [FieldOffset( 48 )] public Vec2 Colum3; - internal Matrix24( - Vector4 c0, - Vector4 c1, - Vector4 c2, - Vector4 c3 - ) + internal Matrix24( Vector4 c0, Vector4 c1, Vector4 c2, Vector4 c3 ) { mat.colum0 = c0; mat.colum1 = c1; @@ -62,56 +62,50 @@ namespace StgSharp.Math mat.colum3 = c3; } - public Matrix24( - float a00, float a01, float a02, float a03, - float a10, float a11, float a12, float a13 - ) + float a00, + float a01, + float a02, + float a03, + float a10, + float a11, + float a12, + float a13 ) { - mat.colum0 = new Vector4(a00, a10, 0, 0); - mat.colum1 = new Vector4(a01, a11, 0, 0); - mat.colum2 = new Vector4(a02, a12, 0, 0); - mat.colum3 = new Vector4(a03, a13, 0, 0); + mat.colum0 = new Vector4( a00, a10, 0, 0 ); + mat.colum1 = new Vector4( a01, a11, 0, 0 ); + mat.colum2 = new Vector4( a02, a12, 0, 0 ); + mat.colum3 = new Vector4( a03, a13, 0, 0 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 1) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 1 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 3) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 3 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 1) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 1 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 3) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 3 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } @@ -123,16 +117,13 @@ namespace StgSharp.Math return $"{$"[{mat.m00},{mat.m01},{mat.m02},{mat.m03}],"}{$"[{mat.m10},{mat.m11},{mat.m12},{mat.m13}]"}"; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat4* source = &this.mat) - { - fixed (Mat2* target = &this.transpose) - { - InternalIO.Transpose4to2_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet4* source = &this.mat ) { + fixed( ColumnSet2* target = &this.transpose ) { + InternalIO.Intrinsic.transpose42( source, target ); } } @@ -140,98 +131,83 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator -(Matrix24 left, Matrix24 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator -( Matrix24 left, Matrix24 right ) { return new Matrix24( left.mat.colum0 - right.mat.colum0, left.mat.colum1 - right.mat.colum1, left.mat.colum2 - right.mat.colum2, - left.mat.colum3 - right.mat.colum3 - ); + left.mat.colum3 - right.mat.colum3 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator *(Matrix24 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator *( Matrix24 mat, float value ) { return new Matrix24( - mat.mat.colum0 * value, - mat.mat.colum1 * value, - mat.mat.colum2 * value, - mat.mat.colum3 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value, + mat.mat.colum2 * value, mat.mat.colum3 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix22 operator *(Matrix24 left, Matrix42 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix22 operator *( Matrix24 left, Matrix42 right ) { left.InternalTranspose(); return new Matrix22( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix23 operator *(Matrix24 left, Matrix43 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix23 operator *( Matrix24 left, Matrix43 right ) { left.InternalTranspose(); return new Matrix23( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator *(Matrix24 left, Matrix44 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator *( Matrix24 left, Matrix44 right ) { left.InternalTranspose(); return new Matrix24( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator /(Matrix24 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator /( Matrix24 mat, float value ) { return new Matrix24( - mat.mat.colum0 / value, - mat.mat.colum1 / value, - mat.mat.colum2 / value, - mat.mat.colum3 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value, + mat.mat.colum2 / value, mat.mat.colum3 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix24 operator +(Matrix24 left, Matrix24 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix24 operator +( Matrix24 left, Matrix24 right ) { return new Matrix24( left.mat.colum0 + right.mat.colum0, left.mat.colum1 + right.mat.colum1, left.mat.colum2 + right.mat.colum2, - left.mat.colum3 + right.mat.colum3 - ); + left.mat.colum3 + right.mat.colum3 ); } - - } - - } diff --git a/源代码/StgSharp/Math/Linear/Matrix32.cs b/源代码/StgSharp/Math/Linear/Matrix32.cs index 96643893..5bce7851 100644 --- a/源代码/StgSharp/Math/Linear/Matrix32.cs +++ b/源代码/StgSharp/Math/Linear/Matrix32.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Numerics; using System.Runtime.CompilerServices; @@ -35,101 +37,89 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = (5 * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( 5 * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix32 : IMat { - [FieldOffset(5 * 4 * sizeof(float))] internal bool isTransposed; + [FieldOffset( 5 * 4 * sizeof( float ) )] internal bool isTransposed; - [FieldOffset(0)] internal Mat2 mat; - [FieldOffset(2 * 4 * sizeof(float))] internal Mat3 transpose; + [FieldOffset( 0 )] internal ColumnSet2 mat; + [FieldOffset( 2 * 4 * sizeof( float ) )] internal ColumnSet3 transpose; - [FieldOffset(0)] internal vec3d colum0; - [FieldOffset(4 * 4)] internal vec3d colum1; + [FieldOffset( 0 )] internal Vec3 colum0; + [FieldOffset( 4 * 4 )] internal Vec3 colum1; - internal Matrix32( - Vector4 c0, - Vector4 c1 - ) + internal Matrix32( Vector4 c0, Vector4 c1 ) { mat.colum0 = c0; mat.colum1 = c1; } - public unsafe Matrix32( - float a00, float a01, - float a10, float a11, - float a20, float a21 - ) + float a00, + float a01, + float a10, + float a11, + float a20, + float a21 ) { -#if NET5_0_OR_GREATER - Unsafe.SkipInit(out colum0); - Unsafe.SkipInit(out colum1); - Unsafe.SkipInit(out transpose); -#endif - mat.colum0 = new Vector4(a00, a10, a20, 0); - mat.colum1 = new Vector4(a01, a11, a21, 0); + #if NET5_0_OR_GREATER + Unsafe.SkipInit( out colum0 ); + Unsafe.SkipInit( out colum1 ); + Unsafe.SkipInit( out transpose ); + #endif + mat.colum0 = new Vector4( a00, a10, a20, 0 ); + mat.colum1 = new Vector4( a01, a11, a21, 0 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 2) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 2 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 1) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 1 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 2) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 2 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 1) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 1 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } } - public vec3d VerticalVecMultiply(vec2d vec) + public Vec3 VerticalVecMultiply( Vec2 vec ) { - return (colum0 * vec.X) + (colum1 * vec.Y); + return ( colum0 * vec.X ) + ( colum1 * vec.Y ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat2* source = &this.mat) - { - fixed (Mat3* target = &this.transpose) - { - InternalIO.Transpose2to3_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet2* source = &this.mat ) { + fixed( ColumnSet3* target = &this.transpose ) { + InternalIO.Intrinsic.transpose23( source, target ); } } @@ -137,99 +127,89 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator -(Matrix32 left, Matrix32 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator -( Matrix32 left, Matrix32 right ) { return new Matrix32( left.mat.colum0 - right.mat.colum0, - left.mat.colum1 - right.mat.colum1 - ); + left.mat.colum1 - right.mat.colum1 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator *(Matrix32 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator *( Matrix32 mat, float value ) { return new Matrix32( - mat.mat.colum0 * value, - mat.mat.colum1 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator *(Matrix32 left, Matrix22 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator *( Matrix32 left, Matrix22 right ) { left.InternalTranspose(); return new Matrix32( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator *(Matrix32 left, Matrix23 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator *( Matrix32 left, Matrix23 right ) { left.InternalTranspose(); return new Matrix33( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator *(Matrix32 left, Matrix24 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator *( Matrix32 left, Matrix24 right ) { left.InternalTranspose(); return new Matrix34( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), - Vector4.Dot(left.transpose.colum2, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator /(Matrix32 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator /( Matrix32 mat, float value ) { return new Matrix32( - mat.mat.colum0 / value, - mat.mat.colum1 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator +(Matrix32 left, Matrix32 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator +( Matrix32 left, Matrix32 right ) { return new Matrix32( left.mat.colum0 + right.mat.colum0, - left.mat.colum1 + right.mat.colum1 - ); + left.mat.colum1 + right.mat.colum1 ); } - } } diff --git a/源代码/StgSharp/Math/Linear/Matrix33.cs b/源代码/StgSharp/Math/Linear/Matrix33.cs index fc7a548d..bd7dc4f0 100644 --- a/源代码/StgSharp/Math/Linear/Matrix33.cs +++ b/源代码/StgSharp/Math/Linear/Matrix33.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Numerics; using System.Runtime.CompilerServices; @@ -35,23 +37,22 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = (6 * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( 6 * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix33 : IMat { - [FieldOffset(6 * 4 * sizeof(float))] internal bool isTransposed; + [FieldOffset( 6 * 4 * sizeof( float ) )] internal bool isTransposed; - [FieldOffset(0)] internal Mat3 mat; - [FieldOffset(3 * 4 * sizeof(float))] internal Mat3 transpose; - [FieldOffset(0 * 4 * sizeof(float))] public vec3d Colum0; - [FieldOffset(1 * 4 * sizeof(float))] public vec3d Colum1; - [FieldOffset(2 * 4 * sizeof(float))] public vec3d Colum2; + [FieldOffset( 0 )] internal ColumnSet3 mat; + [FieldOffset( 3 * 4 * sizeof( float ) )] internal ColumnSet3 transpose; + [FieldOffset( 0 * 4 * sizeof( float ) )] public Vec3 Colum0; + [FieldOffset( 1 * 4 * sizeof( float ) )] public Vec3 Colum1; + [FieldOffset( 2 * 4 * sizeof( float ) )] public Vec3 Colum2; - internal Matrix33( - Vector4 c0, - Vector4 c1, - Vector4 c2 - ) + internal Matrix33( Vector4 c0, Vector4 c1, Vector4 c2 ) { mat.colum0 = c0; mat.colum1 = c1; @@ -59,192 +60,172 @@ namespace StgSharp.Math } public Matrix33( - float a00, float a01, float a02, - float a10, float a11, float a12, - float a20, float a21, float a22 - ) + float a00, + float a01, + float a02, + float a10, + float a11, + float a12, + float a20, + float a21, + float a22 ) { - mat.colum0 = new Vector4(a00, a10, a20, 0); - mat.colum1 = new Vector4(a01, a11, a21, 0); - mat.colum2 = new Vector4(a02, a12, a22, 0); + mat.colum0 = new Vector4( a00, a10, a20, 0 ); + mat.colum1 = new Vector4( a01, a11, a21, 0 ); + mat.colum2 = new Vector4( a02, a12, a22, 0 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 2) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 2 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 2) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 2 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 2) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 2 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 2) || (columNum < 0)) - { + if( ( columNum > 2 ) || ( columNum < 0 ) ) { InternalIO.InternalWriteLog( $"Attempt to write unused space in {GetType().Name} {nameof(mat)}", - LogType.Error - ); + LogType.Error ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] public unsafe float Det() { - fixed (Mat3* mat = &this.mat) - { - return InternalIO.det_mat3(mat); + fixed( ColumnSet3* mat = &this.mat ) { + return InternalIO.Intrinsic.det_mat_3( mat, ( ColumnSet3* )0 ); } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat3* source = &this.mat, target = &this.transpose) - { - InternalIO.Transpose3to3_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet3* source = &this.mat, target = &this.transpose ) { + InternalIO.Intrinsic.transpose33( source, target ); } isTransposed = true; } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator -(Matrix33 left, Matrix33 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator -( Matrix33 left, Matrix33 right ) { return new Matrix33( left.mat.colum0 - right.mat.colum0, left.mat.colum1 - right.mat.colum1, - left.mat.colum2 + right.mat.colum2 - ); + left.mat.colum2 + right.mat.colum2 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator *(Matrix33 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator *( Matrix33 mat, float value ) { return new Matrix33( - mat.mat.colum0 * value, - mat.mat.colum1 * value, - mat.mat.colum2 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value, + mat.mat.colum2 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static vec3d operator *(Matrix33 left, vec3d right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 operator *( Matrix33 left, Vec3 right ) { left.InternalTranspose(); - return new vec3d( - Vector4.Dot(left.transpose.colum0, right.vec), - Vector4.Dot(left.transpose.colum1, right.vec), - Vector4.Dot(left.transpose.colum2, right.vec) - ); + return new Vec3( + Vector4.Dot( left.transpose.colum0, right.vec ), + Vector4.Dot( left.transpose.colum1, right.vec ), + Vector4.Dot( left.transpose.colum2, right.vec ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator *(Matrix33 left, Matrix32 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator *( Matrix33 left, Matrix32 right ) { left.InternalTranspose(); return new Matrix32( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator *(Matrix33 left, Matrix33 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator *( Matrix33 left, Matrix33 right ) { left.InternalTranspose(); return new Matrix33( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator *(Matrix33 left, Matrix34 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator *( Matrix33 left, Matrix34 right ) { left.InternalTranspose(); return new Matrix34( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), - Vector4.Dot(left.transpose.colum2, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator /(Matrix33 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator /( Matrix33 mat, float value ) { return new Matrix33( - mat.mat.colum0 / value, - mat.mat.colum1 / value, - mat.mat.colum2 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value, + mat.mat.colum2 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator +(Matrix33 left, Matrix33 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator +( Matrix33 left, Matrix33 right ) { return new Matrix33( left.mat.colum0 + right.mat.colum0, left.mat.colum1 + right.mat.colum1, - left.mat.colum2 + right.mat.colum2 - ); + left.mat.colum2 + right.mat.colum2 ); } - } } diff --git a/源代码/StgSharp/Math/Linear/Matrix34.cs b/源代码/StgSharp/Math/Linear/Matrix34.cs index a2c35e7e..e612effa 100644 --- a/源代码/StgSharp/Math/Linear/Matrix34.cs +++ b/源代码/StgSharp/Math/Linear/Matrix34.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Drawing; using System.Numerics; @@ -36,32 +38,29 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - - [StructLayout(LayoutKind.Explicit, Size = (7 * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( 7 * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix34 : IMat { - [FieldOffset(7 * 4 * sizeof(float))] internal bool isTransposed; - [FieldOffset(4 * 4 * sizeof(float))] internal Mat3 transpose; + [FieldOffset( 7 * 4 * sizeof( float ) )] internal bool isTransposed; + [FieldOffset( 4 * 4 * sizeof( float ) )] internal ColumnSet3 transpose; - [FieldOffset(0)] internal Mat4 mat; + [FieldOffset( 0 )] internal ColumnSet4 mat; - [FieldOffset(0 * 4 * sizeof(float))] public vec3d Colum0; - [FieldOffset(1 * 4 * sizeof(float))] public vec3d Colum1; - [FieldOffset(2 * 4 * sizeof(float))] public vec3d Colum2; - [FieldOffset(3 * 4 * sizeof(float))] public vec3d Colum3; + [FieldOffset( 0 * 4 * sizeof( float ) )] public Vec3 Colum0; + [FieldOffset( 1 * 4 * sizeof( float ) )] public Vec3 Colum1; + [FieldOffset( 2 * 4 * sizeof( float ) )] public Vec3 Colum2; + [FieldOffset( 3 * 4 * sizeof( float ) )] public Vec3 Colum3; - internal Matrix34(Mat4 mat) + internal Matrix34( ColumnSet4 mat ) { this.mat = mat; } - internal Matrix34( - Vector4 c0, - Vector4 c1, - Vector4 c2, - Vector4 c3 - ) + internal Matrix34( Vector4 c0, Vector4 c1, Vector4 c2, Vector4 c3 ) { mat.colum0 = c0; mat.colum1 = c1; @@ -70,55 +69,53 @@ namespace StgSharp.Math } public Matrix34( - float a00, float a01, float a02, float a03, - float a10, float a11, float a12, float a13, - float a20, float a21, float a22, float a23 - ) + float a00, + float a01, + float a02, + float a03, + float a10, + float a11, + float a12, + float a13, + float a20, + float a21, + float a22, + float a23 ) { - mat.colum0 = new Vector4(a00, a10, a20, 0); - mat.colum0 = new Vector4(a01, a11, a21, 0); - mat.colum0 = new Vector4(a02, a12, a22, 0); - mat.colum0 = new Vector4(a03, a13, a23, 0); + mat.colum0 = new Vector4( a00, a10, a20, 0 ); + mat.colum0 = new Vector4( a01, a11, a21, 0 ); + mat.colum0 = new Vector4( a02, a12, a22, 0 ); + mat.colum0 = new Vector4( a03, a13, a23, 0 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 2) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 2 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 3) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 3 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 2) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 2 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 3) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 3 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } @@ -126,13 +123,10 @@ namespace StgSharp.Math internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat4* source = &this.mat) - { - fixed (Mat3* target = &this.transpose) - { - InternalIO.Transpose4to3_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet4* source = &this.mat ) { + fixed( ColumnSet3* target = &this.transpose ) { + InternalIO.Intrinsic.transpose43( source, target ); } } @@ -140,109 +134,95 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator -(Matrix34 left, Matrix34 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator -( Matrix34 left, Matrix34 right ) { return new Matrix34( left.mat.colum0 - right.mat.colum0, left.mat.colum1 - right.mat.colum1, left.mat.colum2 - right.mat.colum2, - left.mat.colum3 - right.mat.colum3 - ); + left.mat.colum3 - right.mat.colum3 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator *(Matrix34 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator *( Matrix34 mat, float value ) { return new Matrix34( - mat.mat.colum0 * value, - mat.mat.colum1 * value, - mat.mat.colum2 * value, - mat.mat.colum3 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value, + mat.mat.colum2 * value, mat.mat.colum3 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix32 operator *(Matrix34 left, Matrix42 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix32 operator *( Matrix34 left, Matrix42 right ) { left.InternalTranspose(); return new Matrix32( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix33 operator *(Matrix34 left, Matrix43 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix33 operator *( Matrix34 left, Matrix43 right ) { left.InternalTranspose(); return new Matrix33( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator *(Matrix34 left, Matrix44 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator *( Matrix34 left, Matrix44 right ) { left.InternalTranspose(); return new Matrix34( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), - Vector4.Dot(left.transpose.colum2, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator /(Matrix34 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator /( Matrix34 mat, float value ) { return new Matrix34( - mat.mat.colum0 / value, - mat.mat.colum1 / value, - mat.mat.colum2 / value, - mat.mat.colum3 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value, + mat.mat.colum2 / value, mat.mat.colum3 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix34 operator +(Matrix34 left, Matrix34 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix34 operator +( Matrix34 left, Matrix34 right ) { return new Matrix34( left.mat.colum0 + right.mat.colum0, left.mat.colum1 + right.mat.colum1, left.mat.colum2 + right.mat.colum2, - left.mat.colum3 + right.mat.colum3 - ); + left.mat.colum3 + right.mat.colum3 ); } - - - } } diff --git a/源代码/StgSharp/Math/Linear/Matrix42.cs b/源代码/StgSharp/Math/Linear/Matrix42.cs index bb0c16e4..bb9e4443 100644 --- a/源代码/StgSharp/Math/Linear/Matrix42.cs +++ b/源代码/StgSharp/Math/Linear/Matrix42.cs @@ -28,91 +28,80 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; - namespace StgSharp.Math { - - - [StructLayout(LayoutKind.Explicit, Size = ((16 + 8) * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( ( 16 + 8 ) * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix42 : IMat { - [FieldOffset((16 + 8) * sizeof(float))] internal bool isTransposed; + [FieldOffset( ( 16 + 8 ) * sizeof( float ) )] internal bool isTransposed; - [FieldOffset(0)] internal Mat2 mat; - [FieldOffset(8 * sizeof(float))] internal Mat4 transpose; + [FieldOffset( 0 )] internal ColumnSet2 mat; + [FieldOffset( 8 * sizeof( float ) )] internal ColumnSet4 transpose; - internal Matrix42(Mat2 mat) + internal Matrix42( ColumnSet2 mat ) { this.mat = mat; } - internal Matrix42( - Vector4 c0, - Vector4 c1 - ) + internal Matrix42( Vector4 c0, Vector4 c1 ) { mat.colum0 = c0; mat.colum1 = c1; } - public Matrix42( - float a00, float a01, - float a10, float a11, - float a20, float a21, - float a30, float a31 - ) + float a00, + float a01, + float a10, + float a11, + float a20, + float a21, + float a30, + float a31 ) { - mat.colum0 = new Vector4(a00, a10, a20, a30); - mat.colum1 = new Vector4(a01, a11, a21, a31); + mat.colum0 = new Vector4( a00, a10, a20, a30 ); + mat.colum1 = new Vector4( a01, a11, a21, a31 ); } - - - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 3) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 3 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 1) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 1 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 3) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 3 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 1) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 1 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } @@ -121,21 +110,16 @@ namespace StgSharp.Math public override int GetHashCode() { return HashCode.Combine( - mat.colum0.GetHashCode(), - mat.colum1.GetHashCode() - ); + mat.colum0.GetHashCode(), mat.colum1.GetHashCode() ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat2* source = &this.mat) - { - fixed (Mat4* target = &this.transpose) - { - InternalIO.Transpose2to4_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet2* source = &this.mat ) { + fixed( ColumnSet4* target = &this.transpose ) { + InternalIO.Intrinsic.transpose24( source, target ); } } @@ -143,111 +127,105 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix42 operator -(Matrix42 left, Matrix42 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix42 operator -( + Matrix42 left, + Matrix42 right ) { return new Matrix42( left.mat.colum0 - right.mat.colum0, - left.mat.colum0 - right.mat.colum0 - ); + left.mat.colum0 - right.mat.colum0 ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix42 operator *(Matrix42 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix42 operator *( Matrix42 mat, float value ) { return new Matrix42( - mat.mat.colum0 * value, - mat.mat.colum1 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix42 operator *(Matrix42 left, Matrix22 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix42 operator *( Matrix42 left, Matrix22 right ) { left.InternalTranspose(); return new Matrix42( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator *(Matrix42 left, Matrix23 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator *( Matrix42 left, Matrix23 right ) { left.InternalTranspose(); return new Matrix43( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1), - Vector4.Dot(left.transpose.colum3, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix44 operator *(Matrix42 left, Matrix24 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix44 operator *( Matrix42 left, Matrix24 right ) { left.InternalTranspose(); return new Matrix44( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1), - Vector4.Dot(left.transpose.colum3, right.mat.colum2), - Vector4.Dot(left.transpose.colum3, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix42 operator /(Matrix42 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix42 operator /( Matrix42 mat, float value ) { return new Matrix42( - mat.mat.colum0 / value, - mat.mat.colum1 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix42 operator +(Matrix42 left, Matrix42 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix42 operator +( + Matrix42 left, + Matrix42 right ) { return new Matrix42( left.mat.colum0 + right.mat.colum0, - left.mat.colum0 + right.mat.colum0 - ); + left.mat.colum0 + right.mat.colum0 ); } - } } diff --git a/源代码/StgSharp/Math/Linear/Matrix43.cs b/源代码/StgSharp/Math/Linear/Matrix43.cs index dd530b5a..4e66fd87 100644 --- a/源代码/StgSharp/Math/Linear/Matrix43.cs +++ b/源代码/StgSharp/Math/Linear/Matrix43.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.Collections.Generic; using System.Numerics; @@ -36,24 +38,23 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit, Size = (7 * 4 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( 7 * 4 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public struct Matrix43 : IEquatable, IMat { - [FieldOffset(7 * 4 * sizeof(float))] + [FieldOffset( 7 * 4 * sizeof( float ) )] internal bool isTransposed; - [FieldOffset(0)] - internal Mat3 mat; + [FieldOffset( 0 )] + internal ColumnSet3 mat; - [FieldOffset(3 * 4 * sizeof(float))] - internal Mat4 transpose; + [FieldOffset( 3 * 4 * sizeof( float ) )] + internal ColumnSet4 transpose; - internal Matrix43( - Vector4 c0, - Vector4 c1, - Vector4 c2 - ) + internal Matrix43( Vector4 c0, Vector4 c1, Vector4 c2 ) { mat.colum0 = c0; mat.colum1 = c1; @@ -61,89 +62,82 @@ namespace StgSharp.Math } public Matrix43( - float a00, float a01, float a02, - float a10, float a11, float a12, - float a20, float a21, float a22, - float a30, float a31, float a32 - ) + float a00, + float a01, + float a02, + float a10, + float a11, + float a12, + float a20, + float a21, + float a22, + float a30, + float a31, + float a32 ) { - mat.colum0 = new Vector4(a00, a10, a20, a30); - mat.colum1 = new Vector4(a01, a11, a21, a31); - mat.colum2 = new Vector4(a02, a12, a22, a32); + mat.colum0 = new Vector4( a00, a10, a20, a30 ); + mat.colum1 = new Vector4( a01, a11, a21, a31 ); + mat.colum2 = new Vector4( a02, a12, a22, a32 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { - if ((rowNum > 3) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 3 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 2) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 2 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { - if ((rowNum > 3) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( rowNum > 3 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 2) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 2 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } } - public override bool Equals(object? obj) + public override bool Equals( object? obj ) { - return (obj is Matrix43 x) && Equals(x); + return ( obj is Matrix43 x ) && Equals( x ); } - public bool Equals(Matrix43 other) + public bool Equals( Matrix43 other ) { - return EqualityComparer.Default.Equals(mat, other.mat); + return EqualityComparer.Default.Equals( mat, + other.mat ); } public override int GetHashCode() { return HashCode.Combine( - mat.colum0.GetHashCode(), - mat.colum1.GetHashCode(), - mat.colum2.GetHashCode() - ); + mat.colum0.GetHashCode(), mat.colum1.GetHashCode(), + mat.colum2.GetHashCode() ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat3* source = &this.mat) - { - fixed (Mat4* target = &this.transpose) - { - InternalIO.Transpose3to4_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet3* source = &this.mat ) { + fixed( ColumnSet4* target = &this.transpose ) { + InternalIO.Intrinsic.transpose34( source, target ); } } @@ -151,126 +145,114 @@ namespace StgSharp.Math } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator -(Matrix43 left, Matrix43 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator -( Matrix43 left, Matrix43 right ) { return new Matrix43( left.mat.colum0 - right.mat.colum0, left.mat.colum1 - right.mat.colum1, - left.mat.colum2 - right.mat.colum2 - ); + left.mat.colum2 - right.mat.colum2 ); } - public static bool operator !=(Matrix43 left, Matrix43 right) + public static bool operator !=( Matrix43 left, Matrix43 right ) { - return !(left == right); + return !( left == right ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator *(Matrix43 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator *( Matrix43 mat, float value ) { return new Matrix43( - mat.mat.colum0 * value, - mat.mat.colum1 * value, - mat.mat.colum2 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value, + mat.mat.colum2 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix42 operator *(Matrix43 left, Matrix32 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix42 operator *( Matrix43 left, Matrix32 right ) { left.InternalTranspose(); return new Matrix42( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1) - - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator *(Matrix43 left, Matrix33 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator *( Matrix43 left, Matrix33 right ) { left.InternalTranspose(); return new Matrix43( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1), - Vector4.Dot(left.transpose.colum3, right.mat.colum2) - - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix44 operator *(Matrix43 left, Matrix34 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix44 operator *( Matrix43 left, Matrix34 right ) { left.InternalTranspose(); return new Matrix44( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), - Vector4.Dot(left.transpose.colum2, right.mat.colum3), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1), - Vector4.Dot(left.transpose.colum3, right.mat.colum2), - Vector4.Dot(left.transpose.colum3, right.mat.colum3) - - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator /(Matrix43 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator /( Matrix43 mat, float value ) { return new Matrix43( - mat.mat.colum0 / value, - mat.mat.colum1 / value, - mat.mat.colum2 / value - ); + mat.mat.colum0 / value, mat.mat.colum1 / value, + mat.mat.colum2 / value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator +(Matrix43 left, Matrix43 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator +( Matrix43 left, Matrix43 right ) { return new Matrix43( left.mat.colum0 + right.mat.colum0, left.mat.colum1 + right.mat.colum1, - left.mat.colum2 + right.mat.colum2 - ); + left.mat.colum2 + right.mat.colum2 ); } - public static bool operator ==(Matrix43 left, Matrix43 right) + public static bool operator ==( Matrix43 left, Matrix43 right ) { - return left.Equals(right); + return left.Equals( right ); } } diff --git a/源代码/StgSharp/Math/Linear/Matrix44.cs b/源代码/StgSharp/Math/Linear/Matrix44.cs index 280ef931..d0f885de 100644 --- a/源代码/StgSharp/Math/Linear/Matrix44.cs +++ b/源代码/StgSharp/Math/Linear/Matrix44.cs @@ -28,6 +28,8 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; + using System; using System.ComponentModel; using System.Drawing; @@ -35,26 +37,25 @@ using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; - - namespace StgSharp.Math { - - - [StructLayout(LayoutKind.Explicit, Size = (2 * 16 * sizeof(float)) + sizeof(bool), Pack = 16)] + [StructLayout( + LayoutKind.Explicit, + Size = ( 2 * 16 * sizeof( float ) ) + sizeof( bool ), + Pack = 16 )] public unsafe struct Matrix44 : IEquatable, IMat { - [FieldOffset(2 * 64 * sizeof(float))] internal bool isTransposed; + [FieldOffset( 2 * 64 * sizeof( float ) )] internal bool isTransposed; - [FieldOffset(0)] internal Mat4 mat; - [FieldOffset(16 * sizeof(float))] internal Mat4 transpose; - [FieldOffset(0 * sizeof(float))] internal vec4d colum0; - [FieldOffset(4 * sizeof(float))] internal vec4d colum1; - [FieldOffset(8 * sizeof(float))] internal vec4d colum2; - [FieldOffset(12 * sizeof(float))] internal vec4d colum3; + [FieldOffset( 0 )] internal ColumnSet4 mat; + [FieldOffset( 16 * sizeof( float ) )] internal ColumnSet4 transpose; + [FieldOffset( 0 * sizeof( float ) )] internal Vec4 colum0; + [FieldOffset( 4 * sizeof( float ) )] internal Vec4 colum1; + [FieldOffset( 8 * sizeof( float ) )] internal Vec4 colum2; + [FieldOffset( 12 * sizeof( float ) )] internal Vec4 colum3; - internal Matrix44(Mat4 mat) + internal Matrix44( ColumnSet4 mat ) { this.mat = mat; } @@ -63,8 +64,7 @@ namespace StgSharp.Math Vector4 vec0, Vector4 vec1, Vector4 vec2, - Vector4 vec3 - ) + Vector4 vec3 ) { mat.colum0 = vec0; mat.colum1 = vec1; @@ -72,67 +72,65 @@ namespace StgSharp.Math mat.colum3 = vec3; } - public unsafe Matrix44( - float a00, float a01, float a02, float a03, - float a10, float a11, float a12, float a13, - float a20, float a21, float a22, float a23, - float a30, float a31, float a32, float a33 - ) + float a00, + float a01, + float a02, + float a03, + float a10, + float a11, + float a12, + float a13, + float a20, + float a21, + float a22, + float a23, + float a30, + float a31, + float a32, + float a33 ) { - mat.colum0 = new Vector4(a00, a10, a20, a30); - mat.colum1 = new Vector4(a01, a11, a21, a31); - mat.colum2 = new Vector4(a02, a12, a22, a32); - mat.colum3 = new Vector4(a03, a13, a23, a33); - + mat.colum0 = new Vector4( a00, a10, a20, a30 ); + mat.colum1 = new Vector4( a01, a11, a21, a31 ); + mat.colum2 = new Vector4( a02, a12, a22, a32 ); + mat.colum3 = new Vector4( a03, a13, a23, a33 ); } - public unsafe float this[int rowNum, int columNum] + public unsafe float this[ int rowNum, int columNum ] { get { -#if DEBUG - if ((rowNum > 3) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + #if DEBUG + if( ( rowNum > 3 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 3) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 3 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } -#endif + #endif InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - return *(float*)pbit; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + return *( float* )pbit; } } set { -#if DEBUG - if ((rowNum > 3) || (rowNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + #if DEBUG + if( ( rowNum > 3 ) || ( rowNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } - if ((columNum > 3) || (columNum < 0)) - { - throw new ArgumentOutOfRangeException(nameof(columNum)); + if( ( columNum > 3 ) || ( columNum < 0 ) ) { + throw new ArgumentOutOfRangeException( nameof( columNum ) ); } -#endif + #endif InternalTranspose(); - fixed (float* p = &this.transpose.m00) - { - ulong pbit = ((ulong)p) - + (((ulong)sizeof(Vector4)) * ((ulong)rowNum)) - + (((ulong)sizeof(float)) * ((ulong)columNum)); - *(float*)pbit = value; + fixed( float* p = &this.transpose.m00 ) { + ulong pbit = ( ( ulong )p ) + ( ( ( ulong )sizeof( Vector4 ) ) * ( ( ulong )rowNum ) ) + ( ( ( ulong )sizeof( float ) ) * ( ( ulong )columNum ) ); + *( float* )pbit = value; } isTransposed = false; } - } public Matrix44 Transpose @@ -140,76 +138,49 @@ namespace StgSharp.Math get { InternalTranspose(); - return new Matrix44(this.transpose); + return new Matrix44( this.transpose ); } } - public static Matrix44 Unit - => new Matrix44( - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - ); - public static Matrix44 WNegativeUnit - => new Matrix44( - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, -1 - ); + public static Matrix44 Unit => new Matrix44( + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); - public static Matrix44 XNegativeUnit - => new Matrix44( - -1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - ); - public static Matrix44 YNegativeUnit - => new Matrix44( - 1, 0, 0, 0, - 0, -1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - ); + public static Matrix44 WNegativeUnit => new Matrix44( + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1 ); - public static Matrix44 ZNegativeUnit - => new Matrix44( - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, -1, 0, - 0, 0, 0, 1 - ); + public static Matrix44 XNegativeUnit => new Matrix44( + -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); - [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Matrix44 YNegativeUnit => new Matrix44( + 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); + + public static Matrix44 ZNegativeUnit => new Matrix44( + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 ); + + [MethodImpl( MethodImplOptions.AggressiveInlining )] public unsafe float Det() { InternalTranspose(); - fixed (Mat4* _this = &mat, _trans = &transpose) - { - return InternalIO.det_mat4(_this, _trans); + fixed( ColumnSet4* _this = &mat, _trans = &transpose ) { + return InternalIO.Intrinsic.det_mat_4( _this, _trans ); } } - public override bool Equals(object? obj) + public override bool Equals( object? obj ) { - return (obj is Matrix44 x) && Equals(x); + return ( obj is Matrix44 x ) && Equals( x ); } - public bool Equals(Matrix44 other) + public bool Equals( Matrix44 other ) { - return mat.Equals(other.mat); + return mat.Equals( other.mat ); } public override int GetHashCode() { return HashCode.Combine( - mat.colum0.GetHashCode(), - mat.colum1.GetHashCode(), - mat.colum2.GetHashCode(), - mat.colum3.GetHashCode() - ); + mat.colum0.GetHashCode(), mat.colum1.GetHashCode(), + mat.colum2.GetHashCode(), mat.colum3.GetHashCode() ); } public override string ToString() @@ -218,134 +189,127 @@ namespace StgSharp.Math return $"{transpose.colum0}{transpose.colum1}{transpose.colum2}{transpose.colum3}"; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl( MethodImplOptions.AggressiveInlining )] internal unsafe void InternalTranspose() { - if (!isTransposed) - { - fixed (Mat4* source = &mat, target = &transpose) - { - InternalIO.Transpose4to4_internal(source, target); + if( !isTransposed ) { + fixed( ColumnSet4* source = &mat, target = &transpose ) { + InternalIO.Intrinsic.transpose44( source, target ); } isTransposed = true; } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix44 operator -(Matrix44 left, Matrix44 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix44 operator -( + Matrix44 left, + Matrix44 right ) { return new Matrix44( right.mat.colum0 - left.mat.colum0, right.mat.colum1 - left.mat.colum1, right.mat.colum2 - left.mat.colum2, - right.mat.colum3 - left.mat.colum3 - ); + right.mat.colum3 - left.mat.colum3 ); } - public static bool operator !=(Matrix44 left, Matrix44 right) + public static bool operator !=( Matrix44 left, Matrix44 right ) { - return !(left == right); + return !( left == right ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix44 operator *(Matrix44 mat, float value) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix44 operator *( Matrix44 mat, float value ) { return new Matrix44( - mat.mat.colum0 * value, - mat.mat.colum1 * value, - mat.mat.colum2 * value, - mat.mat.colum3 * value - ); + mat.mat.colum0 * value, mat.mat.colum1 * value, + mat.mat.colum2 * value, mat.mat.colum3 * value ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix42 operator *(Matrix44 left, Matrix42 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix42 operator *( + Matrix44 left, + Matrix42 right ) { left.InternalTranspose(); return new Matrix42( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1) - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix43 operator *(Matrix44 left, Matrix43 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix43 operator *( Matrix44 left, Matrix43 right ) { left.InternalTranspose(); return new Matrix43( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1), - Vector4.Dot(left.transpose.colum3, right.mat.colum2) - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Matrix44 operator *(Matrix44 left, Matrix44 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Matrix44 operator *( Matrix44 left, Matrix44 right ) { left.InternalTranspose(); return new Matrix44( - Vector4.Dot(left.transpose.colum0, right.mat.colum0), - Vector4.Dot(left.transpose.colum0, right.mat.colum1), - Vector4.Dot(left.transpose.colum0, right.mat.colum2), - Vector4.Dot(left.transpose.colum0, right.mat.colum3), + Vector4.Dot( left.transpose.colum0, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum0, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum1, right.mat.colum0), - Vector4.Dot(left.transpose.colum1, right.mat.colum1), - Vector4.Dot(left.transpose.colum1, right.mat.colum2), - Vector4.Dot(left.transpose.colum1, right.mat.colum3), + Vector4.Dot( left.transpose.colum1, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum1, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum2, right.mat.colum0), - Vector4.Dot(left.transpose.colum2, right.mat.colum1), - Vector4.Dot(left.transpose.colum2, right.mat.colum2), - Vector4.Dot(left.transpose.colum2, right.mat.colum3), + Vector4.Dot( left.transpose.colum2, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum2, right.mat.colum3 ), - Vector4.Dot(left.transpose.colum3, right.mat.colum0), - Vector4.Dot(left.transpose.colum3, right.mat.colum1), - Vector4.Dot(left.transpose.colum3, right.mat.colum2), - Vector4.Dot(left.transpose.colum3, right.mat.colum3) - ); + Vector4.Dot( left.transpose.colum3, right.mat.colum0 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum1 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum2 ), + Vector4.Dot( left.transpose.colum3, right.mat.colum3 ) ); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Matrix44 operator +(Matrix44 left, Matrix44 right) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe Matrix44 operator +( + Matrix44 left, + Matrix44 right ) { return new Matrix44( right.mat.colum0 + left.mat.colum0, right.mat.colum1 + left.mat.colum1, right.mat.colum2 + left.mat.colum2, - right.mat.colum3 + left.mat.colum3 - ); + right.mat.colum3 + left.mat.colum3 ); } - public static bool operator ==(Matrix44 left, Matrix44 right) + public static bool operator ==( Matrix44 left, Matrix44 right ) { - return left.Equals(right); + return left.Equals( right ); } } - - - } diff --git a/源代码/StgSharp/Math/Linear/Vec2.cs b/源代码/StgSharp/Math/Linear/Vec2.cs new file mode 100644 index 00000000..a7c7ea12 --- /dev/null +++ b/源代码/StgSharp/Math/Linear/Vec2.cs @@ -0,0 +1,133 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Vec2.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Math +{ + /// + /// A two dimension vector defined by two elements. Vec2Ds in StgSharp are default used as colum + /// vector. + /// + [StructLayout( LayoutKind.Explicit, Size = 16, Pack = 16 )] + public struct Vec2 : IVector + { + + [FieldOffset( 0 )] internal unsafe fixed float num[ 2 ]; + + [FieldOffset( 0 )] + internal Vector2 v; + + [FieldOffset( 0 )] + internal Vector4 vec; + + [FieldOffset( 0 )] + public float X; + [FieldOffset( 4 )] + public float Y; + + internal Vec2( Vector2 vec ) + { + v = vec; + } + + internal Vec2( Vector4 vec ) + { + this.vec = vec; + } + + public Vec2( float x, float y ) + { + v = new Vector2( x, y ); + } + + public static Vec2 Unit => new Vec2( 1, 1 ); + + public static Vec2 Zero => new Vec2( 0, 0 ); + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public float Cross( Vec2 right ) + { + return ( X * right.Y ) - ( Y * right.X ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public float Dot( Vec2 vec ) + { + return Vector2.Dot( v, vec.v ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec2 operator -( Vec2 left, Vec2 right ) + { + return new Vec2( left.v - right.v ); + } + + public static bool operator !=( Vec2 left, Vec2 right ) + { + return !( left == right ); + } + + public static Vec2 operator *( Vec2 vec, float value ) + { + return new Vec2( vec.v * value ); + } + public static Vec2 operator *( float value, Vec2 vec ) + { + return new Vec2( vec.v * value ); + } + + public static Vec2 operator /( Vec2 vec, float value ) + { + return new Vec2( vec.v / value ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec2 operator +( Vec2 left, Vec2 right ) + { + return new Vec2( left.v + right.v ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( Vec2 left, Vec2 right ) + { + return left.v == right.v; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static implicit operator Vec2( (float, float) tuple ) + { + return new Vec2( tuple.Item1, tuple.Item2 ); + } + + } +} diff --git a/源代码/StgSharp/Math/Linear/Vec3.cs b/源代码/StgSharp/Math/Linear/Vec3.cs new file mode 100644 index 00000000..273f4919 --- /dev/null +++ b/源代码/StgSharp/Math/Linear/Vec3.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Vec3.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- + +using StgSharp.Data.Intrinsic; +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security.AccessControl; + +namespace StgSharp.Math +{ + [StructLayout( LayoutKind.Explicit, Size = 16, Pack = 16 )] + public struct Vec3 : IEquatable, IVector + { + + [FieldOffset( 0 )] internal unsafe fixed float num[ 3 ]; + [FieldOffset( 0 )] + internal M128 reg; + + [FieldOffset( 0 )] + internal Vector3 v; + + [FieldOffset( 0 )] + internal Vector4 vec; + + [FieldOffset( 0 )] public float X; + [FieldOffset( 4 )] public float Y; + [FieldOffset( 8 )] public float Z; + + internal Vec3( Vector4 vector ) + { + vec = vector; + } + + internal Vec3( Vector3 vector ) + { + v = vector; + } + + public Vec3( Vec2 xy, float z ) + { + vec = xy.vec; + Z = z; + } + + public Vec3( float x, float y, float z ) + { + #if NET5_0_OR_GREATER + Unsafe.SkipInit( out vec ); + #endif + v = new Vector3( x, y, z ); + } + + public unsafe Vec2 XY + { + get => new Vec2( this.vec ); + set + { + fixed( Vector3* vptr = &v ) { + *( Vector2* )vptr = value.v; + } + } + } + + public Vec3 XYZ + { + get { return new Vec3( v ); } + } + + public static Vec3 Zero + { + get => new Vec3( 0, 0, 0 ); + } + + public static Vec3 One => new Vec3( 1, 1, 1 ); + + public static Vec3 UnitX => new Vec3( 1, 0, 0 ); + + public static Vec3 UnitY => new Vec3( 0, 1, 0 ); + + public static Vec3 UnitZ => new Vec3( 0, 0, 1 ); + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 Cross( Vec3 left, Vec3 right ) + { + return Linear.Cross( left, right ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public float Dot( Vec3 right ) + { + return Vector3.Dot( v, right.v ); + } + + public bool Equals( Vec3 other ) + { + return this.vec == other.vec; + } + + public override bool Equals( object obj ) + { + if( obj is Vec3 ) { + return this == ( Vec3 )obj; + } else { + return false; + } + } + + public override unsafe int GetHashCode() + { + fixed( float* add = &X ) { + return HashCode.Combine( X, Y, Z, ( ulong )add ); + } + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public float GetMaxValue() + { + float ret = X; + ret = ( ret > Y ) ? ret : Y; + ret = ( ret > Z ) ? ret : Z; + return ret; + } + + public static bool IsParallel( Vec3 left, Vec3 right ) + { + return Cross( left, right ) == Zero; + } + + public override string ToString() + { + return $"[{X},{Y},{Z}]"; + } + + public string ToString( string sample ) + { + return $"[{X.ToString(sample)},{Y.ToString(sample)},{Z.ToString(sample)}]"; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 operator -( Vec3 vec ) + { + return new Vec3( -vec.vec ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 operator -( Vec3 left, Vec3 right ) + { + return new Vec3( left.v - right.v ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator !=( Vec3 left, Vec3 right ) + { + return left.v != right.v; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 operator *( Vec3 vec, float value ) + { + return new Vec3( vec.v * value ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float operator *( Vec3 left, Vec3 right ) + { + return Vector3.Dot( left.v, right.v ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 operator /( Vec3 vec, float value ) + { + return new Vec3( vec.v / value ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec3 operator +( Vec3 left, Vec3 right ) + { + return new Vec3( left.vec + right.vec ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static bool operator ==( Vec3 left, Vec3 right ) + { + return left.v == right.v; + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe implicit operator Vec3( + (float, float, float) tuple ) + { + Vec3 v = *( Vec3* )&tuple; + v.vec.W = 0.0f; + return v; + } + + } +} diff --git a/源代码/StgSharp/Math/Linear/Vec4.cs b/源代码/StgSharp/Math/Linear/Vec4.cs new file mode 100644 index 00000000..04c63c18 --- /dev/null +++ b/源代码/StgSharp/Math/Linear/Vec4.cs @@ -0,0 +1,175 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Vec4.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Data.Intrinsic; +using StgSharp.Math; + +using System; +using System.Data.Common; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Math +{ + [StructLayout( LayoutKind.Explicit, Size = 16, Pack = 16 )] + public struct Vec4 : IEquatable, IVector + { + + [FieldOffset( 0 )] internal unsafe fixed float num[ 4 ]; + + [FieldOffset( 0 )] internal M128 reg; + + [FieldOffset( 0 )] internal Vector4 vec; + [FieldOffset( 12 )] public float W; + + [FieldOffset( 0 )] public float X; + [FieldOffset( 4 )] public float Y; + [FieldOffset( 8 )] public float Z; + + internal Vec4( Vector4 v ) + { + vec = v; + } + + public Vec4( Vec3 v, float w ) + { + vec = v.vec; + W = w; + } + + public Vec4( float x, float y, float z, float w ) + { + vec = new Vector4( x, y, z, w ); + } + + public unsafe Vec2 XY + { + get => new Vec2( vec ); + set + { + X = value.X; + Y = value.Y; + } + } + + public unsafe Vec3 XYZ + { + get => new Vec3( vec ); + set + { + float w = W; + vec = value.vec; + W = w; + } + } + + public static Vec4 One + { + get => new Vec4( Vector4.One ); + } + + public static Vec4 Zero + { + get => new Vec4( Vector4.Zero ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec4 Add( Vec4 left, Vec4 right ) + { + return left + right; + } + + public override bool Equals( object obj ) + { + return ( obj is Vec4 v ) ? ( v == this ) : false; + } + + public override int GetHashCode() + { + return vec.GetHashCode(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec4 Subtract( Vec4 left, Vec4 right ) + { + return left - right; + } + + public override string ToString() + { + return vec.ToString(); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec4 operator -( Vec4 left, Vec4 right ) + { + return new Vec4( left.vec - right.vec ); + } + + public static bool operator !=( Vec4 left, Vec4 right ) + { + return !( left == right ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec4 operator *( Matrix44 mat, Vec4 vec ) + { + mat.InternalTranspose(); + return new Vec4( + Vector4.Dot( mat.transpose.colum0, vec.vec ), + Vector4.Dot( mat.transpose.colum1, vec.vec ), + Vector4.Dot( mat.transpose.colum2, vec.vec ), + Vector4.Dot( mat.transpose.colum3, vec.vec ) ); + } + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static Vec4 operator +( Vec4 left, Vec4 right ) + { + return new Vec4( left.vec + right.vec ); + } + + public static bool operator ==( Vec4 left, Vec4 right ) + { + return left.vec == right.vec; + } + + public static implicit operator M128( Vec4 vec ) + { + return vec.reg; + } + + bool IEquatable.Equals( Vec4 other ) + { + return vec == other.vec; + } + + } +} \ No newline at end of file diff --git a/源代码/StgSharp/Math/Linear/Vector.Cross.cs b/源代码/StgSharp/Math/Linear/Vector.Cross.cs index 6ddd9db7..1f1866e0 100644 --- a/源代码/StgSharp/Math/Linear/Vector.Cross.cs +++ b/源代码/StgSharp/Math/Linear/Vector.Cross.cs @@ -33,18 +33,17 @@ namespace StgSharp.Math public static unsafe partial class Linear { - public static float Cross(vec2d vec1, vec2d vec2) + public static float Cross( Vec2 vec1, Vec2 vec2 ) { - return (vec1.X * vec2.Y) - (vec1.Y * vec2.X); + return ( vec1.X * vec2.Y ) - ( vec1.Y * vec2.X ); } - public static vec3d Cross(vec3d vec1, vec3d vec2) + public static Vec3 Cross( Vec3 vec1, Vec3 vec2 ) { - return new vec3d( - (vec1.Y * vec2.Z) - (vec1.Z * vec2.Y), - (vec1.X * vec2.Z) - (vec1.Z * vec2.X), - (vec1.X * vec2.Y) - (vec1.Y * vec2.X) - ); + return new Vec3( + ( vec1.Y * vec2.Z ) - ( vec1.Z * vec2.Y ), + ( vec1.X * vec2.Z ) - ( vec1.Z * vec2.X ), + ( vec1.X * vec2.Y ) - ( vec1.Y * vec2.X ) ); } } diff --git a/源代码/StgSharp/Math/Linear/Vector.GetAngle.cs b/源代码/StgSharp/Math/Linear/Vector.GetAngle.cs index 7530102c..81144fe6 100644 --- a/源代码/StgSharp/Math/Linear/Vector.GetAngle.cs +++ b/源代码/StgSharp/Math/Linear/Vector.GetAngle.cs @@ -33,20 +33,18 @@ namespace StgSharp.Math public static unsafe partial class Linear { - public static float GetAngle(vec2d vec1, vec2d vec2) - { - return Scaler.ACos(1 - //vec1.multiple(vec2) - / (vec1.GetLength() * vec2.GetLength()) - ); - } - - public static float GetAngle(vec3d vec1, vec3d vec2) + public static float GetAngle( Vec2 vec1, Vec2 vec2 ) { return Scaler.ACos( - (vec1 * vec2) - / (vec1.GetLength() * vec2.GetLength()) - ); + 1 + //vec1.multiple(vec2) + / ( vec1.GetLength() * vec2.GetLength() ) ); + } + + public static float GetAngle( Vec3 vec1, Vec3 vec2 ) + { + return Scaler.ACos( + ( vec1 * vec2 ) / ( vec1.GetLength() * vec2.GetLength() ) ); } } diff --git a/源代码/StgSharp/Math/Linear/Vector.GetLength.cs b/源代码/StgSharp/Math/Linear/Vector.GetLength.cs index 6c8fa9d2..4a6ab6a6 100644 --- a/源代码/StgSharp/Math/Linear/Vector.GetLength.cs +++ b/源代码/StgSharp/Math/Linear/Vector.GetLength.cs @@ -33,14 +33,14 @@ namespace StgSharp.Math public static unsafe partial class Linear { - public static float GetLength(this vec3d vec) + public static float GetLength( this Vec3 vec ) { - return Scaler.Sqrt(vec.Dot(vec)); + return Scaler.Sqrt( vec.Dot( vec ) ); } - public static float GetLength(this vec2d vec) + public static float GetLength( this Vec2 vec ) { - return Scaler.Sqrt(vec.Dot(vec)); + return Scaler.Sqrt( vec.Dot( vec ) ); } } diff --git a/源代码/StgSharp/Math/Linear/Vector.Normalize.cs b/源代码/StgSharp/Math/Linear/Vector.Normalize.cs index 0b5c7599..7ab1444d 100644 --- a/源代码/StgSharp/Math/Linear/Vector.Normalize.cs +++ b/源代码/StgSharp/Math/Linear/Vector.Normalize.cs @@ -44,23 +44,25 @@ namespace StgSharp.Math public static partial class Linear { - public static vec4d Normalize(vec4d vec) + public static Vec4 Normalize( Vec4 vec ) { - return new vec4d { vec = Vector4.Normalize(vec.vec) }; + return new Vec4 { vec = Vector4.Normalize( vec.vec ) }; } - public static vec3d Normalize(vec3d vec) + + public static Vec3 Normalize( Vec3 vec ) { - return new vec3d { vec = Vector4.Normalize(vec.vec) }; + return new Vec3 { vec = Vector4.Normalize( vec.vec ) }; } - public static unsafe void Normalize(ref vec4d source, ref vec4d target) + + public static unsafe void Normalize( ref Vec4 source, ref Vec4 target ) { Vector4 s = source.vec; Vector4 t = target.vec; - s = Vector4.Normalize(s); + s = Vector4.Normalize( s ); - float dotProduct = Vector4.Dot(s, t); - Vector4 projection = Vector4.Multiply(s, t); + float dotProduct = Vector4.Dot( s, t ); + Vector4 projection = Vector4.Multiply( s, t ); t -= projection; @@ -68,15 +70,16 @@ namespace StgSharp.Math target.vec = t; } - public static unsafe void Normalize(ref vec3d source, ref vec3d target) + public static unsafe void Normalize( ref Vec3 source, ref Vec3 target ) { Vector3 s = source.v; Vector3 t = target.v; - s = Vector3.Normalize(s); - Vector3 projection = (Vector3.Dot(t, s) / Vector3.Dot(s, s)) * s; + s = Vector3.Normalize( s ); + Vector3 projection = ( Vector3.Dot( t, s ) / Vector3.Dot( s, + s ) ) * s; t -= projection; - t = Vector3.Normalize(t); + t = Vector3.Normalize( t ); source.v = s; target.v = t; diff --git a/源代码/StgSharp/Math/Linear/Vector.Orthogonalize.cs b/源代码/StgSharp/Math/Linear/Vector.Orthogonalize.cs index a6c7cce7..7f573028 100644 --- a/源代码/StgSharp/Math/Linear/Vector.Orthogonalize.cs +++ b/源代码/StgSharp/Math/Linear/Vector.Orthogonalize.cs @@ -28,7 +28,7 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- -using StgSharp.Data; +using StgSharp.Data.Intrinsic; using StgSharp.Math; using System; @@ -41,16 +41,18 @@ using System.Threading.Tasks; namespace StgSharp { - internal static partial class InternalIO { - [DllImport(SSC_libName, EntryPoint = "normalize", - CallingConvention = CallingConvention.Cdecl)] - internal static extern unsafe void Normalize(M128* source, M128* target); + [DllImport( + SSC_libName, + EntryPoint = "normalize", + CallingConvention = CallingConvention.Cdecl )] + internal static extern unsafe void Normalize( + M128* source, + M128* target ); } - } namespace StgSharp.Math @@ -58,23 +60,27 @@ namespace StgSharp.Math public static partial class Linear { - public static vec4d Orthogonalize(vec4d vec) + public static Vec4 Orthogonalize( Vec4 vec ) { - return new vec4d { vec = Vector4.Normalize(vec.vec) }; + return new Vec4 { vec = Vector4.Normalize( vec.vec ) }; } - public static vec3d Orthogonalize(vec3d vec) + + public static Vec3 Orthogonalize( Vec3 vec ) { - return new vec3d { vec = Vector4.Normalize(vec.vec) }; + return new Vec3 { vec = Vector4.Normalize( vec.vec ) }; } - public static unsafe void Orthogonalize(ref vec4d source, ref vec4d target) + + public static unsafe void Orthogonalize( + ref Vec4 source, + ref Vec4 target ) { Vector4 s = source.vec; Vector4 t = target.vec; - s = Vector4.Normalize(s); + s = Vector4.Normalize( s ); - float dotProduct = Vector4.Dot(s, t); - Vector4 projection = Vector4.Multiply(s, t); + float dotProduct = Vector4.Dot( s, t ); + Vector4 projection = Vector4.Multiply( s, t ); t -= projection; @@ -83,20 +89,23 @@ namespace StgSharp.Math } /// - /// Orthogonalize two s, let their length be 1 - /// and perpendicular to each other. + /// Orthogonalize two s, let their length be 1 and perpendicular to each + /// other. /// /// /// - public static unsafe void Orthogonalize(ref vec3d source, ref vec3d target) + public static unsafe void Orthogonalize( + ref Vec3 source, + ref Vec3 target ) { Vector3 s = source.v; Vector3 t = target.v; - s = Vector3.Normalize(s); - Vector3 projection = (Vector3.Dot(t, s) / Vector3.Dot(s, s)) * s; + s = Vector3.Normalize( s ); + Vector3 projection = ( Vector3.Dot( t, s ) / Vector3.Dot( s, + s ) ) * s; t -= projection; - t = Vector3.Normalize(t); + t = Vector3.Normalize( t ); source.v = s; target.v = t; diff --git a/源代码/StgSharp/Math/Scalar/ACos.cs b/源代码/StgSharp/Math/Scalar/ACos.cs index dcbd5983..90e8744d 100644 --- a/源代码/StgSharp/Math/Scalar/ACos.cs +++ b/源代码/StgSharp/Math/Scalar/ACos.cs @@ -36,10 +36,10 @@ namespace StgSharp.Math public static unsafe partial class Scaler { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe float ACos(float x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe float ACos( float x ) { - return MathF.Acos(x); + return MathF.Acos( x ); /* int sign = 1; diff --git a/源代码/StgSharp/Math/Scalar/ASin.cs b/源代码/StgSharp/Math/Scalar/ASin.cs index 535ee61f..8f23541c 100644 --- a/源代码/StgSharp/Math/Scalar/ASin.cs +++ b/源代码/StgSharp/Math/Scalar/ASin.cs @@ -30,7 +30,6 @@ //----------------------------------------------------------------------- using System; - namespace StgSharp.Math { public static unsafe partial class Scaler @@ -41,16 +40,15 @@ namespace StgSharp.Math hpiby2_head = 7.8539812565e-01f, /* 0x3f490fda */ piby2 = 1.5707963705e+00f; /* 0x3fc90fdb */ - /// /// Reurns the value of ArcSin(x) /// - /// The sine value of the angle + /// The sine value of the angle /// /// - public static float ASin(float x) + public static float ASin( float x ) { - return MathF.Asin(x); + return MathF.Asin( x ); /* int sign = 1; float y; diff --git a/源代码/StgSharp/Math/Scalar/ATan.cs b/源代码/StgSharp/Math/Scalar/ATan.cs index 0939826e..e9068cd2 100644 --- a/源代码/StgSharp/Math/Scalar/ATan.cs +++ b/源代码/StgSharp/Math/Scalar/ATan.cs @@ -36,10 +36,10 @@ namespace StgSharp.Math public static unsafe partial class Scaler { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe float ATan(float x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe float ATan( float x ) { - return MathF.Atan(x); + return MathF.Atan( x ); /* float sign = 1, angle = 0; if (x < 0) diff --git a/源代码/StgSharp/Math/Scalar/BasicOps.cs b/源代码/StgSharp/Math/Scalar/BasicOps.cs index ad0c66ac..e211a3d3 100644 --- a/源代码/StgSharp/Math/Scalar/BasicOps.cs +++ b/源代码/StgSharp/Math/Scalar/BasicOps.cs @@ -37,31 +37,30 @@ namespace StgSharp.Math public static unsafe partial class Scaler { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe float Abs(float x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe float Abs( float x ) { - uint* a = (uint*)&x; + uint* a = ( uint* )&x; *a &= 0b_0111_1111_1111_1111_1111_1111_1111_1111; - return *(float*)a; + return *( float* )a; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int Abs(int x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe int Abs( int x ) { - uint* a = (uint*)&x; + uint* a = ( uint* )&x; *a &= 0b_0111_1111_1111_1111_1111_1111_1111_1111; - return *(int*)a; + return *( int* )a; } - internal static string GetListSeparator(IFormatProvider formatProvider) + internal static string GetListSeparator( + IFormatProvider formatProvider ) { - if (formatProvider is CultureInfo cultureInfo) - { + if( formatProvider is CultureInfo cultureInfo ) { return cultureInfo.TextInfo.ListSeparator; } - if (formatProvider?.GetFormat(typeof(TextInfo)) is TextInfo textInfo) - { + if( formatProvider?.GetFormat( typeof( TextInfo ) ) is TextInfo textInfo ) { return textInfo.ListSeparator; } diff --git a/源代码/StgSharp/Math/Scalar/Compare.cs b/源代码/StgSharp/Math/Scalar/Compare.cs index 09c580fe..8f7b2e21 100644 --- a/源代码/StgSharp/Math/Scalar/Compare.cs +++ b/源代码/StgSharp/Math/Scalar/Compare.cs @@ -39,32 +39,27 @@ namespace StgSharp.Math public static partial class Scaler { - public static float MaxOf(params float[] stream) + public static float MaxOf( params float[] stream ) { - float ret = stream[0]; - foreach (float num in stream) - { - if (ret < num) - { - ret = num; - } - } - return ret; - } - public static float MinOf(params float[] stream) - { - float ret = stream[0]; - foreach (float num in stream) - { - if (ret > num) - { + float ret = stream[ 0 ]; + foreach( float num in stream ) { + if( ret < num ) { ret = num; } } return ret; } - + public static float MinOf( params float[] stream ) + { + float ret = stream[ 0 ]; + foreach( float num in stream ) { + if( ret > num ) { + ret = num; + } + } + return ret; + } } } diff --git a/源代码/StgSharp/Math/Scalar/Cos.cs b/源代码/StgSharp/Math/Scalar/Cos.cs index 8cb3224e..cb8fa828 100644 --- a/源代码/StgSharp/Math/Scalar/Cos.cs +++ b/源代码/StgSharp/Math/Scalar/Cos.cs @@ -36,8 +36,8 @@ namespace StgSharp.Math public static partial class Scaler { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Cos(float x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Cos( float x ) { /* float refer = x / 360.0f; @@ -53,7 +53,7 @@ namespace StgSharp.Math return ((-sinData[a]) * ((0.1570796327f * refer) - (6.459640975e-4f * refer * refer2))) + (cosData[a] * ((1 - (0.0123370055f * refer2)) + (2.536695709e-5f * refer2 * refer2))); */ - return MathF.Cos(x); + return MathF.Cos( x ); } } diff --git a/源代码/StgSharp/Math/Scalar/Ctor.cs b/源代码/StgSharp/Math/Scalar/Ctor.cs index d9c239f1..b976dcdd 100644 --- a/源代码/StgSharp/Math/Scalar/Ctor.cs +++ b/源代码/StgSharp/Math/Scalar/Ctor.cs @@ -33,24 +33,30 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - public unsafe delegate float ScalarCalcHandler(float* x); + public unsafe delegate float ScalarCalcHandler( float* x ); public static unsafe partial class Scaler { - const uint MEM_COMMIT = 0x1000; - const uint MEM_RELEASE = 0x8000; - const uint MEM_RESERVE = 0x2000; - const uint PAGE_EXECUTE_READWRITE = 0x40; + private const uint MEM_COMMIT = 0x1000; + private const uint MEM_RELEASE = 0x8000; + private const uint MEM_RESERVE = 0x2000; + private const uint PAGE_EXECUTE_READWRITE = 0x40; - static Scaler() - { - } + static Scaler() { } - [DllImport("Kernel32.dll", EntryPoint = "VirtualAlloc")] - private static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect); - [DllImport("Kernel32.dll", EntryPoint = "VirtualFree")] - private static extern bool VirtualFree(IntPtr address, int size, uint freeType); + [DllImport( "Kernel32.dll", EntryPoint = "VirtualAlloc" )] + private static extern IntPtr VirtualAlloc( + IntPtr address, + int size, + uint allocType, + uint protect ); + + [DllImport( "Kernel32.dll", EntryPoint = "VirtualFree" )] + private static extern bool VirtualFree( + IntPtr address, + int size, + uint freeType ); } } diff --git a/源代码/StgSharp/Math/Scalar/Exp.cs b/源代码/StgSharp/Math/Scalar/Exp.cs index 7934cc44..edddf54c 100644 --- a/源代码/StgSharp/Math/Scalar/Exp.cs +++ b/源代码/StgSharp/Math/Scalar/Exp.cs @@ -40,65 +40,46 @@ namespace StgSharp.Math /// /// /// - public static unsafe float Exp(float x) + public static unsafe float Exp( float x ) { - if (x == 1) - { + if( x == 1 ) { return E; } - if (x == 0) - { + if( x == 0 ) { return 1; } bool sign = false; - if (x < 0) - { + if( x < 0 ) { sign = true; x = -x; } float z = x, t; - if (x < 0.5f) - { - t = 1.0f + (x * ( - 1.0f + (x * ( - 0.5f + (x * ( - 0.1666666667f + (x * ( - 0.0416666666667f + (x * - 8.333333333e-3f))))))))); - } - else - { + if( x < 0.5f ) { + t = 1.0f + ( x * ( 1.0f + ( x * ( 0.5f + ( x * ( 0.1666666667f + ( x * ( 0.0416666666667f + ( x * 8.333333333e-3f ) ) ) ) ) ) ) ) ); + } else { /* * define z = n * 2 ^ m * n is between 0 and 0.5 */ - uint zBit = *(uint*)&z; + uint zBit = *( uint* )&z; uint zBitAbs = zBit & 0b_0111_1111_1111_1111_1111_1111_1111_1111; uint uintm = zBitAbs >> 23; - int m = (*(int*)&uintm) - 126; + int m = ( *( int* )&uintm ) - 126; - uint nBit = (zBitAbs & 0b_0000_0000_0111_1111_1111_1111_1111_1111) - + 0b_0011_1111_0000_0000_0000_0000_0000_0000; - float n = (*(float*)&nBit) - 1; + uint nBit = ( zBitAbs & 0b_0000_0000_0111_1111_1111_1111_1111_1111 ) + 0b_0011_1111_0000_0000_0000_0000_0000_0000; + float n = ( *( float* )&nBit ) - 1; - t = 2.718281828f + (n * ( - 2.718281828f + (n * ( - 1.359140914f + (n * ( - 0.4530469714f + (n * ( - 0.1132617429f + (n * - 0.02265234857f))))))))); + t = 2.718281828f + ( n * ( 2.718281828f + ( n * ( 1.359140914f + ( n * ( 0.4530469714f + ( n * ( 0.1132617429f + ( n * 0.02265234857f ) ) ) ) ) ) ) ) ); - for (int i = 0; i < m; i++) - { + for( int i = 0; i < m; i++ ) { t = t * t; } } - if (sign) - { + if( sign ) { t = 1 / t; } return t; diff --git a/源代码/StgSharp/Math/Scalar/Function.cs b/源代码/StgSharp/Math/Scalar/Function.cs index af8aa838..df600556 100644 --- a/源代码/StgSharp/Math/Scalar/Function.cs +++ b/源代码/StgSharp/Math/Scalar/Function.cs @@ -30,9 +30,5 @@ //----------------------------------------------------------------------- namespace StgSharp.Math { - public class Function - { - - - } + public class Function { } } diff --git a/源代码/StgSharp/Math/Scalar/Log.cs b/源代码/StgSharp/Math/Scalar/Log.cs index 2c288265..4af122a2 100644 --- a/源代码/StgSharp/Math/Scalar/Log.cs +++ b/源代码/StgSharp/Math/Scalar/Log.cs @@ -35,62 +35,47 @@ namespace StgSharp.Math public static partial class Scaler { - private static readonly float[] logArray = - { - 0f, 0.00995033085316809f, 0.0198026272961797f, 0.0295588022415444f, 0.0392207131532813f, 0.048790164169432f, 0.0582689081239758f, 0.0676586484738149f, 0.0769610411361284f, 0.0861776962410524f, - 0.0953101798043249f, 0.104360015324243f, 0.113328685307003f, 0.122217632724249f, 0.131028262406404f, 0.139761942375159f, 0.148420005118273f, 0.157003748809665f, 0.165514438477573f, 0.173953307123438f, - 0.182321556793955f, 0.19062035960865f, 0.198850858745165f, 0.207014169384326f, 0.215111379616945f, 0.22314355131421f, 0.231111720963387f, 0.2390169004705f, 0.246860077931526f, 0.254642218373581f, - 0.262364264467491f, 0.27002713721306f, 0.27763173659828f, 0.285178942233662f, 0.29266961396282f, 0.300104592450338f, 0.307484699747961f, 0.314810739840034f, 0.322083499169113f, 0.3293037471426f, - 0.336472236621213f, 0.343589704390077f, 0.350656871613169f, 0.357674444271816f, 0.364643113587909f, 0.371563556432483f, 0.378436435720245f, 0.385262400790645f, 0.392042087776024f, 0.398776119957368f, - 0.405465108108164f, 0.412109650826833f, 0.418710334858185f, 0.425267735404344f, 0.431782416425538f, 0.438254930931155f, 0.444685821261446f, 0.451075619360217f, 0.457424847038875f, 0.46373401623214f, - 0.470003629245736f, 0.476234178996372f, 0.482426149244293f, 0.488580014818671f, 0.494696241836107f, 0.500775287912489f, 0.506817602368452f, 0.512823626428664f, 0.518793793415168f, 0.524728528934982f, - 0.53062825106217f, 0.536493370514568f, 0.542324290825362f, 0.548121408509688f, 0.553885113226438f, 0.559615787935423f, 0.56531380905006f, 0.570979546585738f, 0.576613364303994f, 0.582215619852664f, - 0.587786664902119f, 0.593326845277734f, 0.598836501088704f, 0.60431596685333f, 0.609765571620894f, 0.615185639090233f, 0.62057648772511f, 0.625938430866495f, 0.631271776841858f, 0.636576829071551f, - 0.641853886172395f, 0.647103242058538f, 0.65232518603969f, 0.657520002916794f, 0.662687973075237f, 0.667829372575655f, 0.672944473242426f, 0.678033542749897f, 0.683096844706444f, 0.688134638736401f, + private static readonly float[] logArray = { + 0f, 0.00995033085316809f, 0.0198026272961797f, 0.0295588022415444f, 0.0392207131532813f, 0.048790164169432f, 0.0582689081239758f, 0.0676586484738149f, 0.0769610411361284f, 0.0861776962410524f, 0.0953101798043249f, 0.104360015324243f, 0.113328685307003f, 0.122217632724249f, 0.131028262406404f, 0.139761942375159f, 0.148420005118273f, 0.157003748809665f, 0.165514438477573f, 0.173953307123438f, 0.182321556793955f, 0.19062035960865f, 0.198850858745165f, 0.207014169384326f, 0.215111379616945f, 0.22314355131421f, 0.231111720963387f, 0.2390169004705f, 0.246860077931526f, 0.254642218373581f, 0.262364264467491f, 0.27002713721306f, 0.27763173659828f, 0.285178942233662f, 0.29266961396282f, 0.300104592450338f, 0.307484699747961f, 0.314810739840034f, 0.322083499169113f, 0.3293037471426f, 0.336472236621213f, 0.343589704390077f, 0.350656871613169f, 0.357674444271816f, 0.364643113587909f, 0.371563556432483f, 0.378436435720245f, 0.385262400790645f, 0.392042087776024f, 0.398776119957368f, 0.405465108108164f, 0.412109650826833f, 0.418710334858185f, 0.425267735404344f, 0.431782416425538f, 0.438254930931155f, 0.444685821261446f, 0.451075619360217f, 0.457424847038875f, 0.46373401623214f, 0.470003629245736f, 0.476234178996372f, 0.482426149244293f, 0.488580014818671f, 0.494696241836107f, 0.500775287912489f, 0.506817602368452f, 0.512823626428664f, 0.518793793415168f, 0.524728528934982f, 0.53062825106217f, 0.536493370514568f, 0.542324290825362f, 0.548121408509688f, 0.553885113226438f, 0.559615787935423f, 0.56531380905006f, 0.570979546585738f, 0.576613364303994f, 0.582215619852664f, 0.587786664902119f, 0.593326845277734f, 0.598836501088704f, 0.60431596685333f, 0.609765571620894f, 0.615185639090233f, 0.62057648772511f, 0.625938430866495f, 0.631271776841858f, 0.636576829071551f, 0.641853886172395f, 0.647103242058538f, 0.65232518603969f, 0.657520002916794f, 0.662687973075237f, 0.667829372575655f, 0.672944473242426f, 0.678033542749897f, 0.683096844706444f, 0.688134638736401f, }; /// - /// + /// /// /// /// /// Returns the value of ln(x). /// - public static unsafe float Log(float x) + public static unsafe float Log( float x ) { - if (x < 0) - { + if( x < 0 ) { throw new ArgumentOutOfRangeException(); } - uint input = *(uint*)&x; + uint input = *( uint* )&x; - int f = (int)input; + int f = ( int )input; f >>= 23; f -= 127; input <<= 9; input >>= 9; input += 0b_0011_1111_1000_0000_0000_0000_0000_0000; - float result = *(float*)&input; - uint order = ((uint)(result * 100)) - 100; + float result = *( float* )&input; + uint order = ( ( uint )( result * 100 ) ) - 100; - float cache = (result / (1f + (0.01f * order))) - 1; - result = (cache * (-0.25f)) + 0.3333333333333f; - result = (result * cache) - 0.5f; - result = (result * cache) + 1.0f; + float cache = ( result / ( 1f + ( 0.01f * order ) ) ) - 1; + result = ( cache * ( -0.25f ) ) + 0.3333333333333f; + result = ( result * cache ) - 0.5f; + result = ( result * cache ) + 1.0f; result *= cache; return - (f * 0.6931471806f) + - result + - logArray[order]; + ( f * 0.6931471806f ) + result + logArray[ order ]; } - - public static float Log(float x, float y) + public static float Log( float x, float y ) { - return Log(x) / Log(y); + return Log( x ) / Log( y ); } - } } diff --git a/源代码/StgSharp/Math/Scalar/Pow.cs b/源代码/StgSharp/Math/Scalar/Pow.cs index 496f378e..737f9d70 100644 --- a/源代码/StgSharp/Math/Scalar/Pow.cs +++ b/源代码/StgSharp/Math/Scalar/Pow.cs @@ -38,8 +38,8 @@ namespace StgSharp.Math /// /// /// - /// Returns the value of x^y - public static unsafe float Pow(float x, float y) + /// Returns the value of x^y + public static unsafe float Pow( float x, float y ) { /* * x^y = E ^ ( log( x ) * y ) @@ -54,65 +54,43 @@ namespace StgSharp.Math * */ float z, t; - if ((x == 1) || (y == 0)) - { + if( ( x == 1 ) || ( y == 0 ) ) { return 1; } - if ((x == 1) && (y == 0)) - { + if( ( x == 1 ) && ( y == 0 ) ) { return float.PositiveInfinity; } - if ((x == 0) && (y != 0)) - { + if( ( x == 0 ) && ( y != 0 ) ) { return 0; } - z = Scaler.Log(x) * y; + z = Scaler.Log( x ) * y; bool sign = false; - if (z < 0) - { + if( z < 0 ) { sign = true; z = -z; } - if (z < 0.5f) - { - t = 1.0f + (z * ( - 1.0f + (z * ( - 0.5f + (z * ( - 0.1666666667f + (z * ( - 0.0416666666667f + (z * - 8.333333333e-3f))))))))); - } - else - { - uint zBit = *(uint*)&z; + if( z < 0.5f ) { + t = 1.0f + ( z * ( 1.0f + ( z * ( 0.5f + ( z * ( 0.1666666667f + ( z * ( 0.0416666666667f + ( z * 8.333333333e-3f ) ) ) ) ) ) ) ) ); + } else { + uint zBit = *( uint* )&z; uint zBitAbs = zBit & 0b_0111_1111_1111_1111_1111_1111_1111_1111; uint uintm = zBitAbs >> 23; - int m = (*(int*)&uintm) - 126; + int m = ( *( int* )&uintm ) - 126; - uint nBit = (zBitAbs & 0b_0000_0000_0111_1111_1111_1111_1111_1111) - + 0b_0011_1111_0000_0000_0000_0000_0000_0000; - float n = (*(float*)&nBit) - 1; + uint nBit = ( zBitAbs & 0b_0000_0000_0111_1111_1111_1111_1111_1111 ) + 0b_0011_1111_0000_0000_0000_0000_0000_0000; + float n = ( *( float* )&nBit ) - 1; - t = 2.718281828f + (n * ( - 2.718281828f + (n * ( - 1.359140914f + (n * ( - 0.4530469714f + (n * ( - 0.1132617429f + (n * - 0.02265234857f))))))))); + t = 2.718281828f + ( n * ( 2.718281828f + ( n * ( 1.359140914f + ( n * ( 0.4530469714f + ( n * ( 0.1132617429f + ( n * 0.02265234857f ) ) ) ) ) ) ) ) ); - for (int i = 0; i < m; i++) - { + for( int i = 0; i < m; i++ ) { t = t * t; } - - } - if (sign) - { + if( sign ) { t = 1 / t; } diff --git a/源代码/StgSharp/Math/Scalar/Random.cs b/源代码/StgSharp/Math/Scalar/Random.cs index b0d14251..ffc90a97 100644 --- a/源代码/StgSharp/Math/Scalar/Random.cs +++ b/源代码/StgSharp/Math/Scalar/Random.cs @@ -29,7 +29,7 @@ //----------------------------------------------------------------------- //----------------------------------------------------------------------- -using StgSharp.Math.HighPrecession; +using StgSharp.Math; using System; using System.Collections.Generic; @@ -49,10 +49,10 @@ namespace StgSharp.Math internal static float currentSeed #if DEBUG = 0.5f; -#else - = Abs(System.DateTime.UtcNow.GetHashCode()); -#endif + #else + = Abs(System.DateTime.UtcNow.GetHashCode()); + #endif /// /// returns a random float number between 0 and 1. @@ -62,57 +62,51 @@ namespace StgSharp.Math { float seed = currentSeed; - float sample = Scaler.Pow(Scaler.SeedSqrt(seed), 2); - float sample2 = (sample - seed) / seed; - sample2 = Scaler.Abs(sample2); + float sample = Scaler.Pow( Scaler.SeedSqrt( seed ), 2 ); + float sample2 = ( sample - seed ) / seed; + sample2 = Scaler.Abs( sample2 ); - if (sample == 1) - { + if( sample == 1 ) { sample = sample2; } currentSeed = sample; sample2 *= 1000000; - float result = sample2 - ((int)sample2); - if (result == 0) - { + float result = sample2 - ( ( int )sample2 ); + if( result == 0 ) { currentSeed = sample2 + 0.1f; result = Scaler.LowProceisionRandom(); } return result; - } /// - /// + /// /// /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T Random() where T : struct, IConvertible -#if NET8_0_OR_GREATER + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static T Random() where T: struct, IConvertible + #if NET8_0_OR_GREATER ,INumber -#endif + #endif + { - if (randomSeed == null) - { + if( randomSeed == null ) { randomSeed = new byte[64]; string originSeed = - ($"{((Assembly.GetEntryAssembly() == null) ? (Assembly.GetAssembly(typeof(StgSharp))!) : - Assembly.GetEntryAssembly())}") + - ($"{DateTime.UtcNow.ToString("o")}"); - using (SHA256 sha = SHA256.Create()) - { - randomSeed = sha.ComputeHash(Encoding.UTF8.GetBytes(originSeed)); + ( $"{((Assembly.GetEntryAssembly() == null) ? (Assembly.GetAssembly(typeof(StgSharp))!) : + Assembly.GetEntryAssembly())}" ) + ( $"{DateTime.UtcNow.ToString("o")}" ); + using( SHA256 sha = SHA256.Create() ) { + randomSeed = sha.ComputeHash( + Encoding.UTF8.GetBytes( originSeed ) ); } } - using (SHA256 sha = SHA256.Create()) - { - randomSeed = sha.ComputeHash(randomSeed); + using( SHA256 sha = SHA256.Create() ) { + randomSeed = sha.ComputeHash( randomSeed ); } - fixed (byte* bptr = randomSeed) - { - return *(T*)bptr; + fixed( byte* bptr = randomSeed ) { + return *( T* )bptr; } } @@ -124,11 +118,11 @@ namespace StgSharp.Math { float seedValue1 = LowProceisionRandom(); float seedValue2 = LowProceisionRandom(); - uint seedValueBits = *(uint*)&seedValue1; + uint seedValueBits = *( uint* )&seedValue1; float seedValue = seedValueBits * seedValue2; - return *(int*)&seedValue; + return *( int* )&seedValue; } } diff --git a/源代码/StgSharp/Math/Scalar/SignOf.cs b/源代码/StgSharp/Math/Scalar/SignOf.cs index 083a8ace..e88ec88a 100644 --- a/源代码/StgSharp/Math/Scalar/SignOf.cs +++ b/源代码/StgSharp/Math/Scalar/SignOf.cs @@ -40,28 +40,25 @@ namespace StgSharp.Math public static unsafe partial class Scaler { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int SignOf(float x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe int SignOf( float x ) { - if (x == 0) - { + if( x == 0 ) { return 0; } - if (x > 0) - { + if( x > 0 ) { return 1; } return -1; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int SignOf(int x) + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe int SignOf( int x ) { - if (x == 0) - { + if( x == 0 ) { return 0; } - if (x > 0) - { + if( x > 0 ) { return 1; } return -1; diff --git a/源代码/StgSharp/Math/Scalar/Sin.cs b/源代码/StgSharp/Math/Scalar/Sin.cs index f37e769d..8b79166d 100644 --- a/源代码/StgSharp/Math/Scalar/Sin.cs +++ b/源代码/StgSharp/Math/Scalar/Sin.cs @@ -39,36 +39,16 @@ namespace StgSharp.Math public const float Pi = 3.1415926f; - private static readonly float[] cosData = - { - 1f, 0.987688341014302f, 0.951056517951169f, 0.891006527837756f, 0.809017000674805f, - 0.707106790659974f, 0.587785265298989f, 0.453990516451646f, 0.309017014761716f, 0.156434488858737f, - 2.67948965850537E-08f, -0.156434435928723f, -0.309016963794794f, -0.453990468702791f, -0.587785221943935f, - -0.707106752766267f, -0.809016969175515f, -0.891006503508499f, -0.951056501391011f, -0.98768833263101f, - -0.999999999999999f, -0.987688349397591f, -0.951056534511324f, -0.891006552167012f, -0.809017032174094f, - -0.707106828553679f, -0.587785308654041f, -0.4539905642005f, -0.309017065728638f, -0.156434541788751f, - -8.03846893110719E-08f, 0.156434382998709f, 0.309016912827872f, 0.453990420953934f, 0.58778517858888f, - 0.707106714872559f, 0.809016937676222f, 0.891006479179238f, 0.951056484830851f, 0.987688324247716f, - - + private static readonly float[] cosData = { + 1f, 0.987688341014302f, 0.951056517951169f, 0.891006527837756f, 0.809017000674805f, 0.707106790659974f, 0.587785265298989f, 0.453990516451646f, 0.309017014761716f, 0.156434488858737f, 2.67948965850537E-08f, -0.156434435928723f, -0.309016963794794f, -0.453990468702791f, -0.587785221943935f, -0.707106752766267f, -0.809016969175515f, -0.891006503508499f, -0.951056501391011f, -0.98768833263101f, -0.999999999999999f, -0.987688349397591f, -0.951056534511324f, -0.891006552167012f, -0.809017032174094f, -0.707106828553679f, -0.587785308654041f, -0.4539905642005f, -0.309017065728638f, -0.156434541788751f, -8.03846893110719E-08f, 0.156434382998709f, 0.309016912827872f, 0.453990420953934f, 0.58778517858888f, 0.707106714872559f, 0.809016937676222f, 0.891006479179238f, 0.951056484830851f, 0.987688324247716f, }; - private static readonly float[] sinData = - { - 0f, 0.15643446239373f, 0.309016989278255f, 0.453990492577218f, 0.587785243621462f, - 0.707106771713121f, 0.80901698492516f, 0.891006515673128f, 0.951056509671091f, 0.987688336822657f, - 1f, 0.987688345205947f, 0.951056526231247f, 0.891006540002384f, 0.80901701642445f, - 0.707106809606826f, 0.587785286976515f, 0.453990540326073f, 0.309017040245177f, 0.156434515323744f, - 5.35897931701074E-08f, -0.156434409463716f, -0.309016938311333f, -0.453990444828362f, -0.587785200266408f, - -0.707106733819413f, -0.809016953425868f, -0.891006491343869f, -0.951056493110931f, -0.987688328439363f, - -0.999999999999997f, -0.987688353589235f, -0.951056542791401f, -0.891006564331638f, -0.809017047923737f, - -0.70710684750053f, -0.587785330331566f, -0.453990588074927f, -0.309017091212098f, -0.156434568253757f, - - + private static readonly float[] sinData = { + 0f, 0.15643446239373f, 0.309016989278255f, 0.453990492577218f, 0.587785243621462f, 0.707106771713121f, 0.80901698492516f, 0.891006515673128f, 0.951056509671091f, 0.987688336822657f, 1f, 0.987688345205947f, 0.951056526231247f, 0.891006540002384f, 0.80901701642445f, 0.707106809606826f, 0.587785286976515f, 0.453990540326073f, 0.309017040245177f, 0.156434515323744f, 5.35897931701074E-08f, -0.156434409463716f, -0.309016938311333f, -0.453990444828362f, -0.587785200266408f, -0.707106733819413f, -0.809016953425868f, -0.891006491343869f, -0.951056493110931f, -0.987688328439363f, -0.999999999999997f, -0.987688353589235f, -0.951056542791401f, -0.891006564331638f, -0.809017047923737f, -0.70710684750053f, -0.587785330331566f, -0.453990588074927f, -0.309017091212098f, -0.156434568253757f, }; - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe float Sin(float x) + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static unsafe float Sin( float x ) { /* float refer = x / 360.0f; @@ -84,7 +64,7 @@ namespace StgSharp.Math return (sinData[a] * ((1 - (0.0123370055f * refer2)) + (2.536695709e-5f * refer2 * refer2))) + (cosData[a] * ((0.1570796327f * refer) - (6.459640975e-4f * refer * refer2))); */ - return MathF.Sin(x); + return MathF.Sin( x ); } } diff --git a/源代码/StgSharp/Math/Scalar/Sqrt.cs b/源代码/StgSharp/Math/Scalar/Sqrt.cs index e281655e..056a6a51 100644 --- a/源代码/StgSharp/Math/Scalar/Sqrt.cs +++ b/源代码/StgSharp/Math/Scalar/Sqrt.cs @@ -36,7 +36,7 @@ namespace StgSharp.Math public static partial class Scaler { - public static unsafe float SeedSqrt(float x) + public static unsafe float SeedSqrt( float x ) { /* * 本方法采用分别对指数和小数处理的方法计算平方根 @@ -47,12 +47,11 @@ namespace StgSharp.Math * 在进一步简化操作后,计算精度达到0.5%,速度约为.Net库函数的3倍 */ - if (x < 0) - { - throw new ArgumentOutOfRangeException("Input is smaller than zero!"); + if( x < 0 ) { + throw new ArgumentOutOfRangeException( + "Input is smaller than zero!" ); } - if (x == 0) - { + if( x == 0 ) { return 0; } /* @@ -61,19 +60,17 @@ namespace StgSharp.Math * 故不考虑正负号 */ - if (x < 0) - { + if( x < 0 ) { throw new ArgumentOutOfRangeException(); } - if (x <= 1e-12) - { + if( x <= 1e-12 ) { return 0; } //提取指数位并减去指数位中的127 //由于平方根仅对正数有效 //故不考虑正负号 - uint a = *(uint*)&x; + uint a = *( uint* )&x; uint f = a; f >>= 23; f /= 2; @@ -96,14 +93,15 @@ namespace StgSharp.Math f <<= 23; e += f; - float result = *(float*)&e; - result = (result + (x / result)) / 2; - return (result + (x / result)) / 2; + float result = *( float* )&e; + result = ( result + ( x / result ) ) / 2; + return ( result + ( x / result ) ) / 2; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Sqrt(float x) + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public static float Sqrt( float x ) { - return MathF.Sqrt(x); + return MathF.Sqrt( x ); /**/ } diff --git a/源代码/StgSharp/Math/Scalar/Tan.cs b/源代码/StgSharp/Math/Scalar/Tan.cs index 687727b0..580fd019 100644 --- a/源代码/StgSharp/Math/Scalar/Tan.cs +++ b/源代码/StgSharp/Math/Scalar/Tan.cs @@ -33,22 +33,22 @@ namespace StgSharp.Math public static partial class Scaler { - public static float Tan(float x) + public static float Tan( float x ) { float refer = x / 360.0f; - refer -= (int)refer; + refer -= ( int )refer; refer *= 40; - int a = (int)refer; //大分度,查表 + int a = ( int )refer; //大分度,查表 refer -= a; //小分度,拟合 float refer2 = refer * refer; - float sin = (0.1570796327f * refer) - (6.459640975e-4f * refer * refer2); - float cos = (1 - (0.0123370055f * refer2)) + (2.536695709e-5f * refer2 * refer2); + float sin = ( 0.1570796327f * refer ) - ( 6.459640975e-4f * refer * refer2 ); + float cos = ( 1 - ( 0.0123370055f * refer2 ) ) + ( 2.536695709e-5f * refer2 * refer2 ); - return ((sinData[a] * cos) + (cosData[a] * sin)) - / ((cosData[a] * cos) - (sinData[a] * sin)); + return ( ( sinData[ a ] * cos ) + ( cosData[ a ] * sin ) ) / ( ( cosData[ + a ] * cos ) - ( sinData[ a ] * sin ) ); } } diff --git a/源代码/StgSharp/Math/glClampf.cs b/源代码/StgSharp/Math/glClampf.cs index dbe60314..b298e8ba 100644 --- a/源代码/StgSharp/Math/glClampf.cs +++ b/源代码/StgSharp/Math/glClampf.cs @@ -38,55 +38,54 @@ using System.Threading.Tasks; namespace StgSharp.Math { /// - /// OpenGL numeric type. - /// An IEEE-754 floating-point value, clamped to the range [0,1]. + /// OpenGL numeric type. An IEEE-754 floating-point value, clamped to the range [0,1]. /// - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public struct GLclampf { public float value; - public GLclampf(float a) + public GLclampf( float a ) { value = a; } - public static explicit operator float(GLclampf v) + public static explicit operator float( GLclampf v ) { return v.value; } - public static explicit operator GLclampf(float v) + public static explicit operator GLclampf( float v ) { - return new GLclampf(v); + return new GLclampf( v ); } } /// - /// OpenGL numeric type. - /// An IEEE-754 double precision floating-point value, clamped to the range [0,1]. + /// OpenGL numeric type. An IEEE-754 double precision floating-point value, clamped to the range + /// [0,1]. /// - [StructLayout(LayoutKind.Sequential)] + [StructLayout( LayoutKind.Sequential )] public struct GLclampd { public double value; - public GLclampd(double a) + public GLclampd( double a ) { value = a; } - public static explicit operator double(GLclampd v) + public static explicit operator double( GLclampd v ) { return v.value; } - public static explicit operator GLclampd(double v) + public static explicit operator GLclampd( double v ) { - return new GLclampd(v); + return new GLclampd( v ); } } diff --git a/源代码/StgSharp/Math/glHalfNV.cs b/源代码/StgSharp/Math/glHalfNV.cs index e75b0eea..2f649fd7 100644 --- a/源代码/StgSharp/Math/glHalfNV.cs +++ b/源代码/StgSharp/Math/glHalfNV.cs @@ -37,24 +37,23 @@ using System.Threading.Tasks; namespace StgSharp.Math { - - [StructLayout(LayoutKind.Explicit, Size = 16)] + [StructLayout( LayoutKind.Explicit, Size = 16 )] public struct GLhalfNV { - [FieldOffset(0)] public short binary; + [FieldOffset( 0 )] public short binary; - public GLhalfNV(short bin) + public GLhalfNV( short bin ) { binary = bin; } - public static explicit operator GLhalfNV(short x) + public static explicit operator GLhalfNV( short x ) { - return new GLhalfNV(x); + return new GLhalfNV( x ); } - public static explicit operator short(GLhalfNV x) + public static explicit operator short( GLhalfNV x ) { return x.binary; } diff --git a/源代码/StgSharp/Stg/Bullet.cs b/源代码/StgSharp/Stg/Bullet.cs index ba172b17..1f31f3c5 100644 --- a/源代码/StgSharp/Stg/Bullet.cs +++ b/源代码/StgSharp/Stg/Bullet.cs @@ -39,24 +39,21 @@ namespace StgSharp.Gaming public abstract class Bullet : IInstancing, IPlainEntity { - protected Bullet - ( + protected Bullet( PlainInstancingBuffer buffer, GeometryMotion movement, - vec2d beginPosition, + Vec2 beginPosition, float angle, - float scale - ) + float scale ) { - if (buffer == null) - { - throw new ArgumentNullException(nameof(buffer)); + if( buffer == null ) { + throw new ArgumentNullException( nameof( buffer ) ); } GlobalBuffer = buffer; BufferId = buffer.CreateInstanceID(); - ((IInstancing)this).Scale = scale; - ((IInstancing)this).Coord = new vec3d(beginPosition, 0); - ((IInstancing)this).Rotation = angle; + ( ( IInstancing )this ).Scale = scale; + ( ( IInstancing )this ).Coord = new Vec3( beginPosition, 0 ); + ( ( IInstancing )this ).Rotation = angle; Motion = movement; } @@ -78,18 +75,18 @@ namespace StgSharp.Gaming set; } - public vec2d CenterPosition + public Vec2 CenterPosition { get; set; } - public bool CollideWith(IPlainEntity entity) + public bool CollideWith( IPlainEntity entity ) { throw new System.NotImplementedException(); } - vec3d IInstancing.CenterPositionGlobal + Vec3 IInstancing.CenterPositionGlobal { get; set; diff --git a/源代码/StgSharp/Stg/CollisionTexture.cs b/源代码/StgSharp/Stg/CollisionTexture.cs index 66a72c31..641d9db3 100644 --- a/源代码/StgSharp/Stg/CollisionTexture.cs +++ b/源代码/StgSharp/Stg/CollisionTexture.cs @@ -49,79 +49,85 @@ namespace StgSharp.Stg public interface IOneDimensionalCollisionTexture2D { - public void Init(Radius angleStride, string name); + public void Init( Radius angleStride, string name ); } public sealed class OneDimensionalCollisionTexture2D_GL : glRender, IOneDimensionalCollisionTexture2D { - float[] textureOutput; - ElementBuffer ebo; + private float[] textureOutput; + private ElementBuffer ebo; private FrameBuffer fbo; - RenderBuffer rbo; + private RenderBuffer rbo; - ShaderProgram generatingShader; + private ShaderProgram generatingShader; - TextureGL t; + private TextureGL t; - VertexArray vao; - VertexBuffer vbo; + private VertexArray vao; + private VertexBuffer vbo; - public OneDimensionalCollisionTexture2D_GL() - { - - } + public OneDimensionalCollisionTexture2D_GL() { } public override bool IsContextSharable => false; - public void GenerateCollisionTexture(IEnumerable bufferEnumeration) + public void GenerateCollisionTexture( + IEnumerable bufferEnumeration ) { - fbo.Bind(0); - GL.ClearColor(0, 0, 0, 1); - GL.Clear(MaskBufferBit.DEPTH | MaskBufferBit.COLOR); + fbo.Bind( 0 ); + GL.ClearColor( 0, 0, 0, 1 ); + GL.Clear( MaskBufferBit.DEPTH | MaskBufferBit.COLOR ); generatingShader.Use(); - vao.Bind(0); + vao.Bind( 0 ); - foreach (IInstancingBuffer item in bufferEnumeration) - { + foreach( IInstancingBuffer item in bufferEnumeration ) { IGeometry g = item.TypicalShape; - if (!(g is PlainGeometry)) - { - throw new InvalidOperationException("The current particle buffer contains non-planar geometry,"); + if( !( g is PlainGeometry ) ) { + throw new InvalidOperationException( + "The current particle buffer contains non-planar geometry," ); } - ebo.Bind(0); - ebo.SetValue(0, g.VertexIndices, BufferUsage.StreamDraw); + ebo.Bind( 0 ); + ebo.SetValue( 0, g.VertexIndices, BufferUsage.StreamDraw ); - vbo.WriteVectorData(0, item.CoordAndRotationSpan, BufferUsage.StreamDraw); - vao.SetVertexAttribute(1, 3, TypeCode.Single, false, 4 * sizeof(float), 0); - vao.SetVertexAttribute(2, 1, TypeCode.Single, false, 4 * sizeof(float), 3 * sizeof(float)); + vbo.WriteVectorData( + 0, item.CoordAndRotationSpan, BufferUsage.StreamDraw ); + vao.SetVertexAttribute( + 1, 3, TypeCode.Single, false, 4 * sizeof( float ), 0 ); + vao.SetVertexAttribute( + 2, 1, TypeCode.Single, false, 4 * sizeof( float ), + 3 * sizeof( float ) ); - vbo.WriteScalerData(2, item.ScalingSpan, BufferUsage.StreamDraw); - vao.SetVertexAttribute(3, 1, TypeCode.Single, false, sizeof(float), 0); + vbo.WriteScalerData( + 2, item.ScalingSpan, BufferUsage.StreamDraw ); + vao.SetVertexAttribute( + 3, 1, TypeCode.Single, false, sizeof( float ), 0 ); - vbo.WriteVectorData(1, g.VertexStream, BufferUsage.StreamDraw); - vao.SetVertexAttribute(0, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + vbo.WriteVectorData( 1, g.VertexStream, + BufferUsage.StreamDraw ); + vao.SetVertexAttribute( + 0, 3, TypeCode.Single, false, 4 * sizeof( float ), 0 ); - GL.DrawElementsInstanced(GeometryType.TRIANGLES, ((uint)g.VertexIndices.Length) / 3, - TypeCode.UInt32, IntPtr.Zero, (uint)item.ScalingSpan.Length); + GL.DrawElementsInstanced( + GeometryType.TRIANGLES, + ( ( uint )g.VertexIndices.Length ) / 3, TypeCode.UInt32, + IntPtr.Zero, ( uint )item.ScalingSpan.Length ); } - t.Bind2D(0); - GL.GetTextureImage(Texture2DTarget.Texture2D, 0, ImageChannel.SingleColor, PixelChannelLayout.Float, textureOutput); + t.Bind2D( 0 ); + GL.GetTextureImage( + Texture2DTarget.Texture2D, 0, ImageChannel.SingleColor, + PixelChannelLayout.Float, textureOutput ); VertexArray.BindNull(); } - public void Init(Radius angleStride, string name) + public void Init( Radius angleStride, string name ) { - primeArgs = new ViewPort - { - Height = 1, - Width = (int)((new Radius(Scaler.Pi)) / angleStride), - Name = name, - }; + primeArgs = new ViewPort( + (1, ( ( new Radius( Scaler.Pi ) ) / angleStride )), name, + IntPtr.Zero ); _coordStretch = (1, 1, 1); @@ -129,7 +135,7 @@ namespace StgSharp.Stg CustomizeInit(); } -#pragma warning disable CS8618 + #pragma warning disable CS8618 protected override void CustomizeDeinit() { @@ -140,48 +146,50 @@ namespace StgSharp.Stg { generatingShader = CreateShaderProgram(); - Shader vertexShader = CreateShaderSegment(ShaderType.Vertex, 1); - Shader fragmentShader = CreateShaderSegment(ShaderType.Fragment, 1); + Shader vertexShader = CreateShaderSegment( ShaderType.Vertex, 1 ); + Shader fragmentShader = CreateShaderSegment( + ShaderType.Fragment, 1 ); - vertexShader.Compile(0, InternalIO.CollisionTextureVertexShader); - fragmentShader.Compile(0, InternalIO.CollisionTextureFragmentShader); - vertexShader.AttachTo(0, generatingShader); - fragmentShader.AttachTo(0, generatingShader); + vertexShader.Compile( 0, InternalIO.CollisionTextureVertexShader ); + fragmentShader.Compile( + 0, InternalIO.CollisionTextureFragmentShader ); + vertexShader.AttachTo( 0, generatingShader ); + fragmentShader.AttachTo( 0, generatingShader ); generatingShader.Link(); generatingShader.Use(); - vbo = CreateVertexBuffer(3); - vao = CreateVertexArray(1); - ebo = CreateElementBuffer(1); + vbo = CreateVertexBuffer( 3 ); + vao = CreateVertexArray( 1 ); + ebo = CreateElementBuffer( 1 ); - fbo = CreateFrameBuffer(1); - rbo = CreateRenderBuffer(1); + fbo = CreateFrameBuffer( 1 ); + rbo = CreateRenderBuffer( 1 ); GL.SetRenderBufferStorage( - RenderBufferInternalFormat.Depth24_Stencil8, this.Size); + RenderBufferInternalFormat.Depth24_Stencil8, this.Size ); - t = CreateTexture(1); - t.Bind2D(0); - GL.TextureImage2d(Texture2DTarget.Texture2D, 0, (int)ImageChannel.WithAlphaChannel, - (uint)Width, (uint)Height, (int)ImageChannel.WithAlphaChannel, PixelChannelLayout.Byte, Array.Empty()); + t = CreateTexture( 1 ); + t.Bind2D( 0 ); + GL.TextureImage2d( + Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, + ( uint )Width, ( uint )Height, ImageChannel.WithAlphaChannel, + PixelChannelLayout.Byte, Array.Empty() ); - t.Set2dWrapProperty(0, TextureWrap.Repeat, TextureWrap.Repeat); - t.Set2dFilterProperty(0, TextureFilter.Nearest, TextureFilter.Nearest); + t.Set2dWrapProperty( 0, TextureWrap.Repeat, TextureWrap.Repeat ); + t.Set2dFilterProperty( + 0, TextureFilter.Nearest, TextureFilter.Nearest ); - GL.FrameBufferTexture2d(FrameBufferTarget.All, glAttachment.Color(0), - Texture2DTarget.Texture2D, t[0], 0); + GL.FrameBufferTexture2d( + FrameBufferTarget.All, glAttachment.Color( 0 ), + Texture2DTarget.Texture2D, t[ 0 ], 0 ); - GL.CombineFrameBufferRenderBuffer(FrameBufferAttachment.Color, rbo[0]); + GL.CombineFrameBufferRenderBuffer( + FrameBufferAttachment.Color, rbo[ 0 ] ); textureOutput = new float[this.Width]; } - protected override void Main() - { - throw new NotSupportedException(); - } - } } diff --git a/源代码/StgSharp/Stg/TimeLine.cs b/源代码/StgSharp/Stg/TimeLine.cs index 67d49584..1d05b480 100644 --- a/源代码/StgSharp/Stg/TimeLine.cs +++ b/源代码/StgSharp/Stg/TimeLine.cs @@ -34,7 +34,5 @@ using System.Text; namespace StgSharp.Stg { - public class TimeLine - { - } + public class TimeLine { } } diff --git a/源代码/StgSharp/Stg/Touhou/TouhouBuilder.cs b/源代码/StgSharp/Stg/Touhou/TouhouBuilder.cs index 5bcc081a..e720313a 100644 --- a/源代码/StgSharp/Stg/Touhou/TouhouBuilder.cs +++ b/源代码/StgSharp/Stg/Touhou/TouhouBuilder.cs @@ -39,8 +39,6 @@ namespace StgSharp.Stg.Touhou { public static class TouhouBuilder { - - /* public static ViewBase BuildTouhouWorld() { diff --git a/源代码/StgSharp/Stg/Touhou/TouhouWindow.cs b/源代码/StgSharp/Stg/Touhou/TouhouWindow.cs index 4558c200..0613d45c 100644 --- a/源代码/StgSharp/Stg/Touhou/TouhouWindow.cs +++ b/源代码/StgSharp/Stg/Touhou/TouhouWindow.cs @@ -41,11 +41,7 @@ namespace StgSharp.Touhou public abstract class TouhouWindowMain : ViewModelBase { - protected TouhouWindowMain(ViewPort vp) : base(vp, 60) - { - } - - + protected TouhouWindowMain( ViewPort vp ) : base( vp, 60 ) { } } } diff --git a/源代码/StgSharp/Stg/Touhou/View/OpenningView.cs b/源代码/StgSharp/Stg/Touhou/View/OpenningView.cs index 53897cbc..f426bbc1 100644 --- a/源代码/StgSharp/Stg/Touhou/View/OpenningView.cs +++ b/源代码/StgSharp/Stg/Touhou/View/OpenningView.cs @@ -42,12 +42,11 @@ namespace StgSharp.Stg.Touhou public abstract class OpenningView : ViewBase { - public override void CustomizedInitialize(ViewModelBase viewModelBinding) + public override void CustomizedInitialize( + ViewModelBase viewModelBinding ) { throw new NotImplementedException(); } } - - } diff --git a/源代码/StgSharp/obj/StgSharp.csproj.nuget.dgspec.json b/源代码/StgSharp/obj/StgSharp.csproj.nuget.dgspec.json index 7d4501ab..1548f806 100644 --- a/源代码/StgSharp/obj/StgSharp.csproj.nuget.dgspec.json +++ b/源代码/StgSharp/obj/StgSharp.csproj.nuget.dgspec.json @@ -26,7 +26,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/StgSharp/obj/project.assets.json b/源代码/StgSharp/obj/project.assets.json index f922ea2f..5f045960 100644 --- a/源代码/StgSharp/obj/project.assets.json +++ b/源代码/StgSharp/obj/project.assets.json @@ -428,7 +428,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/StgSharp/obj/x64/Benchmark/netstandard2.1/StgSharp.AssemblyInfo.cs b/源代码/StgSharp/obj/x64/Benchmark/netstandard2.1/StgSharp.AssemblyInfo.cs index 60c469e6..22458240 100644 --- a/源代码/StgSharp/obj/x64/Benchmark/netstandard2.1/StgSharp.AssemblyInfo.cs +++ b/源代码/StgSharp/obj/x64/Benchmark/netstandard2.1/StgSharp.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Benchmark")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b207f16616b7bd967d647a809cc27e7174063451")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharp")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharp")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/StgSharp/obj/x64/Release/netstandard2.1/StgSharp.AssemblyInfo.cs b/源代码/StgSharp/obj/x64/Release/netstandard2.1/StgSharp.AssemblyInfo.cs index bac32a8e..9ac00e4f 100644 --- a/源代码/StgSharp/obj/x64/Release/netstandard2.1/StgSharp.AssemblyInfo.cs +++ b/源代码/StgSharp/obj/x64/Release/netstandard2.1/StgSharp.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1ee4e4a42f2a6b8609a6fce1d36c8da7f4182da6")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharp")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharp")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/StgSharpC/StgSharpC.c b/源代码/StgSharpC/StgSharpC.c index 6b1ae9dd..53a5d5ea 100644 --- a/源代码/StgSharpC/StgSharpC.c +++ b/源代码/StgSharpC/StgSharpC.c @@ -1,81 +1,79 @@ -#include "ssgc_framework.h" +#include "StgSharpC.h" #include "gl.h" #include "glfw3.h" -#include "StgSharpC.h" +#include "ssc_framework.h" #include -GladGLContext* currentContext; +GladGLContext *currentContext; extern char infolog[512] = { 0 }; -SSCAPI int SSCDECL glCheckShaderStat(GladGLContext* context,uint64_t shaderHandle , int key, char** logRef) +SSCAPI int SSCDECL glCheckShaderStat(GladGLContext *context, + uint64_t shaderHandle, int key, + char **logRef) { - int stat = 0; - context->GetShaderiv(shaderHandle, key, &stat); - if (!stat) - { - context->GetShaderInfoLog(shaderHandle, 512, NULL, infolog); - } - *logRef = infolog; - return stat; + int stat = 0; + context->GetShaderiv(shaderHandle, key, &stat); + if (!stat) { + context->GetShaderInfoLog(shaderHandle, 512, NULL, infolog); + } + *logRef = infolog; + return stat; } SSCAPI void SSCDECL initGL(int majorVersion, int minorVersion) { - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, majorVersion); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, minorVersion); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, majorVersion); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, minorVersion); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); } -SSCAPI GLFWglproc SSCDECL loadGlfuncDefault(char* procName) +SSCAPI GLFWglproc SSCDECL loadGlfuncDefault(char *procName) { - void* ret = glfwGetProcAddress(procName); - //printf("%llu\n", (uint64_t)ret); - if (ret = NULL) - { - *infolog = "Failed to load OpenGL api:"; - for (size_t i = 0; i < sizeof(procName); i++) - { - infolog[30 + i] = procName[i]; + void *ret = glfwGetProcAddress(procName); + // printf("%llu\n", (uint64_t)ret); + if (ret = NULL) { + *infolog = "Failed to load OpenGL api:"; + for (size_t i = 0; i < sizeof(procName); i++) { + infolog[30 + i] = procName[i]; + } + printf("%s\n", infolog); } - printf("%s\n", infolog); - } - return (GLFWglproc)ret; + return (GLFWglproc)ret; } -SSCAPI unsigned int linkShaderProgram(GladGLContext* context, GLuint shaderProgram) +SSCAPI unsigned int linkShaderProgram(GladGLContext *context, + GLuint shaderProgram) { - context->LinkProgram(shaderProgram); + context->LinkProgram(shaderProgram); - int success; - context->GetProgramiv(shaderProgram, GL_LINK_STATUS, &success); - if (!success) - { - context->GetProgramInfoLog(shaderProgram, 512, NULL, infolog); - return 0; - } - else - { - return shaderProgram; - } + int success; + context->GetProgramiv(shaderProgram, GL_LINK_STATUS, &success); + if (!success) { + context->GetProgramInfoLog(shaderProgram, 512, NULL, infolog); + return 0; + } else { + return shaderProgram; + } } -SSCAPI void SSCDECL loadImageData(char* location, Image* out, imageLoader loader) +SSCAPI void SSCDECL loadImageData(char *location, Image *out, + imageLoader loader) { - if (loader == NULL) - { - loader = stbi_load; - } - out->pixelPtr = loader(location, &(out->width), &(out->height), &(out->channel), 0); + if (loader == NULL) { + loader = stbi_load; + } + out->pixelPtr = loader(location, &(out->width), &(out->height), + &(out->channel), 0); } -SSCAPI void SSCDECL unloadImageData(Image* out) +SSCAPI void SSCDECL unloadImageData(Image *out) { - free(out->pixelPtr); + free(out->pixelPtr); } -char* _cdecl readLog() +char *_cdecl readLog() { - infolog[511] = '\0'; - return &infolog; -} \ No newline at end of file + infolog[511] = '\0'; + return &infolog; +} diff --git a/源代码/StgSharpC/StgSharpC.h b/源代码/StgSharpC/StgSharpC.h index 5d182c96..210ff04b 100644 --- a/源代码/StgSharpC/StgSharpC.h +++ b/源代码/StgSharpC/StgSharpC.h @@ -1,114 +1,75 @@ -#ifndef SSC +#ifdef _MSC_VER +#pragma once +#endif + +#ifndef SSC #define SSC -#define SSC_Api - -#include "ssgc_framework.h" -#include "ssgc_internal.h" -#include "gl.h" -#include "wgl.h" -#include "glfw3.h" -#include +#include "ssc_framework.h" +#include "ssc_internal.h" #define STBIDEF SSCAPI #include "stb_image.h" -#pragma comment(lib,"glfw3.lib") +#include "gl.h" +#include "wgl.h" +#include "glfw3.h" +#include +#include + +#ifndef SSCAPI_DEFINE + +#ifdef _WIN32 +#define SSCAPI __declspec(dllexport) +#elif defined _LINUX_ +#define SSCAPI __attribute__((dllexport)) +#elif defined _APPLE_ +#define SSCAPI __attribute__((visibility("default"))) +#else +#define SSCAPI +#endif + +#endif // ! SSCAPI_DEFINE + #if __cplusplus -extern "C" -{ -#endif // _cplusplus +extern "C" { +#endif #define byte char - -#pragma region Internal +#define ssc_null_assert(ptr) assert(ptr != NULL) #define ALIGN(simdVec) _mm_loadu_ps(&simdVec) - typedef struct Image { +typedef struct Image { int width; int height; int channel; - char* pixelPtr; - }Image; + char *pixelPtr; +} Image; + +typedef char *(*imageLoader)(char const *filename, int *x, int *y, + int *channels_in_file, int desired_channels); + +SSCAPI char infolog[512]; +SSCAPI int SSCDECL glCheckShaderStat(GladGLContext *context, + uint64_t shaderHandle, int key, + char **logRef); +SSCAPI void SSCDECL initGL(int majorVersion, int minorVersion); +SSCAPI unsigned int SSCDECL linkShaderProgram(GladGLContext *context, + GLuint shadertype); +SSCAPI void SSCDECL loadImageData(char *location, Image *out, + imageLoader loader); +SSCAPI GLFWglproc SSCDECL loadGlfuncDefault(char *procName); +SSCAPI void SSCDECL unloadImageData(Image *out); +SSCAPI char *SSCDECL readLog(void); #pragma endregion - typedef char* (*imageLoader)(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels); +SSCAPI void SSCDECL load_intrinsic_function(void *intrinsic_context); - SSCAPI char infolog[512]; - SSCAPI int SSCDECL glCheckShaderStat(GladGLContext* context, int key, char** logRef); - SSCAPI void SSCDECL initGL(int majorVersion, int minorVersion); - SSCAPI unsigned int SSCDECL linkShaderProgram(GladGLContext* context, GLuint shadertype); - SSCAPI void SSCDECL loadImageData(char* location, Image* out, imageLoader loader); - SSCAPI GLFWglproc SSCDECL loadGlfuncDefault(char* procName); - SSCAPI void SSCDECL unloadImageData(Image* out); - SSCAPI char* SSCDECL readLog(void); - - //linear related function - - -#pragma region mat define - - typedef union matrix2map - { - __m128 colum[2]; - float m[4][2]; - }matrix2map; - - typedef struct matrix3map - { - __m128 colum[3]; - float m[4][3]; - }matrix3map; - - typedef union matrix4map { - __m128 colum[4]; - float m[4][4]; - }matrix4map; - -#pragma endregion - -#pragma region Vector - - SSCAPI void SSCDECL normalize(__m128* source, __m128* target); - -#pragma endregion - - -#pragma region mat2 - - SSCAPI _inline void __cdecl transpose2to3(matrix2map* source, matrix3map* target); - SSCAPI _inline void __cdecl transpose2to4(matrix2map* source, matrix4map* target); - SSCAPI _inline void __cdecl deinit_mat2(matrix2map* mat); - -#pragma endregion - -#pragma region mat3 - - SSCAPI __inline void _cdecl transpose3to2(matrix3map* source, matrix2map* target); - SSCAPI __inline void _cdecl transpose3to3(matrix3map* source, matrix3map* target); - SSCAPI __inline void _cdecl transpose3to4(matrix3map* source, matrix4map* target); - SSCAPI _inline float _cdecl det_mat3(matrix3map* mat); - SSCAPI __inline float det_mat3_internal(__m128 const c1, __m128 const c2, __m128 const c3); - -#pragma endregion - -#pragma region mat4 - //type and function for 4 colum matrix - - SSCAPI __inline void __cdecl transpose4to2(matrix4map* source, matrix4map* target); - SSCAPI __inline void __cdecl transpose4to4(matrix4map* matrix, matrix4map* target); - - SSCAPI __inline float __cdecl det_mat4(matrix4map* matPtr, matrix4map* transpose); - - SSCAPI __inline void __cdecl deinit_mat4(matrix4map* matPtr); - -#pragma endregion - -#ifdef __cplusplus +#ifdef __cplusplus } -#endif // __cplusplus +#endif -#endif // !SSG +#endif diff --git a/源代码/StgSharpC/StgSharpC.vcxproj b/源代码/StgSharpC/StgSharpC.vcxproj index 49aa4262..ecc5a719 100644 --- a/源代码/StgSharpC/StgSharpC.vcxproj +++ b/源代码/StgSharpC/StgSharpC.vcxproj @@ -159,27 +159,27 @@ + + + - - + + - - - diff --git a/源代码/StgSharpC/dllmain.c b/源代码/StgSharpC/dllmain.c index bf376215..61d731f6 100644 --- a/源代码/StgSharpC/dllmain.c +++ b/源代码/StgSharpC/dllmain.c @@ -1,34 +1,33 @@ // dllmain.cpp : 定义 DLL 应用程序的入口点。 #ifdef _WIN32 -#include "ssgc_framework.h" +#include "ssc_framework.h" #endif // __ #include "StgSharpC.h" #ifdef _WIN32 -BOOL APIENTRY DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved + +// clang-format off + +BOOL APIENTRY DllMain( + HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved ) { - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - - return 1; - - case DLL_THREAD_ATTACH: - return 1; - - case DLL_THREAD_DETACH: - return 1; - - case DLL_PROCESS_DETACH: - return 1; - + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + return 1; + case DLL_THREAD_ATTACH: + return 1; + case DLL_THREAD_DETACH: + return 1; + case DLL_PROCESS_DETACH: + return 1; break; - } + } return TRUE; } #else @@ -36,4 +35,6 @@ attribute((constructor)) void DllMain() { } -#endif // _WIN32 \ No newline at end of file +// clang-format on + +#endif // _WIN32 diff --git a/源代码/StgSharpC/intrinsic.c b/源代码/StgSharpC/intrinsic.c new file mode 100644 index 00000000..5e027698 --- /dev/null +++ b/源代码/StgSharpC/intrinsic.c @@ -0,0 +1,24 @@ +#include "StgSharpC.h" +#include "ssc_intrinsic.h" +#include + +SSCAPI void load_intrinsic_function(void *intrinsic_context) +{ + ssc_null_assert(intrinsic_context); + + ssc_intrinsic *context = (ssc_intrinsic *)intrinsic_context; + + context->transpose_23 = transpose23; + context->transpose_24 = transpose24; + context->transpose_32 = transpose32; + context->transpose_33 = transpose33; + context->transpose_34 = transpose34; + context->transpose_42 = transpose42; + context->transpose_43 = transpose43; + context->transpose_44 = transpose44; + context->normalize_3 = normalize; + context->det_matrix33 = det_mat3; + context->det_matrix44 = det_mat4; + context->string_quick_hash = quick_string_hash; + +} diff --git a/源代码/StgSharpC/mat2.c b/源代码/StgSharpC/mat2.c index 86cfffe5..43fc0372 100644 --- a/源代码/StgSharpC/mat2.c +++ b/源代码/StgSharpC/mat2.c @@ -1,28 +1,40 @@ #include "StgSharpC.h" -#include "ssgc_internal.h" +#include "ssc_intrinsic.h" -SSCAPI _inline void __cdecl transpose2to3(matrix2map* source, matrix3map* target) +INTERNAL void __cdecl transpose23(__2_columnset *source, + __3_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t1 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(3, 2, 3, 2)); - target->colum[0] = _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(3, 1, 3, 1)); - target->colum[2] = _mm_shuffle_ps(t1, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[0] = + _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = + _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[2] = + _mm_shuffle_ps(t1, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); } -SSCAPI _inline void __cdecl transpose2to4(matrix2map* source, matrix4map* target) +INTERNAL void __cdecl transpose24(__2_columnset *source, + __4_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t1 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(3, 2, 3, 2)); - target->colum[0] = _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(3, 1, 3, 1)); - target->colum[2] = _mm_shuffle_ps(t1, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[3] = _mm_shuffle_ps(t1, zeroVec, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[0] = + _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = + _mm_shuffle_ps(t0, zeroVec, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[2] = + _mm_shuffle_ps(t1, zeroVec, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[3] = + _mm_shuffle_ps(t1, zeroVec, _MM_SHUFFLE(3, 1, 3, 1)); } - -SSCAPI _inline void __cdecl deinit_mat2(matrix2map* mat) -{ - _aligned_free(mat); -} \ No newline at end of file diff --git a/源代码/StgSharpC/mat3.c b/源代码/StgSharpC/mat3.c index 09fec57c..a2537386 100644 --- a/源代码/StgSharpC/mat3.c +++ b/源代码/StgSharpC/mat3.c @@ -1,73 +1,91 @@ #include "StgSharpC.h" -#include "ssgc_internal.h" +#include "ssc_intrinsic.h" #include -SSCAPI __inline void _cdecl transpose3to2(matrix3map* source, matrix2map* target) +INTERNAL void _cdecl transpose32(__3_columnset *source, + __2_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t2 = _mm_shuffle_ps(ALIGN(source->colum[2]), zeroVec, _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, + _MM_SHUFFLE(1, 0, 1, 0)); - target->colum[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); } -SSCAPI __inline void _cdecl transpose3to3(matrix3map* source, matrix3map* target) +INTERNAL void _cdecl transpose33(__3_columnset *source, + __3_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t1 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(3, 2, 3, 2)); - __m128 t2 = _mm_shuffle_ps(ALIGN(source->colum[2]), zeroVec, _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t3 = _mm_shuffle_ps(ALIGN(source->colum[2]), zeroVec, _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, + _MM_SHUFFLE(3, 2, 3, 2)); - target->colum[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); - target->colum[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); } -SSCAPI __inline void _cdecl transpose3to4(matrix3map* source, matrix4map* target) +INTERNAL void _cdecl transpose34(__3_columnset *source, + __4_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t1 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(3, 2, 3, 2)); - __m128 t2 = _mm_shuffle_ps(ALIGN(source->colum[2]), zeroVec, _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t3 = _mm_shuffle_ps(ALIGN(source->colum[2]), zeroVec, _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, + _MM_SHUFFLE(3, 2, 3, 2)); - target->colum[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); - target->colum[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[3] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[3] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(3, 1, 3, 1)); } -SSCAPI _inline float _cdecl det_mat3_internal(__m128 const c0, __m128 const c1, __m128 const c2) +INTERNAL float _cdecl det_mat3_internal(__m128 const c0, + __m128 const c1, + __m128 const c2) { - //let adding row aligned - __m128 addc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 addc2 = _mm_shuffle_ps(c2, c2, _MM_SHUFFLE(3, 1, 0, 2)); + //let adding row aligned + __m128 addc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 0, 2, 1)); + __m128 addc2 = _mm_shuffle_ps(c2, c2, _MM_SHUFFLE(3, 1, 0, 2)); - //let sub row aligned - __m128 subc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 subc2 = _mm_shuffle_ps(c2, c2, _MM_SHUFFLE(3, 0, 2, 1)); + //let sub row aligned + __m128 subc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 1, 0, 2)); + __m128 subc2 = _mm_shuffle_ps(c2, c2, _MM_SHUFFLE(3, 0, 2, 1)); - //multple all add row - __m128 cache = _mm_mul_ps(c0, addc1); - cache = _mm_mul_ps(cache, addc2); + //multple all add row + __m128 cache = _mm_mul_ps(c0, addc1); + cache = _mm_mul_ps(cache, addc2); - //multiple all sub row - __m128 sub = _mm_mul_ps(c0, subc1); - sub = _mm_mul_ps(sub, subc2); + //multiple all sub row + __m128 sub = _mm_mul_ps(c0, subc1); + sub = _mm_mul_ps(sub, subc2); - //main-corner sub sub-corner - cache = _mm_sub_ps(cache, sub); + //main-corner sub sub-corner + cache = _mm_sub_ps(cache, sub); - __m128 ret = _mm_hadd_ps(cache, cache); //element 1 add element 2 - ret = _mm_add_ps(ret, cache); //(e1 add e2) add element 3 + __m128 ret = _mm_hadd_ps(cache, cache); //element 1 add element 2 + ret = _mm_add_ps(ret, cache); //(e1 add e2) add element 3 - return ret.m128_f32[2]; + return ret.m128_f32[2]; } -SSCAPI _inline float _cdecl det_mat3(matrix3map* mat) +INTERNAL float _cdecl det_mat3(__3_columnset *source, + __3_columnset *transpose) { - return det_mat3_internal( - mat->colum[0], - mat->colum[1], - mat->colum[2] - ); -} \ No newline at end of file + return det_mat3_internal(source->column[0], source->column[1], + source->column[2]); +} diff --git a/源代码/StgSharpC/mat4.c b/源代码/StgSharpC/mat4.c index 2a113278..e368997e 100644 --- a/源代码/StgSharpC/mat4.c +++ b/源代码/StgSharpC/mat4.c @@ -1,62 +1,76 @@ + #include "StgSharpC.h" -#include "ssgc_internal.h" +#include "ssc_intrinsic.h" #include #include -SSCAPI __inline void __cdecl transpose4to2(matrix4map* source, matrix4map* target) +INTERNAL void __cdecl transpose42(__4_columnset *source, __2_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t2 = _mm_shuffle_ps(ALIGN(source->colum[2]), ALIGN(source->colum[3]), _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), + ALIGN(source->column[3]), + _MM_SHUFFLE(1, 0, 1, 0)); - target->colum[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); } -SSCAPI __inline void __cdecl transpose4to4(matrix4map* source, matrix4map* target) +INTERNAL void __cdecl transpose43(__4_columnset *source, __3_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t1 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(3, 2, 3, 2)); - __m128 t2 = _mm_shuffle_ps(ALIGN(source->colum[2]), ALIGN(source->colum[3]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t3 = _mm_shuffle_ps(ALIGN(source->colum[2]), ALIGN(source->colum[3]), _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), + ALIGN(source->column[3]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), + ALIGN(source->column[3]), + _MM_SHUFFLE(3, 2, 3, 2)); - target->colum[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); - target->colum[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[3] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); } -SSCAPI __inline void __cdecl transpose4to3(matrix4map* source, matrix3map* target) +INTERNAL void __cdecl transpose44(__4_columnset *source, __4_columnset *target) { - __m128 t0 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t1 = _mm_shuffle_ps(ALIGN(source->colum[0]), ALIGN(source->colum[1]), _MM_SHUFFLE(3, 2, 3, 2)); - __m128 t2 = _mm_shuffle_ps(ALIGN(source->colum[2]), ALIGN(source->colum[3]), _MM_SHUFFLE(1, 0, 1, 0)); - __m128 t3 = _mm_shuffle_ps(ALIGN(source->colum[2]), ALIGN(source->colum[3]), _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), + ALIGN(source->column[1]), + _MM_SHUFFLE(3, 2, 3, 2)); + __m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), + ALIGN(source->column[3]), + _MM_SHUFFLE(1, 0, 1, 0)); + __m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), + ALIGN(source->column[3]), + _MM_SHUFFLE(3, 2, 3, 2)); - target->colum[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); - target->colum[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); - target->colum[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1)); + target->column[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0)); + target->column[3] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(3, 1, 3, 1)); } -SSCAPI __inline float __cdecl det_mat4(matrix4map* matPtr, matrix4map* transpose) +INTERNAL float __cdecl det_mat4(__4_columnset *matPtr, __4_columnset *transpose) { - __m128 mc0 = ALIGN(matPtr->colum[0]); - __m128 mc1 = ALIGN(matPtr->colum[1]); - __m128 mc2 = ALIGN(matPtr->colum[2]); - __m128 mc3 = ALIGN(matPtr->colum[3]); + __m128 mc0 = ALIGN(matPtr->column[0]); + __m128 mc1 = ALIGN(matPtr->column[1]); + __m128 mc2 = ALIGN(matPtr->column[2]); + __m128 mc3 = ALIGN(matPtr->column[3]); - __m128 cogeneration = _mm_set_ps( - det_mat3_internal(mc0, mc1, mc2), - det_mat3_internal(mc0, mc1, mc3), - det_mat3_internal(mc0, mc2, mc3), - det_mat3_internal(mc1, mc2, mc3) - ); - __m128 retvec = _mm_mul_ps(ALIGN(transpose->colum[3]), cogeneration); - retvec = _mm_hsub_ps(retvec, retvec); - retvec = _mm_hadd_ps(retvec, retvec); - return -retvec.m128_f32[0]; + __m128 cogeneration = _mm_set_ps(det_mat3_internal(mc0, mc1, mc2), + det_mat3_internal(mc0, mc1, mc3), + det_mat3_internal(mc0, mc2, mc3), + det_mat3_internal(mc1, mc2, mc3)); + __m128 retvec = _mm_mul_ps(ALIGN(transpose->column[3]), cogeneration); + retvec = _mm_hsub_ps(retvec, retvec); + retvec = _mm_hadd_ps(retvec, retvec); + return -retvec.m128_f32[0]; } - -SSCAPI __inline void __cdecl deinit_mat4(matrix4map* matPtr) -{ - _aligned_free(matPtr); -} \ No newline at end of file diff --git a/源代码/StgSharpC/quick_hash.c b/源代码/StgSharpC/quick_hash.c new file mode 100644 index 00000000..d4a8820d --- /dev/null +++ b/源代码/StgSharpC/quick_hash.c @@ -0,0 +1,24 @@ +#include "ssc_intrinsic.h" +#include "StgSharpC.h" + +static __m128i hash_mask = { .m128i_i32 = { 31 * 31 * 31, 31 * 31, 31, 1 } }; + +INTERNAL int quick_string_hash(byte const *str, int const length) +{ + __m128i source; + int source_length = length * 2; + if (source_length > 15) { + source = _mm_lddqu_si128((__m128i *)str); + } else { + byte buffer[16]; + memcpy(buffer, str, source_length); + memset(buffer + source_length - 1, 0, 16 - source_length); + source = _mm_lddqu_si128((__m128i *)buffer); + } + + __m128i ret = _mm_mullo_epi32(source, hash_mask); + ret = _mm_hadd_epi32(ret, ret); + ret = _mm_hadd_epi32(ret, ret); + + return _mm_cvtsi128_si32(ret); +} diff --git a/源代码/StgSharpC/ssc_framework.h b/源代码/StgSharpC/ssc_framework.h new file mode 100644 index 00000000..e068567c --- /dev/null +++ b/源代码/StgSharpC/ssc_framework.h @@ -0,0 +1,12 @@ +#ifdef _MSC_VER +#pragma once +#endif + +#if _WIN32 + + + +#endif // __WIN32 + + + diff --git a/源代码/StgSharpC/ssc_internal.h b/源代码/StgSharpC/ssc_internal.h new file mode 100644 index 00000000..927239a5 --- /dev/null +++ b/源代码/StgSharpC/ssc_internal.h @@ -0,0 +1,39 @@ +#ifdef _MSC_VER +#pragma once +#endif + +#include "xmmintrin.h" +/* +#include "GLAD/gl.h" +#include "glfw3.h" +#include "StgSharpC.h" +*/ + +#ifndef SSC_INTERNAL +#define SSC_INTERNAL + +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#define SSCAPI __declspec(dllexport) +#include +#elif defined _LINUX_ +#define SSCAPI __attribute__((dllexport)) +#elif defined _APPLE_ +#define SSCAPI __attribute__((visibility("default"))) +#else +#define SSCAPI +#endif + +#ifdef _WIN32 +#define _CRT_SECURE_NO_WARNINGS 1 +#endif + +#define SSCDECL __cdecl + +#define zeroVec _mm_setzero_ps() + +#define SSCAPI_DEFINE + +#define INTERNAL extern + +#endif // diff --git a/源代码/StgSharpC/ssc_intrinsic.h b/源代码/StgSharpC/ssc_intrinsic.h new file mode 100644 index 00000000..3659a457 --- /dev/null +++ b/源代码/StgSharpC/ssc_intrinsic.h @@ -0,0 +1,70 @@ +#ifdef _MSC_VER +#pragma once +#endif + +#ifndef SSC_INTRIN +#define SSC_INTRIN + +#include "StgSharpC.h" +#include + +typedef union column_2 { + __m128 column[2]; + float m[4][2]; +} __2_columnset; + +typedef struct column_3 { + __m128 column[3]; + float m[4][3]; +} __3_columnset; + +typedef union column_4 { + __m128 column[4]; + float m[4][4]; +} __4_columnset; + +typedef void (*VECTORNORMALIZEPROC)(__m128 *source, __m128 *target); +typedef void (*MATRIXTRANSPOSEPROC)(void *source, void *target); +typedef void (*MATRIXDETPROC)(void *mat, void *transpose); + +#pragma region matix function + +INTERNAL void normalize(__m128 *source, __m128 *target); + +INTERNAL void transpose23(__2_columnset *source, __3_columnset *target); +INTERNAL void transpose24(__2_columnset *source, __4_columnset *target); + +INTERNAL void transpose32(__3_columnset *source, __2_columnset *target); +INTERNAL void transpose33(__3_columnset *source, __3_columnset *target); +INTERNAL void transpose34(__3_columnset *source, __4_columnset *target); +INTERNAL float det_mat3(__3_columnset *matrix, __3_columnset *tranpose); + +INTERNAL void transpose42(__4_columnset *source, __2_columnset *target); +INTERNAL void transpose43(__4_columnset *source, __3_columnset *target); +INTERNAL void transpose44(__4_columnset *matrix, __4_columnset *target); +INTERNAL float det_mat4(__4_columnset *matrix, __4_columnset *transpose); + +#pragma endregion + +#pragma region quick_hash + +INTERNAL int quick_string_hash(byte *str, int length); + +#pragma endregion + +typedef struct ssc_intrinsic { + MATRIXTRANSPOSEPROC transpose_23; + MATRIXTRANSPOSEPROC transpose_24; + MATRIXTRANSPOSEPROC transpose_32; + MATRIXTRANSPOSEPROC transpose_33; + MATRIXTRANSPOSEPROC transpose_34; + MATRIXTRANSPOSEPROC transpose_42; + MATRIXTRANSPOSEPROC transpose_43; + MATRIXTRANSPOSEPROC transpose_44; + VECTORNORMALIZEPROC normalize_3; + MATRIXDETPROC det_matrix33; + MATRIXDETPROC det_matrix44; + int (*string_quick_hash)(char *str, int length); +} ssc_intrinsic; + +#endif // !SSC_INTRIN diff --git a/源代码/StgSharpC/stb_image.c b/源代码/StgSharpC/stb_image.c index 482e8622..903ade99 100644 --- a/源代码/StgSharpC/stb_image.c +++ b/源代码/StgSharpC/stb_image.c @@ -1,9 +1,10 @@ #include "stb_image.h" -#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ - || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ - || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ - || defined(STBI_ONLY_ZLIB) +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || \ + defined(STBI_ONLY_BMP) || defined(STBI_ONLY_TGA) || \ + defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) || \ + defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || \ + defined(STBI_ONLY_PNM) || defined(STBI_ONLY_ZLIB) #ifndef STBI_ONLY_JPEG #define STBI_NO_JPEG #endif @@ -33,7 +34,8 @@ #endif #endif -#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && \ + !defined(STBI_NO_ZLIB) #define STBI_NO_ZLIB #endif @@ -44,7 +46,7 @@ #include #if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) -#include // ldexp, pow +#include // ldexp, pow #endif #ifndef STBI_NO_STDIO @@ -73,43 +75,44 @@ #endif #ifndef STBI_NO_THREAD_LOCALS -#if defined(__cplusplus) && __cplusplus >= 201103L -#define STBI_THREAD_LOCAL thread_local +#if defined(__cplusplus) && __cplusplus >= 201103L +#define STBI_THREAD_LOCAL thread_local #elif defined(__GNUC__) && __GNUC__ < 5 -#define STBI_THREAD_LOCAL __thread +#define STBI_THREAD_LOCAL __thread #elif defined(_MSC_VER) -#define STBI_THREAD_LOCAL __declspec(thread) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) -#define STBI_THREAD_LOCAL _Thread_local +#define STBI_THREAD_LOCAL __declspec(thread) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && \ + !defined(__STDC_NO_THREADS__) +#define STBI_THREAD_LOCAL _Thread_local #endif #ifndef STBI_THREAD_LOCAL #if defined(__GNUC__) -#define STBI_THREAD_LOCAL __thread +#define STBI_THREAD_LOCAL __thread #endif #endif #endif #if defined(_MSC_VER) || defined(__SYMBIAN32__) typedef unsigned short stbi__uint16; -typedef signed short stbi__int16; -typedef unsigned int stbi__uint32; -typedef signed int stbi__int32; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; #else #include typedef uint16_t stbi__uint16; -typedef int16_t stbi__int16; +typedef int16_t stbi__int16; typedef uint32_t stbi__uint32; -typedef int32_t stbi__int32; +typedef int32_t stbi__int32; #endif // should produce compiler error if size is wrong typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; #ifdef _MSC_VER -#define STBI_NOTUSED(v) (void)(v) +#define STBI_NOTUSED(v) (void)(v) #else -#define STBI_NOTUSED(v) (void)sizeof(v) +#define STBI_NOTUSED(v) (void)sizeof(v) #endif #ifdef _MSC_VER @@ -117,27 +120,29 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; #endif #ifdef STBI_HAS_LROTL -#define stbi_lrot(x,y) _lrotl(x,y) +#define stbi_lrot(x, y) _lrotl(x, y) #else -#define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#define stbi_lrot(x, y) (((x) << (y)) | ((x) >> (-(y) & 31))) #endif -#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +#if defined(STBI_MALLOC) && defined(STBI_FREE) && \ + (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) // ok -#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && \ + !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) // ok #else #error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." #endif #ifndef STBI_MALLOC -#define STBI_MALLOC(sz) malloc(sz) -#define STBI_REALLOC(p,newsz) realloc(p,newsz) -#define STBI_FREE(p) free(p) +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p, newsz) realloc(p, newsz) +#define STBI_FREE(p) free(p) #endif #ifndef STBI_REALLOC_SIZED -#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) +#define STBI_REALLOC_SIZED(p, oldsz, newsz) STBI_REALLOC(p, newsz) #endif // x86/x64 detection @@ -147,7 +152,8 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; #define STBI__X86_TARGET #endif -#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && \ + !defined(STBI_NO_SIMD) // gcc doesn't support sse2 intrinsics unless you compile with -msse2, // which in turn means it gets to use SSE2 everywhere. This is unfortunate, // but previous attempts to provide the SSE2 functions with runtime @@ -158,7 +164,8 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; #define STBI_NO_SIMD #endif -#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && \ + !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) // Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET // // 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the @@ -173,30 +180,31 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; #define STBI_NO_SIMD #endif -#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#if !defined(STBI_NO_SIMD) && \ + (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) #define STBI_SSE2 #include #ifdef _MSC_VER -#if _MSC_VER >= 1400 // not VC6 +#if _MSC_VER >= 1400 // not VC6 #include // __cpuid static int stbi__cpuid3(void) { - int info[4]; - __cpuid(info, 1); - return info[3]; + int info[4]; + __cpuid(info, 1); + return info[3]; } #else static int stbi__cpuid3(void) { - int res; - __asm { + int res; + __asm { mov eax, 1 cpuid mov res, edx - } - return res; + } + return res; } #endif @@ -205,8 +213,8 @@ static int stbi__cpuid3(void) #if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) static int stbi__sse2_available(void) { - int info3 = stbi__cpuid3(); - return ((info3 >> 26) & 1) != 0; + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; } #endif @@ -216,10 +224,10 @@ static int stbi__sse2_available(void) #if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) static int stbi__sse2_available(void) { - // If we're even attempting to compile this on GCC/Clang, that means - // -msse2 is on, which means the compiler is allowed to use SSE2 - // instructions at will, and so are we. - return 1; + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; } #endif @@ -254,188 +262,198 @@ static int stbi__sse2_available(void) // stbi__context structure is our basic context used by all images, so it // contains all the IO context, plus some basic image information -typedef struct -{ - stbi__uint32 img_x, img_y; - int img_n, img_out_n; +typedef struct { + stbi__uint32 img_x, img_y; + int img_n, img_out_n; - stbi_io_callbacks io; - void* io_user_data; + stbi_io_callbacks io; + void *io_user_data; - int read_from_callbacks; - int buflen; - stbi_uc buffer_start[128]; - int callback_already_read; + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; - stbi_uc* img_buffer, * img_buffer_end; - stbi_uc* img_buffer_original, * img_buffer_original_end; + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; } stbi__context; -static void stbi__refill_buffer(stbi__context* s); +static void stbi__refill_buffer(stbi__context *s); // initialize a memory-decode context -static void stbi__start_mem(stbi__context* s, stbi_uc const* buffer, int len) +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) { - s->io.read = NULL; - s->read_from_callbacks = 0; - s->callback_already_read = 0; - s->img_buffer = s->img_buffer_original = (stbi_uc*)buffer; - s->img_buffer_end = s->img_buffer_original_end = (stbi_uc*)buffer + len; + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *)buffer; + s->img_buffer_end = s->img_buffer_original_end = + (stbi_uc *)buffer + len; } // initialize a callback-based context -static void stbi__start_callbacks(stbi__context* s, stbi_io_callbacks* c, void* user) +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, + void *user) { - s->io = *c; - s->io_user_data = user; - s->buflen = sizeof(s->buffer_start); - s->read_from_callbacks = 1; - s->callback_already_read = 0; - s->img_buffer = s->img_buffer_original = s->buffer_start; - stbi__refill_buffer(s); - s->img_buffer_original_end = s->img_buffer_end; + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; } #ifndef STBI_NO_STDIO -static int stbi__stdio_read(void* user, char* data, int size) +static int stbi__stdio_read(void *user, char *data, int size) { - return (int)fread(data, 1, size, (FILE*)user); + return (int)fread(data, 1, size, (FILE *)user); } -static void stbi__stdio_skip(void* user, int n) +static void stbi__stdio_skip(void *user, int n) { - int ch; - fseek((FILE*)user, n, SEEK_CUR); - ch = fgetc((FILE*)user); /* have to read a byte to reset feof()'s flag */ - if (ch != EOF) { - ungetc(ch, (FILE*)user); /* push byte back onto stream if valid. */ - } + int ch; + fseek((FILE *)user, n, SEEK_CUR); + ch = fgetc( + (FILE *)user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, + (FILE *)user); /* push byte back onto stream if valid. */ + } } -static int stbi__stdio_eof(void* user) +static int stbi__stdio_eof(void *user) { - return feof((FILE*)user) || ferror((FILE*)user); + return feof((FILE *)user) || ferror((FILE *)user); } -static stbi_io_callbacks stbi__stdio_callbacks = -{ - stbi__stdio_read, - stbi__stdio_skip, - stbi__stdio_eof, +static stbi_io_callbacks stbi__stdio_callbacks = { + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, }; -static void stbi__start_file(stbi__context* s, FILE* f) +static void stbi__start_file(stbi__context *s, FILE *f) { - stbi__start_callbacks(s, &stbi__stdio_callbacks, (void*)f); + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *)f); } //static void stop_file(stbi__context *s) { } #endif // !STBI_NO_STDIO -static void stbi__rewind(stbi__context* s) +static void stbi__rewind(stbi__context *s) { - // conceptually rewind SHOULD rewind to the beginning of the stream, - // but we just rewind to the beginning of the initial buffer, because - // we only use it after doing 'test', which only ever looks at at most 92 bytes - s->img_buffer = s->img_buffer_original; - s->img_buffer_end = s->img_buffer_original_end; + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; } -enum -{ - STBI_ORDER_RGB, - STBI_ORDER_BGR +enum { + STBI_ORDER_RGB, + STBI_ORDER_BGR }; -typedef struct -{ - int bits_per_channel; - int num_channels; - int channel_order; +typedef struct { + int bits_per_channel; + int num_channels; + int channel_order; } stbi__result_info; #ifndef STBI_NO_JPEG -static int stbi__jpeg_test(stbi__context* s); -static void* stbi__jpeg_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PNG -static int stbi__png_test(stbi__context* s); -static void* stbi__png_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__png_info(stbi__context* s, int* x, int* y, int* comp); -static int stbi__png_is16(stbi__context* s); +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); #endif #ifndef STBI_NO_BMP -static int stbi__bmp_test(stbi__context* s); -static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__bmp_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_TGA -static int stbi__tga_test(stbi__context* s); -static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__tga_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context* s); -static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri, int bpc); -static int stbi__psd_info(stbi__context* s, int* x, int* y, int* comp); -static int stbi__psd_is16(stbi__context* s); +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); #endif #ifndef STBI_NO_HDR -static int stbi__hdr_test(stbi__context* s); -static float* stbi__hdr_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__hdr_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PIC -static int stbi__pic_test(stbi__context* s); -static void* stbi__pic_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_GIF -static int stbi__gif_test(stbi__context* s); -static void* stbi__gif_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static void* stbi__load_gif_main(stbi__context* s, int** delays, int* x, int* y, int* z, int* comp, int req_comp); -static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, + int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PNM -static int stbi__pnm_test(stbi__context* s); -static void* stbi__pnm_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); -static int stbi__pnm_info(stbi__context* s, int* x, int* y, int* comp); -static int stbi__pnm_is16(stbi__context* s); +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); #endif static #ifdef STBI_THREAD_LOCAL -STBI_THREAD_LOCAL + STBI_THREAD_LOCAL #endif -const char* stbi__g_failure_reason; + const char *stbi__g_failure_reason; -STBIDEF const char* stbi_failure_reason(void) +STBIDEF const char *stbi_failure_reason(void) { - return stbi__g_failure_reason; + return stbi__g_failure_reason; } #ifndef STBI_NO_FAILURE_STRINGS -static int stbi__err(const char* str) +static int stbi__err(const char *str) { - stbi__g_failure_reason = str; - return 0; + stbi__g_failure_reason = str; + return 0; } #endif -static void* stbi__malloc(size_t size) +static void *stbi__malloc(size_t size) { - return STBI_MALLOC(size); + return STBI_MALLOC(size); } // stb_image uses ints pervasively, including for offset calculations. @@ -452,86 +470,104 @@ static void* stbi__malloc(size_t size) // negative terms are considered invalid. static int stbi__addsizes_valid(int a, int b) { - if (b < 0) return 0; - // now 0 <= b <= INT_MAX, hence also - // 0 <= INT_MAX - b <= INTMAX. - // And "a + b <= INT_MAX" (which might overflow) is the - // same as a <= INT_MAX - b (no overflow) - return a <= INT_MAX - b; + if (b < 0) + return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; } // returns 1 if the product is valid, 0 on overflow. // negative factors are considered invalid. static int stbi__mul2sizes_valid(int a, int b) { - if (a < 0 || b < 0) return 0; - if (b == 0) return 1; // mul-by-0 is always safe - // portable way to check for no overflows in a*b - return a <= INT_MAX / b; + if (a < 0 || b < 0) + return 0; + if (b == 0) + return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX / b; } -#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || \ + !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) // returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow static int stbi__mad2sizes_valid(int a, int b, int add) { - return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a * b, add); + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a * b, add); } #endif // returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow static int stbi__mad3sizes_valid(int a, int b, int c, int add) { - return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && - stbi__addsizes_valid(a * b * c, add); + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && + stbi__addsizes_valid(a * b * c, add); } // returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow #if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) { - return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && - stbi__mul2sizes_valid(a * b * c, d) && stbi__addsizes_valid(a * b * c * d, add); + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && + stbi__mul2sizes_valid(a * b * c, d) && + stbi__addsizes_valid(a * b * c * d, add); } #endif -#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || \ + !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) // mallocs with size overflow checking -static void* stbi__malloc_mad2(int a, int b, int add) +static void *stbi__malloc_mad2(int a, int b, int add) { - if (!stbi__mad2sizes_valid(a, b, add)) return NULL; - return stbi__malloc(a * b + add); + if (!stbi__mad2sizes_valid(a, b, add)) + return NULL; + return stbi__malloc(a * b + add); } #endif -static void* stbi__malloc_mad3(int a, int b, int c, int add) +static void *stbi__malloc_mad3(int a, int b, int c, int add) { - if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; - return stbi__malloc(a * b * c + add); + if (!stbi__mad3sizes_valid(a, b, c, add)) + return NULL; + return stbi__malloc(a * b * c + add); } #if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) -static void* stbi__malloc_mad4(int a, int b, int c, int d, int add) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) { - if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; - return stbi__malloc(a * b * c * d + add); + if (!stbi__mad4sizes_valid(a, b, c, d, add)) + return NULL; + return stbi__malloc(a * b * c * d + add); } #endif // returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. static int stbi__addints_valid(int a, int b) { - if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow - if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. - return a <= INT_MAX - b; + if ((a >= 0) != (b >= 0)) + return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) + return a >= + INT_MIN - + b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; } // returns 1 if the product of two signed shorts is valid, 0 on overflow. static int stbi__mul2shorts_valid(short a, short b) { - if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow - if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX / b; // product is positive, so similar to mul2sizes_valid - if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN - return a >= SHRT_MIN / b; + if (b == 0 || b == -1) + return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) + return a <= + SHRT_MAX / + b; // product is positive, so similar to mul2sizes_valid + if (b < 0) + return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; } // stbi__err - error @@ -539,433 +575,512 @@ static int stbi__mul2shorts_valid(short a, short b) // stbi__errpuc - error returning pointer to unsigned char #ifdef STBI_NO_FAILURE_STRINGS -#define stbi__err(x,y) 0 +#define stbi__err(x, y) 0 #elif defined(STBI_FAILURE_USERMSG) -#define stbi__err(x,y) stbi__err(y) +#define stbi__err(x, y) stbi__err(y) #else -#define stbi__err(x,y) stbi__err(x) +#define stbi__err(x, y) stbi__err(x) #endif -#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) -#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpf(x, y) ((float *)(size_t)(stbi__err(x, y) ? NULL : NULL)) +#define stbi__errpuc(x, y) \ + ((unsigned char *)(size_t)(stbi__err(x, y) ? NULL : NULL)) -STBIDEF void stbi_image_free(void* retval_from_stbi_load) +STBIDEF void stbi_image_free(void *retval_from_stbi_load) { - STBI_FREE(retval_from_stbi_load); + STBI_FREE(retval_from_stbi_load); } #ifndef STBI_NO_LINEAR -static float* stbi__ldr_to_hdr(stbi_uc* data, int x, int y, int comp); +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); #endif #ifndef STBI_NO_HDR -static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp); +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); #endif static int stbi__vertically_flip_on_load_global = 0; STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) { - stbi__vertically_flip_on_load_global = flag_true_if_should_flip; + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; } #ifndef STBI_THREAD_LOCAL -#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global #else -static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, + stbi__vertically_flip_on_load_set; -STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +STBIDEF void +stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) { - stbi__vertically_flip_on_load_local = flag_true_if_should_flip; - stbi__vertically_flip_on_load_set = 1; + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; } -#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ - ? stbi__vertically_flip_on_load_local \ - : stbi__vertically_flip_on_load_global) +#define stbi__vertically_flip_on_load \ + (stbi__vertically_flip_on_load_set ? \ + stbi__vertically_flip_on_load_local : \ + stbi__vertically_flip_on_load_global) #endif // STBI_THREAD_LOCAL -static void* stbi__load_main(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri, int bpc) +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri, int bpc) { - memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields - ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed - ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order - ri->num_channels = 0; + memset(ri, 0, + sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = + 8; // default is 8 so most paths don't have to be changed + ri->channel_order = + STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; - // test the formats with a very explicit header first (at least a FOURCC - // or distinctive magic number first) + // test the formats with a very explicit header first (at least a FOURCC + // or distinctive magic number first) #ifndef STBI_NO_PNG - if (stbi__png_test(s)) return stbi__png_load(s, x, y, comp, req_comp, ri); + if (stbi__png_test(s)) + return stbi__png_load(s, x, y, comp, req_comp, ri); #endif #ifndef STBI_NO_BMP - if (stbi__bmp_test(s)) return stbi__bmp_load(s, x, y, comp, req_comp, ri); + if (stbi__bmp_test(s)) + return stbi__bmp_load(s, x, y, comp, req_comp, ri); #endif #ifndef STBI_NO_GIF - if (stbi__gif_test(s)) return stbi__gif_load(s, x, y, comp, req_comp, ri); + if (stbi__gif_test(s)) + return stbi__gif_load(s, x, y, comp, req_comp, ri); #endif #ifndef STBI_NO_PSD - if (stbi__psd_test(s)) return stbi__psd_load(s, x, y, comp, req_comp, ri, bpc); + if (stbi__psd_test(s)) + return stbi__psd_load(s, x, y, comp, req_comp, ri, bpc); #else - STBI_NOTUSED(bpc); + STBI_NOTUSED(bpc); #endif #ifndef STBI_NO_PIC - if (stbi__pic_test(s)) return stbi__pic_load(s, x, y, comp, req_comp, ri); + if (stbi__pic_test(s)) + return stbi__pic_load(s, x, y, comp, req_comp, ri); #endif - // then the formats that can end up attempting to load with just 1 or 2 - // bytes matching expectations; these are prone to false positives, so - // try them later + // then the formats that can end up attempting to load with just 1 or 2 + // bytes matching expectations; these are prone to false positives, so + // try them later #ifndef STBI_NO_JPEG - if (stbi__jpeg_test(s)) return stbi__jpeg_load(s, x, y, comp, req_comp, ri); + if (stbi__jpeg_test(s)) + return stbi__jpeg_load(s, x, y, comp, req_comp, ri); #endif #ifndef STBI_NO_PNM - if (stbi__pnm_test(s)) return stbi__pnm_load(s, x, y, comp, req_comp, ri); + if (stbi__pnm_test(s)) + return stbi__pnm_load(s, x, y, comp, req_comp, ri); #endif #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - float* hdr = stbi__hdr_load(s, x, y, comp, req_comp, ri); - return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); - } + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x, y, comp, req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, + req_comp ? req_comp : *comp); + } #endif #ifndef STBI_NO_TGA - // test tga last because it's a crappy test! - if (stbi__tga_test(s)) - return stbi__tga_load(s, x, y, comp, req_comp, ri); + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s, x, y, comp, req_comp, ri); #endif - return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); + return stbi__errpuc("unknown image type", + "Image not of any known type, or corrupt"); } -static stbi_uc* stbi__convert_16_to_8(stbi__uint16* orig, int w, int h, int channels) +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, + int channels) { - int i; - int img_len = w * h * channels; - stbi_uc* reduced; + int i; + int img_len = w * h * channels; + stbi_uc *reduced; - reduced = (stbi_uc*)stbi__malloc(img_len); - if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + reduced = (stbi_uc *)stbi__malloc(img_len); + if (reduced == NULL) + return stbi__errpuc("outofmem", "Out of memory"); - for (i = 0; i < img_len; ++i) - reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + for (i = 0; i < img_len; ++i) + reduced[i] = + (stbi_uc)((orig[i] >> 8) & + 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling - STBI_FREE(orig); - return reduced; + STBI_FREE(orig); + return reduced; } -static stbi__uint16* stbi__convert_8_to_16(stbi_uc* orig, int w, int h, int channels) +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, + int channels) { - int i; - int img_len = w * h * channels; - stbi__uint16* enlarged; + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; - enlarged = (stbi__uint16*)stbi__malloc(img_len * 2); - if (enlarged == NULL) return (stbi__uint16*)stbi__errpuc("outofmem", "Out of memory"); + enlarged = (stbi__uint16 *)stbi__malloc(img_len * 2); + if (enlarged == NULL) + return (stbi__uint16 *)stbi__errpuc("outofmem", + "Out of memory"); - for (i = 0; i < img_len; ++i) - enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + for (i = 0; i < img_len; ++i) + enlarged[i] = + (stbi__uint16)((orig[i] << 8) + + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff - STBI_FREE(orig); - return enlarged; + STBI_FREE(orig); + return enlarged; } -static void stbi__vertical_flip(void* image, int w, int h, int bytes_per_pixel) +static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) { - int row; - size_t bytes_per_row = (size_t)w * bytes_per_pixel; - stbi_uc temp[2048]; - stbi_uc* bytes = (stbi_uc*)image; + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; - for (row = 0; row < (h >> 1); row++) { - stbi_uc* row0 = bytes + row * bytes_per_row; - stbi_uc* row1 = bytes + (h - row - 1) * bytes_per_row; - // swap row0 with row1 - size_t bytes_left = bytes_per_row; - while (bytes_left) { - size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); - memcpy(temp, row0, bytes_copy); - memcpy(row0, row1, bytes_copy); - memcpy(row1, temp, bytes_copy); - row0 += bytes_copy; - row1 += bytes_copy; - bytes_left -= bytes_copy; + for (row = 0; row < (h >> 1); row++) { + stbi_uc *row0 = bytes + row * bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1) * bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? + bytes_left : + sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } } - } } #ifndef STBI_NO_GIF -static void stbi__vertical_flip_slices(void* image, int w, int h, int z, int bytes_per_pixel) +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, + int bytes_per_pixel) { - int slice; - int slice_size = w * h * bytes_per_pixel; + int slice; + int slice_size = w * h * bytes_per_pixel; - stbi_uc* bytes = (stbi_uc*)image; - for (slice = 0; slice < z; ++slice) { - stbi__vertical_flip(bytes, w, h, bytes_per_pixel); - bytes += slice_size; - } + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } } #endif -static unsigned char* stbi__load_and_postprocess_8bit(stbi__context* s, int* x, int* y, int* comp, int req_comp) +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, + int *y, int *comp, + int req_comp) { - stbi__result_info ri; - void* result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); - if (result == NULL) - return NULL; + if (result == NULL) + return NULL; - // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. - STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); - if (ri.bits_per_channel != 8) { - result = stbi__convert_16_to_8((stbi__uint16*)result, *x, *y, req_comp == 0 ? *comp : req_comp); - ri.bits_per_channel = 8; - } + if (ri.bits_per_channel != 8) { + result = + stbi__convert_16_to_8((stbi__uint16 *)result, *x, *y, + req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } - // @TODO: move stbi__convert_format to here + // @TODO: move stbi__convert_format to here - if (stbi__vertically_flip_on_load) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); - } + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } - return (unsigned char*)result; + return (unsigned char *)result; } -static stbi__uint16* stbi__load_and_postprocess_16bit(stbi__context* s, int* x, int* y, int* comp, int req_comp) +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, + int *y, int *comp, + int req_comp) { - stbi__result_info ri; - void* result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); - if (result == NULL) - return NULL; + if (result == NULL) + return NULL; - // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. - STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); - if (ri.bits_per_channel != 16) { - result = stbi__convert_8_to_16((stbi_uc*)result, *x, *y, req_comp == 0 ? *comp : req_comp); - ri.bits_per_channel = 16; - } + if (ri.bits_per_channel != 16) { + result = + stbi__convert_8_to_16((stbi_uc *)result, *x, *y, + req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } - // @TODO: move stbi__convert_format16 to here - // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision - if (stbi__vertically_flip_on_load) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); - } + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, + channels * sizeof(stbi__uint16)); + } - return (stbi__uint16*)result; + return (stbi__uint16 *)result; } #if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) -static void stbi__float_postprocess(float* result, int* x, int* y, int* comp, int req_comp) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, + int req_comp) { - if (stbi__vertically_flip_on_load && result != NULL) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); - } + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } } #endif #ifndef STBI_NO_STDIO #if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) -STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char* str, int cbmb, wchar_t* widestr, int cchwide); -STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t* widestr, int cchwide, char* str, int cbmb, const char* defchar, int* used_default); +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar( + unsigned int cp, unsigned long flags, const char *str, int cbmb, + wchar_t *widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte( + unsigned int cp, unsigned long flags, const wchar_t *widestr, + int cchwide, char *str, int cbmb, const char *defchar, + int *used_default); #endif #if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) -STBIDEF int stbi_convert_wchar_to_utf8(char* buffer, size_t bufferlen, const wchar_t* input) +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, + const wchar_t *input) { - return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int)bufferlen, NULL, NULL); + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, + (int)bufferlen, NULL, NULL); } #endif -static FILE* stbi__fopen(char const* filename, char const* mode) +static FILE *stbi__fopen(char const *filename, char const *mode) { - FILE* f; + FILE *f; #if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) - wchar_t wMode[64]; - wchar_t wFilename[1024]; - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename) / sizeof(*wFilename))) - return 0; + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, + wFilename, + sizeof(wFilename) / sizeof(*wFilename))) + return 0; - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode) / sizeof(*wMode))) - return 0; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, + sizeof(wMode) / sizeof(*wMode))) + return 0; #if defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != _wfopen_s(&f, wFilename, wMode)) - f = 0; + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; #else - f = _wfopen(wFilename, wMode); + f = _wfopen(wFilename, wMode); #endif #elif defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != fopen_s(&f, filename, mode)) - f = 0; + if (0 != fopen_s(&f, filename, mode)) + f = 0; #else - f = fopen(filename, mode); + f = fopen(filename, mode); #endif - return f; + return f; } -STBIDEF stbi_uc* stbi_load(char const* filename, int* x, int* y, int* comp, int req_comp) +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, + int req_comp) { - FILE* f = stbi__fopen(filename, "rb"); - unsigned char* result; - if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file(f, x, y, comp, req_comp); - fclose(f); - return result; + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) + return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; } -STBIDEF void stbi_load_to_target(char const* filename, int* x, int* y, stbi_uc* target, int* comp, int req_comp) +STBIDEF void stbi_load_to_target(char const *filename, int *x, int *y, + stbi_uc *target, int *comp, int req_comp) { - FILE* f = stbi__fopen(filename, "rb"); - unsigned char* result; - if (!f) - { - *target = "can't fopen, Unable to open file"; return; - } - result = stbi_load_from_file(f, x, y, comp, req_comp); - fclose(f); + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) { + *target = "can't fopen, Unable to open file"; + return; + } + result = stbi_load_from_file(f, x, y, comp, req_comp); + fclose(f); } -STBIDEF stbi_uc* stbi_load_from_file(FILE* f, int* x, int* y, int* comp, int req_comp) +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, + int req_comp) { - unsigned char* result; - stbi__context s; - stbi__start_file(&s, f); - result = stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; + unsigned char *result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; } -STBIDEF stbi__uint16* stbi_load_from_file_16(FILE* f, int* x, int* y, int* comp, int req_comp) +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, + int req_comp) { - stbi__uint16* result; - stbi__context s; - stbi__start_file(&s, f); - result = stbi__load_and_postprocess_16bit(&s, x, y, comp, req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_16bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; } -STBIDEF stbi_us* stbi_load_16(char const* filename, int* x, int* y, int* comp, int req_comp) +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, + int req_comp) { - FILE* f = stbi__fopen(filename, "rb"); - stbi__uint16* result; - if (!f) return (stbi_us*)stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file_16(f, x, y, comp, req_comp); - fclose(f); - return result; + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) + return (stbi_us *)stbi__errpuc("can't fopen", + "Unable to open file"); + result = stbi_load_from_file_16(f, x, y, comp, req_comp); + fclose(f); + return result; } #endif //!STBI_NO_STDIO -STBIDEF stbi_us* stbi_load_16_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels) +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, + int *x, int *y, int *channels_in_file, + int desired_channels) { - stbi__context s; - stbi__start_mem(&s, buffer, len); - return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, desired_channels); + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, + desired_channels); } -STBIDEF stbi_us* stbi_load_16_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels) +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, + int *channels_in_file, + int desired_channels) { - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); - return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, desired_channels); + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, + desired_channels); } -STBIDEF stbi_uc* stbi_load_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp, int req_comp) +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp, int req_comp) { - stbi__context s; - stbi__start_mem(&s, buffer, len); - return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); } -STBIDEF stbi_uc* stbi_load_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* comp, int req_comp) +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, int *comp, + int req_comp) { - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); - return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); } #ifndef STBI_NO_GIF -STBIDEF stbi_uc* stbi_load_gif_from_memory(stbi_uc const* buffer, int len, int** delays, int* x, int* y, int* z, int* comp, int req_comp) +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, + int **delays, int *x, int *y, int *z, + int *comp, int req_comp) { - unsigned char* result; - stbi__context s; - stbi__start_mem(&s, buffer, len); + unsigned char *result; + stbi__context s; + stbi__start_mem(&s, buffer, len); - result = (unsigned char*)stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); - if (stbi__vertically_flip_on_load) { - stbi__vertical_flip_slices(result, *x, *y, *z, *comp); - } + result = (unsigned char *)stbi__load_gif_main(&s, delays, x, y, z, comp, + req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices(result, *x, *y, *z, *comp); + } - return result; + return result; } #endif #ifndef STBI_NO_LINEAR -static float* stbi__loadf_main(stbi__context* s, int* x, int* y, int* comp, int req_comp) +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, + int req_comp) { - unsigned char* data; + unsigned char *data; #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - stbi__result_info ri; - float* hdr_data = stbi__hdr_load(s, x, y, comp, req_comp, &ri); - if (hdr_data) - stbi__float_postprocess(hdr_data, x, y, comp, req_comp); - return hdr_data; - } + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s, x, y, comp, req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data, x, y, comp, req_comp); + return hdr_data; + } #endif - data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); - if (data) - return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); - return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, + req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", + "Image not of any known type, or corrupt"); } -STBIDEF float* stbi_loadf_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp, int req_comp) +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp, int req_comp) { - stbi__context s; - stbi__start_mem(&s, buffer, len); - return stbi__loadf_main(&s, x, y, comp, req_comp); + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__loadf_main(&s, x, y, comp, req_comp); } -STBIDEF float* stbi_loadf_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* comp, int req_comp) +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, int *comp, + int req_comp) { - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); - return stbi__loadf_main(&s, x, y, comp, req_comp); + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__loadf_main(&s, x, y, comp, req_comp); } #ifndef STBI_NO_STDIO -STBIDEF float* stbi_loadf(char const* filename, int* x, int* y, int* comp, int req_comp) +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, + int req_comp) { - float* result; - FILE* f = stbi__fopen(filename, "rb"); - if (!f) return stbi__errpf("can't fopen", "Unable to open file"); - result = stbi_loadf_from_file(f, x, y, comp, req_comp); - fclose(f); - return result; + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) + return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; } -STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, int* comp, int req_comp) +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, + int req_comp) { - stbi__context s; - stbi__start_file(&s, f); - return stbi__loadf_main(&s, x, y, comp, req_comp); + stbi__context s; + stbi__start_file(&s, f); + return stbi__loadf_main(&s, x, y, comp, req_comp); } #endif // !STBI_NO_STDIO @@ -975,223 +1090,247 @@ STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, int* comp, int req_ // defined, for API simplicity; if STBI_NO_LINEAR is defined, it always // reports false! -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const* buffer, int len) +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) { #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_mem(&s, buffer, len); - return stbi__hdr_test(&s); + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__hdr_test(&s); #else - STBI_NOTUSED(buffer); - STBI_NOTUSED(len); - return 0; + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; #endif } #ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr(char const* filename) +STBIDEF int stbi_is_hdr(char const *filename) { - FILE* f = stbi__fopen(filename, "rb"); - int result = 0; - if (f) { - result = stbi_is_hdr_from_file(f); - fclose(f); - } - return result; + FILE *f = stbi__fopen(filename, "rb"); + int result = 0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; } -STBIDEF int stbi_is_hdr_from_file(FILE* f) +STBIDEF int stbi_is_hdr_from_file(FILE *f) { #ifndef STBI_NO_HDR - long pos = ftell(f); - int res; - stbi__context s; - stbi__start_file(&s, f); - res = stbi__hdr_test(&s); - fseek(f, pos, SEEK_SET); - return res; + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s, f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; #else - STBI_NOTUSED(f); - return 0; + STBI_NOTUSED(f); + return 0; #endif } #endif // !STBI_NO_STDIO -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const* clbk, void* user) +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, + void *user) { #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); - return stbi__hdr_test(&s); + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__hdr_test(&s); #else - STBI_NOTUSED(clbk); - STBI_NOTUSED(user); - return 0; + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; #endif } #ifndef STBI_NO_LINEAR static float stbi__l2h_gamma = 2.2f, stbi__l2h_scale = 1.0f; -STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } -STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) +{ + stbi__l2h_gamma = gamma; +} +STBIDEF void stbi_ldr_to_hdr_scale(float scale) +{ + stbi__l2h_scale = scale; +} #endif static float stbi__h2l_gamma_i = 1.0f / 2.2f, stbi__h2l_scale_i = 1.0f; -STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1 / gamma; } -STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1 / scale; } +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) +{ + stbi__h2l_gamma_i = 1 / gamma; +} +STBIDEF void stbi_hdr_to_ldr_scale(float scale) +{ + stbi__h2l_scale_i = 1 / scale; +} ////////////////////////////////////////////////////////////////////////////// // // Common code used by all image loaders // -enum -{ - STBI__SCAN_load = 0, - STBI__SCAN_type, - STBI__SCAN_header +enum { + STBI__SCAN_load = 0, + STBI__SCAN_type, + STBI__SCAN_header }; -static void stbi__refill_buffer(stbi__context* s) +static void stbi__refill_buffer(stbi__context *s) { - int n = (s->io.read)(s->io_user_data, (char*)s->buffer_start, s->buflen); - s->callback_already_read += (int)(s->img_buffer - s->img_buffer_original); - if (n == 0) { - // at end of file, treat same as if from memory, but need to handle case - // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file - s->read_from_callbacks = 0; - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start + 1; - *s->img_buffer = 0; - } - else { - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start + n; - } -} - -stbi_inline static stbi_uc stbi__get8(stbi__context* s) -{ - if (s->img_buffer < s->img_buffer_end) - return *s->img_buffer++; - if (s->read_from_callbacks) { - stbi__refill_buffer(s); - return *s->img_buffer++; - } - return 0; -} - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -stbi_inline static int stbi__at_eof(stbi__context* s) -{ - if (s->io.read) { - if (!(s->io.eof)(s->io_user_data)) return 0; - // if feof() is true, check if buffer = end - // special case: we've only got the special 0 character at the end - if (s->read_from_callbacks == 0) return 1; - } - - return s->img_buffer >= s->img_buffer_end; -} -#endif - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) -// nothing -#else -static void stbi__skip(stbi__context* s, int n) -{ - if (n == 0) return; // already there! - if (n < 0) { - s->img_buffer = s->img_buffer_end; - return; - } - if (s->io.read) { - int blen = (int)(s->img_buffer_end - s->img_buffer); - if (blen < n) { - s->img_buffer = s->img_buffer_end; - (s->io.skip)(s->io_user_data, n - blen); - return; + int n = (s->io.read)(s->io_user_data, (char *)s->buffer_start, + s->buflen); + s->callback_already_read += + (int)(s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + 1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; } - } - s->img_buffer += n; } -#endif -#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) -// nothing -#else -static int stbi__getn(stbi__context* s, stbi_uc* buffer, int n) +stbi_inline static stbi_uc stbi__get8(stbi__context *s) { - if (s->io.read) { - int blen = (int)(s->img_buffer_end - s->img_buffer); - if (blen < n) { - int res, count; - - memcpy(buffer, s->img_buffer, blen); - - count = (s->io.read)(s->io_user_data, (char*)buffer + blen, n - blen); - res = (count == (n - blen)); - s->img_buffer = s->img_buffer_end; - return res; + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; } - } - - if (s->img_buffer + n <= s->img_buffer_end) { - memcpy(buffer, s->img_buffer, n); - s->img_buffer += n; - return 1; - } - else return 0; } -#endif -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && \ + defined(STBI_NO_PNM) // nothing #else -static int stbi__get16be(stbi__context* s) +stbi_inline static int stbi__at_eof(stbi__context *s) { - int z = stbi__get8(s); - return (z << 8) + stbi__get8(s); + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) + return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) + return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && \ + defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && \ + defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) +{ + if (n == 0) + return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && \ + defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, + (char *)buffer + blen, n - blen); + res = (count == (n - blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer + n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && \ + defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) // nothing #else -static stbi__uint32 stbi__get32be(stbi__context* s) +static stbi__uint32 stbi__get32be(stbi__context *s) { - stbi__uint32 z = stbi__get16be(s); - return (z << 16) + stbi__get16be(s); + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); } #endif #if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) // nothing #else -static int stbi__get16le(stbi__context* s) +static int stbi__get16le(stbi__context *s) { - int z = stbi__get8(s); - return z + (stbi__get8(s) << 8); + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); } #endif #ifndef STBI_NO_BMP -static stbi__uint32 stbi__get32le(stbi__context* s) +static stbi__uint32 stbi__get32le(stbi__context *s) { - stbi__uint32 z = stbi__get16le(s); - z += (stbi__uint32)stbi__get16le(s) << 16; - return z; + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; } #endif -#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings +#define STBI__BYTECAST(x) \ + ((stbi_uc)((x) & 255)) // truncate int to byte without warnings -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && \ + defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && \ + defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) // nothing #else ////////////////////////////////////////////////////////////////////////////// @@ -1207,55 +1346,129 @@ static stbi__uint32 stbi__get32le(stbi__context* s) static stbi_uc stbi__compute_y(int r, int g, int b) { - return (stbi_uc)(((r * 77) + (g * 150) + (29 * b)) >> 8); + return (stbi_uc)(((r * 77) + (g * 150) + (29 * b)) >> 8); } #endif -#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && \ + defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && \ + defined(STBI_NO_PIC) && defined(STBI_NO_PNM) // nothing #else -static unsigned char* stbi__convert_format(unsigned char* data, int img_n, int req_comp, unsigned int x, unsigned int y) +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, + int req_comp, unsigned int x, + unsigned int y) { - int i, j; - unsigned char* good; + int i, j; + unsigned char *good; - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + if (req_comp == img_n) + return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - good = (unsigned char*)stbi__malloc_mad3(req_comp, x, y, 0); - if (good == NULL) { - STBI_FREE(data); - return stbi__errpuc("outofmem", "Out of memory"); - } - - for (j = 0; j < (int)y; ++j) { - unsigned char* src = data + j * x * img_n; - unsigned char* dest = good + j * x * req_comp; - -#define STBI__COMBO(a,b) ((a)*8+(b)) -#define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (STBI__COMBO(img_n, req_comp)) { - STBI__CASE(1, 2) { dest[0] = src[0]; dest[1] = 255; } break; - STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break; - STBI__CASE(1, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = 255; } break; - STBI__CASE(2, 1) { dest[0] = src[0]; } break; - STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break; - STBI__CASE(2, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = src[1]; } break; - STBI__CASE(3, 4) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; dest[3] = 255; } break; - STBI__CASE(3, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } break; - STBI__CASE(3, 2) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); dest[1] = 255; } break; - STBI__CASE(4, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } break; - STBI__CASE(4, 2) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); dest[1] = src[3]; } break; - STBI__CASE(4, 3) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; } break; - default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + good = (unsigned char *)stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); } -#undef STBI__CASE - } - STBI_FREE(data); - return good; + for (j = 0; j < (int)y; ++j) { + unsigned char *src = data + j * x * img_n; + unsigned char *dest = good + j * x * req_comp; + +#define STBI__COMBO(a, b) ((a) * 8 + (b)) +#define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) + { + dest[0] = src[0]; + dest[1] = 255; + } + break; + STBI__CASE(1, 3) + { + dest[0] = dest[1] = dest[2] = src[0]; + } + break; + STBI__CASE(1, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 255; + } + break; + STBI__CASE(2, 1) + { + dest[0] = src[0]; + } + break; + STBI__CASE(2, 3) + { + dest[0] = dest[1] = dest[2] = src[0]; + } + break; + STBI__CASE(2, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 255; + } + break; + STBI__CASE(3, 1) + { + dest[0] = + stbi__compute_y(src[0], src[1], src[2]); + } + break; + STBI__CASE(3, 2) + { + dest[0] = + stbi__compute_y(src[0], src[1], src[2]); + dest[1] = 255; + } + break; + STBI__CASE(4, 1) + { + dest[0] = + stbi__compute_y(src[0], src[1], src[2]); + } + break; + STBI__CASE(4, 2) + { + dest[0] = + stbi__compute_y(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + STBI_FREE(data); + STBI_FREE(good); + return stbi__errpuc("unsupported", + "Unsupported format conversion"); + } +#undef STBI__CASE + } + + STBI_FREE(data); + return good; } #endif @@ -1264,110 +1477,208 @@ static unsigned char* stbi__convert_format(unsigned char* data, int img_n, int r #else static stbi__uint16 stbi__compute_y_16(int r, int g, int b) { - return (stbi__uint16)(((r * 77) + (g * 150) + (29 * b)) >> 8); + return (stbi__uint16)(((r * 77) + (g * 150) + (29 * b)) >> 8); } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) // nothing #else -static stbi__uint16* stbi__convert_format16(stbi__uint16* data, int img_n, int req_comp, unsigned int x, unsigned int y) +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, + int req_comp, unsigned int x, + unsigned int y) { - int i, j; - stbi__uint16* good; + int i, j; + stbi__uint16 *good; - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + if (req_comp == img_n) + return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - good = (stbi__uint16*)stbi__malloc(req_comp * x * y * 2); - if (good == NULL) { - STBI_FREE(data); - return (stbi__uint16*)stbi__errpuc("outofmem", "Out of memory"); - } - - for (j = 0; j < (int)y; ++j) { - stbi__uint16* src = data + j * x * img_n; - stbi__uint16* dest = good + j * x * req_comp; - -#define STBI__COMBO(a,b) ((a)*8+(b)) -#define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (STBI__COMBO(img_n, req_comp)) { - STBI__CASE(1, 2) { dest[0] = src[0]; dest[1] = 0xffff; } break; - STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break; - STBI__CASE(1, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = 0xffff; } break; - STBI__CASE(2, 1) { dest[0] = src[0]; } break; - STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break; - STBI__CASE(2, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = src[1]; } break; - STBI__CASE(3, 4) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; dest[3] = 0xffff; } break; - STBI__CASE(3, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } break; - STBI__CASE(3, 2) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); dest[1] = 0xffff; } break; - STBI__CASE(4, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } break; - STBI__CASE(4, 2) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); dest[1] = src[3]; } break; - STBI__CASE(4, 3) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; } break; - default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*)stbi__errpuc("unsupported", "Unsupported format conversion"); + good = (stbi__uint16 *)stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *)stbi__errpuc("outofmem", + "Out of memory"); } -#undef STBI__CASE - } - STBI_FREE(data); - return good; + for (j = 0; j < (int)y; ++j) { + stbi__uint16 *src = data + j * x * img_n; + stbi__uint16 *dest = good + j * x * req_comp; + +#define STBI__COMBO(a, b) ((a) * 8 + (b)) +#define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) + { + dest[0] = src[0]; + dest[1] = 0xffff; + } + break; + STBI__CASE(1, 3) + { + dest[0] = dest[1] = dest[2] = src[0]; + } + break; + STBI__CASE(1, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 0xffff; + } + break; + STBI__CASE(2, 1) + { + dest[0] = src[0]; + } + break; + STBI__CASE(2, 3) + { + dest[0] = dest[1] = dest[2] = src[0]; + } + break; + STBI__CASE(2, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 0xffff; + } + break; + STBI__CASE(3, 1) + { + dest[0] = stbi__compute_y_16(src[0], src[1], + src[2]); + } + break; + STBI__CASE(3, 2) + { + dest[0] = stbi__compute_y_16(src[0], src[1], + src[2]); + dest[1] = 0xffff; + } + break; + STBI__CASE(4, 1) + { + dest[0] = stbi__compute_y_16(src[0], src[1], + src[2]); + } + break; + STBI__CASE(4, 2) + { + dest[0] = stbi__compute_y_16(src[0], src[1], + src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + STBI_FREE(data); + STBI_FREE(good); + return (stbi__uint16 *)stbi__errpuc( + "unsupported", "Unsupported format conversion"); + } +#undef STBI__CASE + } + + STBI_FREE(data); + return good; } #endif #ifndef STBI_NO_LINEAR -static float* stbi__ldr_to_hdr(stbi_uc* data, int x, int y, int comp) +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) { - int i, k, n; - float* output; - if (!data) return NULL; - output = (float*)stbi__malloc_mad4(x, y, comp, sizeof(float), 0); - if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp - 1; - for (i = 0; i < x * y; ++i) { - for (k = 0; k < n; ++k) { - output[i * comp + k] = (float)(pow(data[i * comp + k] / 255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + int i, k, n; + float *output; + if (!data) + return NULL; + output = (float *)stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpf("outofmem", "Out of memory"); } - } - if (n < comp) { + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; for (i = 0; i < x * y; ++i) { - output[i * comp + n] = data[i * comp + n] / 255.0f; + for (k = 0; k < n; ++k) { + output[i * comp + k] = + (float)(pow(data[i * comp + k] / 255.0f, + stbi__l2h_gamma) * + stbi__l2h_scale); + } } - } - STBI_FREE(data); - return output; + if (n < comp) { + for (i = 0; i < x * y; ++i) { + output[i * comp + n] = data[i * comp + n] / 255.0f; + } + } + STBI_FREE(data); + return output; } #endif #ifndef STBI_NO_HDR -#define stbi__float2int(x) ((int) (x)) -static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp) +#define stbi__float2int(x) ((int)(x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) { - int i, k, n; - stbi_uc* output; - if (!data) return NULL; - output = (stbi_uc*)stbi__malloc_mad3(x, y, comp, 0); - if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp - 1; - for (i = 0; i < x * y; ++i) { - for (k = 0; k < n; ++k) { - float z = (float)pow(data[i * comp + k] * stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i * comp + k] = (stbi_uc)stbi__float2int(z); + int i, k, n; + stbi_uc *output; + if (!data) + return NULL; + output = (stbi_uc *)stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); } - if (k < comp) { - float z = data[i * comp + k] * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i * comp + k] = (stbi_uc)stbi__float2int(z); + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + float z = (float)pow(data[i * comp + k] * + stbi__h2l_scale_i, + stbi__h2l_gamma_i) * + 255 + + 0.5f; + if (z < 0) + z = 0; + if (z > 255) + z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + if (k < comp) { + float z = data[i * comp + k] * 255 + 0.5f; + if (z < 0) + z = 0; + if (z > 255) + z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } } - } - STBI_FREE(data); - return output; + STBI_FREE(data); + return output; } #endif @@ -1395,774 +1706,865 @@ static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp) #ifndef STBI_NO_JPEG // huffman decoding acceleration -#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache -typedef struct -{ - stbi_uc fast[1 << FAST_BITS]; - // weirdly, repacking this into AoS is a 10% speed loss, instead of a win - stbi__uint16 code[256]; - stbi_uc values[256]; - stbi_uc size[257]; - unsigned int maxcode[18]; - int delta[17]; // old 'firstsymbol' - old 'firstcode' +typedef struct { + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' } stbi__huffman; -typedef struct -{ - stbi__context* s; - stbi__huffman huff_dc[4]; - stbi__huffman huff_ac[4]; - stbi__uint16 dequant[4][64]; - stbi__int16 fast_ac[4][1 << FAST_BITS]; +typedef struct { + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; - // sizes for components, interleaved MCUs - int img_h_max, img_v_max; - int img_mcu_x, img_mcu_y; - int img_mcu_w, img_mcu_h; + // sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; - // definition of jpeg image component - struct - { - int id; - int h, v; - int tq; - int hd, ha; - int dc_pred; + // definition of jpeg image component + struct { + int id; + int h, v; + int tq; + int hd, ha; + int dc_pred; - int x, y, w2, h2; - stbi_uc* data; - void* raw_data, * raw_coeff; - stbi_uc* linebuf; - short* coeff; // progressive only - int coeff_w, coeff_h; // number of 8x8 coefficient blocks - } img_comp[4]; + int x, y, w2, h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; - stbi__uint32 code_buffer; // jpeg entropy-coded buffer - int code_bits; // number of valid bits - unsigned char marker; // marker seen while filling entropy buffer - int nomore; // flag if we saw a marker so must stop + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop - int progressive; - int spec_start; - int spec_end; - int succ_high; - int succ_low; - int eob_run; - int jfif; - int app14_color_transform; // Adobe APP14 tag - int rgb; + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; - int scan_n, order[4]; - int restart_interval, todo; + int scan_n, order[4]; + int restart_interval, todo; - // kernels - void (*idct_block_kernel)(stbi_uc* out, int out_stride, short data[64]); - void (*YCbCr_to_RGB_kernel)(stbi_uc* out, const stbi_uc* y, const stbi_uc* pcb, const stbi_uc* pcr, int count, int step); - stbi_uc* (*resample_row_hv_2_kernel)(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs); + // kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, + const stbi_uc *pcb, const stbi_uc *pcr, + int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs); } stbi__jpeg; -static int stbi__build_huffman(stbi__huffman* h, int* count) +static int stbi__build_huffman(stbi__huffman *h, int *count) { - int i, j, k = 0; - unsigned int code; - // build size list for each symbol (from JPEG spec) - for (i = 0; i < 16; ++i) { - for (j = 0; j < count[i]; ++j) { - h->size[k++] = (stbi_uc)(i + 1); - if (k >= 257) return stbi__err("bad size list", "Corrupt JPEG"); + int i, j, k = 0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i = 0; i < 16; ++i) { + for (j = 0; j < count[i]; ++j) { + h->size[k++] = (stbi_uc)(i + 1); + if (k >= 257) + return stbi__err("bad size list", + "Corrupt JPEG"); + } } - } - h->size[k] = 0; + h->size[k] = 0; - // compute actual symbols (from jpeg spec) - code = 0; - k = 0; - for (j = 1; j <= 16; ++j) { - // compute delta to add to code to compute symbol id - h->delta[j] = k - code; - if (h->size[k] == j) { - while (h->size[k] == j) - h->code[k++] = (stbi__uint16)(code++); - if (code - 1 >= (1u << j)) return stbi__err("bad code lengths", "Corrupt JPEG"); + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for (j = 1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16)(code++); + if (code - 1 >= (1u << j)) + return stbi__err("bad code lengths", + "Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16 - j); + code <<= 1; } - // compute largest code + 1 for this size, preshifted as needed later - h->maxcode[j] = code << (16 - j); - code <<= 1; - } - h->maxcode[j] = 0xffffffff; + h->maxcode[j] = 0xffffffff; - // build non-spec acceleration table; 255 is flag for not-accelerated - memset(h->fast, 255, 1 << FAST_BITS); - for (i = 0; i < k; ++i) { - int s = h->size[i]; - if (s <= FAST_BITS) { - int c = h->code[i] << (FAST_BITS - s); - int m = 1 << (FAST_BITS - s); - for (j = 0; j < m; ++j) { - h->fast[c + j] = (stbi_uc)i; - } + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i = 0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS - s); + int m = 1 << (FAST_BITS - s); + for (j = 0; j < m; ++j) { + h->fast[c + j] = (stbi_uc)i; + } + } } - } - return 1; + return 1; } // build a table that decodes both magnitude and value of small ACs in // one go. -static void stbi__build_fast_ac(stbi__int16* fast_ac, stbi__huffman* h) +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) { - int i; - for (i = 0; i < (1 << FAST_BITS); ++i) { - stbi_uc fast = h->fast[i]; - fast_ac[i] = 0; - if (fast < 255) { - int rs = h->values[fast]; - int run = (rs >> 4) & 15; - int magbits = rs & 15; - int len = h->size[fast]; + int i; + for (i = 0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; - if (magbits && len + magbits <= FAST_BITS) { - // magnitude code followed by receive_extend code - int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); - int m = 1 << (magbits - 1); - if (k < m) k += (~0U << magbits) + 1; - // if the result is small enough, we can fit it in fast_ac table - if (k >= -128 && k <= 127) - fast_ac[i] = (stbi__int16)((k * 256) + (run * 16) + (len + magbits)); - } + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> + (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) + k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = + (stbi__int16)((k * 256) + + (run * 16) + + (len + magbits)); + } + } } - } } -static void stbi__grow_buffer_unsafe(stbi__jpeg* j) +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) { - do { - unsigned int b = j->nomore ? 0 : stbi__get8(j->s); - if (b == 0xff) { - int c = stbi__get8(j->s); - while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes - if (c != 0) { - j->marker = (unsigned char)c; - j->nomore = 1; - return; - } - } - j->code_buffer |= b << (24 - j->code_bits); - j->code_bits += 8; - } while (j->code_bits <= 24); + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) + c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char)c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); } // (1 << n) - 1 -static const stbi__uint32 stbi__bmask[17] = { 0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535 }; +static const stbi__uint32 stbi__bmask[17] = { 0, 1, 3, 7, 15, + 31, 63, 127, 255, 511, + 1023, 2047, 4095, 8191, 16383, + 32767, 65535 }; // decode a jpeg huffman value from the bitstream -stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg* j, stbi__huffman* h) +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) { - unsigned int temp; - int c, k; + unsigned int temp; + int c, k; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); - // look at the top FAST_BITS and determine what symbol ID it is, - // if the code is <= FAST_BITS - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); - k = h->fast[c]; - if (k < 255) { - int s = h->size[k]; - if (s > j->code_bits) - return -1; - j->code_buffer <<= s; - j->code_bits -= s; - return h->values[k]; - } + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } - // naive test is to shift the code_buffer down so k bits are - // valid, then test against maxcode. To speed this up, we've - // preshifted maxcode left so that it has (16-k) 0s at the - // end; in other words, regardless of the number of bits, it - // wants to be compared against something shifted to have 16; - // that way we don't need to shift inside the loop. - temp = j->code_buffer >> 16; - for (k = FAST_BITS + 1; ; ++k) - if (temp < h->maxcode[k]) - break; - if (k == 17) { - // error! code not found - j->code_bits -= 16; - return -1; - } + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k = FAST_BITS + 1;; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } - if (k > j->code_bits) - return -1; + if (k > j->code_bits) + return -1; - // convert the huffman code to the symbol id - c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; - if (c < 0 || c >= 256) // symbol id out of bounds! - return -1; - STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if (c < 0 || c >= 256) // symbol id out of bounds! + return -1; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & + stbi__bmask[h->size[c]]) == h->code[c]); - // convert the id to a symbol - j->code_bits -= k; - j->code_buffer <<= k; - return h->values[c]; + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; } // bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); - if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + unsigned int k; + int sgn; + if (j->code_bits < n) + stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) + return 0; // ran out of bits from stream, return 0s intead of continuing - sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k + (stbi__jbias[n] & (sgn - 1)); + sgn = j->code_buffer >> + 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); } // get some unsigned bits -stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg* j, int n) +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) { - unsigned int k; - if (j->code_bits < n) stbi__grow_buffer_unsafe(j); - if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k; + unsigned int k; + if (j->code_bits < n) + stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) + return 0; // ran out of bits from stream, return 0s intead of continuing + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; } -stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg* j) +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) { - unsigned int k; - if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); - if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing - k = j->code_buffer; - j->code_buffer <<= 1; - --j->code_bits; - return k & 0x80000000; + unsigned int k; + if (j->code_bits < 1) + stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) + return 0; // ran out of bits from stream, return 0s intead of continuing + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; } // given a value that's at position X in the zigzag stream, // where does it appear in the 8x8 matrix coded as row-major? -static const stbi_uc stbi__jpeg_dezigzag[64 + 15] = -{ - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - // let corrupt input sample past end - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63 +static const stbi_uc stbi__jpeg_dezigzag[64 + 15] = { + 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, + 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, + 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }; // decode one 64-entry block-- -static int stbi__jpeg_decode_block(stbi__jpeg* j, short data[64], stbi__huffman* hdc, stbi__huffman* hac, stbi__int16* fac, int b, stbi__uint16* dequant) +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], + stbi__huffman *hdc, stbi__huffman *hac, + stbi__int16 *fac, int b, + stbi__uint16 *dequant) { - int diff, dc, k; - int t; + int diff, dc, k; + int t; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0 || t > 15) return stbi__err("bad huffman code", "Corrupt JPEG"); - - // 0 all the ac values now so we can do it 32-bits at a time - memset(data, 0, 64 * sizeof(data[0])); - - diff = t ? stbi__extend_receive(j, t) : 0; - if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - data[0] = (short)(dc * dequant[0]); - - // decode AC components, see JPEG spec - k = 1; - do { - unsigned int zig; - int c, r, s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); - j->code_buffer <<= s; - j->code_bits -= s; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short)((r >> 8) * dequant[zig]); - } - else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code", "Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (rs != 0xf0) break; // end block - k += 16; - } - else { - k += r; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short)(stbi__extend_receive(j, s) * dequant[zig]); - } - } - } while (k < 64); - return 1; -} - -static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg* j, short data[64], stbi__huffman* hdc, int b) -{ - int diff, dc; - int t; - if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - if (j->succ_high == 0) { - // first scan for DC coefficient, must be first - memset(data, 0, 64 * sizeof(data[0])); // 0 all the ac values now + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - diff = t ? stbi__extend_receive(j, t) : 0; + if (t < 0 || t > 15) + return stbi__err("bad huffman code", "Corrupt JPEG"); - if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); + // 0 all the ac values now so we can do it 32-bits at a time + memset(data, 0, 64 * sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) + return stbi__err("bad delta", "Corrupt JPEG"); dc = j->img_comp[b].dc_pred + diff; j->img_comp[b].dc_pred = dc; - if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - data[0] = (short)(dc * (1 << j->succ_low)); - } - else { - // refinement scan for DC coefficient - if (stbi__jpeg_get_bit(j)) - data[0] += (short)(1 << j->succ_low); - } - return 1; + if (!stbi__mul2shorts_valid(dc, dequant[0])) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short)(dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & + ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) + return stbi__err( + "bad huffman code", + "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) + return stbi__err("bad huffman code", + "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) + break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) * + dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], + stbi__huffman *hdc, int b) +{ + int diff, dc; + int t; + if (j->spec_end != 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data, 0, + 64 * sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) + return stbi__err("can't merge dc and ac", + "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) + return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) + return stbi__err("can't merge dc and ac", + "Corrupt JPEG"); + data[0] = (short)(dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short)(1 << j->succ_low); + } + return 1; } // @OPTIMIZE: store non-zigzagged during the decode passes, // and only de-zigzag when dequantizing -static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg* j, short data[64], stbi__huffman* hac, stbi__int16* fac) +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], + stbi__huffman *hac, stbi__int16 *fac) { - int k; - if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + int k; + if (j->spec_start == 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - if (j->succ_high == 0) { - int shift = j->succ_low; + if (j->succ_high == 0) { + int shift = j->succ_low; - if (j->eob_run) { - --j->eob_run; - return 1; - } - - k = j->spec_start; - do { - unsigned int zig; - int c, r, s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); - j->code_buffer <<= s; - j->code_bits -= s; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short)((r >> 8) * (1 << shift)); - } - else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code", "Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r); - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); + if (j->eob_run) { --j->eob_run; - break; - } - k += 16; + return 1; } - else { - k += r; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short)(stbi__extend_receive(j, s) * (1 << shift)); - } - } - } while (k <= j->spec_end); - } - else { - // refinement scan for these AC coefficients - short bit = (short)(1 << j->succ_low); - - if (j->eob_run) { - --j->eob_run; - for (k = j->spec_start; k <= j->spec_end; ++k) { - short* p = &data[stbi__jpeg_dezigzag[k]]; - if (*p != 0) - if (stbi__jpeg_get_bit(j)) - if ((*p & bit) == 0) { - if (*p > 0) - *p += bit; - else - *p -= bit; + k = j->spec_start; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & + ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) + return stbi__err( + "bad huffman code", + "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) + return stbi__err("bad huffman code", + "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += + stbi__jpeg_get_bits( + j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = + (short)(stbi__extend_receive( + j, s) * + (1 << shift)); + } } - } - } - else { - k = j->spec_start; - do { - int r, s; - int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh - if (rs < 0) return stbi__err("bad huffman code", "Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r) - 1; - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - r = 64; // force end of block - } - else { - // r=15 s=0 should write 16 0s, so we just do - // a run of 15 0s and then write s (which is 0), - // so we don't have to do anything special here - } - } - else { - if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); - // sign bit - if (stbi__jpeg_get_bit(j)) - s = bit; - else - s = -bit; - } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients - // advance by r - while (k <= j->spec_end) { - short* p = &data[stbi__jpeg_dezigzag[k++]]; - if (*p != 0) { - if (stbi__jpeg_get_bit(j)) - if ((*p & bit) == 0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } - else { - if (r == 0) { - *p = (short)s; - break; + short bit = (short)(1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } } - --r; - } + } else { + k = j->spec_start; + do { + int r, s; + int rs = stbi__jpeg_huff_decode( + j, + hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) + return stbi__err("bad huffman code", + "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += + stbi__jpeg_get_bits( + j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) + return stbi__err( + "bad huffman code", + "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = + &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short)s; + break; + } + --r; + } + } + } while (k <= j->spec_end); } - } while (k <= j->spec_end); } - } - return 1; + return 1; } // take a -128..127 value and stbi__clamp it and convert to 0..255 stbi_inline static stbi_uc stbi__clamp(int x) { - // trick to use a single test to catch both cases - if ((unsigned int)x > 255) { - if (x < 0) return 0; - if (x > 255) return 255; - } - return (stbi_uc)x; + // trick to use a single test to catch both cases + if ((unsigned int)x > 255) { + if (x < 0) + return 0; + if (x > 255) + return 255; + } + return (stbi_uc)x; } -#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) -#define stbi__fsh(x) ((x) * 4096) +#define stbi__f2f(x) ((int)(((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) // derived from jidctint -- DCT_ISLOW -#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ - int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ - p2 = s2; \ - p3 = s6; \ - p1 = (p2+p3) * stbi__f2f(0.5411961f); \ - t2 = p1 + p3*stbi__f2f(-1.847759065f); \ - t3 = p1 + p2*stbi__f2f( 0.765366865f); \ - p2 = s0; \ - p3 = s4; \ - t0 = stbi__fsh(p2+p3); \ - t1 = stbi__fsh(p2-p3); \ - x0 = t0+t3; \ - x3 = t0-t3; \ - x1 = t1+t2; \ - x2 = t1-t2; \ - t0 = s7; \ - t1 = s5; \ - t2 = s3; \ - t3 = s1; \ - p3 = t0+t2; \ - p4 = t1+t3; \ - p1 = t0+t3; \ - p2 = t1+t2; \ - p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ - t0 = t0*stbi__f2f( 0.298631336f); \ - t1 = t1*stbi__f2f( 2.053119869f); \ - t2 = t2*stbi__f2f( 3.072711026f); \ - t3 = t3*stbi__f2f( 1.501321110f); \ - p1 = p5 + p1*stbi__f2f(-0.899976223f); \ - p2 = p5 + p2*stbi__f2f(-2.562915447f); \ - p3 = p3*stbi__f2f(-1.961570560f); \ - p4 = p4*stbi__f2f(-0.390180644f); \ - t3 += p1+p4; \ - t2 += p2+p3; \ - t1 += p2+p4; \ - t0 += p1+p3; +#define STBI__IDCT_1D(s0, s1, s2, s3, s4, s5, s6, s7) \ + int t0, t1, t2, t3, p1, p2, p3, p4, p5, x0, x1, x2, x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2 + p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3 * stbi__f2f(-1.847759065f); \ + t3 = p1 + p2 * stbi__f2f(0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2 + p3); \ + t1 = stbi__fsh(p2 - p3); \ + x0 = t0 + t3; \ + x3 = t0 - t3; \ + x1 = t1 + t2; \ + x2 = t1 - t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0 + t2; \ + p4 = t1 + t3; \ + p1 = t0 + t3; \ + p2 = t1 + t2; \ + p5 = (p3 + p4) * stbi__f2f(1.175875602f); \ + t0 = t0 * stbi__f2f(0.298631336f); \ + t1 = t1 * stbi__f2f(2.053119869f); \ + t2 = t2 * stbi__f2f(3.072711026f); \ + t3 = t3 * stbi__f2f(1.501321110f); \ + p1 = p5 + p1 * stbi__f2f(-0.899976223f); \ + p2 = p5 + p2 * stbi__f2f(-2.562915447f); \ + p3 = p3 * stbi__f2f(-1.961570560f); \ + p4 = p4 * stbi__f2f(-0.390180644f); \ + t3 += p1 + p4; \ + t2 += p2 + p3; \ + t1 += p2 + p4; \ + t0 += p1 + p3; -static void stbi__idct_block(stbi_uc* out, int out_stride, short data[64]) +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) { - int i, val[64], * v = val; - stbi_uc* o; - short* d = data; + int i, val[64], *v = val; + stbi_uc *o; + short *d = data; - // columns - for (i = 0; i < 8; ++i, ++d, ++v) { - // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing - if (d[8] == 0 && d[16] == 0 && d[24] == 0 && d[32] == 0 - && d[40] == 0 && d[48] == 0 && d[56] == 0) { - // no shortcut 0 seconds - // (1|2|3|4|5|6|7)==0 0 seconds - // all separate -0.047 seconds - // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds - int dcterm = d[0] * 4; - v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + // columns + for (i = 0; i < 8; ++i, ++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[8] == 0 && d[16] == 0 && d[24] == 0 && d[32] == 0 && + d[40] == 0 && d[48] == 0 && d[56] == 0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * 4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = + v[56] = dcterm; + } else { + STBI__IDCT_1D(d[0], d[8], d[16], d[24], d[32], d[40], + d[48], d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; + x1 += 512; + x2 += 512; + x3 += 512; + v[0] = (x0 + t3) >> 10; + v[56] = (x0 - t3) >> 10; + v[8] = (x1 + t2) >> 10; + v[48] = (x1 - t2) >> 10; + v[16] = (x2 + t1) >> 10; + v[40] = (x2 - t1) >> 10; + v[24] = (x3 + t0) >> 10; + v[32] = (x3 - t0) >> 10; + } } - else { - STBI__IDCT_1D(d[0], d[8], d[16], d[24], d[32], d[40], d[48], d[56]) - // constants scaled things up by 1<<12; let's bring them back - // down, but keep 2 extra bits of precision - x0 += 512; x1 += 512; x2 += 512; x3 += 512; - v[0] = (x0 + t3) >> 10; - v[56] = (x0 - t3) >> 10; - v[8] = (x1 + t2) >> 10; - v[48] = (x1 - t2) >> 10; - v[16] = (x2 + t1) >> 10; - v[40] = (x2 - t1) >> 10; - v[24] = (x3 + t0) >> 10; - v[32] = (x3 - t0) >> 10; - } - } - for (i = 0, v = val, o = out; i < 8; ++i, v += 8, o += out_stride) { - // no fast case since the first 1D IDCT spread components out - STBI__IDCT_1D(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]) - // constants scaled things up by 1<<12, plus we had 1<<2 from first - // loop, plus horizontal and vertical each scale by sqrt(8) so together - // we've got an extra 1<<3, so 1<<17 total we need to remove. - // so we want to round that, which means adding 0.5 * 1<<17, - // aka 65536. Also, we'll end up with -128 to 127 that we want - // to encode as 0..255 by adding 128, so we'll add that before the shift - x0 += 65536 + (128 << 17); - x1 += 65536 + (128 << 17); - x2 += 65536 + (128 << 17); - x3 += 65536 + (128 << 17); - // tried computing the shifts into temps, or'ing the temps to see - // if any were out of range, but that was slower - o[0] = stbi__clamp((x0 + t3) >> 17); - o[7] = stbi__clamp((x0 - t3) >> 17); - o[1] = stbi__clamp((x1 + t2) >> 17); - o[6] = stbi__clamp((x1 - t2) >> 17); - o[2] = stbi__clamp((x2 + t1) >> 17); - o[5] = stbi__clamp((x2 - t1) >> 17); - o[3] = stbi__clamp((x3 + t0) >> 17); - o[4] = stbi__clamp((x3 - t0) >> 17); - } + for (i = 0, v = val, o = out; i < 8; ++i, v += 8, o += out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128 << 17); + x1 += 65536 + (128 << 17); + x2 += 65536 + (128 << 17); + x3 += 65536 + (128 << 17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0 + t3) >> 17); + o[7] = stbi__clamp((x0 - t3) >> 17); + o[1] = stbi__clamp((x1 + t2) >> 17); + o[6] = stbi__clamp((x1 - t2) >> 17); + o[2] = stbi__clamp((x2 + t1) >> 17); + o[5] = stbi__clamp((x2 - t1) >> 17); + o[3] = stbi__clamp((x3 + t0) >> 17); + o[4] = stbi__clamp((x3 - t0) >> 17); + } } #ifdef STBI_SSE2 // sse2 integer IDCT. not the fastest possible implementation but it // produces bit-identical results to the generic C version so it's // fully "transparent". -static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) { - // This is constructed to match our regular (generic) integer IDCT exactly. - __m128i row0, row1, row2, row3, row4, row5, row6, row7; - __m128i tmp; + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; - // dot product constant: even elems=x, odd elems=y -#define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + // dot product constant: even elems=x, odd elems=y +#define dct_const(x, y) _mm_setr_epi16((x), (y), (x), (y), (x), (y), (x), (y)) // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) // out(1) = c1[even]*x + c1[odd]*y -#define dct_rot(out0,out1, x,y,c0,c1) \ - __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ - __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ - __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ - __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ - __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ - __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) +#define dct_rot(out0, out1, x, y, c0, c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x), (y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x), (y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) - // out = in << 12 (in 16-bit, out 32-bit) -#define dct_widen(out, in) \ - __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ - __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + // out = in << 12 (in 16-bit, out 32-bit) +#define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32( \ + _mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32( \ + _mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) - // wide add -#define dct_wadd(out, a, b) \ - __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + // wide add +#define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) - // wide sub -#define dct_wsub(out, a, b) \ - __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + // wide sub +#define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) - // butterfly a/b, add bias, then shift by "s" and pack -#define dct_bfly32o(out0, out1, a,b,bias,s) \ - { \ - __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ - __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ - dct_wadd(sum, abiased, b); \ - dct_wsub(dif, abiased, b); \ - out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ - out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ - } + // butterfly a/b, add bias, then shift by "s" and pack +#define dct_bfly32o(out0, out1, a, b, bias, s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), \ + _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), \ + _mm_srai_epi32(dif_h, s)); \ + } - // 8-bit interleave step (for transposes) -#define dct_interleave8(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi8(a, b); \ - b = _mm_unpackhi_epi8(tmp, b) + // 8-bit interleave step (for transposes) +#define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) - // 16-bit interleave step (for transposes) -#define dct_interleave16(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi16(a, b); \ - b = _mm_unpackhi_epi16(tmp, b) + // 16-bit interleave step (for transposes) +#define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) -#define dct_pass(bias,shift) \ - { \ - /* even part */ \ - dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ - __m128i sum04 = _mm_add_epi16(row0, row4); \ - __m128i dif04 = _mm_sub_epi16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ - dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ - __m128i sum17 = _mm_add_epi16(row1, row7); \ - __m128i sum35 = _mm_add_epi16(row3, row5); \ - dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ - dct_wadd(x4, y0o, y4o); \ - dct_wadd(x5, y1o, y5o); \ - dct_wadd(x6, y2o, y5o); \ - dct_wadd(x7, y3o, y4o); \ - dct_bfly32o(row0,row7, x0,x7,bias,shift); \ - dct_bfly32o(row1,row6, x1,x6,bias,shift); \ - dct_bfly32o(row2,row5, x2,x5,bias,shift); \ - dct_bfly32o(row3,row4, x3,x4,bias,shift); \ - } +#define dct_pass(bias, shift) \ + { \ + /* even part */ \ + dct_rot(t2e, t3e, row2, row6, rot0_0, rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o, y2o, row7, row3, rot2_0, rot2_1); \ + dct_rot(y1o, y3o, row5, row1, rot3_0, rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o, y5o, sum17, sum35, rot1_0, rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0, row7, x0, x7, bias, shift); \ + dct_bfly32o(row1, row6, x1, x6, bias, shift); \ + dct_bfly32o(row2, row5, x2, x5, bias, shift); \ + dct_bfly32o(row3, row4, x3, x4, bias, shift); \ + } - __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); - __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f(0.765366865f), stbi__f2f(0.5411961f)); - __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); - __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); - __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f(0.298631336f), stbi__f2f(-1.961570560f)); - __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f(3.072711026f)); - __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f(2.053119869f), stbi__f2f(-0.390180644f)); - __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f(1.501321110f)); + __m128i rot0_0 = + dct_const(stbi__f2f(0.5411961f), + stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = + dct_const(stbi__f2f(0.5411961f) + stbi__f2f(0.765366865f), + stbi__f2f(0.5411961f)); + __m128i rot1_0 = + dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), + stbi__f2f(1.175875602f)); + __m128i rot1_1 = + dct_const(stbi__f2f(1.175875602f), + stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = + dct_const(stbi__f2f(-1.961570560f) + stbi__f2f(0.298631336f), + stbi__f2f(-1.961570560f)); + __m128i rot2_1 = + dct_const(stbi__f2f(-1.961570560f), + stbi__f2f(-1.961570560f) + stbi__f2f(3.072711026f)); + __m128i rot3_0 = + dct_const(stbi__f2f(-0.390180644f) + stbi__f2f(2.053119869f), + stbi__f2f(-0.390180644f)); + __m128i rot3_1 = + dct_const(stbi__f2f(-0.390180644f), + stbi__f2f(-0.390180644f) + stbi__f2f(1.501321110f)); - // rounding biases in column/row passes, see stbi__idct_block for explanation. - __m128i bias_0 = _mm_set1_epi32(512); - __m128i bias_1 = _mm_set1_epi32(65536 + (128 << 17)); + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128 << 17)); - // load - row0 = _mm_load_si128((const __m128i*) (data + 0 * 8)); - row1 = _mm_load_si128((const __m128i*) (data + 1 * 8)); - row2 = _mm_load_si128((const __m128i*) (data + 2 * 8)); - row3 = _mm_load_si128((const __m128i*) (data + 3 * 8)); - row4 = _mm_load_si128((const __m128i*) (data + 4 * 8)); - row5 = _mm_load_si128((const __m128i*) (data + 5 * 8)); - row6 = _mm_load_si128((const __m128i*) (data + 6 * 8)); - row7 = _mm_load_si128((const __m128i*) (data + 7 * 8)); + // load + row0 = _mm_load_si128((const __m128i *)(data + 0 * 8)); + row1 = _mm_load_si128((const __m128i *)(data + 1 * 8)); + row2 = _mm_load_si128((const __m128i *)(data + 2 * 8)); + row3 = _mm_load_si128((const __m128i *)(data + 3 * 8)); + row4 = _mm_load_si128((const __m128i *)(data + 4 * 8)); + row5 = _mm_load_si128((const __m128i *)(data + 5 * 8)); + row6 = _mm_load_si128((const __m128i *)(data + 6 * 8)); + row7 = _mm_load_si128((const __m128i *)(data + 7 * 8)); - // column pass - dct_pass(bias_0, 10); + // column pass + dct_pass(bias_0, 10); - { - // 16bit 8x8 transpose pass 1 - dct_interleave16(row0, row4); - dct_interleave16(row1, row5); - dct_interleave16(row2, row6); - dct_interleave16(row3, row7); + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); - // transpose pass 2 - dct_interleave16(row0, row2); - dct_interleave16(row1, row3); - dct_interleave16(row4, row6); - dct_interleave16(row5, row7); + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); - // transpose pass 3 - dct_interleave16(row0, row1); - dct_interleave16(row2, row3); - dct_interleave16(row4, row5); - dct_interleave16(row6, row7); - } + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } - // row pass - dct_pass(bias_1, 17); + // row pass + dct_pass(bias_1, 17); - { - // pack - __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 - __m128i p1 = _mm_packus_epi16(row2, row3); - __m128i p2 = _mm_packus_epi16(row4, row5); - __m128i p3 = _mm_packus_epi16(row6, row7); + { + // pack + __m128i p0 = _mm_packus_epi16( + row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); - // 8bit 8x8 transpose pass 1 - dct_interleave8(p0, p2); // a0e0a1e1... - dct_interleave8(p1, p3); // c0g0c1g1... + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... - // transpose pass 2 - dct_interleave8(p0, p1); // a0c0e0g0... - dct_interleave8(p2, p3); // b0d0f0h0... + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... - // transpose pass 3 - dct_interleave8(p0, p2); // a0b0c0d0... - dct_interleave8(p1, p3); // a4b4c4d4... + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... - // store - _mm_storel_epi64((__m128i*) out, p0); out += out_stride; - _mm_storel_epi64((__m128i*) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i*) out, p2); out += out_stride; - _mm_storel_epi64((__m128i*) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i*) out, p1); out += out_stride; - _mm_storel_epi64((__m128i*) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i*) out, p3); out += out_stride; - _mm_storel_epi64((__m128i*) out, _mm_shuffle_epi32(p3, 0x4e)); - } + // store + _mm_storel_epi64((__m128i *)out, p0); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p0, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i *)out, p2); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p2, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i *)out, p1); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p1, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i *)out, p3); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p3, 0x4e)); + } #undef dct_const #undef dct_rot @@ -2181,198 +2583,239 @@ static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) // NEON integer IDCT. should produce bit-identical // results to the generic C version. -static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) { - int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; - int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); - int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); - int16x4_t rot0_2 = vdup_n_s16(stbi__f2f(0.765366865f)); - int16x4_t rot1_0 = vdup_n_s16(stbi__f2f(1.175875602f)); - int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); - int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); - int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); - int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); - int16x4_t rot3_0 = vdup_n_s16(stbi__f2f(0.298631336f)); - int16x4_t rot3_1 = vdup_n_s16(stbi__f2f(2.053119869f)); - int16x4_t rot3_2 = vdup_n_s16(stbi__f2f(3.072711026f)); - int16x4_t rot3_3 = vdup_n_s16(stbi__f2f(1.501321110f)); + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f(0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f(1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f(0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f(2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f(3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f(1.501321110f)); -#define dct_long_mul(out, inq, coeff) \ - int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) -#define dct_long_mac(out, acc, inq, coeff) \ - int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) -#define dct_widen(out, inq) \ - int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ - int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) - // wide add -#define dct_wadd(out, a, b) \ - int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + // wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) // wide sub -#define dct_wsub(out, a, b) \ - int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vsubq_s32(a##_h, b##_h) +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) // butterfly a/b, then shift using "shiftop" by "s" and pack -#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ - { \ - dct_wadd(sum, a, b); \ - dct_wsub(dif, a, b); \ - out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ - out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ - } +#define dct_bfly32o(out0, out1, a, b, shiftop, s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } -#define dct_pass(shiftop, shift) \ - { \ - /* even part */ \ - int16x8_t sum26 = vaddq_s16(row2, row6); \ - dct_long_mul(p1e, sum26, rot0_0); \ - dct_long_mac(t2e, p1e, row6, rot0_1); \ - dct_long_mac(t3e, p1e, row2, rot0_2); \ - int16x8_t sum04 = vaddq_s16(row0, row4); \ - int16x8_t dif04 = vsubq_s16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - int16x8_t sum15 = vaddq_s16(row1, row5); \ - int16x8_t sum17 = vaddq_s16(row1, row7); \ - int16x8_t sum35 = vaddq_s16(row3, row5); \ - int16x8_t sum37 = vaddq_s16(row3, row7); \ - int16x8_t sumodd = vaddq_s16(sum17, sum35); \ - dct_long_mul(p5o, sumodd, rot1_0); \ - dct_long_mac(p1o, p5o, sum17, rot1_1); \ - dct_long_mac(p2o, p5o, sum35, rot1_2); \ - dct_long_mul(p3o, sum37, rot2_0); \ - dct_long_mul(p4o, sum15, rot2_1); \ - dct_wadd(sump13o, p1o, p3o); \ - dct_wadd(sump24o, p2o, p4o); \ - dct_wadd(sump23o, p2o, p3o); \ - dct_wadd(sump14o, p1o, p4o); \ - dct_long_mac(x4, sump13o, row7, rot3_0); \ - dct_long_mac(x5, sump24o, row5, rot3_1); \ - dct_long_mac(x6, sump23o, row3, rot3_2); \ - dct_long_mac(x7, sump14o, row1, rot3_3); \ - dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ - dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ - dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ - dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ - } +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0, row7, x0, x7, shiftop, shift); \ + dct_bfly32o(row1, row6, x1, x6, shiftop, shift); \ + dct_bfly32o(row2, row5, x2, x5, shiftop, shift); \ + dct_bfly32o(row3, row4, x3, x4, shiftop, shift); \ + } - // load - row0 = vld1q_s16(data + 0 * 8); - row1 = vld1q_s16(data + 1 * 8); - row2 = vld1q_s16(data + 2 * 8); - row3 = vld1q_s16(data + 3 * 8); - row4 = vld1q_s16(data + 4 * 8); - row5 = vld1q_s16(data + 5 * 8); - row6 = vld1q_s16(data + 6 * 8); - row7 = vld1q_s16(data + 7 * 8); + // load + row0 = vld1q_s16(data + 0 * 8); + row1 = vld1q_s16(data + 1 * 8); + row2 = vld1q_s16(data + 2 * 8); + row3 = vld1q_s16(data + 3 * 8); + row4 = vld1q_s16(data + 4 * 8); + row5 = vld1q_s16(data + 5 * 8); + row6 = vld1q_s16(data + 6 * 8); + row7 = vld1q_s16(data + 7 * 8); - // add DC bias - row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); - // column pass - dct_pass(vrshrn_n_s32, 10); + // column pass + dct_pass(vrshrn_n_s32, 10); - // 16bit 8x8 transpose - { - // these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. - // whether compilers actually get this is another story, sadly. -#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } -#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + // 16bit 8x8 transpose + { + // these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. + // whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) \ + { \ + int16x8x2_t t = vtrnq_s16(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +#define dct_trn32(x, y) \ + { \ + int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), \ + vreinterpretq_s32_s16(y)); \ + x = vreinterpretq_s16_s32(t.val[0]); \ + y = vreinterpretq_s16_s32(t.val[1]); \ + } +#define dct_trn64(x, y) \ + { \ + int16x8_t x0 = x; \ + int16x8_t y0 = y; \ + x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); \ + y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); \ + } - // pass 1 - dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 - dct_trn16(row2, row3); - dct_trn16(row4, row5); - dct_trn16(row6, row7); + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); - // pass 2 - dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 - dct_trn32(row1, row3); - dct_trn32(row4, row6); - dct_trn32(row5, row7); + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); - // pass 3 - dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 - dct_trn64(row1, row5); - dct_trn64(row2, row6); - dct_trn64(row3, row7); + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); #undef dct_trn16 #undef dct_trn32 #undef dct_trn64 - } + } - // row pass - // vrshrn_n_s32 only supports shifts up to 16, we need - // 17. so do a non-rounding shift of 16 first then follow - // up with a rounding shift by 1. - dct_pass(vshrn_n_s32, 16); + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); - { - // pack and round - uint8x8_t p0 = vqrshrun_n_s16(row0, 1); - uint8x8_t p1 = vqrshrun_n_s16(row1, 1); - uint8x8_t p2 = vqrshrun_n_s16(row2, 1); - uint8x8_t p3 = vqrshrun_n_s16(row3, 1); - uint8x8_t p4 = vqrshrun_n_s16(row4, 1); - uint8x8_t p5 = vqrshrun_n_s16(row5, 1); - uint8x8_t p6 = vqrshrun_n_s16(row6, 1); - uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); - // again, these can translate into one instruction, but often don't. -#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } -#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) \ + { \ + uint8x8x2_t t = vtrn_u8(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +#define dct_trn8_16(x, y) \ + { \ + uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), \ + vreinterpret_u16_u8(y)); \ + x = vreinterpret_u8_u16(t.val[0]); \ + y = vreinterpret_u8_u16(t.val[1]); \ + } +#define dct_trn8_32(x, y) \ + { \ + uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), \ + vreinterpret_u32_u8(y)); \ + x = vreinterpret_u8_u32(t.val[0]); \ + y = vreinterpret_u8_u32(t.val[1]); \ + } - // sadly can't use interleaved stores here since we only write - // 8 bytes to each scan line! + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! - // 8x8 8-bit transpose pass 1 - dct_trn8_8(p0, p1); - dct_trn8_8(p2, p3); - dct_trn8_8(p4, p5); - dct_trn8_8(p6, p7); + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); - // pass 2 - dct_trn8_16(p0, p2); - dct_trn8_16(p1, p3); - dct_trn8_16(p4, p6); - dct_trn8_16(p5, p7); + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); - // pass 3 - dct_trn8_32(p0, p4); - dct_trn8_32(p1, p5); - dct_trn8_32(p2, p6); - dct_trn8_32(p3, p7); + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); - // store - vst1_u8(out, p0); out += out_stride; - vst1_u8(out, p1); out += out_stride; - vst1_u8(out, p2); out += out_stride; - vst1_u8(out, p3); out += out_stride; - vst1_u8(out, p4); out += out_stride; - vst1_u8(out, p5); out += out_stride; - vst1_u8(out, p6); out += out_stride; - vst1_u8(out, p7); + // store + vst1_u8(out, p0); + out += out_stride; + vst1_u8(out, p1); + out += out_stride; + vst1_u8(out, p2); + out += out_stride; + vst1_u8(out, p3); + out += out_stride; + vst1_u8(out, p4); + out += out_stride; + vst1_u8(out, p5); + out += out_stride; + vst1_u8(out, p6); + out += out_stride; + vst1_u8(out, p7); #undef dct_trn8_8 #undef dct_trn8_16 #undef dct_trn8_32 - } + } #undef dct_long_mul #undef dct_long_mac @@ -2385,1187 +2828,1514 @@ static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) #endif // STBI_NEON -#define STBI__MARKER_none 0xff +#define STBI__MARKER_none 0xff // if there's a pending marker from the entropy stream, return that // otherwise, fetch from the stream and get a marker. if there's no // marker, return 0xff, which is never a valid marker value -static stbi_uc stbi__get_marker(stbi__jpeg* j) +static stbi_uc stbi__get_marker(stbi__jpeg *j) { - stbi_uc x; - if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } - x = stbi__get8(j->s); - if (x != 0xff) return STBI__MARKER_none; - while (x == 0xff) - x = stbi__get8(j->s); // consume repeated 0xff fill bytes - return x; + stbi_uc x; + if (j->marker != STBI__MARKER_none) { + x = j->marker; + j->marker = STBI__MARKER_none; + return x; + } + x = stbi__get8(j->s); + if (x != 0xff) + return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; } // in each scan, we'll have scan_n components, and the order // of the components is specified by order[] -#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) // after a restart interval, stbi__jpeg_reset the entropy decoder and // the dc prediction -static void stbi__jpeg_reset(stbi__jpeg* j) +static void stbi__jpeg_reset(stbi__jpeg *j) { - j->code_bits = 0; - j->code_buffer = 0; - j->nomore = 0; - j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; - j->marker = STBI__MARKER_none; - j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; - j->eob_run = 0; - // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, - // since we don't even allow 1<<30 pixels + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = + j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels } -static int stbi__parse_entropy_coded_data(stbi__jpeg* z) +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) { - stbi__jpeg_reset(z); - if (!z->progressive) { - if (z->scan_n == 1) { - int i, j; - STBI_SIMD_ALIGN(short, data[64]); - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x + 7) >> 3; - int h = (z->img_comp[n].y + 7) >> 3; - for (j = 0; j < h; ++j) { - for (i = 0; i < w; ++i) { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, z->huff_ac + ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2 * j * 8 + i * 8, z->img_comp[n].w2, data); - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - // if it's NOT a restart, then just bail, so we get corrupt data - // rather than no data - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - else { // interleaved - int i, j, k, x, y; - STBI_SIMD_ALIGN(short, data[64]); - for (j = 0; j < z->img_mcu_y; ++j) { - for (i = 0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k = 0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y = 0; y < z->img_comp[n].v; ++y) { - for (x = 0; x < z->img_comp[n].h; ++x) { - int x2 = (i * z->img_comp[n].h + x) * 8; - int y2 = (j * z->img_comp[n].v + y) * 8; - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, z->huff_ac + ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2 * y2 + x2, z->img_comp[n].w2, data); - } + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i, j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block( + z, data, + z->huff_dc + + z->img_comp[n].hd, + z->huff_ac + ha, + z->fast_ac[ha], n, + z->dequant[z->img_comp[n] + .tq])) + return 0; + z->idct_block_kernel( + z->img_comp[n].data + + z->img_comp[n].w2 * j * + 8 + + i * 8, + z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe( + z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } - else { - if (z->scan_n == 1) { - int i, j; - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x + 7) >> 3; - int h = (z->img_comp[n].y + 7) >> 3; - for (j = 0; j < h; ++j) { - for (i = 0; i < w; ++i) { - short* data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - if (z->spec_start == 0) { - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } - else { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) - return 0; - } - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - else { // interleaved - int i, j, k, x, y; - for (j = 0; j < z->img_mcu_y; ++j) { - for (i = 0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k = 0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y = 0; y < z->img_comp[n].v; ++y) { - for (x = 0; x < z->img_comp[n].h; ++x) { - int x2 = (i * z->img_comp[n].h + x); - int y2 = (j * z->img_comp[n].v + y); - short* data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } + return 1; + } else { // interleaved + int i, j, k, x, y; + STBI_SIMD_ALIGN(short, data[64]); + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y = 0; + y < z->img_comp[n].v; + ++y) { + for (x = 0; + x < + z->img_comp[n].h; + ++x) { + int x2 = + (i * z->img_comp[n] + .h + + x) * + 8; + int y2 = + (j * z->img_comp[n] + .v + + y) * + 8; + int ha = + z->img_comp[n] + .ha; + if (!stbi__jpeg_decode_block( + z, + data, + z->huff_dc + + z->img_comp[n] + .hd, + z->huff_ac + + ha, + z->fast_ac + [ha], + n, + z->dequant + [z->img_comp[n] + .tq])) + return 0; + z->idct_block_kernel( + z->img_comp[n].data + + z->img_comp[n].w2 * + y2 + + x2, + z->img_comp[n] + .w2, + data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe( + z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } + return 1; } - } - return 1; - } - } -} - -static void stbi__jpeg_dequantize(short* data, stbi__uint16* dequant) -{ - int i; - for (i = 0; i < 64; ++i) - data[i] *= dequant[i]; -} - -static void stbi__jpeg_finish(stbi__jpeg* z) -{ - if (z->progressive) { - // dequantize and idct the data - int i, j, n; - for (n = 0; n < z->s->img_n; ++n) { - int w = (z->img_comp[n].x + 7) >> 3; - int h = (z->img_comp[n].y + 7) >> 3; - for (j = 0; j < h; ++j) { - for (i = 0; i < w; ++i) { - short* data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); - z->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2 * j * 8 + i * 8, z->img_comp[n].w2, data); + } else { + if (z->scan_n == 1) { + int i, j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short *data = + z->img_comp[n].coeff + + 64 * (i + + j * z->img_comp[n] + .coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc( + z, data, + &z->huff_dc + [z->img_comp[n] + .hd], + n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac( + z, data, + &z->huff_ac[ha], + z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe( + z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i, j, k, x, y; + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y = 0; + y < z->img_comp[n].v; + ++y) { + for (x = 0; + x < + z->img_comp[n].h; + ++x) { + int x2 = + (i * z->img_comp[n] + .h + + x); + int y2 = + (j * z->img_comp[n] + .v + + y); + short *data = + z->img_comp[n] + .coeff + + 64 * (x2 + + y2 * z->img_comp[n] + .coeff_w); + if (!stbi__jpeg_decode_block_prog_dc( + z, + data, + &z->huff_dc + [z->img_comp[n] + .hd], + n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe( + z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; } - } } - } } -static int stbi__process_marker(stbi__jpeg* z, int m) +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) { - int L; - switch (m) { - case STBI__MARKER_none: // no marker found - return stbi__err("expected marker", "Corrupt JPEG"); + int i; + for (i = 0; i < 64; ++i) + data[i] *= dequant[i]; +} - case 0xDD: // DRI - specify restart interval - if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len", "Corrupt JPEG"); - z->restart_interval = stbi__get16be(z->s); - return 1; - - case 0xDB: // DQT - define quantization table - L = stbi__get16be(z->s) - 2; - while (L > 0) { - int q = stbi__get8(z->s); - int p = q >> 4, sixteen = (p != 0); - int t = q & 15, i; - if (p != 0 && p != 1) return stbi__err("bad DQT type", "Corrupt JPEG"); - if (t > 3) return stbi__err("bad DQT table", "Corrupt JPEG"); - - for (i = 0; i < 64; ++i) - z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); - L -= (sixteen ? 129 : 65); +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i, j, n; + for (n = 0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short *data = + z->img_comp[n].coeff + + 64 * (i + + j * z->img_comp[n] + .coeff_w); + stbi__jpeg_dequantize( + data, + z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel( + z->img_comp[n].data + + z->img_comp[n].w2 * j * + 8 + + i * 8, + z->img_comp[n].w2, data); + } + } + } } - return L == 0; +} - case 0xC4: // DHT - define huffman table - L = stbi__get16be(z->s) - 2; - while (L > 0) { - stbi_uc* v; - int sizes[16], i, n = 0; - int q = stbi__get8(z->s); - int tc = q >> 4; - int th = q & 15; - if (tc > 1 || th > 3) return stbi__err("bad DHT header", "Corrupt JPEG"); - for (i = 0; i < 16; ++i) { - sizes[i] = stbi__get8(z->s); - n += sizes[i]; - } - if (n > 256) return stbi__err("bad DHT header", "Corrupt JPEG"); // Loop over i < n would write past end of values! - L -= 17; - if (tc == 0) { - if (!stbi__build_huffman(z->huff_dc + th, sizes)) return 0; - v = z->huff_dc[th].values; - } - else { - if (!stbi__build_huffman(z->huff_ac + th, sizes)) return 0; - v = z->huff_ac[th].values; - } - for (i = 0; i < n; ++i) - v[i] = stbi__get8(z->s); - if (tc != 0) - stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); - L -= n; - } - return L == 0; - } +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker", "Corrupt JPEG"); - // check for comment block or APP blocks - if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { - L = stbi__get16be(z->s); - if (L < 2) { - if (m == 0xFE) - return stbi__err("bad COM len", "Corrupt JPEG"); - else - return stbi__err("bad APP len", "Corrupt JPEG"); - } - L -= 2; + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) + return stbi__err("bad DRI len", "Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; - if (m == 0xE0 && L >= 5) { // JFIF APP0 segment - static const unsigned char tag[5] = { 'J','F','I','F','\0' }; - int ok = 1; - int i; - for (i = 0; i < 5; ++i) - if (stbi__get8(z->s) != tag[i]) - ok = 0; - L -= 5; - if (ok) - z->jfif = 1; - } - else if (m == 0xEE && L >= 12) { // Adobe APP14 segment - static const unsigned char tag[6] = { 'A','d','o','b','e','\0' }; - int ok = 1; - int i; - for (i = 0; i < 6; ++i) - if (stbi__get8(z->s) != tag[i]) - ok = 0; - L -= 6; - if (ok) { - stbi__get8(z->s); // version - stbi__get16be(z->s); // flags0 - stbi__get16be(z->s); // flags1 - z->app14_color_transform = stbi__get8(z->s); // color transform - L -= 6; - } + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15, i; + if (p != 0 && p != 1) + return stbi__err("bad DQT type", + "Corrupt JPEG"); + if (t > 3) + return stbi__err("bad DQT table", + "Corrupt JPEG"); + + for (i = 0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = + (stbi__uint16)(sixteen ? stbi__get16be( + z->s) : + stbi__get8( + z->s)); + L -= (sixteen ? 129 : 65); + } + return L == 0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + stbi_uc *v; + int sizes[16], i, n = 0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) + return stbi__err("bad DHT header", + "Corrupt JPEG"); + for (i = 0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + if (n > 256) + return stbi__err( + "bad DHT header", + "Corrupt JPEG"); // Loop over i < n would write past end of values! + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc + th, + sizes)) + return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac + th, + sizes)) + return 0; + v = z->huff_ac[th].values; + } + for (i = 0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], + z->huff_ac + th); + L -= n; + } + return L == 0; } - stbi__skip(z->s, L); - return 1; - } + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len", "Corrupt JPEG"); + else + return stbi__err("bad APP len", "Corrupt JPEG"); + } + L -= 2; - return stbi__err("unknown marker", "Corrupt JPEG"); + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = { 'J', 'F', 'I', + 'F', '\0' }; + int ok = 1; + int i; + for (i = 0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = { 'A', 'd', 'o', + 'b', 'e', '\0' }; + int ok = 1; + int i; + for (i = 0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = + stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker", "Corrupt JPEG"); } // after we see SOS -static int stbi__process_scan_header(stbi__jpeg* z) +static int stbi__process_scan_header(stbi__jpeg *z) { - int i; - int Ls = stbi__get16be(z->s); - z->scan_n = stbi__get8(z->s); - if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int)z->s->img_n) return stbi__err("bad SOS component count", "Corrupt JPEG"); - if (Ls != 6 + 2 * z->scan_n) return stbi__err("bad SOS len", "Corrupt JPEG"); - for (i = 0; i < z->scan_n; ++i) { - int id = stbi__get8(z->s), which; - int q = stbi__get8(z->s); - for (which = 0; which < z->s->img_n; ++which) - if (z->img_comp[which].id == id) - break; - if (which == z->s->img_n) return 0; // no match - z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff", "Corrupt JPEG"); - z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff", "Corrupt JPEG"); - z->order[i] = which; - } - - { - int aa; - z->spec_start = stbi__get8(z->s); - z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 - aa = stbi__get8(z->s); - z->succ_high = (aa >> 4); - z->succ_low = (aa & 15); - if (z->progressive) { - if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) - return stbi__err("bad SOS", "Corrupt JPEG"); + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int)z->s->img_n) + return stbi__err("bad SOS component count", "Corrupt JPEG"); + if (Ls != 6 + 2 * z->scan_n) + return stbi__err("bad SOS len", "Corrupt JPEG"); + for (i = 0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) + return 0; // no match + z->img_comp[which].hd = q >> 4; + if (z->img_comp[which].hd > 3) + return stbi__err("bad DC huff", "Corrupt JPEG"); + z->img_comp[which].ha = q & 15; + if (z->img_comp[which].ha > 3) + return stbi__err("bad AC huff", "Corrupt JPEG"); + z->order[i] = which; } - else { - if (z->spec_start != 0) return stbi__err("bad SOS", "Corrupt JPEG"); - if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS", "Corrupt JPEG"); - z->spec_end = 63; - } - } - return 1; + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || + z->spec_start > z->spec_end || z->succ_high > 13 || + z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; } -static int stbi__free_jpeg_components(stbi__jpeg* z, int ncomp, int why) +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) { - int i; - for (i = 0; i < ncomp; ++i) { - if (z->img_comp[i].raw_data) { - STBI_FREE(z->img_comp[i].raw_data); - z->img_comp[i].raw_data = NULL; - z->img_comp[i].data = NULL; + int i; + for (i = 0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } } - if (z->img_comp[i].raw_coeff) { - STBI_FREE(z->img_comp[i].raw_coeff); - z->img_comp[i].raw_coeff = 0; - z->img_comp[i].coeff = 0; - } - if (z->img_comp[i].linebuf) { - STBI_FREE(z->img_comp[i].linebuf); - z->img_comp[i].linebuf = NULL; - } - } - return why; + return why; } -static int stbi__process_frame_header(stbi__jpeg* z, int scan) +static int stbi__process_frame_header(stbi__jpeg *z, int scan) { - stbi__context* s = z->s; - int Lf, p, i, q, h_max = 1, v_max = 1, c; - Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len", "Corrupt JPEG"); // JPEG - p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit", "JPEG format not supported: 8-bit only"); // JPEG baseline - s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG - s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width", "Corrupt JPEG"); // JPEG requires - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large", "Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large", "Very large image (corrupt?)"); - c = stbi__get8(s); - if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count", "Corrupt JPEG"); - s->img_n = c; - for (i = 0; i < c; ++i) { - z->img_comp[i].data = NULL; - z->img_comp[i].linebuf = NULL; - } - - if (Lf != 8 + 3 * s->img_n) return stbi__err("bad SOF len", "Corrupt JPEG"); - - z->rgb = 0; - for (i = 0; i < s->img_n; ++i) { - static const unsigned char rgb[3] = { 'R', 'G', 'B' }; - z->img_comp[i].id = stbi__get8(s); - if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) - ++z->rgb; - q = stbi__get8(s); - z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H", "Corrupt JPEG"); - z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V", "Corrupt JPEG"); - z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ", "Corrupt JPEG"); - } - - if (scan != STBI__SCAN_load) return 1; - - if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); - - for (i = 0; i < s->img_n; ++i) { - if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; - if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; - } - - // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios - // and I've never seen a non-corrupted JPEG file actually use them - for (i = 0; i < s->img_n; ++i) { - if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H", "Corrupt JPEG"); - if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V", "Corrupt JPEG"); - } - - // compute interleaved mcu info - z->img_h_max = h_max; - z->img_v_max = v_max; - z->img_mcu_w = h_max * 8; - z->img_mcu_h = v_max * 8; - // these sizes can't be more than 17 bits - z->img_mcu_x = (s->img_x + z->img_mcu_w - 1) / z->img_mcu_w; - z->img_mcu_y = (s->img_y + z->img_mcu_h - 1) / z->img_mcu_h; - - for (i = 0; i < s->img_n; ++i) { - // number of effective pixels (e.g. for non-interleaved MCU) - z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max - 1) / h_max; - z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max - 1) / v_max; - // to simplify generation, we'll allocate enough memory to decode - // the bogus oversized data from using interleaved MCUs and their - // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't - // discard the extra data until colorspace conversion - // - // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) - // so these muls can't overflow with 32-bit ints (which we require) - z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; - z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; - z->img_comp[i].coeff = 0; - z->img_comp[i].raw_coeff = 0; - z->img_comp[i].linebuf = NULL; - z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); - if (z->img_comp[i].raw_data == NULL) - return stbi__free_jpeg_components(z, i + 1, stbi__err("outofmem", "Out of memory")); - // align blocks for idct using mmx/sse - z->img_comp[i].data = (stbi_uc*)(((size_t)z->img_comp[i].raw_data + 15) & ~15); - if (z->progressive) { - // w2, h2 are multiples of 8 (see above) - z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; - z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; - z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); - if (z->img_comp[i].raw_coeff == NULL) - return stbi__free_jpeg_components(z, i + 1, stbi__err("outofmem", "Out of memory")); - z->img_comp[i].coeff = (short*)(((size_t)z->img_comp[i].raw_coeff + 15) & ~15); + stbi__context *s = z->s; + int Lf, p, i, q, h_max = 1, v_max = 1, c; + Lf = stbi__get16be(s); + if (Lf < 11) + return stbi__err("bad SOF len", "Corrupt JPEG"); // JPEG + p = stbi__get8(s); + if (p != 8) + return stbi__err( + "only 8-bit", + "JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); + if (s->img_y == 0) + return stbi__err( + "no header height", + "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); + if (s->img_x == 0) + return stbi__err("0 width", "Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) + return stbi__err("bad component count", "Corrupt JPEG"); + s->img_n = c; + for (i = 0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; } - } - return 1; + if (Lf != 8 + 3 * s->img_n) + return stbi__err("bad SOF len", "Corrupt JPEG"); + + z->rgb = 0; + for (i = 0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); + if (!z->img_comp[i].h || z->img_comp[i].h > 4) + return stbi__err("bad H", "Corrupt JPEG"); + z->img_comp[i].v = q & 15; + if (!z->img_comp[i].v || z->img_comp[i].v > 4) + return stbi__err("bad V", "Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); + if (z->img_comp[i].tq > 3) + return stbi__err("bad TQ", "Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) + return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) + return stbi__err("too large", "Image too large to decode"); + + for (i = 0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) + h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) + v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i = 0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) + return stbi__err("bad H", "Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) + return stbi__err("bad V", "Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w - 1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h - 1) / z->img_mcu_h; + + for (i = 0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = + (s->img_x * z->img_comp[i].h + h_max - 1) / h_max; + z->img_comp[i].y = + (s->img_y * z->img_comp[i].v + v_max - 1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2( + z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components( + z, i + 1, + stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = + (stbi_uc *)(((size_t)z->img_comp[i].raw_data + 15) & + ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3( + z->img_comp[i].w2, z->img_comp[i].h2, + sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components( + z, i + 1, + stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = + (short *)(((size_t)z->img_comp[i].raw_coeff + + 15) & + ~15); + } + } + + return 1; } // use comparisons since in some cases we handle more than one case (e.g. SOF) -#define stbi__DNL(x) ((x) == 0xdc) -#define stbi__SOI(x) ((x) == 0xd8) -#define stbi__EOI(x) ((x) == 0xd9) -#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) -#define stbi__SOS(x) ((x) == 0xda) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) -#define stbi__SOF_progressive(x) ((x) == 0xc2) +#define stbi__SOF_progressive(x) ((x) == 0xc2) -static int stbi__decode_jpeg_header(stbi__jpeg* z, int scan) +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) { - int m; - z->jfif = 0; - z->app14_color_transform = -1; // valid values are 0,1,2 - z->marker = STBI__MARKER_none; // initialize cached marker to empty - m = stbi__get_marker(z); - if (!stbi__SOI(m)) return stbi__err("no SOI", "Corrupt JPEG"); - if (scan == STBI__SCAN_type) return 1; - m = stbi__get_marker(z); - while (!stbi__SOF(m)) { - if (!stbi__process_marker(z, m)) return 0; + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty m = stbi__get_marker(z); - while (m == STBI__MARKER_none) { - // some files have extra padding after their blocks, so ok, we'll scan - if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); - m = stbi__get_marker(z); + if (!stbi__SOI(m)) + return stbi__err("no SOI", "Corrupt JPEG"); + if (scan == STBI__SCAN_type) + return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z, m)) + return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) + return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } } - } - z->progressive = stbi__SOF_progressive(m); - if (!stbi__process_frame_header(z, scan)) return 0; - return 1; + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) + return 0; + return 1; } -static int stbi__skip_jpeg_junk_at_end(stbi__jpeg* j) +static int stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) { - // some JPEGs have junk at end, skip over it but if we find what looks - // like a valid marker, resume there - while (!stbi__at_eof(j->s)) { - int x = stbi__get8(j->s); - while (x == 255) { // might be a marker - if (stbi__at_eof(j->s)) return STBI__MARKER_none; - x = stbi__get8(j->s); - if (x != 0x00 && x != 0xff) { - // not a stuffed zero or lead-in to another marker, looks - // like an actual marker, return it - return x; - } - // stuffed zero has x=0 now which ends the loop, meaning we go - // back to regular scan loop. - // repeated 0xff keeps trying to read the next byte of the marker. + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + while (x == 255) { // might be a marker + if (stbi__at_eof(j->s)) + return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } } - } - return STBI__MARKER_none; + return STBI__MARKER_none; } // decode image to YCbCr format -static int stbi__decode_jpeg_image(stbi__jpeg* j) +static int stbi__decode_jpeg_image(stbi__jpeg *j) { - int m; - for (m = 0; m < 4; m++) { - j->img_comp[m].raw_data = NULL; - j->img_comp[m].raw_coeff = NULL; - } - j->restart_interval = 0; - if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; - m = stbi__get_marker(j); - while (!stbi__EOI(m)) { - if (stbi__SOS(m)) { - if (!stbi__process_scan_header(j)) return 0; - if (!stbi__parse_entropy_coded_data(j)) return 0; - if (j->marker == STBI__MARKER_none) { - j->marker = stbi__skip_jpeg_junk_at_end(j); - // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 - } - m = stbi__get_marker(j); - if (STBI__RESTART(m)) - m = stbi__get_marker(j); + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; } - else if (stbi__DNL(m)) { - int Ld = stbi__get16be(j->s); - stbi__uint32 NL = stbi__get16be(j->s); - if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); - if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); - m = stbi__get_marker(j); + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) + return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) + return 0; + if (!stbi__parse_entropy_coded_data(j)) + return 0; + if (j->marker == STBI__MARKER_none) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) + return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) + return stbi__err("bad DNL height", + "Corrupt JPEG"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) + return 1; + m = stbi__get_marker(j); + } } - else { - if (!stbi__process_marker(j, m)) return 1; - m = stbi__get_marker(j); - } - } - if (j->progressive) - stbi__jpeg_finish(j); - return 1; + if (j->progressive) + stbi__jpeg_finish(j); + return 1; } // static jfif-centered resampling (across block boundaries) -typedef stbi_uc* (*resample_row_func)(stbi_uc* out, stbi_uc* in0, stbi_uc* in1, - int w, int hs); +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); -#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) +#define stbi__div4(x) ((stbi_uc)((x) >> 2)) -static stbi_uc* resample_row_1(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, + int w, int hs) { - STBI_NOTUSED(out); - STBI_NOTUSED(in_far); - STBI_NOTUSED(w); - STBI_NOTUSED(hs); - return in_near; + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; } -static stbi_uc* stbi__resample_row_v_2(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +static stbi_uc *stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { - // need to generate two samples vertically for every one in input - int i; - STBI_NOTUSED(hs); - for (i = 0; i < w; ++i) - out[i] = stbi__div4(3 * in_near[i] + in_far[i] + 2); - return out; -} - -static stbi_uc* stbi__resample_row_h_2(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) -{ - // need to generate two samples horizontally for every one in input - int i; - stbi_uc* input = in_near; - - if (w == 1) { - // if only one sample, can't do any interpolation - out[0] = out[1] = input[0]; + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i = 0; i < w; ++i) + out[i] = stbi__div4(3 * in_near[i] + in_far[i] + 2); return out; - } - - out[0] = input[0]; - out[1] = stbi__div4(input[0] * 3 + input[1] + 2); - for (i = 1; i < w - 1; ++i) { - int n = 3 * input[i] + 2; - out[i * 2 + 0] = stbi__div4(n + input[i - 1]); - out[i * 2 + 1] = stbi__div4(n + input[i + 1]); - } - out[i * 2 + 0] = stbi__div4(input[w - 2] * 3 + input[w - 1] + 2); - out[i * 2 + 1] = input[w - 1]; - - STBI_NOTUSED(in_far); - STBI_NOTUSED(hs); - - return out; } -#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) - -static stbi_uc* stbi__resample_row_hv_2(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +static stbi_uc *stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { - // need to generate 2x2 samples for every one in input - int i, t0, t1; - if (w == 1) { - out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0] * 3 + input[1] + 2); + for (i = 1; i < w - 1; ++i) { + int n = 3 * input[i] + 2; + out[i * 2 + 0] = stbi__div4(n + input[i - 1]); + out[i * 2 + 1] = stbi__div4(n + input[i + 1]); + } + out[i * 2 + 0] = stbi__div4(input[w - 2] * 3 + input[w - 1] + 2); + out[i * 2 + 1] = input[w - 1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + return out; - } +} - t1 = 3 * in_near[0] + in_far[0]; - out[0] = stbi__div4(t1 + 2); - for (i = 1; i < w; ++i) { - t0 = t1; - t1 = 3 * in_near[i] + in_far[i]; - out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); - out[i * 2] = stbi__div16(3 * t1 + t0 + 8); - } - out[w * 2 - 1] = stbi__div4(t1 + 2); +#define stbi__div16(x) ((stbi_uc)((x) >> 4)) - STBI_NOTUSED(hs); +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i, t0, t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } - return out; + t1 = 3 * in_near[0] + in_far[0]; + out[0] = stbi__div4(t1 + 2); + for (i = 1; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; } #if defined(STBI_SSE2) || defined(STBI_NEON) -static stbi_uc* stbi__resample_row_hv_2_simd(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { - // need to generate 2x2 samples for every one in input - int i = 0, t0, t1; + // need to generate 2x2 samples for every one in input + int i = 0, t0, t1; - if (w == 1) { - out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); - return out; - } + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } - t1 = 3 * in_near[0] + in_far[0]; - // process groups of 8 pixels for as long as we can. - // note we can't handle the last pixel in a row in this loop - // because we need to handle the filter boundary conditions. - for (; i < ((w - 1) & ~7); i += 8) { + t1 = 3 * in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w - 1) & ~7); i += 8) { #if defined(STBI_SSE2) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - __m128i zero = _mm_setzero_si128(); - __m128i farb = _mm_loadl_epi64((__m128i*) (in_far + i)); - __m128i nearb = _mm_loadl_epi64((__m128i*) (in_near + i)); - __m128i farw = _mm_unpacklo_epi8(farb, zero); - __m128i nearw = _mm_unpacklo_epi8(nearb, zero); - __m128i diff = _mm_sub_epi16(farw, nearw); - __m128i nears = _mm_slli_epi16(nearw, 2); - __m128i curr = _mm_add_epi16(nears, diff); // current row + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *)(in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *)(in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - __m128i prv0 = _mm_slli_si128(curr, 2); - __m128i nxt0 = _mm_srli_si128(curr, 2); - __m128i prev = _mm_insert_epi16(prv0, t1, 0); - __m128i next = _mm_insert_epi16(nxt0, 3 * in_near[i + 8] + in_far[i + 8], 7); + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16( + nxt0, 3 * in_near[i + 8] + in_far[i + 8], 7); - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - __m128i bias = _mm_set1_epi16(8); - __m128i curs = _mm_slli_epi16(curr, 2); - __m128i prvd = _mm_sub_epi16(prev, curr); - __m128i nxtd = _mm_sub_epi16(next, curr); - __m128i curb = _mm_add_epi16(curs, bias); - __m128i even = _mm_add_epi16(prvd, curb); - __m128i odd = _mm_add_epi16(nxtd, curb); + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); - // interleave even and odd pixels, then undo scaling. - __m128i int0 = _mm_unpacklo_epi16(even, odd); - __m128i int1 = _mm_unpackhi_epi16(even, odd); - __m128i de0 = _mm_srli_epi16(int0, 4); - __m128i de1 = _mm_srli_epi16(int1, 4); + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); - // pack and write output - __m128i outv = _mm_packus_epi16(de0, de1); - _mm_storeu_si128((__m128i*) (out + i * 2), outv); + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *)(out + i * 2), outv); #elif defined(STBI_NEON) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - uint8x8_t farb = vld1_u8(in_far + i); - uint8x8_t nearb = vld1_u8(in_near + i); - int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); - int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); - int16x8_t curr = vaddq_s16(nears, diff); // current row + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - int16x8_t prv0 = vextq_s16(curr, curr, 7); - int16x8_t nxt0 = vextq_s16(curr, curr, 1); - int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); - int16x8_t next = vsetq_lane_s16(3 * in_near[i + 8] + in_far[i + 8], nxt0, 7); + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16( + 3 * in_near[i + 8] + in_far[i + 8], nxt0, 7); - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - int16x8_t curs = vshlq_n_s16(curr, 2); - int16x8_t prvd = vsubq_s16(prev, curr); - int16x8_t nxtd = vsubq_s16(next, curr); - int16x8_t even = vaddq_s16(curs, prvd); - int16x8_t odd = vaddq_s16(curs, nxtd); + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); - // undo scaling and round, then store with even/odd phases interleaved - uint8x8x2_t o; - o.val[0] = vqrshrun_n_s16(even, 4); - o.val[1] = vqrshrun_n_s16(odd, 4); - vst2_u8(out + i * 2, o); + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i * 2, o); #endif - // "previous" value for next iter - t1 = 3 * in_near[i + 7] + in_far[i + 7]; - } + // "previous" value for next iter + t1 = 3 * in_near[i + 7] + in_far[i + 7]; + } - t0 = t1; - t1 = 3 * in_near[i] + in_far[i]; - out[i * 2] = stbi__div16(3 * t1 + t0 + 8); - - for (++i; i < w; ++i) { t0 = t1; t1 = 3 * in_near[i] + in_far[i]; - out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); out[i * 2] = stbi__div16(3 * t1 + t0 + 8); - } - out[w * 2 - 1] = stbi__div4(t1 + 2); - STBI_NOTUSED(hs); + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); - return out; + STBI_NOTUSED(hs); + + return out; } #endif -static stbi_uc* stbi__resample_row_generic(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { - // resample with nearest-neighbor - int i, j; - STBI_NOTUSED(in_far); - for (i = 0; i < w; ++i) - for (j = 0; j < hs; ++j) - out[i * hs + j] = in_near[i]; - return out; + // resample with nearest-neighbor + int i, j; + STBI_NOTUSED(in_far); + for (i = 0; i < w; ++i) + for (j = 0; j < hs; ++j) + out[i * hs + j] = in_near[i]; + return out; } // this is a reduced-precision calculation of YCbCr-to-RGB introduced // to make sure the code produces the same results in both SIMD and scalar -#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) -static void stbi__YCbCr_to_RGB_row(stbi_uc* out, const stbi_uc* y, const stbi_uc* pcb, const stbi_uc* pcr, int count, int step) +#define stbi__float2fixed(x) (((int)((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, + const stbi_uc *pcb, const stbi_uc *pcr, + int count, int step) { - int i; - for (i = 0; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1 << 19); // rounding - int r, g, b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr * stbi__float2fixed(1.40200f); - g = y_fixed + (cr * -stbi__float2fixed(0.71414f)) + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb * stbi__float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned)r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned)g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned)b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } + int i; + for (i = 0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + (cr * -stbi__float2fixed(0.71414f)) + + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } } #if defined(STBI_SSE2) || defined(STBI_NEON) -static void stbi__YCbCr_to_RGB_simd(stbi_uc* out, stbi_uc const* y, stbi_uc const* pcb, stbi_uc const* pcr, int count, int step) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, + stbi_uc const *pcb, stbi_uc const *pcr, + int count, int step) { - int i = 0; + int i = 0; #ifdef STBI_SSE2 - // step == 3 is pretty ugly on the final interleave, and i'm not convinced - // it's useful in practice (you wouldn't use it for textures, for example). - // so just accelerate step == 4 case. - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - __m128i signflip = _mm_set1_epi8(-0x80); - __m128i cr_const0 = _mm_set1_epi16((short)(1.40200f * 4096.0f + 0.5f)); - __m128i cr_const1 = _mm_set1_epi16(-(short)(0.71414f * 4096.0f + 0.5f)); - __m128i cb_const0 = _mm_set1_epi16(-(short)(0.34414f * 4096.0f + 0.5f)); - __m128i cb_const1 = _mm_set1_epi16((short)(1.77200f * 4096.0f + 0.5f)); - __m128i y_bias = _mm_set1_epi8((char)(unsigned char)128); - __m128i xw = _mm_set1_epi16(255); // alpha channel + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = + _mm_set1_epi16((short)(1.40200f * 4096.0f + 0.5f)); + __m128i cr_const1 = + _mm_set1_epi16(-(short)(0.71414f * 4096.0f + 0.5f)); + __m128i cb_const0 = + _mm_set1_epi16(-(short)(0.34414f * 4096.0f + 0.5f)); + __m128i cb_const1 = + _mm_set1_epi16((short)(1.77200f * 4096.0f + 0.5f)); + __m128i y_bias = _mm_set1_epi8((char)(unsigned char)128); + __m128i xw = _mm_set1_epi16(255); // alpha channel - for (; i + 7 < count; i += 8) { - // load - __m128i y_bytes = _mm_loadl_epi64((__m128i*) (y + i)); - __m128i cr_bytes = _mm_loadl_epi64((__m128i*) (pcr + i)); - __m128i cb_bytes = _mm_loadl_epi64((__m128i*) (pcb + i)); - __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 - __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + for (; i + 7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *)(y + i)); + __m128i cr_bytes = + _mm_loadl_epi64((__m128i *)(pcr + i)); + __m128i cb_bytes = + _mm_loadl_epi64((__m128i *)(pcb + i)); + __m128i cr_biased = + _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = + _mm_xor_si128(cb_bytes, signflip); // -128 - // unpack to short (and left-shift cr, cb by 8) - __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); - __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); - __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), + cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), + cb_biased); - // color transform - __m128i yws = _mm_srli_epi16(yw, 4); - __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); - __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); - __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); - __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); - __m128i rws = _mm_add_epi16(cr0, yws); - __m128i gwt = _mm_add_epi16(cb0, yws); - __m128i bws = _mm_add_epi16(yws, cb1); - __m128i gws = _mm_add_epi16(gwt, cr1); + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); - // descale - __m128i rw = _mm_srai_epi16(rws, 4); - __m128i bw = _mm_srai_epi16(bws, 4); - __m128i gw = _mm_srai_epi16(gws, 4); + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); - // back to byte, set up for transpose - __m128i brb = _mm_packus_epi16(rw, bw); - __m128i gxb = _mm_packus_epi16(gw, xw); + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); - // transpose to interleave channels - __m128i t0 = _mm_unpacklo_epi8(brb, gxb); - __m128i t1 = _mm_unpackhi_epi8(brb, gxb); - __m128i o0 = _mm_unpacklo_epi16(t0, t1); - __m128i o1 = _mm_unpackhi_epi16(t0, t1); + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); - // store - _mm_storeu_si128((__m128i*) (out + 0), o0); - _mm_storeu_si128((__m128i*) (out + 16), o1); - out += 32; + // store + _mm_storeu_si128((__m128i *)(out + 0), o0); + _mm_storeu_si128((__m128i *)(out + 16), o1); + out += 32; + } } - } #endif #ifdef STBI_NEON - // in this version, step=3 support would be easy to add. but is there demand? - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - uint8x8_t signflip = vdup_n_u8(0x80); - int16x8_t cr_const0 = vdupq_n_s16((short)(1.40200f * 4096.0f + 0.5f)); - int16x8_t cr_const1 = vdupq_n_s16(-(short)(0.71414f * 4096.0f + 0.5f)); - int16x8_t cb_const0 = vdupq_n_s16(-(short)(0.34414f * 4096.0f + 0.5f)); - int16x8_t cb_const1 = vdupq_n_s16((short)(1.77200f * 4096.0f + 0.5f)); + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = + vdupq_n_s16((short)(1.40200f * 4096.0f + 0.5f)); + int16x8_t cr_const1 = + vdupq_n_s16(-(short)(0.71414f * 4096.0f + 0.5f)); + int16x8_t cb_const0 = + vdupq_n_s16(-(short)(0.34414f * 4096.0f + 0.5f)); + int16x8_t cb_const1 = + vdupq_n_s16((short)(1.77200f * 4096.0f + 0.5f)); - for (; i + 7 < count; i += 8) { - // load - uint8x8_t y_bytes = vld1_u8(y + i); - uint8x8_t cr_bytes = vld1_u8(pcr + i); - uint8x8_t cb_bytes = vld1_u8(pcb + i); - int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); - int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + for (; i + 7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = + vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = + vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); - // expand to s16 - int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); - int16x8_t crw = vshll_n_s8(cr_biased, 7); - int16x8_t cbw = vshll_n_s8(cb_biased, 7); + // expand to s16 + int16x8_t yws = + vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); - // color transform - int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); - int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); - int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); - int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); - int16x8_t rws = vaddq_s16(yws, cr0); - int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); - int16x8_t bws = vaddq_s16(yws, cb1); + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); - // undo scaling, round, convert to byte - uint8x8x4_t o; - o.val[0] = vqrshrun_n_s16(rws, 4); - o.val[1] = vqrshrun_n_s16(gws, 4); - o.val[2] = vqrshrun_n_s16(bws, 4); - o.val[3] = vdup_n_u8(255); + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); - // store, interleaving r/g/b/a - vst4_u8(out, o); - out += 8 * 4; + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8 * 4; + } } - } #endif - for (; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1 << 19); // rounding - int r, g, b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr * stbi__float2fixed(1.40200f); - g = y_fixed + cr * -stbi__float2fixed(0.71414f) + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb * stbi__float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned)r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned)g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned)b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + cr * -stbi__float2fixed(0.71414f) + + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } } #endif // set up the kernels -static void stbi__setup_jpeg(stbi__jpeg* j) +static void stbi__setup_jpeg(stbi__jpeg *j) { - j->idct_block_kernel = stbi__idct_block; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; #ifdef STBI_SSE2 - if (stbi__sse2_available()) { - j->idct_block_kernel = stbi__idct_simd; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; - } + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } #endif #ifdef STBI_NEON - j->idct_block_kernel = stbi__idct_simd; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; #endif } // clean up the temporary component buffers -static void stbi__cleanup_jpeg(stbi__jpeg* j) +static void stbi__cleanup_jpeg(stbi__jpeg *j) { - stbi__free_jpeg_components(j, j->s->img_n, 0); + stbi__free_jpeg_components(j, j->s->img_n, 0); } -typedef struct -{ - resample_row_func resample; - stbi_uc* line0, * line1; - int hs, vs; // expansion factor in each axis - int w_lores; // horizontal pixels pre-expansion - int ystep; // how far through vertical expansion we are - int ypos; // which pre-expansion row we're on +typedef struct { + resample_row_func resample; + stbi_uc *line0, *line1; + int hs, vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on } stbi__resample; // fast 0..255 * 0..255 => 0..255 rounded multiplication static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) { - unsigned int t = x * y + 128; - return (stbi_uc)((t + (t >> 8)) >> 8); + unsigned int t = x * y + 128; + return (stbi_uc)((t + (t >> 8)) >> 8); } -static stbi_uc* load_jpeg_image(stbi__jpeg* z, int* out_x, int* out_y, int* comp, int req_comp) +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, + int *comp, int req_comp) { - int n, decode_n, is_rgb; - z->s->img_n = 0; // make stbi__cleanup_jpeg safe + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe - // validate req_comp - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + // validate req_comp + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); - // load a jpeg image from whichever source, but leave in YCbCr format - if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } - - // determine actual number of components to generate - n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; - - is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); - - if (z->s->img_n == 3 && n < 3 && !is_rgb) - decode_n = 1; - else - decode_n = z->s->img_n; - - // nothing to do if no components requested; check this now to avoid - // accessing uninitialized coutput[0] later - if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } - - // resample and color-convert - { - int k; - unsigned int i, j; - stbi_uc* output; - stbi_uc* coutput[4] = { NULL, NULL, NULL, NULL }; - - stbi__resample res_comp[4]; - - for (k = 0; k < decode_n; ++k) { - stbi__resample* r = &res_comp[k]; - - // allocate line buffer big enough for upsampling off the edges - // with upsample factor of 4 - z->img_comp[k].linebuf = (stbi_uc*)stbi__malloc(z->s->img_x + 3); - if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - r->hs = z->img_h_max / z->img_comp[k].h; - r->vs = z->img_v_max / z->img_comp[k].v; - r->ystep = r->vs >> 1; - r->w_lores = (z->s->img_x + r->hs - 1) / r->hs; - r->ypos = 0; - r->line0 = r->line1 = z->img_comp[k].data; - - if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; - else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; - else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; - else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; - else r->resample = stbi__resample_row_generic; + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { + stbi__cleanup_jpeg(z); + return NULL; } - // can't error after this so, this is safe - output = (stbi_uc*)stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); - if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; - // now go ahead and resample - for (j = 0; j < z->s->img_y; ++j) { - stbi_uc* out = output + n * z->s->img_x * j; - for (k = 0; k < decode_n; ++k) { - stbi__resample* r = &res_comp[k]; - int y_bot = r->ystep >= (r->vs >> 1); - coutput[k] = r->resample(z->img_comp[k].linebuf, - y_bot ? r->line1 : r->line0, - y_bot ? r->line0 : r->line1, - r->w_lores, r->hs); - if (++r->ystep >= r->vs) { - r->ystep = 0; - r->line0 = r->line1; - if (++r->ypos < z->img_comp[k].y) - r->line1 += z->img_comp[k].w2; + is_rgb = z->s->img_n == 3 && + (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { + stbi__cleanup_jpeg(z); + return NULL; + } + + // resample and color-convert + { + int k; + unsigned int i, j; + stbi_uc *output; + stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k = 0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = + (stbi_uc *)stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", + "Out of memory"); + } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs - 1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) + r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) + r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) + r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) + r->resample = z->resample_row_hv_2_kernel; + else + r->resample = stbi__resample_row_generic; } - } - if (n >= 3) { - stbi_uc* y = coutput[0]; - if (z->s->img_n == 3) { - if (is_rgb) { - for (i = 0; i < z->s->img_x; ++i) { - out[0] = y[i]; - out[1] = coutput[1][i]; - out[2] = coutput[2][i]; - out[3] = 255; - out += n; - } - } - else { - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } + + // can't error after this so, this is safe + output = (stbi_uc *)stbi__malloc_mad3(n, z->s->img_x, + z->s->img_y, 1); + if (!output) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); } - else if (z->s->img_n == 4) { - if (z->app14_color_transform == 0) { // CMYK - for (i = 0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - out[0] = stbi__blinn_8x8(coutput[0][i], m); - out[1] = stbi__blinn_8x8(coutput[1][i], m); - out[2] = stbi__blinn_8x8(coutput[2][i], m); - out[3] = 255; - out += n; + + // now go ahead and resample + for (j = 0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k = 0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = + r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } } - } - else if (z->app14_color_transform == 2) { // YCCK - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - for (i = 0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - out[0] = stbi__blinn_8x8(255 - out[0], m); - out[1] = stbi__blinn_8x8(255 - out[1], m); - out[2] = stbi__blinn_8x8(255 - out[2], m); - out += n; - } - } - else { // YCbCr + alpha? Ignore the fourth channel for now - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } - } - else - for (i = 0; i < z->s->img_x; ++i) { - out[0] = out[1] = out[2] = y[i]; - out[3] = 255; // not used if n==3 - out += n; - } - } - else { - if (is_rgb) { - if (n == 1) - for (i = 0; i < z->s->img_x; ++i) - *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); - else { - for (i = 0; i < z->s->img_x; ++i, out += 2) { - out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); - out[1] = 255; + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i = 0; i < z->s->img_x; + ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel( + out, y, coutput[1], + coutput[2], z->s->img_x, + n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == + 0) { // CMYK + for (i = 0; i < z->s->img_x; + ++i) { + stbi_uc m = + coutput[3][i]; + out[0] = stbi__blinn_8x8( + coutput[0][i], + m); + out[1] = stbi__blinn_8x8( + coutput[1][i], + m); + out[2] = stbi__blinn_8x8( + coutput[2][i], + m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == + 2) { // YCCK + z->YCbCr_to_RGB_kernel( + out, y, coutput[1], + coutput[2], z->s->img_x, + n); + for (i = 0; i < z->s->img_x; + ++i) { + stbi_uc m = + coutput[3][i]; + out[0] = stbi__blinn_8x8( + 255 - out[0], + m); + out[1] = stbi__blinn_8x8( + 255 - out[1], + m); + out[2] = stbi__blinn_8x8( + 255 - out[2], + m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel( + out, y, coutput[1], + coutput[2], z->s->img_x, + n); + } + } else + for (i = 0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = + 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i = 0; i < z->s->img_x; + ++i) + *out++ = stbi__compute_y( + coutput[0][i], + coutput[1][i], + coutput[2][i]); + else { + for (i = 0; i < z->s->img_x; + ++i, out += 2) { + out[0] = stbi__compute_y( + coutput[0][i], + coutput[1][i], + coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && + z->app14_color_transform == 0) { + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8( + coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8( + coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8( + coutput[2][i], m); + out[0] = stbi__compute_y(r, g, + b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && + z->app14_color_transform == 2) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8( + 255 - coutput[0][i], + coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i = 0; i < z->s->img_x; + ++i) + out[i] = y[i]; + else + for (i = 0; i < z->s->img_x; + ++i) { + *out++ = y[i]; + *out++ = 255; + } + } } - } - } - else if (z->s->img_n == 4 && z->app14_color_transform == 0) { - for (i = 0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); - stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); - stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); - out[0] = stbi__compute_y(r, g, b); - out[1] = 255; - out += n; - } - } - else if (z->s->img_n == 4 && z->app14_color_transform == 2) { - for (i = 0; i < z->s->img_x; ++i) { - out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); - out[1] = 255; - out += n; - } - } - else { - stbi_uc* y = coutput[0]; - if (n == 1) - for (i = 0; i < z->s->img_x; ++i) out[i] = y[i]; - else - for (i = 0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } } - } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) + *comp = z->s->img_n >= 3 ? + 3 : + 1; // report original components, not output + return output; } - stbi__cleanup_jpeg(z); - *out_x = z->s->img_x; - *out_y = z->s->img_y; - if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output - return output; - } } -static void* stbi__jpeg_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { - unsigned char* result; - stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); - if (!j) return stbi__errpuc("outofmem", "Out of memory"); - memset(j, 0, sizeof(stbi__jpeg)); - STBI_NOTUSED(ri); - j->s = s; - stbi__setup_jpeg(j); - result = load_jpeg_image(j, x, y, comp, req_comp); - STBI_FREE(j); - return result; + unsigned char *result; + stbi__jpeg *j = (stbi__jpeg *)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) + return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x, y, comp, req_comp); + STBI_FREE(j); + return result; } -static int stbi__jpeg_test(stbi__context* s) +static int stbi__jpeg_test(stbi__context *s) { - int r; - stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); - if (!j) return stbi__err("outofmem", "Out of memory"); - memset(j, 0, sizeof(stbi__jpeg)); - j->s = s; - stbi__setup_jpeg(j); - r = stbi__decode_jpeg_header(j, STBI__SCAN_type); - stbi__rewind(s); - STBI_FREE(j); - return r; + int r; + stbi__jpeg *j = (stbi__jpeg *)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) + return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; } -static int stbi__jpeg_info_raw(stbi__jpeg* j, int* x, int* y, int* comp) +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) { - if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { - stbi__rewind(j->s); - return 0; - } - if (x) *x = j->s->img_x; - if (y) *y = j->s->img_y; - if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; - return 1; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind(j->s); + return 0; + } + if (x) + *x = j->s->img_x; + if (y) + *y = j->s->img_y; + if (comp) + *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; } -static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp) +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) { - int result; - stbi__jpeg* j = (stbi__jpeg*)(stbi__malloc(sizeof(stbi__jpeg))); - if (!j) return stbi__err("outofmem", "Out of memory"); - memset(j, 0, sizeof(stbi__jpeg)); - j->s = s; - result = stbi__jpeg_info_raw(j, x, y, comp); - STBI_FREE(j); - return result; + int result; + stbi__jpeg *j = (stbi__jpeg *)(stbi__malloc(sizeof(stbi__jpeg))); + if (!j) + return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; } #endif @@ -3579,84 +4349,87 @@ static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp) #ifndef STBI_NO_ZLIB // fast-way is faster to check than jpeg huffman, but slow way is slower -#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables -#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) #define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet // zlib-style huffman encoding // (jpegs packs from left, zlib from right, so can't share code) -typedef struct -{ - stbi__uint16 fast[1 << STBI__ZFAST_BITS]; - stbi__uint16 firstcode[16]; - int maxcode[17]; - stbi__uint16 firstsymbol[16]; - stbi_uc size[STBI__ZNSYMS]; - stbi__uint16 value[STBI__ZNSYMS]; +typedef struct { + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; } stbi__zhuffman; stbi_inline static int stbi__bitreverse16(int n) { - n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); - n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); - n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); - n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); - return n; + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; } stbi_inline static int stbi__bit_reverse(int v, int bits) { - STBI_ASSERT(bits <= 16); - // to bit reverse n bits, reverse 16 and shift - // e.g. 11 bits, bit reverse and shift away 5 - return stbi__bitreverse16(v) >> (16 - bits); + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16 - bits); } -static int stbi__zbuild_huffman(stbi__zhuffman* z, const stbi_uc* sizelist, int num) +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, + int num) { - int i, k = 0; - int code, next_code[16], sizes[17]; + int i, k = 0; + int code, next_code[16], sizes[17]; - // DEFLATE spec for generating codes - memset(sizes, 0, sizeof(sizes)); - memset(z->fast, 0, sizeof(z->fast)); - for (i = 0; i < num; ++i) - ++sizes[sizelist[i]]; - sizes[0] = 0; - for (i = 1; i < 16; ++i) - if (sizes[i] > (1 << i)) - return stbi__err("bad sizes", "Corrupt PNG"); - code = 0; - for (i = 1; i < 16; ++i) { - next_code[i] = code; - z->firstcode[i] = (stbi__uint16)code; - z->firstsymbol[i] = (stbi__uint16)k; - code = (code + sizes[i]); - if (sizes[i]) - if (code - 1 >= (1 << i)) return stbi__err("bad codelengths", "Corrupt PNG"); - z->maxcode[i] = code << (16 - i); // preshift for inner loop - code <<= 1; - k += sizes[i]; - } - z->maxcode[16] = 0x10000; // sentinel - for (i = 0; i < num; ++i) { - int s = sizelist[i]; - if (s) { - int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; - stbi__uint16 fastv = (stbi__uint16)((s << 9) | i); - z->size[c] = (stbi_uc)s; - z->value[c] = (stbi__uint16)i; - if (s <= STBI__ZFAST_BITS) { - int j = stbi__bit_reverse(next_code[s], s); - while (j < (1 << STBI__ZFAST_BITS)) { - z->fast[j] = fastv; - j += (1 << s); - } - } - ++next_code[s]; + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i = 0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i = 1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i = 1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16)code; + z->firstsymbol[i] = (stbi__uint16)k; + code = (code + sizes[i]); + if (sizes[i]) + if (code - 1 >= (1 << i)) + return stbi__err("bad codelengths", + "Corrupt PNG"); + z->maxcode[i] = code << (16 - i); // preshift for inner loop + code <<= 1; + k += sizes[i]; } - } - return 1; + z->maxcode[16] = 0x10000; // sentinel + for (i = 0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16)((s << 9) | i); + z->size[c] = (stbi_uc)s; + z->value[c] = (stbi__uint16)i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s], s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; } // zlib-from-memory implementation for PNG reading @@ -3665,283 +4438,342 @@ static int stbi__zbuild_huffman(stbi__zhuffman* z, const stbi_uc* sizelist, int // we require PNG read all the IDATs and combine them into a single // memory buffer -typedef struct -{ - stbi_uc* zbuffer, * zbuffer_end; - int num_bits; - stbi__uint32 code_buffer; +typedef struct { + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; - char* zout; - char* zout_start; - char* zout_end; - int z_expandable; + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; - stbi__zhuffman z_length, z_distance; + stbi__zhuffman z_length, z_distance; } stbi__zbuf; -stbi_inline static int stbi__zeof(stbi__zbuf* z) +stbi_inline static int stbi__zeof(stbi__zbuf *z) { - return (z->zbuffer >= z->zbuffer_end); + return (z->zbuffer >= z->zbuffer_end); } -stbi_inline static stbi_uc stbi__zget8(stbi__zbuf* z) +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) { - return stbi__zeof(z) ? 0 : *z->zbuffer++; + return stbi__zeof(z) ? 0 : *z->zbuffer++; } -static void stbi__fill_bits(stbi__zbuf* z) +static void stbi__fill_bits(stbi__zbuf *z) { - do { - if (z->code_buffer >= (1U << z->num_bits)) { - z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ - return; - } - z->code_buffer |= (unsigned int)stbi__zget8(z) << z->num_bits; - z->num_bits += 8; - } while (z->num_bits <= 24); + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = + z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int)stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); } -stbi_inline static unsigned int stbi__zreceive(stbi__zbuf* z, int n) +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) { - unsigned int k; - if (z->num_bits < n) stbi__fill_bits(z); - k = z->code_buffer & ((1 << n) - 1); - z->code_buffer >>= n; - z->num_bits -= n; - return k; + unsigned int k; + if (z->num_bits < n) + stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; } -static int stbi__zhuffman_decode_slowpath(stbi__zbuf* a, stbi__zhuffman* z) +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) { - int b, s, k; - // not resolved by fast table, so compute it the slow way - // use jpeg approach, which requires MSbits at top - k = stbi__bit_reverse(a->code_buffer, 16); - for (s = STBI__ZFAST_BITS + 1; ; ++s) - if (k < z->maxcode[s]) - break; - if (s >= 16) return -1; // invalid code! - // code size is s, so: - b = (k >> (16 - s)) - z->firstcode[s] + z->firstsymbol[s]; - if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! - if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. - a->code_buffer >>= s; - a->num_bits -= s; - return z->value[b]; -} - -stbi_inline static int stbi__zhuffman_decode(stbi__zbuf* a, stbi__zhuffman* z) -{ - int b, s; - if (a->num_bits < 16) { - if (stbi__zeof(a)) { - return -1; /* report error for unexpected end of data. */ - } - stbi__fill_bits(a); - } - b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; - if (b) { - s = b >> 9; + int b, s, k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s = STBI__ZFAST_BITS + 1;; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) + return -1; // invalid code! + // code size is s, so: + b = (k >> (16 - s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) + return -1; // some data was corrupt somewhere! + if (z->size[b] != s) + return -1; // was originally an assert, but report failure instead. a->code_buffer >>= s; a->num_bits -= s; - return b & 511; - } - return stbi__zhuffman_decode_slowpath(a, z); + return z->value[b]; } -static int stbi__zexpand(stbi__zbuf* z, char* zout, int n) // need to make room for n bytes +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) { - char* q; - unsigned int cur, limit, old_limit; - z->zout = zout; - if (!z->z_expandable) return stbi__err("output buffer limit", "Corrupt PNG"); - cur = (unsigned int)(z->zout - z->zout_start); - limit = old_limit = (unsigned)(z->zout_end - z->zout_start); - if (UINT_MAX - cur < (unsigned)n) return stbi__err("outofmem", "Out of memory"); - while (cur + n > limit) { - if (limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); - limit *= 2; - } - q = (char*)STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); - STBI_NOTUSED(old_limit); - if (q == NULL) return stbi__err("outofmem", "Out of memory"); - z->zout_start = q; - z->zout = q + cur; - z->zout_end = q + limit; - return 1; + int b, s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + return -1; /* report error for unexpected end of data. */ + } + stbi__fill_bits(a); + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, + int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) + return stbi__err("output buffer limit", "Corrupt PNG"); + cur = (unsigned int)(z->zout - z->zout_start); + limit = old_limit = (unsigned)(z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned)n) + return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if (limit > UINT_MAX / 2) + return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *)STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) + return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; } static const int stbi__zlength_base[31] = { - 3,4,5,6,7,8,9,10,11,13, - 15,17,19,23,27,31,35,43,51,59, - 67,83,99,115,131,163,195,227,258,0,0 }; + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +}; -static const int stbi__zlength_extra[31] = -{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; +static const int stbi__zlength_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, + 4, 4, 5, 5, 5, 5, 0, 0, 0 }; -static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, -257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0 }; +static const int stbi__zdist_base[32] = { + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, + 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, + 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 +}; -static const int stbi__zdist_extra[32] = -{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 }; +static const int stbi__zdist_extra[32] = { + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, + 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 +}; -static int stbi__parse_huffman_block(stbi__zbuf* a) +static int stbi__parse_huffman_block(stbi__zbuf *a) { - char* zout = a->zout; - for (;;) { - int z = stbi__zhuffman_decode(a, &a->z_length); - if (z < 256) { - if (z < 0) return stbi__err("bad huffman code", "Corrupt PNG"); // error in huffman codes - if (zout >= a->zout_end) { - if (!stbi__zexpand(a, zout, 1)) return 0; - zout = a->zout; - } - *zout++ = (char)z; + char *zout = a->zout; + for (;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) + return stbi__err( + "bad huffman code", + "Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) + return 0; + zout = a->zout; + } + *zout++ = (char)z; + } else { + stbi_uc *p; + int len, dist; + if (z == 256) { + a->zout = zout; + return 1; + } + if (z >= 286) + return stbi__err( + "bad huffman code", + "Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) + len += stbi__zreceive(a, + stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0 || z >= 30) + return stbi__err( + "bad huffman code", + "Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) + dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) + return stbi__err("bad dist", "Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) + return 0; + zout = a->zout; + } + p = (stbi_uc *)(zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { + do + *zout++ = v; + while (--len); + } + } else { + if (len) { + do + *zout++ = *p++; + while (--len); + } + } + } } - else { - stbi_uc* p; - int len, dist; - if (z == 256) { - a->zout = zout; - return 1; - } - if (z >= 286) return stbi__err("bad huffman code", "Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data - z -= 257; - len = stbi__zlength_base[z]; - if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); - z = stbi__zhuffman_decode(a, &a->z_distance); - if (z < 0 || z >= 30) return stbi__err("bad huffman code", "Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data - dist = stbi__zdist_base[z]; - if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); - if (zout - a->zout_start < dist) return stbi__err("bad dist", "Corrupt PNG"); - if (zout + len > a->zout_end) { - if (!stbi__zexpand(a, zout, len)) return 0; - zout = a->zout; - } - p = (stbi_uc*)(zout - dist); - if (dist == 1) { // run of one byte; common in images. - stbi_uc v = *p; - if (len) { do *zout++ = v; while (--len); } - } - else { - if (len) { do *zout++ = *p++; while (--len); } - } - } - } } -static int stbi__compute_huffman_codes(stbi__zbuf* a) +static int stbi__compute_huffman_codes(stbi__zbuf *a) { - static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; - stbi__zhuffman z_codelength; - stbi_uc lencodes[286 + 32 + 137];//padding for maximum single op - stbi_uc codelength_sizes[19]; - int i, n; + static const stbi_uc length_dezigzag[19] = { 16, 17, 18, 0, 8, 7, 9, + 6, 10, 5, 11, 4, 12, 3, + 13, 2, 14, 1, 15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286 + 32 + 137]; //padding for maximum single op + stbi_uc codelength_sizes[19]; + int i, n; - int hlit = stbi__zreceive(a, 5) + 257; - int hdist = stbi__zreceive(a, 5) + 1; - int hclen = stbi__zreceive(a, 4) + 4; - int ntot = hlit + hdist; + int hlit = stbi__zreceive(a, 5) + 257; + int hdist = stbi__zreceive(a, 5) + 1; + int hclen = stbi__zreceive(a, 4) + 4; + int ntot = hlit + hdist; - memset(codelength_sizes, 0, sizeof(codelength_sizes)); - for (i = 0; i < hclen; ++i) { - int s = stbi__zreceive(a, 3); - codelength_sizes[length_dezigzag[i]] = (stbi_uc)s; - } - if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i = 0; i < hclen; ++i) { + int s = stbi__zreceive(a, 3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc)s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) + return 0; - n = 0; - while (n < ntot) { - int c = stbi__zhuffman_decode(a, &z_codelength); - if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); - if (c < 16) - lencodes[n++] = (stbi_uc)c; - else { - stbi_uc fill = 0; - if (c == 16) { - c = stbi__zreceive(a, 2) + 3; - if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); - fill = lencodes[n - 1]; - } - else if (c == 17) { - c = stbi__zreceive(a, 3) + 3; - } - else if (c == 18) { - c = stbi__zreceive(a, 7) + 11; - } - else { + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) + return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc)c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a, 2) + 3; + if (n == 0) + return stbi__err("bad codelengths", + "Corrupt PNG"); + fill = lencodes[n - 1]; + } else if (c == 17) { + c = stbi__zreceive(a, 3) + 3; + } else if (c == 18) { + c = stbi__zreceive(a, 7) + 11; + } else { + return stbi__err("bad codelengths", + "Corrupt PNG"); + } + if (ntot - n < c) + return stbi__err("bad codelengths", + "Corrupt PNG"); + memset(lencodes + n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths", "Corrupt PNG"); - } - if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); - memset(lencodes + n, fill, c); - n += c; + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) + return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes + hlit, hdist)) + return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len, nlen, k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc)(a->code_buffer & + 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; } - } - if (n != ntot) return stbi__err("bad codelengths", "Corrupt PNG"); - if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, lencodes + hlit, hdist)) return 0; - return 1; + if (a->num_bits < 0) + return stbi__err("zlib corrupt", "Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) + return stbi__err("zlib corrupt", "Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) + return stbi__err("read past buffer", "Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) + return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; } -static int stbi__parse_uncompressed_block(stbi__zbuf* a) +static int stbi__parse_zlib_header(stbi__zbuf *a) { - stbi_uc header[4]; - int len, nlen, k; - if (a->num_bits & 7) - stbi__zreceive(a, a->num_bits & 7); // discard - // drain the bit-packed data into header - k = 0; - while (a->num_bits > 0) { - header[k++] = (stbi_uc)(a->code_buffer & 255); // suppress MSVC run-time check - a->code_buffer >>= 8; - a->num_bits -= 8; - } - if (a->num_bits < 0) return stbi__err("zlib corrupt", "Corrupt PNG"); - // now fill header the normal way - while (k < 4) - header[k++] = stbi__zget8(a); - len = header[1] * 256 + header[0]; - nlen = header[3] * 256 + header[2]; - if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt", "Corrupt PNG"); - if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer", "Corrupt PNG"); - if (a->zout + len > a->zout_end) - if (!stbi__zexpand(a, a->zout, len)) return 0; - memcpy(a->zout, a->zbuffer, len); - a->zbuffer += len; - a->zout += len; - return 1; + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if ((cmf * 256 + flg) % 31 != 0) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if (flg & 32) + return stbi__err( + "no preset dict", + "Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) + return stbi__err("bad compression", + "Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; } -static int stbi__parse_zlib_header(stbi__zbuf* a) -{ - int cmf = stbi__zget8(a); - int cm = cmf & 15; - /* int cinfo = cmf >> 4; */ - int flg = stbi__zget8(a); - if (stbi__zeof(a)) return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec - if ((cmf * 256 + flg) % 31 != 0) return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec - if (flg & 32) return stbi__err("no preset dict", "Corrupt PNG"); // preset dictionary not allowed in png - if (cm != 8) return stbi__err("bad compression", "Corrupt PNG"); // DEFLATE required for png - // window = 1 << (8 + cinfo)... but who cares, we fully buffer output - return 1; -} - -static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = -{ - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 -}; -static const stbi_uc stbi__zdefault_distance[32] = -{ - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = { + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8 }; +static const stbi_uc stbi__zdefault_distance[32] = { 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5 }; /* Init algorithm: { @@ -3955,123 +4787,142 @@ Init algorithm: } */ -static int stbi__parse_zlib(stbi__zbuf* a, int parse_header) +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) { - int final, type; - if (parse_header) - if (!stbi__parse_zlib_header(a)) return 0; - a->num_bits = 0; - a->code_buffer = 0; - do { - final = stbi__zreceive(a, 1); - type = stbi__zreceive(a, 2); - if (type == 0) { - if (!stbi__parse_uncompressed_block(a)) return 0; + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) + return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a, 1); + type = stbi__zreceive(a, 2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) + return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length, + stbi__zdefault_length, + STBI__ZNSYMS)) + return 0; + if (!stbi__zbuild_huffman( + &a->z_distance, + stbi__zdefault_distance, 32)) + return 0; + } else { + if (!stbi__compute_huffman_codes(a)) + return 0; + } + if (!stbi__parse_huffman_block(a)) + return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, + int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, + int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *)stbi__malloc(initial_size); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc *)buffer; + a.zbuffer_end = (stbi_uc *)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; } - else if (type == 3) { - return 0; +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, + int len, + int initial_size, + int *outlen, + int parse_header) +{ + stbi__zbuf a; + char *p = (char *)stbi__malloc(initial_size); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc *)buffer; + a.zbuffer_end = (stbi_uc *)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; } - else { - if (type == 1) { - // use fixed code lengths - if (!stbi__zbuild_huffman(&a->z_length, stbi__zdefault_length, STBI__ZNSYMS)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; - } - else { - if (!stbi__compute_huffman_codes(a)) return 0; - } - if (!stbi__parse_huffman_block(a)) return 0; +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, + char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *)ibuffer; + a.zbuffer_end = (stbi_uc *)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int)(a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, + int *outlen) +{ + stbi__zbuf a; + char *p = (char *)stbi__malloc(16384); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc *)buffer; + a.zbuffer_end = (stbi_uc *)buffer + len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; } - } while (!final); - return 1; } -static int stbi__do_zlib(stbi__zbuf* a, char* obuf, int olen, int exp, int parse_header) +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, + const char *ibuffer, int ilen) { - a->zout_start = obuf; - a->zout = obuf; - a->zout_end = obuf + olen; - a->z_expandable = exp; - - return stbi__parse_zlib(a, parse_header); -} - -STBIDEF char* stbi_zlib_decode_malloc_guesssize(const char* buffer, int len, int initial_size, int* outlen) -{ - stbi__zbuf a; - char* p = (char*)stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc*)buffer; - a.zbuffer_end = (stbi_uc*)buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { - if (outlen) *outlen = (int)(a.zout - a.zout_start); - return a.zout_start; - } - else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF char* stbi_zlib_decode_malloc(char const* buffer, int len, int* outlen) -{ - return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); -} - -STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(const char* buffer, int len, int initial_size, int* outlen, int parse_header) -{ - stbi__zbuf a; - char* p = (char*)stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc*)buffer; - a.zbuffer_end = (stbi_uc*)buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { - if (outlen) *outlen = (int)(a.zout - a.zout_start); - return a.zout_start; - } - else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_buffer(char* obuffer, int olen, char const* ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc*)ibuffer; - a.zbuffer_end = (stbi_uc*)ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) - return (int)(a.zout - a.zout_start); - else - return -1; -} - -STBIDEF char* stbi_zlib_decode_noheader_malloc(char const* buffer, int len, int* outlen) -{ - stbi__zbuf a; - char* p = (char*)stbi__malloc(16384); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc*)buffer; - a.zbuffer_end = (stbi_uc*)buffer + len; - if (stbi__do_zlib(&a, p, 16384, 1, 0)) { - if (outlen) *outlen = (int)(a.zout - a.zout_start); - return a.zout_start; - } - else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, const char* ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc*)ibuffer; - a.zbuffer_end = (stbi_uc*)ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) - return (int)(a.zout - a.zout_start); - else - return -1; + stbi__zbuf a; + a.zbuffer = (stbi_uc *)ibuffer; + a.zbuffer_end = (stbi_uc *)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int)(a.zout - a.zout_start); + else + return -1; } #endif @@ -4086,826 +4937,1113 @@ STBIDEF int stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, const char // - uses stb_zlib, a PD zlib implementation with fast huffman decoding #ifndef STBI_NO_PNG -typedef struct -{ - stbi__uint32 length; - stbi__uint32 type; +typedef struct { + stbi__uint32 length; + stbi__uint32 type; } stbi__pngchunk; -static stbi__pngchunk stbi__get_chunk_header(stbi__context* s) +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) { - stbi__pngchunk c; - c.length = stbi__get32be(s); - c.type = stbi__get32be(s); - return c; + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; } -static int stbi__check_png_header(stbi__context* s) +static int stbi__check_png_header(stbi__context *s) { - static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; - int i; - for (i = 0; i < 8; ++i) - if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig", "Not a PNG"); - return 1; + static const stbi_uc png_sig[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; + int i; + for (i = 0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) + return stbi__err("bad png sig", "Not a PNG"); + return 1; } -typedef struct -{ - stbi__context* s; - stbi_uc* idata, * expanded, * out; - int depth; +typedef struct { + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; } stbi__png; enum { - STBI__F_none = 0, - STBI__F_sub = 1, - STBI__F_up = 2, - STBI__F_avg = 3, - STBI__F_paeth = 4, - // synthetic filters used for first scanline to avoid needing a dummy row of 0s - STBI__F_avg_first, - STBI__F_paeth_first + STBI__F_none = 0, + STBI__F_sub = 1, + STBI__F_up = 2, + STBI__F_avg = 3, + STBI__F_paeth = 4, + // synthetic filters used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first, + STBI__F_paeth_first }; -static stbi_uc first_row_filter[5] = -{ - STBI__F_none, - STBI__F_sub, - STBI__F_none, - STBI__F_avg_first, - STBI__F_paeth_first -}; +static stbi_uc first_row_filter[5] = { STBI__F_none, STBI__F_sub, STBI__F_none, + STBI__F_avg_first, STBI__F_paeth_first }; static int stbi__paeth(int a, int b, int c) { - int p = a + b - c; - int pa = abs(p - a); - int pb = abs(p - b); - int pc = abs(p - c); - if (pa <= pb && pa <= pc) return a; - if (pb <= pc) return b; - return c; + int p = a + b - c; + int pa = abs(p - a); + int pb = abs(p - b); + int pc = abs(p - c); + if (pa <= pb && pa <= pc) + return a; + if (pb <= pc) + return b; + return c; } -static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; +static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, + 0, 0, 0, 0x01 }; // create the png data from post-deflated data -static int stbi__create_png_image_raw(stbi__png* a, stbi_uc* raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, + stbi__uint32 raw_len, int out_n, + stbi__uint32 x, stbi__uint32 y, int depth, + int color) { - int bytes = (depth == 16 ? 2 : 1); - stbi__context* s = a->s; - stbi__uint32 i, j, stride = x * out_n * bytes; - stbi__uint32 img_len, img_width_bytes; - int k; - int img_n = s->img_n; // copy it into a local for later + int bytes = (depth == 16 ? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i, j, stride = x * out_n * bytes; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later - int output_bytes = out_n * bytes; - int filter_bytes = img_n * bytes; - int width = x; + int output_bytes = out_n * bytes; + int filter_bytes = img_n * bytes; + int width = x; - STBI_ASSERT(out_n == s->img_n || out_n == s->img_n + 1); - a->out = (stbi_uc*)stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into - if (!a->out) return stbi__err("outofmem", "Out of memory"); + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n + 1); + a->out = (stbi_uc *)stbi__malloc_mad3( + x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) + return stbi__err("outofmem", "Out of memory"); - if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); - img_width_bytes = (((img_n * x * depth) + 7) >> 3); - img_len = (img_width_bytes + 1) * y; + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) + return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; - // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, - // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), - // so just check for raw_len < img_len always. - if (raw_len < img_len) return stbi__err("not enough pixels", "Corrupt PNG"); + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) + return stbi__err("not enough pixels", "Corrupt PNG"); - for (j = 0; j < y; ++j) { - stbi_uc* cur = a->out + stride * j; - stbi_uc* prior; - int filter = *raw++; - - if (filter > 4) - return stbi__err("invalid filter", "Corrupt PNG"); - - if (depth < 8) { - if (img_width_bytes > x) return stbi__err("invalid width", "Corrupt PNG"); - cur += x * out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place - filter_bytes = 1; - width = img_width_bytes; - } - prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above - - // if first row, use special filter that doesn't sample previous row - if (j == 0) filter = first_row_filter[filter]; - - // handle first byte explicitly - for (k = 0; k < filter_bytes; ++k) { - switch (filter) { - case STBI__F_none: cur[k] = raw[k]; break; - case STBI__F_sub: cur[k] = raw[k]; break; - case STBI__F_up: cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - case STBI__F_avg: cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); break; - case STBI__F_paeth: cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0, prior[k], 0)); break; - case STBI__F_avg_first: cur[k] = raw[k]; break; - case STBI__F_paeth_first: cur[k] = raw[k]; break; - } - } - - if (depth == 8) { - if (img_n != out_n) - cur[img_n] = 255; // first pixel - raw += img_n; - cur += out_n; - prior += out_n; - } - else if (depth == 16) { - if (img_n != out_n) { - cur[filter_bytes] = 255; // first pixel top byte - cur[filter_bytes + 1] = 255; // first pixel bottom byte - } - raw += filter_bytes; - cur += output_bytes; - prior += output_bytes; - } - else { - raw += 1; - cur += 1; - prior += 1; - } - - // this is a little gross, so that we don't switch per-pixel or per-component - if (depth < 8 || img_n == out_n) { - int nk = (width - 1) * filter_bytes; -#define STBI__CASE(f) \ - case f: \ - for (k=0; k < nk; ++k) - switch (filter) { - // "none" filter turns into a memcpy here; make that explicit. - case STBI__F_none: memcpy(cur, raw, nk); break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); } break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - filter_bytes]) >> 1)); } break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - filter_bytes], prior[k], prior[k - filter_bytes])); } break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); } break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - filter_bytes], 0, 0)); } break; - } -#undef STBI__CASE - raw += nk; - } - else { - STBI_ASSERT(img_n + 1 == out_n); -#define STBI__CASE(f) \ - case f: \ - for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ - for (k=0; k < filter_bytes; ++k) - switch (filter) { - STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k - output_bytes]); } break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - output_bytes]) >> 1)); } break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - output_bytes], prior[k], prior[k - output_bytes])); } break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k - output_bytes] >> 1)); } break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - output_bytes], 0, 0)); } break; - } -#undef STBI__CASE - - // the loop above sets the high byte of the pixels' alpha, but for - // 16 bit png files we also need the low byte set. we'll do that here. - if (depth == 16) { - cur = a->out + stride * j; // start at the beginning of the row again - for (i = 0; i < x; ++i, cur += output_bytes) { - cur[filter_bytes + 1] = 255; - } - } - } - } - - // we make a separate pass to expand bits to pixels; for performance, - // this could run two scanlines behind the above code, so it won't - // intefere with filtering but will still be in the cache. - if (depth < 8) { for (j = 0; j < y; ++j) { - stbi_uc* cur = a->out + stride * j; - stbi_uc* in = a->out + stride * j + x * out_n - img_width_bytes; - // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit - // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop - stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + stbi_uc *cur = a->out + stride * j; + stbi_uc *prior; + int filter = *raw++; - // note that the final byte might overshoot and write more data than desired. - // we can allocate enough data that this never writes out of memory, but it - // could also overwrite the next scanline. can it overwrite non-empty data - // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. - // so we need to explicitly clamp the final ones + if (filter > 4) + return stbi__err("invalid filter", "Corrupt PNG"); - if (depth == 4) { - for (k = x * img_n; k >= 2; k -= 2, ++in) { - *cur++ = scale * ((*in >> 4)); - *cur++ = scale * ((*in) & 0x0f); + if (depth < 8) { + if (img_width_bytes > x) + return stbi__err("invalid width", + "Corrupt PNG"); + cur += x * out_n - + img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; } - if (k > 0) *cur++ = scale * ((*in >> 4)); - } - else if (depth == 2) { - for (k = x * img_n; k >= 4; k -= 4, ++in) { - *cur++ = scale * ((*in >> 6)); - *cur++ = scale * ((*in >> 4) & 0x03); - *cur++ = scale * ((*in >> 2) & 0x03); - *cur++ = scale * ((*in) & 0x03); + prior = cur - + stride; // bugfix: need to compute this after 'cur +=' computation above + + // if first row, use special filter that doesn't sample previous row + if (j == 0) + filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k = 0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none: + cur[k] = raw[k]; + break; + case STBI__F_sub: + cur[k] = raw[k]; + break; + case STBI__F_up: + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + cur[k] = STBI__BYTECAST(raw[k] + + (prior[k] >> 1)); + break; + case STBI__F_paeth: + cur[k] = STBI__BYTECAST( + raw[k] + stbi__paeth(0, prior[k], 0)); + break; + case STBI__F_avg_first: + cur[k] = raw[k]; + break; + case STBI__F_paeth_first: + cur[k] = raw[k]; + break; + } } - if (k > 0) *cur++ = scale * ((*in >> 6)); - if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); - if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); - } - else if (depth == 1) { - for (k = x * img_n; k >= 8; k -= 8, ++in) { - *cur++ = scale * ((*in >> 7)); - *cur++ = scale * ((*in >> 6) & 0x01); - *cur++ = scale * ((*in >> 5) & 0x01); - *cur++ = scale * ((*in >> 4) & 0x01); - *cur++ = scale * ((*in >> 3) & 0x01); - *cur++ = scale * ((*in >> 2) & 0x01); - *cur++ = scale * ((*in >> 1) & 0x01); - *cur++ = scale * ((*in) & 0x01); + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes + 1] = + 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; + } else { + raw += 1; + cur += 1; + prior += 1; } - if (k > 0) *cur++ = scale * ((*in >> 7)); - if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); - if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); - if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); - if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); - if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); - if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); - } - if (img_n != out_n) { - int q; - // insert alpha = 255 - cur = a->out + stride * j; - if (img_n == 1) { - for (q = x - 1; q >= 0; --q) { - cur[q * 2 + 1] = 255; - cur[q * 2 + 0] = cur[q]; - } + + // this is a little gross, so that we don't switch per-pixel or per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1) * filter_bytes; +#define STBI__CASE(f) \ + case f: \ + for (k = 0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: + memcpy(cur, raw, nk); + break; + STBI__CASE(STBI__F_sub) + { + cur[k] = STBI__BYTECAST( + raw[k] + cur[k - filter_bytes]); + } + break; + STBI__CASE(STBI__F_up) + { + cur[k] = STBI__BYTECAST(raw[k] + + prior[k]); + } + break; + STBI__CASE(STBI__F_avg) + { + cur[k] = STBI__BYTECAST( + raw[k] + + ((prior[k] + + cur[k - filter_bytes]) >> + 1)); + } + break; + STBI__CASE(STBI__F_paeth) + { + cur[k] = STBI__BYTECAST( + raw[k] + + stbi__paeth( + cur[k - filter_bytes], + prior[k], + prior[k - + filter_bytes])); + } + break; + STBI__CASE(STBI__F_avg_first) + { + cur[k] = STBI__BYTECAST( + raw[k] + + (cur[k - filter_bytes] >> 1)); + } + break; + STBI__CASE(STBI__F_paeth_first) + { + cur[k] = STBI__BYTECAST( + raw[k] + + stbi__paeth( + cur[k - filter_bytes], + 0, 0)); + } + break; + } +#undef STBI__CASE + raw += nk; + } else { + STBI_ASSERT(img_n + 1 == out_n); +#define STBI__CASE(f) \ + case f: \ + for (i = x - 1; i >= 1; --i, cur[filter_bytes] = 255, \ + raw += filter_bytes, cur += output_bytes, \ + prior += output_bytes) \ + for (k = 0; k < filter_bytes; ++k) + switch (filter) { + STBI__CASE(STBI__F_none) + { + cur[k] = raw[k]; + } + break; + STBI__CASE(STBI__F_sub) + { + cur[k] = STBI__BYTECAST( + raw[k] + cur[k - output_bytes]); + } + break; + STBI__CASE(STBI__F_up) + { + cur[k] = STBI__BYTECAST(raw[k] + + prior[k]); + } + break; + STBI__CASE(STBI__F_avg) + { + cur[k] = STBI__BYTECAST( + raw[k] + + ((prior[k] + + cur[k - output_bytes]) >> + 1)); + } + break; + STBI__CASE(STBI__F_paeth) + { + cur[k] = STBI__BYTECAST( + raw[k] + + stbi__paeth( + cur[k - output_bytes], + prior[k], + prior[k - + output_bytes])); + } + break; + STBI__CASE(STBI__F_avg_first) + { + cur[k] = STBI__BYTECAST( + raw[k] + + (cur[k - output_bytes] >> 1)); + } + break; + STBI__CASE(STBI__F_paeth_first) + { + cur[k] = STBI__BYTECAST( + raw[k] + + stbi__paeth( + cur[k - output_bytes], + 0, 0)); + } + break; + } +#undef STBI__CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that here. + if (depth == 16) { + cur = a->out + + stride * + j; // start at the beginning of the row again + for (i = 0; i < x; ++i, cur += output_bytes) { + cur[filter_bytes + 1] = 255; + } + } } - else { - STBI_ASSERT(img_n == 3); - for (q = x - 1; q >= 0; --q) { - cur[q * 4 + 3] = 255; - cur[q * 4 + 2] = cur[q * 3 + 2]; - cur[q * 4 + 1] = cur[q * 3 + 1]; - cur[q * 4 + 0] = cur[q * 3 + 0]; - } - } - } } - } - else if (depth == 16) { - // force the image data from big-endian to platform-native. - // this is done in a separate pass due to the decoding relying - // on the data being untouched, but could probably be done - // per-line during decode if care is taken. - stbi_uc* cur = a->out; - stbi__uint16* cur16 = (stbi__uint16*)cur; - for (i = 0; i < x * y * out_n; ++i, cur16++, cur += 2) { - *cur16 = (cur[0] << 8) | cur[1]; + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j = 0; j < y; ++j) { + stbi_uc *cur = a->out + stride * j; + stbi_uc *in = a->out + stride * j + x * out_n - + img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit + // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = + (color == 0) ? + stbi__depth_scale_table[depth] : + 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than desired. + // we can allocate enough data that this never writes out of memory, but it + // could also overwrite the next scanline. can it overwrite non-empty data + // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. + // so we need to explicitly clamp the final ones + + if (depth == 4) { + for (k = x * img_n; k >= 2; k -= 2, ++in) { + *cur++ = scale * ((*in >> 4)); + *cur++ = scale * ((*in) & 0x0f); + } + if (k > 0) + *cur++ = scale * ((*in >> 4)); + } else if (depth == 2) { + for (k = x * img_n; k >= 4; k -= 4, ++in) { + *cur++ = scale * ((*in >> 6)); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in) & 0x03); + } + if (k > 0) + *cur++ = scale * ((*in >> 6)); + if (k > 1) + *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) + *cur++ = scale * ((*in >> 2) & 0x03); + } else if (depth == 1) { + for (k = x * img_n; k >= 8; k -= 8, ++in) { + *cur++ = scale * ((*in >> 7)); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in) & 0x01); + } + if (k > 0) + *cur++ = scale * ((*in >> 7)); + if (k > 1) + *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) + *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) + *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) + *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) + *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) + *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + int q; + // insert alpha = 255 + cur = a->out + stride * j; + if (img_n == 1) { + for (q = x - 1; q >= 0; --q) { + cur[q * 2 + 1] = 255; + cur[q * 2 + 0] = cur[q]; + } + } else { + STBI_ASSERT(img_n == 3); + for (q = x - 1; q >= 0; --q) { + cur[q * 4 + 3] = 255; + cur[q * 4 + 2] = cur[q * 3 + 2]; + cur[q * 4 + 1] = cur[q * 3 + 1]; + cur[q * 4 + 0] = cur[q * 3 + 0]; + } + } + } + } + } else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc *cur = a->out; + stbi__uint16 *cur16 = (stbi__uint16 *)cur; + + for (i = 0; i < x * y * out_n; ++i, cur16++, cur += 2) { + *cur16 = (cur[0] << 8) | cur[1]; + } } - } - return 1; + return 1; } -static int stbi__create_png_image(stbi__png* a, stbi_uc* image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, + stbi__uint32 image_data_len, int out_n, + int depth, int color, int interlaced) { - int bytes = (depth == 16 ? 2 : 1); - int out_bytes = out_n * bytes; - stbi_uc* final; - int p; - if (!interlaced) - return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, + out_n, a->s->img_x, + a->s->img_y, depth, color); - // de-interlacing - final = (stbi_uc*)stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); - if (!final) return stbi__err("outofmem", "Out of memory"); - for (p = 0; p < 7; ++p) { - int xorig[] = { 0,4,0,2,0,1,0 }; - int yorig[] = { 0,0,4,0,2,0,1 }; - int xspc[] = { 8,8,4,4,2,2,1 }; - int yspc[] = { 8,8,8,4,4,2,2 }; - int i, j, x, y; - // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 - x = (a->s->img_x - xorig[p] + xspc[p] - 1) / xspc[p]; - y = (a->s->img_y - yorig[p] + yspc[p] - 1) / yspc[p]; - if (x && y) { - stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; - if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { - STBI_FREE(final); - return 0; - } - for (j = 0; j < y; ++j) { - for (i = 0; i < x; ++i) { - int out_y = j * yspc[p] + yorig[p]; - int out_x = i * xspc[p] + xorig[p]; - memcpy(final + out_y * a->s->img_x * out_bytes + out_x * out_bytes, - a->out + (j * x + i) * out_bytes, out_bytes); + // de-interlacing + final = (stbi_uc *)stbi__malloc_mad3(a->s->img_x, a->s->img_y, + out_bytes, 0); + if (!final) + return stbi__err("outofmem", "Out of memory"); + for (p = 0; p < 7; ++p) { + int xorig[] = { 0, 4, 0, 2, 0, 1, 0 }; + int yorig[] = { 0, 0, 4, 0, 2, 0, 1 }; + int xspc[] = { 8, 8, 4, 4, 2, 2, 1 }; + int yspc[] = { 8, 8, 8, 4, 4, 2, 2 }; + int i, j, x, y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p] - 1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p] - 1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = + ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * + y; + if (!stbi__create_png_image_raw(a, image_data, + image_data_len, out_n, + x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j = 0; j < y; ++j) { + for (i = 0; i < x; ++i) { + int out_y = j * yspc[p] + yorig[p]; + int out_x = i * xspc[p] + xorig[p]; + memcpy(final + + out_y * a->s->img_x * + out_bytes + + out_x * out_bytes, + a->out + (j * x + i) * out_bytes, + out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; } - } - STBI_FREE(a->out); - image_data += img_len; - image_data_len -= img_len; } - } - a->out = final; + a->out = final; - return 1; + return 1; } -static int stbi__compute_transparency(stbi__png* z, stbi_uc tc[3], int out_n) +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) { - stbi__context* s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc* p = z->out; + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; - // compute color-based transparency, assuming we've - // already got 255 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); - if (out_n == 2) { - for (i = 0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 255); - p += 2; + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } } - } - else { - for (i = 0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; + return 1; } -static int stbi__compute_transparency16(stbi__png* z, stbi__uint16 tc[3], int out_n) +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], + int out_n) { - stbi__context* s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi__uint16* p = (stbi__uint16*)z->out; + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16 *)z->out; - // compute color-based transparency, assuming we've - // already got 65535 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); - if (out_n == 2) { - for (i = 0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 65535); - p += 2; + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } } - } - else { - for (i = 0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; + return 1; } -static int stbi__expand_png_palette(stbi__png* a, stbi_uc* palette, int len, int pal_img_n) +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, + int pal_img_n) { - stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; - stbi_uc* p, * temp_out, * orig = a->out; + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; - p = (stbi_uc*)stbi__malloc_mad2(pixel_count, pal_img_n, 0); - if (p == NULL) return stbi__err("outofmem", "Out of memory"); + p = (stbi_uc *)stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) + return stbi__err("outofmem", "Out of memory"); - // between here and free(out) below, exitting would leak - temp_out = p; + // between here and free(out) below, exitting would leak + temp_out = p; - if (pal_img_n == 3) { - for (i = 0; i < pixel_count; ++i) { - int n = orig[i] * 4; - p[0] = palette[n]; - p[1] = palette[n + 1]; - p[2] = palette[n + 2]; - p += 3; + if (pal_img_n == 3) { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p += 3; + } + } else { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p[3] = palette[n + 3]; + p += 4; + } } - } - else { - for (i = 0; i < pixel_count; ++i) { - int n = orig[i] * 4; - p[0] = palette[n]; - p[1] = palette[n + 1]; - p[2] = palette[n + 2]; - p[3] = palette[n + 3]; - p += 4; - } - } - STBI_FREE(a->out); - a->out = temp_out; + STBI_FREE(a->out); + a->out = temp_out; - STBI_NOTUSED(len); + STBI_NOTUSED(len); - return 1; + return 1; } static int stbi__unpremultiply_on_load_global = 0; static int stbi__de_iphone_flag_global = 0; -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +STBIDEF void +stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) { - stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; } STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) { - stbi__de_iphone_flag_global = flag_true_if_should_convert; + stbi__de_iphone_flag_global = flag_true_if_should_convert; } #ifndef STBI_THREAD_LOCAL -#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global -#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global #else -static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; -static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, + stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, + stbi__de_iphone_flag_set; -STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +STBIDEF void +stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) { - stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; - stbi__unpremultiply_on_load_set = 1; + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; } -STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +STBIDEF void +stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) { - stbi__de_iphone_flag_local = flag_true_if_should_convert; - stbi__de_iphone_flag_set = 1; + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; } -#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ - ? stbi__unpremultiply_on_load_local \ - : stbi__unpremultiply_on_load_global) -#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ - ? stbi__de_iphone_flag_local \ - : stbi__de_iphone_flag_global) +#define stbi__unpremultiply_on_load \ + (stbi__unpremultiply_on_load_set ? stbi__unpremultiply_on_load_local : \ + stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag \ + (stbi__de_iphone_flag_set ? stbi__de_iphone_flag_local : \ + stbi__de_iphone_flag_global) #endif // STBI_THREAD_LOCAL -static void stbi__de_iphone(stbi__png* z) +static void stbi__de_iphone(stbi__png *z) { - stbi__context* s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc* p = z->out; + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; - if (s->img_out_n == 3) { // convert bgr to rgb - for (i = 0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 3; - } - } - else { - STBI_ASSERT(s->img_out_n == 4); - if (stbi__unpremultiply_on_load) { - // convert bgr to rgb and unpremultiply - for (i = 0; i < pixel_count; ++i) { - stbi_uc a = p[3]; - stbi_uc t = p[0]; - if (a) { - stbi_uc half = a / 2; - p[0] = (p[2] * 255 + half) / a; - p[1] = (p[1] * 255 + half) / a; - p[2] = (t * 255 + half) / a; + if (s->img_out_n == 3) { // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; } - else { - p[0] = p[2]; - p[2] = t; + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i = 0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = (t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } } - p += 4; - } } - else { - // convert bgr to rgb - for (i = 0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 4; - } - } - } } -#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) +#define STBI__PNG_TYPE(a, b, c, d) \ + (((unsigned)(a) << 24) + ((unsigned)(b) << 16) + \ + ((unsigned)(c) << 8) + (unsigned)(d)) -static int stbi__parse_png_file(stbi__png* z, int scan, int req_comp) +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) { - stbi_uc palette[1024], pal_img_n = 0; - stbi_uc has_trans = 0, tc[3] = { 0 }; - stbi__uint16 tc16[3]; - stbi__uint32 ioff = 0, idata_limit = 0, i, pal_len = 0; - int first = 1, k, interlace = 0, color = 0, is_iphone = 0; - stbi__context* s = z->s; + stbi_uc palette[1024], pal_img_n = 0; + stbi_uc has_trans = 0, tc[3] = { 0 }; + stbi__uint16 tc16[3]; + stbi__uint32 ioff = 0, idata_limit = 0, i, pal_len = 0; + int first = 1, k, interlace = 0, color = 0, is_iphone = 0; + stbi__context *s = z->s; - z->expanded = NULL; - z->idata = NULL; - z->out = NULL; + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; - if (!stbi__check_png_header(s)) return 0; + if (!stbi__check_png_header(s)) + return 0; - if (scan == STBI__SCAN_type) return 1; - - for (;;) { - stbi__pngchunk c = stbi__get_chunk_header(s); - switch (c.type) { - case STBI__PNG_TYPE('C', 'g', 'B', 'I'): - is_iphone = 1; - stbi__skip(s, c.length); - break; - case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { - int comp, filter; - if (!first) return stbi__err("multiple IHDR", "Corrupt PNG"); - first = 0; - if (c.length != 13) return stbi__err("bad IHDR len", "Corrupt PNG"); - s->img_x = stbi__get32be(s); - s->img_y = stbi__get32be(s); - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large", "Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large", "Very large image (corrupt?)"); - z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only", "PNG not supported: 1/2/4/8/16-bit only"); - color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype", "Corrupt PNG"); - if (color == 3 && z->depth == 16) return stbi__err("bad ctype", "Corrupt PNG"); - if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype", "Corrupt PNG"); - comp = stbi__get8(s); if (comp) return stbi__err("bad comp method", "Corrupt PNG"); - filter = stbi__get8(s); if (filter) return stbi__err("bad filter method", "Corrupt PNG"); - interlace = stbi__get8(s); if (interlace > 1) return stbi__err("bad interlace method", "Corrupt PNG"); - if (!s->img_x || !s->img_y) return stbi__err("0-pixel image", "Corrupt PNG"); - if (!pal_img_n) { - s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); - } - else { - // if paletted, then pal_n is our final components, and - // img_n is # components to decompress/filter. - s->img_n = 1; - if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large", "Corrupt PNG"); - } - // even with SCAN_header, have to scan to see if we have a tRNS - break; - } - - case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (c.length > 256 * 3) return stbi__err("invalid PLTE", "Corrupt PNG"); - pal_len = c.length / 3; - if (pal_len * 3 != c.length) return stbi__err("invalid PLTE", "Corrupt PNG"); - for (i = 0; i < pal_len; ++i) { - palette[i * 4 + 0] = stbi__get8(s); - palette[i * 4 + 1] = stbi__get8(s); - palette[i * 4 + 2] = stbi__get8(s); - palette[i * 4 + 3] = 255; - } - break; - } - - case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (z->idata) return stbi__err("tRNS after IDAT", "Corrupt PNG"); - if (pal_img_n) { - if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } - if (pal_len == 0) return stbi__err("tRNS before PLTE", "Corrupt PNG"); - if (c.length > pal_len) return stbi__err("bad tRNS len", "Corrupt PNG"); - pal_img_n = 4; - for (i = 0; i < c.length; ++i) - palette[i * 4 + 3] = stbi__get8(s); - } - else { - if (!(s->img_n & 1)) return stbi__err("tRNS with alpha", "Corrupt PNG"); - if (c.length != (stbi__uint32)s->img_n * 2) return stbi__err("bad tRNS len", "Corrupt PNG"); - has_trans = 1; - // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. - if (scan == STBI__SCAN_header) { ++s->img_n; return 1; } - if (z->depth == 16) { - for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is - } - else { - for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger - } - } - break; - } - - case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (pal_img_n && !pal_len) return stbi__err("no PLTE", "Corrupt PNG"); - if (scan == STBI__SCAN_header) { - // header scan definitely stops at first IDAT - if (pal_img_n) - s->img_n = pal_img_n; + if (scan == STBI__SCAN_type) return 1; - } - if (c.length > (1u << 30)) return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); - if ((int)(ioff + c.length) < (int)ioff) return 0; - if (ioff + c.length > idata_limit) { - stbi__uint32 idata_limit_old = idata_limit; - stbi_uc* p; - if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; - while (ioff + c.length > idata_limit) - idata_limit *= 2; - STBI_NOTUSED(idata_limit_old); - p = (stbi_uc*)STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); - z->idata = p; - } - if (!stbi__getn(s, z->idata + ioff, c.length)) return stbi__err("outofdata", "Corrupt PNG"); - ioff += c.length; - break; - } - case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { - stbi__uint32 raw_len, bpl; - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (scan != STBI__SCAN_load) return 1; - if (z->idata == NULL) return stbi__err("no IDAT", "Corrupt PNG"); - // initial guess for decoded data size to avoid unnecessary reallocs - bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component - raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; - z->expanded = (stbi_uc*)stbi_zlib_decode_malloc_guesssize_headerflag((char*)z->idata, ioff, raw_len, (int*)&raw_len, !is_iphone); - if (z->expanded == NULL) return 0; // zlib should set error - STBI_FREE(z->idata); z->idata = NULL; - if ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || has_trans) - s->img_out_n = s->img_n + 1; - else - s->img_out_n = s->img_n; - if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; - if (has_trans) { - if (z->depth == 16) { - if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C', 'g', 'B', 'I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { + int comp, filter; + if (!first) + return stbi__err("multiple IHDR", + "Corrupt PNG"); + first = 0; + if (c.length != 13) + return stbi__err("bad IHDR len", "Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__err("too large", + "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__err("too large", + "Very large image (corrupt?)"); + z->depth = stbi__get8(s); + if (z->depth != 1 && z->depth != 2 && z->depth != 4 && + z->depth != 8 && z->depth != 16) + return stbi__err( + "1/2/4/8/16-bit only", + "PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); + if (color > 6) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3 && z->depth == 16) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3) + pal_img_n = 3; + else if (color & 1) + return stbi__err("bad ctype", "Corrupt PNG"); + comp = stbi__get8(s); + if (comp) + return stbi__err("bad comp method", + "Corrupt PNG"); + filter = stbi__get8(s); + if (filter) + return stbi__err("bad filter method", + "Corrupt PNG"); + interlace = stbi__get8(s); + if (interlace > 1) + return stbi__err("bad interlace method", + "Corrupt PNG"); + if (!s->img_x || !s->img_y) + return stbi__err("0-pixel image", + "Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) + return stbi__err( + "too large", + "Image too large to decode"); + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) + return stbi__err("too large", + "Corrupt PNG"); + } + // even with SCAN_header, have to scan to see if we have a tRNS + break; } - else { - if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; - } - } - if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) - stbi__de_iphone(z); - if (pal_img_n) { - // pal_img_n == 3 or 4 - s->img_n = pal_img_n; // record the actual colors we had - s->img_out_n = pal_img_n; - if (req_comp >= 3) s->img_out_n = req_comp; - if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) - return 0; - } - else if (has_trans) { - // non-paletted image with tRNS -> source image has (constant) alpha - ++s->img_n; - } - STBI_FREE(z->expanded); z->expanded = NULL; - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - return 1; - } - default: - // if critical, fail - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if ((c.type & (1 << 29)) == 0) { + case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { + if (first) + return stbi__err("first not IHDR", + "Corrupt PNG"); + if (c.length > 256 * 3) + return stbi__err("invalid PLTE", "Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) + return stbi__err("invalid PLTE", "Corrupt PNG"); + for (i = 0; i < pal_len; ++i) { + palette[i * 4 + 0] = stbi__get8(s); + palette[i * 4 + 1] = stbi__get8(s); + palette[i * 4 + 2] = stbi__get8(s); + palette[i * 4 + 3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { + if (first) + return stbi__err("first not IHDR", + "Corrupt PNG"); + if (z->idata) + return stbi__err("tRNS after IDAT", + "Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { + s->img_n = 4; + return 1; + } + if (pal_len == 0) + return stbi__err("tRNS before PLTE", + "Corrupt PNG"); + if (c.length > pal_len) + return stbi__err("bad tRNS len", + "Corrupt PNG"); + pal_img_n = 4; + for (i = 0; i < c.length; ++i) + palette[i * 4 + 3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) + return stbi__err("tRNS with alpha", + "Corrupt PNG"); + if (c.length != (stbi__uint32)s->img_n * 2) + return stbi__err("bad tRNS len", + "Corrupt PNG"); + has_trans = 1; + // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. + if (scan == STBI__SCAN_header) { + ++s->img_n; + return 1; + } + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) + tc16[k] = (stbi__uint16) + stbi__get16be( + s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) + tc[k] = (stbi_uc)(stbi__get16be( + s) & + 255) * + stbi__depth_scale_table + [z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { + if (first) + return stbi__err("first not IHDR", + "Corrupt PNG"); + if (pal_img_n && !pal_len) + return stbi__err("no PLTE", "Corrupt PNG"); + if (scan == STBI__SCAN_header) { + // header scan definitely stops at first IDAT + if (pal_img_n) + s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) + return stbi__err( + "IDAT size limit", + "IDAT section larger than 2^30 bytes"); + if ((int)(ioff + c.length) < (int)ioff) + return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) + idata_limit = c.length > 4096 ? + c.length : + 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *)STBI_REALLOC_SIZED( + z->idata, idata_limit_old, idata_limit); + if (p == NULL) + return stbi__err("outofmem", + "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata + ioff, c.length)) + return stbi__err("outofdata", "Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { + stbi__uint32 raw_len, bpl; + if (first) + return stbi__err("first not IHDR", + "Corrupt PNG"); + if (scan != STBI__SCAN_load) + return 1; + if (z->idata == NULL) + return stbi__err("no IDAT", "Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / + 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) + stbi_zlib_decode_malloc_guesssize_headerflag( + (char *)z->idata, ioff, raw_len, + (int *)&raw_len, !is_iphone); + if (z->expanded == NULL) + return 0; // zlib should set error + STBI_FREE(z->idata); + z->idata = NULL; + if ((req_comp == s->img_n + 1 && req_comp != 3 && + !pal_img_n) || + has_trans) + s->img_out_n = s->img_n + 1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, + s->img_out_n, z->depth, + color, interlace)) + return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16( + z, tc16, s->img_out_n)) + return 0; + } else { + if (!stbi__compute_transparency( + z, tc, s->img_out_n)) + return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && + s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = + pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) + s->img_out_n = req_comp; + if (!stbi__expand_png_palette( + z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); + z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) + return stbi__err("first not IHDR", + "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { #ifndef STBI_NO_FAILURE_STRINGS - // not threadsafe - static char invalid_chunk[] = "XXXX PNG chunk not known"; - invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); - invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); - invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); - invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + // not threadsafe + static char invalid_chunk[] = + "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); #endif - return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); - } - stbi__skip(s, c.length); - break; + return stbi__err( + invalid_chunk, + "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); } - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - } } -static void* stbi__do_png(stbi__png* p, int* x, int* y, int* n, int req_comp, stbi__result_info* ri) +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, + stbi__result_info *ri) { - void* result = NULL; - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { - if (p->depth <= 8) - ri->bits_per_channel = 8; - else if (p->depth == 16) - ri->bits_per_channel = 16; - else - return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); - result = p->out; + void *result = NULL; + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc( + "bad bits_per_channel", + "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format( + (unsigned char *)result, + p->s->img_out_n, req_comp, p->s->img_x, + p->s->img_y); + else + result = stbi__convert_format16( + (stbi__uint16 *)result, p->s->img_out_n, + req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) + return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) + *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; - if (req_comp && req_comp != p->s->img_out_n) { - if (ri->bits_per_channel == 8) - result = stbi__convert_format((unsigned char*)result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - else - result = stbi__convert_format16((stbi__uint16*)result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - p->s->img_out_n = req_comp; - if (result == NULL) return result; + STBI_FREE(p->expanded); + p->expanded = NULL; + STBI_FREE(p->idata); + p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x, y, comp, req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind(p->s); + return 0; } - *x = p->s->img_x; - *y = p->s->img_y; - if (n) *n = p->s->img_n; - } - STBI_FREE(p->out); p->out = NULL; - STBI_FREE(p->expanded); p->expanded = NULL; - STBI_FREE(p->idata); p->idata = NULL; - - return result; + if (x) + *x = p->s->img_x; + if (y) + *y = p->s->img_y; + if (comp) + *comp = p->s->img_n; + return 1; } -static void* stbi__png_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) { - stbi__png p; - p.s = s; - return stbi__do_png(&p, x, y, comp, req_comp, ri); + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); } -static int stbi__png_test(stbi__context* s) +static int stbi__png_is16(stbi__context *s) { - int r; - r = stbi__check_png_header(s); - stbi__rewind(s); - return r; -} - -static int stbi__png_info_raw(stbi__png* p, int* x, int* y, int* comp) -{ - if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { - stbi__rewind(p->s); - return 0; - } - if (x) *x = p->s->img_x; - if (y) *y = p->s->img_y; - if (comp) *comp = p->s->img_n; - return 1; -} - -static int stbi__png_info(stbi__context* s, int* x, int* y, int* comp) -{ - stbi__png p; - p.s = s; - return stbi__png_info_raw(&p, x, y, comp); -} - -static int stbi__png_is16(stbi__context* s) -{ - stbi__png p; - p.s = s; - if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) - return 0; - if (p.depth != 16) { - stbi__rewind(p.s); - return 0; - } - return 1; + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; } #endif // Microsoft/Windows BMP image #ifndef STBI_NO_BMP -static int stbi__bmp_test_raw(stbi__context* s) +static int stbi__bmp_test_raw(stbi__context *s) { - int r; - int sz; - if (stbi__get8(s) != 'B') return 0; - if (stbi__get8(s) != 'M') return 0; - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - stbi__get32le(s); // discard data offset - sz = stbi__get32le(s); - r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); - return r; + int r; + int sz; + if (stbi__get8(s) != 'B') + return 0; + if (stbi__get8(s) != 'M') + return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; } -static int stbi__bmp_test(stbi__context* s) +static int stbi__bmp_test(stbi__context *s) { - int r = stbi__bmp_test_raw(s); - stbi__rewind(s); - return r; + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; } // returns 0..31 for the highest set bit static int stbi__high_bit(unsigned int z) { - int n = 0; - if (z == 0) return -1; - if (z >= 0x10000) { n += 16; z >>= 16; } - if (z >= 0x00100) { n += 8; z >>= 8; } - if (z >= 0x00010) { n += 4; z >>= 4; } - if (z >= 0x00004) { n += 2; z >>= 2; } - if (z >= 0x00002) { n += 1;/* >>= 1;*/ } - return n; + int n = 0; + if (z == 0) + return -1; + if (z >= 0x10000) { + n += 16; + z >>= 16; + } + if (z >= 0x00100) { + n += 8; + z >>= 8; + } + if (z >= 0x00010) { + n += 4; + z >>= 4; + } + if (z >= 0x00004) { + n += 2; + z >>= 2; + } + if (z >= 0x00002) { + n += 1; /* >>= 1;*/ + } + return n; } static int stbi__bitcount(unsigned int a) { - a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 - a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 - a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits - a = (a + (a >> 8)); // max 16 per 8 bits - a = (a + (a >> 16)); // max 32 per 8 bits - return a & 0xff; + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; } // extract an arbitrarily-aligned N-bit value (N=bits) @@ -4913,352 +6051,437 @@ static int stbi__bitcount(unsigned int a) // extend it to full full range. static int stbi__shiftsigned(unsigned int v, int shift, int bits) { - static unsigned int mul_table[9] = { - 0, - 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, - 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, - }; - static unsigned int shift_table[9] = { - 0, 0,0,1,0,2,4,6,0, - }; - if (shift < 0) - v <<= -shift; - else - v >>= shift; - STBI_ASSERT(v < 256); - v >>= (8 - bits); - STBI_ASSERT(bits >= 0 && bits <= 8); - return (int)((unsigned)v * mul_table[bits]) >> shift_table[bits]; + static unsigned int mul_table[9] = { + 0, + 0xff /*0b11111111*/, + 0x55 /*0b01010101*/, + 0x49 /*0b01001001*/, + 0x11 /*0b00010001*/, + 0x21 /*0b00100001*/, + 0x41 /*0b01000001*/, + 0x81 /*0b10000001*/, + 0x01 /*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0, 0, 1, 0, 2, 4, 6, 0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8 - bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int)((unsigned)v * mul_table[bits]) >> shift_table[bits]; } -typedef struct -{ - int bpp, offset, hsz; - unsigned int mr, mg, mb, ma, all_a; - int extra_read; +typedef struct { + int bpp, offset, hsz; + unsigned int mr, mg, mb, ma, all_a; + int extra_read; } stbi__bmp_data; -static int stbi__bmp_set_mask_defaults(stbi__bmp_data* info, int compress) +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) { - // BI_BITFIELDS specifies masks explicitly, don't override - if (compress == 3) - return 1; + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; - if (compress == 0) { - if (info->bpp == 16) { - info->mr = 31u << 10; - info->mg = 31u << 5; - info->mb = 31u << 0; + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = + 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; } - else if (info->bpp == 32) { - info->mr = 0xffu << 16; - info->mg = 0xffu << 8; - info->mb = 0xffu << 0; - info->ma = 0xffu << 24; - info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 - } - else { - // otherwise, use defaults, which is all-0 - info->mr = info->mg = info->mb = info->ma = 0; - } - return 1; - } - return 0; // error + return 0; // error } -static void* stbi__bmp_parse_header(stbi__context* s, stbi__bmp_data* info) +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) { - int hsz; - if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - info->offset = stbi__get32le(s); - info->hsz = hsz = stbi__get32le(s); - info->mr = info->mg = info->mb = info->ma = 0; - info->extra_read = 14; + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') + return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; - if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); - - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); - if (hsz == 12) { - s->img_x = stbi__get16le(s); - s->img_y = stbi__get16le(s); - } - else { - s->img_x = stbi__get32le(s); - s->img_y = stbi__get32le(s); - } - if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); - info->bpp = stbi__get16le(s); - if (hsz != 12) { - int compress = stbi__get32le(s); - if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); - if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes - if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel - stbi__get32le(s); // discard sizeof - stbi__get32le(s); // discard hres - stbi__get32le(s); // discard vres - stbi__get32le(s); // discard colorsused - stbi__get32le(s); // discard max important - if (hsz == 40 || hsz == 56) { - if (hsz == 56) { - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - } - if (info->bpp == 16 || info->bpp == 32) { - if (compress == 0) { - stbi__bmp_set_mask_defaults(info, compress); - } - else if (compress == 3) { - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->extra_read += 12; - // not documented, but generated by photoshop and handled by mspaint - if (info->mr == info->mg && info->mg == info->mb) { - // ?!?!? - return stbi__errpuc("bad BMP", "bad BMP"); - } - } - else - return stbi__errpuc("bad BMP", "bad BMP"); - } - } - else { - // V4/V5 header - int i; - if (hsz != 108 && hsz != 124) + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->ma = stbi__get32le(s); - if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs - stbi__bmp_set_mask_defaults(info, compress); - stbi__get32le(s); // discard color space - for (i = 0; i < 12; ++i) - stbi__get32le(s); // discard color space parameters - if (hsz == 124) { - stbi__get32le(s); // discard rendering intent - stbi__get32le(s); // discard offset of profile data - stbi__get32le(s); // discard size of profile data - stbi__get32le(s); // discard reserved - } + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) + return stbi__errpuc("unknown BMP", + "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); } - } - return (void*)1; + if (stbi__get16le(s) != 1) + return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) + return stbi__errpuc("BMP RLE", + "BMP type not supported: RLE"); + if (compress >= 4) + return stbi__errpuc( + "BMP JPEG/PNG", + "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) + return stbi__errpuc( + "bad BMP", + "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, + compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && + info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", + "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", + "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != + 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i = 0; i < 12; ++i) + stbi__get32le( + s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le( + s); // discard offset of profile data + stbi__get32le( + s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *)1; } -static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { - stbi_uc* out; - unsigned int mr = 0, mg = 0, mb = 0, ma = 0, all_a; - stbi_uc pal[256][4]; - int psize = 0, i, j, width; - int flip_vertically, pad, target; - stbi__bmp_data info; - STBI_NOTUSED(ri); + stbi_uc *out; + unsigned int mr = 0, mg = 0, mb = 0, ma = 0, all_a; + stbi_uc pal[256][4]; + int psize = 0, i, j, width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); - info.all_a = 255; - if (stbi__bmp_parse_header(s, &info) == NULL) - return NULL; // error code already set + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set - flip_vertically = ((int)s->img_y) > 0; - s->img_y = abs((int)s->img_y); + flip_vertically = ((int)s->img_y) > 0; + s->img_y = abs((int)s->img_y); - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); - mr = info.mr; - mg = info.mg; - mb = info.mb; - ma = info.ma; - all_a = info.all_a; + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; - if (info.hsz == 12) { - if (info.bpp < 24) - psize = (info.offset - info.extra_read - 24) / 3; - } - else { - if (info.bpp < 16) - psize = (info.offset - info.extra_read - info.hsz) >> 2; - } - if (psize == 0) { - // accept some number of extra bytes after the header, but if the offset points either to before - // the header ends or implies a large amount of extra data, reject the file as malformed - int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); - int header_limit = 1024; // max we actually read is below 256 bytes currently. - int extra_data_limit = 256 * 4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. - if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { - return stbi__errpuc("bad header", "Corrupt BMP"); + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; } - // we established that bytes_read_so_far is positive and sensible. - // the first half of this test rejects offsets that are either too small positives, or - // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn - // ensures the number computed in the second half of the test can't overflow. - if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { - return stbi__errpuc("bad offset", "Corrupt BMP"); - } - else { - stbi__skip(s, info.offset - bytes_read_so_far); - } - } - - if (info.bpp == 24 && ma == 0xff000000) - s->img_n = 3; - else - s->img_n = ma ? 4 : 3; - if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 - target = req_comp; - else - target = s->img_n; // if they want monochrome, we'll post-convert - - // sanity-check size - if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) - return stbi__errpuc("too large", "Corrupt BMP"); - - out = (stbi_uc*)stbi__malloc_mad3(target, s->img_x, s->img_y, 0); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (info.bpp < 16) { - int z = 0; - if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } - for (i = 0; i < psize; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - if (info.hsz != 12) stbi__get8(s); - pal[i][3] = 255; - } - stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); - if (info.bpp == 1) width = (s->img_x + 7) >> 3; - else if (info.bpp == 4) width = (s->img_x + 1) >> 1; - else if (info.bpp == 8) width = s->img_x; - else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } - pad = (-width) & 3; - if (info.bpp == 1) { - for (j = 0; j < (int)s->img_y; ++j) { - int bit_offset = 7, v = stbi__get8(s); - for (i = 0; i < (int)s->img_x; ++i) { - int color = (v >> bit_offset) & 0x1; - out[z++] = pal[color][0]; - out[z++] = pal[color][1]; - out[z++] = pal[color][2]; - if (target == 4) out[z++] = 255; - if (i + 1 == (int)s->img_x) break; - if ((--bit_offset) < 0) { - bit_offset = 7; - v = stbi__get8(s); - } + if (psize == 0) { + // accept some number of extra bytes after the header, but if the offset points either to before + // the header ends or implies a large amount of extra data, reject the file as malformed + int bytes_read_so_far = + s->callback_already_read + + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = + 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = + 256 * + 4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || + bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); } - stbi__skip(s, pad); - } - } - else { - for (j = 0; j < (int)s->img_y; ++j) { - for (i = 0; i < (int)s->img_x; i += 2) { - int v = stbi__get8(s), v2 = 0; - if (info.bpp == 4) { - v2 = v & 15; - v >>= 4; - } - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - if (i + 1 == (int)s->img_x) break; - v = (info.bpp == 8) ? stbi__get8(s) : v2; - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small positives, or + // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn + // ensures the number computed in the second half of the test can't overflow. + if (info.offset < bytes_read_so_far || + info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); } - stbi__skip(s, pad); - } } - } - else { - int rshift = 0, gshift = 0, bshift = 0, ashift = 0, rcount = 0, gcount = 0, bcount = 0, acount = 0; - int z = 0; - int easy = 0; - stbi__skip(s, info.offset - info.extra_read - info.hsz); - if (info.bpp == 24) width = 3 * s->img_x; - else if (info.bpp == 16) width = 2 * s->img_x; - else /* bpp = 32 and pad = 0 */ width = 0; - pad = (-width) & 3; - if (info.bpp == 24) { - easy = 1; - } - else if (info.bpp == 32) { - if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) - easy = 2; - } - if (!easy) { - if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - // right shift amt to put high bit in position #7 - rshift = stbi__high_bit(mr) - 7; rcount = stbi__bitcount(mr); - gshift = stbi__high_bit(mg) - 7; gcount = stbi__bitcount(mg); - bshift = stbi__high_bit(mb) - 7; bcount = stbi__bitcount(mb); - ashift = stbi__high_bit(ma) - 7; acount = stbi__bitcount(ma); - if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - } - for (j = 0; j < (int)s->img_y; ++j) { - if (easy) { - for (i = 0; i < (int)s->img_x; ++i) { - unsigned char a; - out[z + 2] = stbi__get8(s); - out[z + 1] = stbi__get8(s); - out[z + 0] = stbi__get8(s); - z += 3; - a = (easy == 2 ? stbi__get8(s) : 255); - all_a |= a; - if (target == 4) out[z++] = a; + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = + s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *)stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z = 0; + if (psize == 0 || psize > 256) { + STBI_FREE(out); + return stbi__errpuc("invalid", "Corrupt BMP"); } - } - else { - int bpp = info.bpp; - for (i = 0; i < (int)s->img_x; ++i) { - stbi__uint32 v = (bpp == 16 ? (stbi__uint32)stbi__get16le(s) : stbi__get32le(s)); - unsigned int a; - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); - a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); - all_a |= a; - if (target == 4) out[z++] = STBI__BYTECAST(a); + for (i = 0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) + stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - + psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) + width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) + width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) + width = s->img_x; + else { + STBI_FREE(out); + return stbi__errpuc("bad bpp", "Corrupt BMP"); + } + pad = (-width) & 3; + if (info.bpp == 1) { + for (j = 0; j < (int)s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i = 0; i < (int)s->img_x; ++i) { + int color = (v >> bit_offset) & 0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) + out[z++] = 255; + if (i + 1 == (int)s->img_x) + break; + if ((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j = 0; j < (int)s->img_y; ++j) { + for (i = 0; i < (int)s->img_x; i += 2) { + int v = stbi__get8(s), v2 = 0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) + out[z++] = 255; + if (i + 1 == (int)s->img_x) + break; + v = (info.bpp == 8) ? stbi__get8(s) : + v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) + out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift = 0, gshift = 0, bshift = 0, ashift = 0, rcount = 0, + gcount = 0, bcount = 0, acount = 0; + int z = 0; + int easy = 0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) + width = 3 * s->img_x; + else if (info.bpp == 16) + width = 2 * s->img_x; + else /* bpp = 32 and pad = 0 */ + width = 0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && + ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr) - 7; + rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg) - 7; + gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb) - 7; + bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma) - 7; + acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || + acount > 8) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + } + for (j = 0; j < (int)s->img_y; ++j) { + if (easy) { + for (i = 0; i < (int)s->img_x; ++i) { + unsigned char a; + out[z + 2] = stbi__get8(s); + out[z + 1] = stbi__get8(s); + out[z + 0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) + out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i = 0; i < (int)s->img_x; ++i) { + stbi__uint32 v = + (bpp == 16 ? + (stbi__uint32) + stbi__get16le( + s) : + stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST( + stbi__shiftsigned(v & mr, + rshift, + rcount)); + out[z++] = STBI__BYTECAST( + stbi__shiftsigned(v & mg, + gshift, + gcount)); + out[z++] = STBI__BYTECAST( + stbi__shiftsigned(v & mb, + bshift, + bcount)); + a = (ma ? stbi__shiftsigned(v & ma, + ashift, + acount) : + 255); + all_a |= a; + if (target == 4) + out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); } - } - stbi__skip(s, pad); } - } - // if alpha channel is all 0s, replace with all 255s - if (target == 4 && all_a == 0) - for (i = 4 * s->img_x * s->img_y - 1; i >= 0; i -= 4) - out[i] = 255; + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i = 4 * s->img_x * s->img_y - 1; i >= 0; i -= 4) + out[i] = 255; - if (flip_vertically) { - stbi_uc t; - for (j = 0; j < (int)s->img_y >> 1; ++j) { - stbi_uc* p1 = out + j * s->img_x * target; - stbi_uc* p2 = out + (s->img_y - 1 - j) * s->img_x * target; - for (i = 0; i < (int)s->img_x * target; ++i) { - t = p1[i]; p1[i] = p2[i]; p2[i] = t; - } + if (flip_vertically) { + stbi_uc t; + for (j = 0; j < (int)s->img_y >> 1; ++j) { + stbi_uc *p1 = out + j * s->img_x * target; + stbi_uc *p2 = + out + (s->img_y - 1 - j) * s->img_x * target; + for (i = 0; i < (int)s->img_x * target; ++i) { + t = p1[i]; + p1[i] = p2[i]; + p2[i] = t; + } + } } - } - if (req_comp && req_comp != target) { - out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, + s->img_y); + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - return out; + *x = s->img_x; + *y = s->img_y; + if (comp) + *comp = s->img_n; + return out; } #endif @@ -5266,350 +6489,382 @@ static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, int req // by Jonathan Dummer #ifndef STBI_NO_TGA // returns STBI_rgb or whatever, 0 on error -static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int *is_rgb16) { - // only RGB or RGBA (incl. 16bit) or grey allowed - if (is_rgb16) *is_rgb16 = 0; - switch (bits_per_pixel) { - case 8: return STBI_grey; - case 16: if (is_grey) return STBI_grey_alpha; - // fallthrough - case 15: if (is_rgb16) *is_rgb16 = 1; - return STBI_rgb; - case 24: // fallthrough - case 32: return bits_per_pixel / 8; - default: return 0; - } + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) + *is_rgb16 = 0; + switch (bits_per_pixel) { + case 8: + return STBI_grey; + case 16: + if (is_grey) + return STBI_grey_alpha; + // fallthrough + case 15: + if (is_rgb16) + *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: + return bits_per_pixel / 8; + default: + return 0; + } } -static int stbi__tga_info(stbi__context* s, int* x, int* y, int* comp) +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) { - int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; - int sz, tga_colormap_type; - stbi__get8(s); // discard Offset - tga_colormap_type = stbi__get8(s); // colormap type - if (tga_colormap_type > 1) { - stbi__rewind(s); - return 0; // only RGB or indexed allowed - } - tga_image_type = stbi__get8(s); // image type - if (tga_colormap_type == 1) { // colormapped (paletted) image - if (tga_image_type != 1 && tga_image_type != 9) { - stbi__rewind(s); - return 0; + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, + tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if (tga_colormap_type > 1) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed } - stbi__skip(s, 4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) { - stbi__rewind(s); - return 0; + tga_image_type = stbi__get8(s); // image type + if (tga_colormap_type == 1) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip( + s, + 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && + (sz != 32)) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ((tga_image_type != 2) && (tga_image_type != 3) && + (tga_image_type != 10) && (tga_image_type != 11)) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip( + s, + 9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; } - stbi__skip(s, 4); // skip image x and y origin - tga_colormap_bpp = sz; - } - else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE - if ((tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11)) { - stbi__rewind(s); - return 0; // only RGB or grey allowed, +/- RLE + tga_w = stbi__get16le(s); + if (tga_w < 1) { + stbi__rewind(s); + return 0; // test width } - stbi__skip(s, 9); // skip colormap specification and image x/y origin - tga_colormap_bpp = 0; - } - tga_w = stbi__get16le(s); - if (tga_w < 1) { - stbi__rewind(s); - return 0; // test width - } - tga_h = stbi__get16le(s); - if (tga_h < 1) { - stbi__rewind(s); - return 0; // test height - } - tga_bits_per_pixel = stbi__get8(s); // bits per pixel - stbi__get8(s); // ignore alpha bits - if (tga_colormap_bpp != 0) { - if ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { - // when using a colormap, tga_bits_per_pixel is the size of the indexes - // I don't think anything but 8 or 16bit indexes makes sense - stbi__rewind(s); - return 0; + tga_h = stbi__get16le(s); + if (tga_h < 1) { + stbi__rewind(s); + return 0; // test height } - tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); - } - else { - tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); - } - if (!tga_comp) { - stbi__rewind(s); - return 0; - } - if (x) *x = tga_w; - if (y) *y = tga_h; - if (comp) *comp = tga_comp; - return 1; // seems to have passed everything + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp( + tga_bits_per_pixel, + (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if (!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) + *x = tga_w; + if (y) + *y = tga_h; + if (comp) + *comp = tga_comp; + return 1; // seems to have passed everything } -static int stbi__tga_test(stbi__context* s) +static int stbi__tga_test(stbi__context *s) { - int res = 0; - int sz, tga_color_type; - stbi__get8(s); // discard Offset - tga_color_type = stbi__get8(s); // color type - if (tga_color_type > 1) goto errorEnd; // only RGB or indexed allowed - sz = stbi__get8(s); // image type - if (tga_color_type == 1) { // colormapped (paletted) image - if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 - stbi__skip(s, 4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) goto errorEnd; - stbi__skip(s, 4); // skip image x and y origin - } - else { // "normal" image w/o colormap - if ((sz != 2) && (sz != 3) && (sz != 10) && (sz != 11)) goto errorEnd; // only RGB or grey allowed, +/- RLE - stbi__skip(s, 9); // skip colormap specification and image x/y origin - } - if (stbi__get16le(s) < 1) goto errorEnd; // test width - if (stbi__get16le(s) < 1) goto errorEnd; // test height - sz = stbi__get8(s); // bits per pixel - if ((tga_color_type == 1) && (sz != 8) && (sz != 16)) goto errorEnd; // for colormapped images, bpp is size of an index - if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) goto errorEnd; + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if (tga_color_type > 1) + goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if (tga_color_type == 1) { // colormapped (paletted) image + if (sz != 1 && sz != 9) + goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip( + s, + 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && + (sz != 32)) + goto errorEnd; + stbi__skip(s, 4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ((sz != 2) && (sz != 3) && (sz != 10) && (sz != 11)) + goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip( + s, + 9); // skip colormap specification and image x/y origin + } + if (stbi__get16le(s) < 1) + goto errorEnd; // test width + if (stbi__get16le(s) < 1) + goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ((tga_color_type == 1) && (sz != 8) && (sz != 16)) + goto errorEnd; // for colormapped images, bpp is size of an index + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; - res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 errorEnd: - stbi__rewind(s); - return res; + stbi__rewind(s); + return res; } // read 16bit value and convert to 24bit RGB -static void stbi__tga_read_rgb16(stbi__context* s, stbi_uc* out) +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc *out) { - stbi__uint16 px = (stbi__uint16)stbi__get16le(s); - stbi__uint16 fiveBitMask = 31; - // we have 3 channels with 5bits each - int r = (px >> 10) & fiveBitMask; - int g = (px >> 5) & fiveBitMask; - int b = px & fiveBitMask; - // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later - out[0] = (stbi_uc)((r * 255) / 31); - out[1] = (stbi_uc)((g * 255) / 31); - out[2] = (stbi_uc)((b * 255) / 31); + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255) / 31); + out[1] = (stbi_uc)((g * 255) / 31); + out[2] = (stbi_uc)((b * 255) / 31); - // some people claim that the most significant bit might be used for alpha - // (possibly if an alpha-bit is set in the "image descriptor byte") - // but that only made 16bit test images completely translucent.. - // so let's treat all 15 and 16bit TGAs as RGB with no alpha. + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. } -static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { - // read in the TGA header stuff - int tga_offset = stbi__get8(s); - int tga_indexed = stbi__get8(s); - int tga_image_type = stbi__get8(s); - int tga_is_RLE = 0; - int tga_palette_start = stbi__get16le(s); - int tga_palette_len = stbi__get16le(s); - int tga_palette_bits = stbi__get8(s); - int tga_x_origin = stbi__get16le(s); - int tga_y_origin = stbi__get16le(s); - int tga_width = stbi__get16le(s); - int tga_height = stbi__get16le(s); - int tga_bits_per_pixel = stbi__get8(s); - int tga_comp, tga_rgb16 = 0; - int tga_inverted = stbi__get8(s); - // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) - // image data - unsigned char* tga_data; - unsigned char* tga_palette = NULL; - int i, j; - unsigned char raw_data[4] = { 0 }; - int RLE_count = 0; - int RLE_repeating = 0; - int read_next_pixel = 1; - STBI_NOTUSED(ri); - STBI_NOTUSED(tga_x_origin); // @TODO - STBI_NOTUSED(tga_y_origin); // @TODO + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16 = 0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = { 0 }; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO - if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (tga_height > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); - // do a tiny bit of precessing - if (tga_image_type >= 8) - { - tga_image_type -= 8; - tga_is_RLE = 1; - } - tga_inverted = 1 - ((tga_inverted >> 5) & 1); - - // If I'm paletted, then I'll use the number of bits from the palette - if (tga_indexed) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); - else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); - - if (!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency - return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); - - // tga info - *x = tga_width; - *y = tga_height; - if (comp) *comp = tga_comp; - - if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) - return stbi__errpuc("too large", "Corrupt TGA"); - - tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); - if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); - - // skip to the data's starting position (offset usually = 0) - stbi__skip(s, tga_offset); - - if (!tga_indexed && !tga_is_RLE && !tga_rgb16) { - for (i = 0; i < tga_height; ++i) { - int row = tga_inverted ? tga_height - i - 1 : i; - stbi_uc* tga_row = tga_data + row * tga_width * tga_comp; - stbi__getn(s, tga_row, tga_width * tga_comp); + // do a tiny bit of precessing + if (tga_image_type >= 8) { + tga_image_type -= 8; + tga_is_RLE = 1; } - } - else { - // do I need to load a palette? + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette if (tga_indexed) - { - if (tga_palette_len == 0) { /* you have to have at least one entry! */ - STBI_FREE(tga_data); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } + tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else + tga_comp = stbi__tga_get_comp( + tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); - // any data to skip? (offset usually = 0) - stbi__skip(s, tga_palette_start); - // load the palette - tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); - if (!tga_palette) { - STBI_FREE(tga_data); + if (!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", + "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) + *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char *)stbi__malloc_mad3(tga_width, tga_height, + tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); - } - if (tga_rgb16) { - stbi_uc* pal_entry = tga_palette; - STBI_ASSERT(tga_comp == STBI_rgb); - for (i = 0; i < tga_palette_len; ++i) { - stbi__tga_read_rgb16(s, pal_entry); - pal_entry += tga_comp; - } - } - else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { - STBI_FREE(tga_data); - STBI_FREE(tga_palette); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } - } - // load the data - for (i = 0; i < tga_width * tga_height; ++i) - { - // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? - if (tga_is_RLE) - { - if (RLE_count == 0) - { - // yep, get the next byte as a RLE command - int RLE_cmd = stbi__get8(s); - RLE_count = 1 + (RLE_cmd & 127); - RLE_repeating = RLE_cmd >> 7; - read_next_pixel = 1; - } - else if (!RLE_repeating) - { - read_next_pixel = 1; - } - } - else - { - read_next_pixel = 1; - } - // OK, if I need to read a pixel, do it now - if (read_next_pixel) - { - // load however much data we did have - if (tga_indexed) - { - // read in index, then perform the lookup - int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); - if (pal_idx >= tga_palette_len) { - // invalid index - pal_idx = 0; - } - pal_idx *= tga_comp; - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = tga_palette[pal_idx + j]; - } - } - else if (tga_rgb16) { - STBI_ASSERT(tga_comp == STBI_rgb); - stbi__tga_read_rgb16(s, raw_data); - } - else { - // read in the data raw - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = stbi__get8(s); - } - } - // clear the reading flag for the next pixel - read_next_pixel = 0; - } // end of reading a pixel - // copy data - for (j = 0; j < tga_comp; ++j) - tga_data[i * tga_comp + j] = raw_data[j]; + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset); - // in case we're in RLE mode, keep counting down - --RLE_count; - } - // do I need to invert the image? - if (tga_inverted) - { - for (j = 0; j * 2 < tga_height; ++j) - { - int index1 = j * tga_width * tga_comp; - int index2 = (tga_height - 1 - j) * tga_width * tga_comp; - for (i = tga_width * tga_comp; i > 0; --i) - { - unsigned char temp = tga_data[index1]; - tga_data[index1] = tga_data[index2]; - tga_data[index2] = temp; - ++index1; - ++index2; + if (!tga_indexed && !tga_is_RLE && !tga_rgb16) { + for (i = 0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height - i - 1 : i; + stbi_uc *tga_row = + tga_data + row * tga_width * tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); } - } - } - // clear my palette, if I had one - if (tga_palette != NULL) - { - STBI_FREE(tga_palette); - } - } + } else { + // do I need to load a palette? + if (tga_indexed) { + if (tga_palette_len == + 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", + "Corrupt TGA"); + } - // swap RGB - if the source data was RGB16, it already is in the right order - if (tga_comp >= 3 && !tga_rgb16) - { - unsigned char* tga_pixel = tga_data; - for (i = 0; i < tga_width * tga_height; ++i) - { - unsigned char temp = tga_pixel[0]; - tga_pixel[0] = tga_pixel[2]; - tga_pixel[2] = temp; - tga_pixel += tga_comp; + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start); + // load the palette + tga_palette = (unsigned char *)stbi__malloc_mad2( + tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", + "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i = 0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, + tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", + "Corrupt TGA"); + } + } + // load the data + for (i = 0; i < tga_width * tga_height; ++i) { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if (tga_is_RLE) { + if (RLE_count == 0) { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if (!RLE_repeating) { + read_next_pixel = 1; + } + } else { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if (read_next_pixel) { + // load however much data we did have + if (tga_indexed) { + // read in index, then perform the lookup + int pal_idx = + (tga_bits_per_pixel == 8) ? + stbi__get8(s) : + stbi__get16le(s); + if (pal_idx >= tga_palette_len) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = + tga_palette[pal_idx + j]; + } + } else if (tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i * tga_comp + j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if (tga_inverted) { + for (j = 0; j * 2 < tga_height; ++j) { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * + tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if (tga_palette != NULL) { + STBI_FREE(tga_palette); + } } - } - // convert to target component count - if (req_comp && req_comp != tga_comp) - tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) { + unsigned char *tga_pixel = tga_data; + for (i = 0; i < tga_width * tga_height; ++i) { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } - // the things I do to get rid of an error message, and yet keep - // Microsoft's C compilers happy... [8^( - tga_palette_start = tga_palette_len = tga_palette_bits = - tga_x_origin = tga_y_origin = 0; - STBI_NOTUSED(tga_palette_start); - // OK, done - return tga_data; + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, + tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = tga_x_origin = + tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; } #endif @@ -5617,259 +6872,286 @@ static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, int req // Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB #ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context* s) +static int stbi__psd_test(stbi__context *s) { - int r = (stbi__get32be(s) == 0x38425053); - stbi__rewind(s); - return r; + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; } -static int stbi__psd_decode_rle(stbi__context* s, stbi_uc* p, int pixelCount) +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) { - int count, nleft, len; + int count, nleft, len; - count = 0; - while ((nleft = pixelCount - count) > 0) { - len = stbi__get8(s); - if (len == 128) { - // No-op. + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) + return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) + return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } } - else if (len < 128) { - // Copy next len+1 bytes literally. - len++; - if (len > nleft) return 0; // corrupt data - count += len; - while (len) { - *p = stbi__get8(s); - p += 4; - len--; - } - } - else if (len > 128) { - stbi_uc val; - // Next -len+1 bytes in the dest are replicated from next source byte. - // (Interpret len as a negative 8-bit int.) - len = 257 - len; - if (len > nleft) return 0; // corrupt data - val = stbi__get8(s); - count += len; - while (len) { - *p = val; - p += 4; - len--; - } - } - } - return 1; + return 1; } -static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri, int bpc) +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri, int bpc) { - int pixelCount; - int channelCount, compression; - int channel, i; - int bitdepth; - int w, h; - stbi_uc* out; - STBI_NOTUSED(ri); + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w, h; + stbi_uc *out; + STBI_NOTUSED(ri); - // Check identifier - if (stbi__get32be(s) != 0x38425053) // "8BPS" - return stbi__errpuc("not PSD", "Corrupt PSD image"); + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); - // Check file type version. - if (stbi__get16be(s) != 1) - return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", + "Unsupported version of PSD image"); - // Skip 6 reserved bytes. - stbi__skip(s, 6); + // Skip 6 reserved bytes. + stbi__skip(s, 6); - // Read the number of channels (R, G, B, A, etc). - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) - return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc( + "wrong channel count", + "Unsupported number of channels in PSD image"); - // Read the rows and columns of the image. - h = stbi__get32be(s); - w = stbi__get32be(s); + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); - if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (h > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); - // Make sure the depth is 8 bits. - bitdepth = stbi__get16be(s); - if (bitdepth != 8 && bitdepth != 16) - return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", + "PSD bit depth is not 8 or 16 bit"); - // Make sure the color mode is RGB. - // Valid options are: - // 0: Bitmap - // 1: Grayscale - // 2: Indexed color - // 3: RGB color - // 4: CMYK color - // 7: Multichannel - // 8: Duotone - // 9: Lab color - if (stbi__get16be(s) != 3) - return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", + "PSD is not in RGB color format"); - // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) - stbi__skip(s, stbi__get32be(s)); + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s, stbi__get32be(s)); - // Skip the image resources. (resolution, pen tool paths, etc) - stbi__skip(s, stbi__get32be(s)); + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s)); - // Skip the reserved data. - stbi__skip(s, stbi__get32be(s)); + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s)); - // Find out if the data is compressed. - // Known values: - // 0: no compression - // 1: RLE compressed - compression = stbi__get16be(s); - if (compression > 1) - return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", + "PSD has an unknown compression format"); - // Check size - if (!stbi__mad3sizes_valid(4, w, h, 0)) - return stbi__errpuc("too large", "Corrupt PSD"); + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); - // Create the destination image. + // Create the destination image. - if (!compression && bitdepth == 16 && bpc == 16) { - out = (stbi_uc*)stbi__malloc_mad3(8, w, h, 0); - ri->bits_per_channel = 16; - } - else - out = (stbi_uc*)stbi__malloc(4 * w * h); + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *)stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *)stbi__malloc(4 * w * h); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - pixelCount = w * h; + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w * h; - // Initialize the data to zero. - //memset( out, 0, pixelCount * 4 ); + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); - // Finally, the image data. - if (compression) { - // RLE as used by .PSD and .TIFF - // Loop until you get the number of unpacked bytes you are expecting: - // Read the next source byte into n. - // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. - // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. - // Else if n is 128, noop. - // Endloop + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop - // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, - // which we're going to just skip. - stbi__skip(s, h * channelCount * 2); + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2); - // Read the RLE data by channel. - for (channel = 0; channel < 4; channel++) { - stbi_uc* p; + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; - p = out + channel; - if (channel >= channelCount) { - // Fill this channel with default data. - for (i = 0; i < pixelCount; i++, p += 4) - *p = (channel == 3 ? 255 : 0); - } - else { - // Read the RLE data. - if (!stbi__psd_decode_rle(s, p, pixelCount)) { - STBI_FREE(out); - return stbi__errpuc("corrupt", "bad RLE data"); + p = out + channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", + "bad RLE data"); + } + } + } + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = + ((stbi__uint16 *)out) + channel; + stbi__uint16 val = + channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out + channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = + ((stbi__uint16 *)out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) + stbi__get16be(s); + } else { + stbi_uc *p = out + channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; + i++, p += 4) + *p = (stbi_uc)(stbi__get16be( + s) >> + 8); + } else { + for (i = 0; i < pixelCount; + i++, p += 4) + *p = stbi__get8(s); + } + } + } } - } } - } - else { - // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) - // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. - // Read the data by channel. - for (channel = 0; channel < 4; channel++) { - if (channel >= channelCount) { - // Fill this channel with default data. - if (bitdepth == 16 && bpc == 16) { - stbi__uint16* q = ((stbi__uint16*)out) + channel; - stbi__uint16 val = channel == 3 ? 65535 : 0; - for (i = 0; i < pixelCount; i++, q += 4) - *q = val; + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i = 0; i < w * h; ++i) { + stbi__uint16 *pixel = + (stbi__uint16 *)out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = + (stbi__uint16)(pixel[0] * ra + + inv_a); + pixel[1] = + (stbi__uint16)(pixel[1] * ra + + inv_a); + pixel[2] = + (stbi__uint16)(pixel[2] * ra + + inv_a); + } + } + } else { + for (i = 0; i < w * h; ++i) { + unsigned char *pixel = out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = + (unsigned char)(pixel[0] * ra + + inv_a); + pixel[1] = + (unsigned char)(pixel[1] * ra + + inv_a); + pixel[2] = + (unsigned char)(pixel[2] * ra + + inv_a); + } + } } - else { - stbi_uc* p = out + channel; - stbi_uc val = channel == 3 ? 255 : 0; - for (i = 0; i < pixelCount; i++, p += 4) - *p = val; - } - } - else { - if (ri->bits_per_channel == 16) { // output bpc - stbi__uint16* q = ((stbi__uint16*)out) + channel; - for (i = 0; i < pixelCount; i++, q += 4) - *q = (stbi__uint16)stbi__get16be(s); - } - else { - stbi_uc* p = out + channel; - if (bitdepth == 16) { // input bpc - for (i = 0; i < pixelCount; i++, p += 4) - *p = (stbi_uc)(stbi__get16be(s) >> 8); - } - else { - for (i = 0; i < pixelCount; i++, p += 4) - *p = stbi__get8(s); - } - } - } } - } - // remove weird white matte from PSD - if (channelCount >= 4) { - if (ri->bits_per_channel == 16) { - for (i = 0; i < w * h; ++i) { - stbi__uint16* pixel = (stbi__uint16*)out + 4 * i; - if (pixel[3] != 0 && pixel[3] != 65535) { - float a = pixel[3] / 65535.0f; - float ra = 1.0f / a; - float inv_a = 65535.0f * (1 - ra); - pixel[0] = (stbi__uint16)(pixel[0] * ra + inv_a); - pixel[1] = (stbi__uint16)(pixel[1] * ra + inv_a); - pixel[2] = (stbi__uint16)(pixel[2] * ra + inv_a); - } - } + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *)stbi__convert_format16( + (stbi__uint16 *)out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) + return out; // stbi__convert_format frees input on failure } - else { - for (i = 0; i < w * h; ++i) { - unsigned char* pixel = out + 4 * i; - if (pixel[3] != 0 && pixel[3] != 255) { - float a = pixel[3] / 255.0f; - float ra = 1.0f / a; - float inv_a = 255.0f * (1 - ra); - pixel[0] = (unsigned char)(pixel[0] * ra + inv_a); - pixel[1] = (unsigned char)(pixel[1] * ra + inv_a); - pixel[2] = (unsigned char)(pixel[2] * ra + inv_a); - } - } - } - } - // convert to desired output format - if (req_comp && req_comp != 4) { - if (ri->bits_per_channel == 16) - out = (stbi_uc*)stbi__convert_format16((stbi__uint16*)out, 4, req_comp, w, h); - else - out = stbi__convert_format(out, 4, req_comp, w, h); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } + if (comp) + *comp = 4; + *y = h; + *x = w; - if (comp) *comp = 4; - *y = h; - *x = w; - - return out; + return out; } #endif @@ -5881,217 +7163,256 @@ static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, int req // See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ #ifndef STBI_NO_PIC -static int stbi__pic_is4(stbi__context* s, const char* str) +static int stbi__pic_is4(stbi__context *s, const char *str) { - int i; - for (i = 0; i < 4; ++i) - if (stbi__get8(s) != (stbi_uc)str[i]) - return 0; + int i; + for (i = 0; i < 4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; - return 1; + return 1; } -static int stbi__pic_test_core(stbi__context* s) +static int stbi__pic_test_core(stbi__context *s) { - int i; + int i; - if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) - return 0; + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) + return 0; - for (i = 0; i < 84; ++i) - stbi__get8(s); + for (i = 0; i < 84; ++i) + stbi__get8(s); - if (!stbi__pic_is4(s, "PICT")) - return 0; + if (!stbi__pic_is4(s, "PICT")) + return 0; - return 1; + return 1; } -typedef struct -{ - stbi_uc size, type, channel; +typedef struct { + stbi_uc size, type, channel; } stbi__pic_packet; -static stbi_uc* stbi__readval(stbi__context* s, int channel, stbi_uc* dest) +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) { - int mask = 0x80, i; + int mask = 0x80, i; - for (i = 0; i < 4; ++i, mask >>= 1) { - if (channel & mask) { - if (stbi__at_eof(s)) return stbi__errpuc("bad file", "PIC file too short"); - dest[i] = stbi__get8(s); - } - } - - return dest; -} - -static void stbi__copyval(int channel, stbi_uc* dest, const stbi_uc* src) -{ - int mask = 0x80, i; - - for (i = 0; i < 4; ++i, mask >>= 1) - if (channel & mask) - dest[i] = src[i]; -} - -static stbi_uc* stbi__pic_load_core(stbi__context* s, int width, int height, int* comp, stbi_uc* result) -{ - int act_comp = 0, num_packets = 0, y, chained; - stbi__pic_packet packets[10]; - - // this will (should...) cater for even some bizarre stuff like having data - // for the same channel in multiple packets. - do { - stbi__pic_packet* packet; - - if (num_packets == sizeof(packets) / sizeof(packets[0])) - return stbi__errpuc("bad format", "too many packets"); - - packet = &packets[num_packets++]; - - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - - act_comp |= packet->channel; - - if (stbi__at_eof(s)) return stbi__errpuc("bad file", "file too short (reading packets)"); - if (packet->size != 8) return stbi__errpuc("bad format", "packet isn't 8bpp"); - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? - - for (y = 0; y < height; ++y) { - int packet_idx; - - for (packet_idx = 0; packet_idx < num_packets; ++packet_idx) { - stbi__pic_packet* packet = &packets[packet_idx]; - stbi_uc* dest = result + y * width * 4; - - switch (packet->type) { - default: - return stbi__errpuc("bad format", "packet has bad compression type"); - - case 0: {//uncompressed - int x; - - for (x = 0; x < width; ++x, dest += 4) - if (!stbi__readval(s, packet->channel, dest)) - return 0; - break; - } - - case 1://Pure RLE - { - int left = width, i; - - while (left > 0) { - stbi_uc count, value[4]; - - count = stbi__get8(s); - if (stbi__at_eof(s)) return stbi__errpuc("bad file", "file too short (pure read count)"); - - if (count > left) - count = (stbi_uc)left; - - if (!stbi__readval(s, packet->channel, value)) return 0; - - for (i = 0; i < count; ++i, dest += 4) - stbi__copyval(packet->channel, dest, value); - left -= count; + for (i = 0; i < 4; ++i, mask >>= 1) { + if (channel & mask) { + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", + "PIC file too short"); + dest[i] = stbi__get8(s); } - } - break; - - case 2: {//Mixed RLE - int left = width; - while (left > 0) { - int count = stbi__get8(s), i; - if (stbi__at_eof(s)) return stbi__errpuc("bad file", "file too short (mixed read count)"); - - if (count >= 128) { // Repeated - stbi_uc value[4]; - - if (count == 128) - count = stbi__get16be(s); - else - count -= 127; - if (count > left) - return stbi__errpuc("bad file", "scanline overrun"); - - if (!stbi__readval(s, packet->channel, value)) - return 0; - - for (i = 0; i < count; ++i, dest += 4) - stbi__copyval(packet->channel, dest, value); - } - else { // Raw - ++count; - if (count > left) return stbi__errpuc("bad file", "scanline overrun"); - - for (i = 0; i < count; ++i, dest += 4) - if (!stbi__readval(s, packet->channel, dest)) - return 0; - } - left -= count; - } - break; - } - } } - } - return result; + return dest; } -static void* stbi__pic_load(stbi__context* s, int* px, int* py, int* comp, int req_comp, stbi__result_info* ri) +static void stbi__copyval(int channel, stbi_uc *dest, const stbi_uc *src) { - stbi_uc* result; - int i, x, y, internal_comp; - STBI_NOTUSED(ri); + int mask = 0x80, i; - if (!comp) comp = &internal_comp; - - for (i = 0; i < 92; ++i) - stbi__get8(s); - - x = stbi__get16be(s); - y = stbi__get16be(s); - - if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - - if (stbi__at_eof(s)) return stbi__errpuc("bad file", "file too short (pic header)"); - if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); - - stbi__get32be(s); //skip `ratio' - stbi__get16be(s); //skip `fields' - stbi__get16be(s); //skip `pad' - - // intermediate buffer is RGBA - result = (stbi_uc*)stbi__malloc_mad3(x, y, 4, 0); - if (!result) return stbi__errpuc("outofmem", "Out of memory"); - memset(result, 0xff, x * y * 4); - - if (!stbi__pic_load_core(s, x, y, comp, result)) { - STBI_FREE(result); - result = 0; - } - *px = x; - *py = y; - if (req_comp == 0) req_comp = *comp; - result = stbi__convert_format(result, 4, req_comp, x, y); - - return result; + for (i = 0; i < 4; ++i, mask >>= 1) + if (channel & mask) + dest[i] = src[i]; } -static int stbi__pic_test(stbi__context* s) +static stbi_uc *stbi__pic_load_core(stbi__context *s, int width, int height, + int *comp, stbi_uc *result) { - int r = stbi__pic_test_core(s); - stbi__rewind(s); - return r; + int act_comp = 0, num_packets = 0, y, chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return stbi__errpuc("bad format", "too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", + "file too short (reading packets)"); + if (packet->size != 8) + return stbi__errpuc("bad format", "packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for (y = 0; y < height; ++y) { + int packet_idx; + + for (packet_idx = 0; packet_idx < num_packets; ++packet_idx) { + stbi__pic_packet *packet = &packets[packet_idx]; + stbi_uc *dest = result + y * width * 4; + + switch (packet->type) { + default: + return stbi__errpuc( + "bad format", + "packet has bad compression type"); + + case 0: { //uncompressed + int x; + + for (x = 0; x < width; ++x, dest += 4) + if (!stbi__readval(s, packet->channel, + dest)) + return 0; + break; + } + + case 1: //Pure RLE + { + int left = width, i; + + while (left > 0) { + stbi_uc count, value[4]; + + count = stbi__get8(s); + if (stbi__at_eof(s)) + return stbi__errpuc( + "bad file", + "file too short (pure read count)"); + + if (count > left) + count = (stbi_uc)left; + + if (!stbi__readval(s, packet->channel, + value)) + return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, + dest, value); + left -= count; + } + } break; + + case 2: { //Mixed RLE + int left = width; + while (left > 0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) + return stbi__errpuc( + "bad file", + "file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count == 128) + count = stbi__get16be( + s); + else + count -= 127; + if (count > left) + return stbi__errpuc( + "bad file", + "scanline overrun"); + + if (!stbi__readval( + s, packet->channel, + value)) + return 0; + + for (i = 0; i < count; + ++i, dest += 4) + stbi__copyval( + packet->channel, + dest, value); + } else { // Raw + ++count; + if (count > left) + return stbi__errpuc( + "bad file", + "scanline overrun"); + + for (i = 0; i < count; + ++i, dest += 4) + if (!stbi__readval( + s, + packet->channel, + dest)) + return 0; + } + left -= count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s, int *px, int *py, int *comp, + int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x, y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) + comp = &internal_comp; + + for (i = 0; i < 92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) + return stbi__errpuc("too large", + "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *)stbi__malloc_mad3(x, y, 4, 0); + if (!result) + return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x * y * 4); + + if (!stbi__pic_load_core(s, x, y, comp, result)) { + STBI_FREE(result); + result = 0; + } + *px = x; + *py = y; + if (req_comp == 0) + req_comp = *comp; + result = stbi__convert_format(result, 4, req_comp, x, y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; } #endif @@ -6099,549 +7420,610 @@ static int stbi__pic_test(stbi__context* s) // GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb #ifndef STBI_NO_GIF -typedef struct -{ - stbi__int16 prefix; - stbi_uc first; - stbi_uc suffix; +typedef struct { + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; } stbi__gif_lzw; -typedef struct -{ - int w, h; - stbi_uc* out; // output buffer (always 4 components) - stbi_uc* background; // The current "background" as far as a gif is concerned - stbi_uc* history; - int flags, bgindex, ratio, transparent, eflags; - stbi_uc pal[256][4]; - stbi_uc lpal[256][4]; - stbi__gif_lzw codes[8192]; - stbi_uc* color_table; - int parse, step; - int lflags; - int start_x, start_y; - int max_x, max_y; - int cur_x, cur_y; - int line_size; - int delay; +typedef struct { + int w, h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; } stbi__gif; -static int stbi__gif_test_raw(stbi__context* s) +static int stbi__gif_test_raw(stbi__context *s) { - int sz; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; - sz = stbi__get8(s); - if (sz != '9' && sz != '7') return 0; - if (stbi__get8(s) != 'a') return 0; - return 1; + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || + stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') + return 0; + if (stbi__get8(s) != 'a') + return 0; + return 1; } -static int stbi__gif_test(stbi__context* s) +static int stbi__gif_test(stbi__context *s) { - int r = stbi__gif_test_raw(s); - stbi__rewind(s); - return r; -} - -static void stbi__gif_parse_colortable(stbi__context* s, stbi_uc pal[256][4], int num_entries, int transp) -{ - int i; - for (i = 0; i < num_entries; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - pal[i][3] = transp == i ? 0 : 255; - } -} - -static int stbi__gif_header(stbi__context* s, stbi__gif* g, int* comp, int is_info) -{ - stbi_uc version; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') - return stbi__err("not GIF", "Corrupt GIF"); - - version = stbi__get8(s); - if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); - if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); - - stbi__g_failure_reason = ""; - g->w = stbi__get16le(s); - g->h = stbi__get16le(s); - g->flags = stbi__get8(s); - g->bgindex = stbi__get8(s); - g->ratio = stbi__get8(s); - g->transparent = -1; - - if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large", "Very large image (corrupt?)"); - if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large", "Very large image (corrupt?)"); - - if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments - - if (is_info) return 1; - - if (g->flags & 0x80) - stbi__gif_parse_colortable(s, g->pal, 2 << (g->flags & 7), -1); - - return 1; -} - -static int stbi__gif_info_raw(stbi__context* s, int* x, int* y, int* comp) -{ - stbi__gif* g = (stbi__gif*)stbi__malloc(sizeof(stbi__gif)); - if (!g) return stbi__err("outofmem", "Out of memory"); - if (!stbi__gif_header(s, g, comp, 1)) { - STBI_FREE(g); + int r = stbi__gif_test_raw(s); stbi__rewind(s); - return 0; - } - if (x) *x = g->w; - if (y) *y = g->h; - STBI_FREE(g); - return 1; + return r; } -static void stbi__out_gif_code(stbi__gif* g, stbi__uint16 code) +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], + int num_entries, int transp) { - stbi_uc* p, * c; - int idx; - - // recurse to decode the prefixes, since the linked-list is backwards, - // and working backwards through an interleaved image would be nasty - if (g->codes[code].prefix >= 0) - stbi__out_gif_code(g, g->codes[code].prefix); - - if (g->cur_y >= g->max_y) return; - - idx = g->cur_x + g->cur_y; - p = &g->out[idx]; - g->history[idx / 4] = 1; - - c = &g->color_table[g->codes[code].suffix * 4]; - if (c[3] > 128) { // don't render transparent pixels; - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = c[3]; - } - g->cur_x += 4; - - if (g->cur_x >= g->max_x) { - g->cur_x = g->start_x; - g->cur_y += g->step; - - while (g->cur_y >= g->max_y && g->parse > 0) { - g->step = (1 << g->parse) * g->line_size; - g->cur_y = g->start_y + (g->step >> 1); - --g->parse; + int i; + for (i = 0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; } - } } -static stbi_uc* stbi__process_gif_raster(stbi__context* s, stbi__gif* g) +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, + int is_info) { - stbi_uc lzw_cs; - stbi__int32 len, init_code; - stbi__uint32 first; - stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; - stbi__gif_lzw* p; + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || + stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); - lzw_cs = stbi__get8(s); - if (lzw_cs > 12) return NULL; - clear = 1 << lzw_cs; - first = 1; - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - bits = 0; - valid_bits = 0; - for (init_code = 0; init_code < clear; init_code++) { - g->codes[init_code].prefix = -1; - g->codes[init_code].first = (stbi_uc)init_code; - g->codes[init_code].suffix = (stbi_uc)init_code; - } + version = stbi__get8(s); + if (version != '7' && version != '9') + return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') + return stbi__err("not GIF", "Corrupt GIF"); - // support no starting clear code - avail = clear + 2; - oldcode = -1; + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; - len = 0; - for (;;) { - if (valid_bits < codesize) { - if (len == 0) { - len = stbi__get8(s); // start new block - if (len == 0) - return g->out; - } - --len; - bits |= (stbi__int32)stbi__get8(s) << valid_bits; - valid_bits += 8; + if (g->w > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + + if (comp != 0) + *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) + return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s, g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif *g = (stbi__gif *)stbi__malloc(sizeof(stbi__gif)); + if (!g) + return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind(s); + return 0; } - else { - stbi__int32 code = bits & codemask; - bits >>= codesize; - valid_bits -= codesize; - // @OPTIMIZE: is there some way we can accelerate the non-clear path? - if (code == clear) { // clear code - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - avail = clear + 2; - oldcode = -1; - first = 0; - } - else if (code == clear + 1) { // end of stream code - stbi__skip(s, len); - while ((len = stbi__get8(s)) > 0) - stbi__skip(s, len); - return g->out; - } - else if (code <= avail) { - if (first) { - return stbi__errpuc("no clear code", "Corrupt GIF"); - } + if (x) + *x = g->w; + if (y) + *y = g->h; + STBI_FREE(g); + return 1; +} - if (oldcode >= 0) { - p = &g->codes[avail++]; - if (avail > 8192) { - return stbi__errpuc("too many codes", "Corrupt GIF"); - } +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; - p->prefix = (stbi__int16)oldcode; - p->first = g->codes[oldcode].first; - p->suffix = (code == avail) ? p->first : g->codes[code].first; - } - else if (code == avail) - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); - stbi__out_gif_code(g, (stbi__uint16)code); + if (g->cur_y >= g->max_y) + return; - if ((avail & codemask) == 0 && avail <= 0x0FFF) { - codesize++; - codemask = (1 << codesize) - 1; - } + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; - oldcode = code; - } - else { - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - } + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) + return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc)init_code; + g->codes[init_code].suffix = (stbi_uc)init_code; + } + + // support no starting clear code + avail = clear + 2; + oldcode = -1; + + len = 0; + for (;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32)stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s, len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", + "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc( + "too many codes", + "Corrupt GIF"); + } + + p->prefix = (stbi__int16)oldcode; + p->first = g->codes[oldcode].first; + p->suffix = + (code == avail) ? + p->first : + g->codes[code].first; + } else if (code == avail) + return stbi__errpuc( + "illegal code in raster", + "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16)code); + + if ((avail & codemask) == 0 && + avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", + "Corrupt GIF"); + } + } } - } } // this function is designed to support animated gifs, although stb_image doesn't support it // two back is the image from two frames ago, used for a very specific disposal format -static stbi_uc* stbi__gif_load_next(stbi__context* s, stbi__gif* g, int* comp, int req_comp, stbi_uc* two_back) +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, + int req_comp, stbi_uc *two_back) { - int dispose; - int first_frame; - int pi; - int pcount; - STBI_NOTUSED(req_comp); + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); - // on first frame, any non-written pixels get the background colour (non-transparent) - first_frame = 0; - if (g->out == 0) { - if (!stbi__gif_header(s, g, comp, 0)) return 0; // stbi__g_failure_reason set by stbi__gif_header - if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) - return stbi__errpuc("too large", "GIF image is too large"); - pcount = g->w * g->h; - g->out = (stbi_uc*)stbi__malloc(4 * pcount); - g->background = (stbi_uc*)stbi__malloc(4 * pcount); - g->history = (stbi_uc*)stbi__malloc(pcount); - if (!g->out || !g->background || !g->history) - return stbi__errpuc("outofmem", "Out of memory"); + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp, 0)) + return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", + "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *)stbi__malloc(4 * pcount); + g->background = (stbi_uc *)stbi__malloc(4 * pcount); + g->history = (stbi_uc *)stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); - // image is treated as "transparent" at the start - ie, nothing overwrites the current background; - // background colour is only used for pixels that are not rendered first frame, after that "background" - // color refers to the color that was there the previous frame. - memset(g->out, 0x00, 4 * pcount); - memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) - memset(g->history, 0x00, pcount); // pixels that were affected previous frame - first_frame = 1; - } - else { - // second frame - how do we dispose of the previous one? - dispose = (g->eflags & 0x1C) >> 2; - pcount = g->w * g->h; + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, + 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, + pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; - if ((dispose == 3) && (two_back == 0)) { - dispose = 2; // if I don't have an image to revert back to, default to the old background - } - - if (dispose == 3) { // use previous graphic - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi]) { - memcpy(&g->out[pi * 4], &two_back[pi * 4], 4); + if ((dispose == 3) && (two_back == 0)) { + dispose = + 2; // if I don't have an image to revert back to, default to the old background } - } - } - else if (dispose == 2) { - // restore what was changed last frame to background before that frame; - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi]) { - memcpy(&g->out[pi * 4], &g->background[pi * 4], 4); - } - } - } - else { - // This is a non-disposal case eithe way, so just - // leave the pixels as is, and they will become the new background - // 1: do not dispose - // 0: not specified. - } - // background is what out is after the undoing of the previou frame; - memcpy(g->background, g->out, 4 * g->w * g->h); - } - - // clear my history; - memset(g->history, 0x00, g->w * g->h); // pixels that were affected previous frame - - for (;;) { - int tag = stbi__get8(s); - switch (tag) { - case 0x2C: /* Image Descriptor */ - { - stbi__int32 x, y, w, h; - stbi_uc* o; - - x = stbi__get16le(s); - y = stbi__get16le(s); - w = stbi__get16le(s); - h = stbi__get16le(s); - if (((x + w) > (g->w)) || ((y + h) > (g->h))) - return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); - - g->line_size = g->w * 4; - g->start_x = x * 4; - g->start_y = y * g->line_size; - g->max_x = g->start_x + w * 4; - g->max_y = g->start_y + h * g->line_size; - g->cur_x = g->start_x; - g->cur_y = g->start_y; - - // if the width of the specified rectangle is 0, that means - // we may not see *any* pixels or the image is malformed; - // to make sure this is caught, move the current y down to - // max_y (which is what out_gif_code checks). - if (w == 0) - g->cur_y = g->max_y; - - g->lflags = stbi__get8(s); - - if (g->lflags & 0x40) { - g->step = 8 * g->line_size; // first interlaced spacing - g->parse = 3; - } - else { - g->step = g->line_size; - g->parse = 0; - } - - if (g->lflags & 0x80) { - stbi__gif_parse_colortable(s, g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); - g->color_table = (stbi_uc*)g->lpal; - } - else if (g->flags & 0x80) { - g->color_table = (stbi_uc*)g->pal; - } - else - return stbi__errpuc("missing color table", "Corrupt GIF"); - - o = stbi__process_gif_raster(s, g); - if (!o) return NULL; - - // if this was the first frame, - pcount = g->w * g->h; - if (first_frame && (g->bgindex > 0)) { - // if first frame, any pixel not drawn to gets the background color - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi] == 0) { - g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; - memcpy(&g->out[pi * 4], &g->pal[g->bgindex], 4); - } - } - } - - return o; - } - - case 0x21: // Comment Extension. - { - int len; - int ext = stbi__get8(s); - if (ext == 0xF9) { // Graphic Control Extension. - len = stbi__get8(s); - if (len == 4) { - g->eflags = stbi__get8(s); - g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. - - // unset old transparent - if (g->transparent >= 0) { - g->pal[g->transparent][3] = 255; - } - if (g->eflags & 0x01) { - g->transparent = stbi__get8(s); - if (g->transparent >= 0) { - g->pal[g->transparent][3] = 0; + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], + &two_back[pi * 4], 4); + } } - } - else { - // don't need transparent - stbi__skip(s, 1); - g->transparent = -1; - } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], + &g->background[pi * 4], 4); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. } - else { - stbi__skip(s, len); - break; - } - } - while ((len = stbi__get8(s)) != 0) { - stbi__skip(s, len); - } - break; + + // background is what out is after the undoing of the previou frame; + memcpy(g->background, g->out, 4 * g->w * g->h); } - case 0x3B: // gif stream termination code - return (stbi_uc*)s; // using '1' causes warning on some compilers + // clear my history; + memset(g->history, 0x00, + g->w * g->h); // pixels that were affected previous frame - default: - return stbi__errpuc("unknown code", "Corrupt GIF"); + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", + "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = + 8 * + g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable( + s, g->lpal, 2 << (g->lflags & 7), + g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *)g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *)g->pal; + } else + return stbi__errpuc("missing color table", + "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) + return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = + 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy(&g->out[pi * 4], + &g->pal[g->bgindex], 4); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = + 10 * + stbi__get16le( + s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent] + [3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) + s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } } - } } -static void* stbi__load_gif_main_outofmem(stbi__gif* g, stbi_uc* out, int** delays) +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, + int **delays) { - STBI_FREE(g->out); - STBI_FREE(g->history); - STBI_FREE(g->background); + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); - if (out) STBI_FREE(out); - if (delays && *delays) STBI_FREE(*delays); - return stbi__errpuc("outofmem", "Out of memory"); + if (out) + STBI_FREE(out); + if (delays && *delays) + STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); } -static void* stbi__load_gif_main(stbi__context* s, int** delays, int* x, int* y, int* z, int* comp, int req_comp) +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, + int *z, int *comp, int req_comp) { - if (stbi__gif_test(s)) { - int layers = 0; - stbi_uc* u = 0; - stbi_uc* out = 0; - stbi_uc* two_back = 0; + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, + two_back); + if (u == (stbi_uc *)s) + u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = + (stbi_uc *)STBI_REALLOC_SIZED( + out, out_size, + layers * stride); + if (!tmp) + return stbi__load_gif_main_outofmem( + &g, out, delays); + else { + out = (stbi_uc *)tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int *) + STBI_REALLOC_SIZED( + *delays, + delays_size, + sizeof(int) * + layers); + if (!new_delays) + return stbi__load_gif_main_outofmem( + &g, out, + delays); + *delays = new_delays; + delays_size = + layers * sizeof(int); + } + } else { + out = (stbi_uc *)stbi__malloc(layers * + stride); + if (!out) + return stbi__load_gif_main_outofmem( + &g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int *)stbi__malloc( + layers * sizeof(int)); + if (!*delays) + return stbi__load_gif_main_outofmem( + &g, out, + delays); + delays_size = + layers * sizeof(int); + } + } + memcpy(out + ((layers - 1) * stride), u, + stride); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, + layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; stbi__gif g; - int stride; - int out_size = 0; - int delays_size = 0; - - STBI_NOTUSED(out_size); - STBI_NOTUSED(delays_size); - memset(&g, 0, sizeof(g)); - if (delays) { - *delays = 0; - } + STBI_NOTUSED(ri); - do { - u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); - if (u == (stbi_uc*)s) u = 0; // end of animated gif marker - - if (u) { + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *)s) + u = 0; // end of animated gif marker + if (u) { *x = g.w; *y = g.h; - ++layers; - stride = g.w * g.h * 4; - if (out) { - void* tmp = (stbi_uc*)STBI_REALLOC_SIZED(out, out_size, layers * stride); - if (!tmp) - return stbi__load_gif_main_outofmem(&g, out, delays); - else { - out = (stbi_uc*)tmp; - out_size = layers * stride; - } + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } - if (delays) { - int* new_delays = (int*)STBI_REALLOC_SIZED(*delays, delays_size, sizeof(int) * layers); - if (!new_delays) - return stbi__load_gif_main_outofmem(&g, out, delays); - *delays = new_delays; - delays_size = layers * sizeof(int); - } - } - else { - out = (stbi_uc*)stbi__malloc(layers * stride); - if (!out) - return stbi__load_gif_main_outofmem(&g, out, delays); - out_size = layers * stride; - if (delays) { - *delays = (int*)stbi__malloc(layers * sizeof(int)); - if (!*delays) - return stbi__load_gif_main_outofmem(&g, out, delays); - delays_size = layers * sizeof(int); - } - } - memcpy(out + ((layers - 1) * stride), u, stride); - if (layers >= 2) { - two_back = out - 2 * stride; - } - - if (delays) { - (*delays)[layers - 1U] = g.delay; - } - } - } while (u != 0); - - // free temp buffer; - STBI_FREE(g.out); + // free buffers needed for multiple frame loading; STBI_FREE(g.history); STBI_FREE(g.background); - // do the final conversion after loading everything; - if (req_comp && req_comp != 4) - out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); - - *z = layers; - return out; - } - else { - return stbi__errpuc("not GIF", "Image was not as a gif type."); - } + return u; } -static void* stbi__gif_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) { - stbi_uc* u = 0; - stbi__gif g; - memset(&g, 0, sizeof(g)); - STBI_NOTUSED(ri); - - u = stbi__gif_load_next(s, &g, comp, req_comp, 0); - if (u == (stbi_uc*)s) u = 0; // end of animated gif marker - if (u) { - *x = g.w; - *y = g.h; - - // moved conversion to after successful load so that the same - // can be done for multiple frames. - if (req_comp && req_comp != 4) - u = stbi__convert_format(u, 4, req_comp, g.w, g.h); - } - else if (g.out) { - // if there was an error and we allocated an image buffer, free it! - STBI_FREE(g.out); - } - - // free buffers needed for multiple frame loading; - STBI_FREE(g.history); - STBI_FREE(g.background); - - return u; -} - -static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp) -{ - return stbi__gif_info_raw(s, x, y, comp); + return stbi__gif_info_raw(s, x, y, comp); } #endif @@ -6649,400 +8031,462 @@ static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp) // Radiance RGBE HDR loader // originally by Nicolas Schulz #ifndef STBI_NO_HDR -static int stbi__hdr_test_core(stbi__context* s, const char* signature) +static int stbi__hdr_test_core(stbi__context *s, const char *signature) { - int i; - for (i = 0; signature[i]; ++i) - if (stbi__get8(s) != signature[i]) - return 0; - stbi__rewind(s); - return 1; -} - -static int stbi__hdr_test(stbi__context* s) -{ - int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); - stbi__rewind(s); - if (!r) { - r = stbi__hdr_test_core(s, "#?RGBE\n"); + int i; + for (i = 0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; stbi__rewind(s); - } - return r; + return 1; } -#define STBI__HDR_BUFLEN 1024 -static char* stbi__hdr_gettoken(stbi__context* z, char* buffer) +static int stbi__hdr_test(stbi__context *s) { - int len = 0; - char c = '\0'; - - c = (char)stbi__get8(z); - - while (!stbi__at_eof(z) && c != '\n') { - buffer[len++] = c; - if (len == STBI__HDR_BUFLEN - 1) { - // flush to end of line - while (!stbi__at_eof(z) && stbi__get8(z) != '\n') - ; - break; + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if (!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len = 0; + char c = '\0'; + c = (char)stbi__get8(z); - } - buffer[len] = 0; - return buffer; -} - -static void stbi__hdr_convert(float* output, stbi_uc* input, int req_comp) -{ - if (input[3] != 0) { - float f1; - // Exponent - f1 = (float)ldexp(1.0f, input[3] - (int)(128 + 8)); - if (req_comp <= 2) - output[0] = (input[0] + input[1] + input[2]) * f1 / 3; - else { - output[0] = input[0] * f1; - output[1] = input[1] * f1; - output[2] = input[2] * f1; - } - if (req_comp == 2) output[1] = 1; - if (req_comp == 4) output[3] = 1; - } - else { - switch (req_comp) { - case 4: output[3] = 1; /* fallthrough */ - case 3: output[0] = output[1] = output[2] = 0; - break; - case 2: output[1] = 1; /* fallthrough */ - case 1: output[0] = 0; - break; - } - } -} - -static float* stbi__hdr_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) -{ - char buffer[STBI__HDR_BUFLEN]; - char* token; - int valid = 0; - int width, height; - stbi_uc* scanline; - float* hdr_data; - int len; - unsigned char count, value; - int i, j, k, c1, c2, z; - const char* headerToken; - STBI_NOTUSED(ri); - - // Check identifier - headerToken = stbi__hdr_gettoken(s, buffer); - if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) - return stbi__errpf("not HDR", "Corrupt HDR image"); - - // Parse header - for (;;) { - token = stbi__hdr_gettoken(s, buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); - - // Parse width and height - // can't use sscanf() if we're not using stdio! - token = stbi__hdr_gettoken(s, buffer); - if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - height = (int)strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - width = (int)strtol(token, NULL, 10); - - if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large", "Very large image (corrupt?)"); - if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large", "Very large image (corrupt?)"); - - *x = width; - *y = height; - - if (comp) *comp = 3; - if (req_comp == 0) req_comp = 3; - - if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) - return stbi__errpf("too large", "HDR image is too large"); - - // Read data - hdr_data = (float*)stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); - if (!hdr_data) - return stbi__errpf("outofmem", "Out of memory"); - - // Load image data - // image data is stored as some number of sca - if (width < 8 || width >= 32768) { - // Read flat data - for (j = 0; j < height; ++j) { - for (i = 0; i < width; ++i) { - stbi_uc rgbe[4]; - main_decode_loop: - stbi__getn(s, rgbe, 4); - stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); - } - } - } - else { - // Read RLE-encoded data - scanline = NULL; - - for (j = 0; j < height; ++j) { - c1 = stbi__get8(s); - c2 = stbi__get8(s); - len = stbi__get8(s); - if (c1 != 2 || c2 != 2 || (len & 0x80)) { - // not run-length encoded, so we have to actually use THIS data as a decoded - // pixel (note this can't be a valid pixel--one of RGB must be >= 128) - stbi_uc rgbe[4]; - rgbe[0] = (stbi_uc)c1; - rgbe[1] = (stbi_uc)c2; - rgbe[2] = (stbi_uc)len; - rgbe[3] = (stbi_uc)stbi__get8(s); - stbi__hdr_convert(hdr_data, rgbe, req_comp); - i = 1; - j = 0; - STBI_FREE(scanline); - goto main_decode_loop; // yes, this makes no sense - } - len <<= 8; - len |= stbi__get8(s); - if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } - if (scanline == NULL) { - scanline = (stbi_uc*)stbi__malloc_mad2(width, 4, 0); - if (!scanline) { - STBI_FREE(hdr_data); - return stbi__errpf("outofmem", "Out of memory"); + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN - 1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; } - } - - for (k = 0; k < 4; ++k) { - int nleft; - i = 0; - while ((nleft = width - i) > 0) { - count = stbi__get8(s); - if (count > 128) { - // Run - value = stbi__get8(s); - count -= 128; - if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = value; - } - else { - // Dump - if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = stbi__get8(s); - } - } - } - for (i = 0; i < width; ++i) - stbi__hdr_convert(hdr_data + (j * width + i) * req_comp, scanline + i * 4, req_comp); + c = (char)stbi__get8(z); } - if (scanline) - STBI_FREE(scanline); - } - return hdr_data; + buffer[len] = 0; + return buffer; } -static int stbi__hdr_info(stbi__context* s, int* x, int* y, int* comp) +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) { - char buffer[STBI__HDR_BUFLEN]; - char* token; - int valid = 0; - int dummy; + if (input[3] != 0) { + float f1; + // Exponent + f1 = (float)ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) + output[1] = 1; + if (req_comp == 4) + output[3] = 1; + } else { + switch (req_comp) { + case 4: + output[3] = 1; /* fallthrough */ + case 3: + output[0] = output[1] = output[2] = 0; + break; + case 2: + output[1] = 1; /* fallthrough */ + case 1: + output[0] = 0; + break; + } + } +} - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1, c2, z; + const char *headerToken; + STBI_NOTUSED(ri); - if (stbi__hdr_test(s) == 0) { - stbi__rewind(s); - return 0; - } + // Check identifier + headerToken = stbi__hdr_gettoken(s, buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && + strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); - for (;;) { + // Parse header + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) + break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) + valid = 1; + } + + if (!valid) + return stbi__errpf("unsupported format", + "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! token = stbi__hdr_gettoken(s, buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } + if (strncmp(token, "-Y ", 3)) + return stbi__errpf("unsupported data layout", + "Unsupported HDR format"); + token += 3; + height = (int)strtol(token, &token, 10); + while (*token == ' ') + ++token; + if (strncmp(token, "+X ", 3)) + return stbi__errpf("unsupported data layout", + "Unsupported HDR format"); + token += 3; + width = (int)strtol(token, NULL, 10); - if (!valid) { - stbi__rewind(s); - return 0; - } - token = stbi__hdr_gettoken(s, buffer); - if (strncmp(token, "-Y ", 3)) { - stbi__rewind(s); - return 0; - } - token += 3; - *y = (int)strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) { - stbi__rewind(s); - return 0; - } - token += 3; - *x = (int)strtol(token, NULL, 10); - *comp = 3; - return 1; + if (height > STBI_MAX_DIMENSIONS) + return stbi__errpf("too large", "Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) + return stbi__errpf("too large", "Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) + *comp = 3; + if (req_comp == 0) + req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *)stbi__malloc_mad4(width, height, req_comp, + sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if (width < 8 || width >= 32768) { + // Read flat data + for (j = 0; j < height; ++j) { + for (i = 0; i < width; ++i) { + stbi_uc rgbe[4]; +main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + + j * width * req_comp + + i * req_comp, + rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc)c1; + rgbe[1] = (stbi_uc)c2; + rgbe[2] = (stbi_uc)len; + rgbe[3] = (stbi_uc)stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf( + "invalid decoded scanline length", + "corrupt HDR"); + } + if (scanline == NULL) { + scanline = (stbi_uc *)stbi__malloc_mad2(width, + 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", + "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if ((count == 0) || + (count > nleft)) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf( + "corrupt", + "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = + value; + } else { + // Dump + if ((count == 0) || + (count > nleft)) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf( + "corrupt", + "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = + stbi__get8(s); + } + } + } + for (i = 0; i < width; ++i) + stbi__hdr_convert(hdr_data + (j * width + i) * + req_comp, + scanline + i * 4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind(s); + return 0; + } + + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) + break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) + valid = 1; + } + + if (!valid) { + stbi__rewind(s); + return 0; + } + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *y = (int)strtol(token, &token, 10); + while (*token == ' ') + ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *x = (int)strtol(token, NULL, 10); + *comp = 3; + return 1; } #endif // STBI_NO_HDR #ifndef STBI_NO_BMP -static int stbi__bmp_info(stbi__context* s, int* x, int* y, int* comp) +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) { - void* p; - stbi__bmp_data info; + void *p; + stbi__bmp_data info; - info.all_a = 255; - p = stbi__bmp_parse_header(s, &info); - if (p == NULL) { - stbi__rewind(s); - return 0; - } - if (x) *x = s->img_x; - if (y) *y = s->img_y; - if (comp) { - if (info.bpp == 24 && info.ma == 0xff000000) - *comp = 3; - else - *comp = info.ma ? 4 : 3; - } - return 1; + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind(s); + return 0; + } + if (x) + *x = s->img_x; + if (y) + *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; } #endif #ifndef STBI_NO_PSD -static int stbi__psd_info(stbi__context* s, int* x, int* y, int* comp) +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) { - int channelCount, dummy, depth; - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind(s); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind(s); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind(s); - return 0; - } - *y = stbi__get32be(s); - *x = stbi__get32be(s); - depth = stbi__get16be(s); - if (depth != 8 && depth != 16) { - stbi__rewind(s); - return 0; - } - if (stbi__get16be(s) != 3) { - stbi__rewind(s); - return 0; - } - *comp = 4; - return 1; + int channelCount, dummy, depth; + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind(s); + return 0; + } + *comp = 4; + return 1; } -static int stbi__psd_is16(stbi__context* s) +static int stbi__psd_is16(stbi__context *s) { - int channelCount, depth; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind(s); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind(s); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind(s); - return 0; - } - STBI_NOTUSED(stbi__get32be(s)); - STBI_NOTUSED(stbi__get32be(s)); - depth = stbi__get16be(s); - if (depth != 16) { - stbi__rewind(s); - return 0; - } - return 1; + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind(s); + return 0; + } + return 1; } #endif #ifndef STBI_NO_PIC -static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp) +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) { - int act_comp = 0, num_packets = 0, chained, dummy; - stbi__pic_packet packets[10]; + int act_comp = 0, num_packets = 0, chained, dummy; + stbi__pic_packet packets[10]; - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; - if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) { - stbi__rewind(s); - return 0; - } + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } - stbi__skip(s, 88); - - *x = stbi__get16be(s); - *y = stbi__get16be(s); - if (stbi__at_eof(s)) { - stbi__rewind(s); - return 0; - } - if ((*x) != 0 && (1 << 28) / (*x) < (*y)) { - stbi__rewind(s); - return 0; - } - - stbi__skip(s, 8); - - do { - stbi__pic_packet* packet; - - if (num_packets == sizeof(packets) / sizeof(packets[0])) - return 0; - - packet = &packets[num_packets++]; - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - act_comp |= packet->channel; + stbi__skip(s, 88); + *x = stbi__get16be(s); + *y = stbi__get16be(s); if (stbi__at_eof(s)) { - stbi__rewind(s); - return 0; + stbi__rewind(s); + return 0; } - if (packet->size != 8) { - stbi__rewind(s); - return 0; + if ((*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind(s); + return 0; } - } while (chained); - *comp = (act_comp & 0x10 ? 4 : 3); + stbi__skip(s, 8); - return 1; + do { + stbi__pic_packet *packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if (packet->size != 8) { + stbi__rewind(s); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; } #endif @@ -7059,273 +8503,317 @@ static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp) #ifndef STBI_NO_PNM -static int stbi__pnm_test(stbi__context* s) +static int stbi__pnm_test(stbi__context *s) { - char p, t; - p = (char)stbi__get8(s); - t = (char)stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind(s); - return 0; - } - return 1; -} - -static void* stbi__pnm_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) -{ - stbi_uc* out; - STBI_NOTUSED(ri); - - ri->bits_per_channel = stbi__pnm_info(s, (int*)&s->img_x, (int*)&s->img_y, (int*)&s->img_n); - if (ri->bits_per_channel == 0) - return 0; - - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large", "Very large image (corrupt?)"); - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - - if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) - return stbi__errpuc("too large", "PNM too large"); - - out = (stbi_uc*)stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { - STBI_FREE(out); - return stbi__errpuc("bad PNM", "PNM file truncated"); - } - - if (req_comp && req_comp != s->img_n) { - if (ri->bits_per_channel == 16) { - out = (stbi_uc*)stbi__convert_format16((stbi__uint16*)out, s->img_n, req_comp, s->img_x, s->img_y); + char p, t; + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; } - else { - out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); - } - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - return out; -} - -static int stbi__pnm_isspace(char c) -{ - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; -} - -static void stbi__pnm_skip_whitespace(stbi__context* s, char* c) -{ - for (;;) { - while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) - *c = (char)stbi__get8(s); - - if (stbi__at_eof(s) || *c != '#') - break; - - while (!stbi__at_eof(s) && *c != '\n' && *c != '\r') - *c = (char)stbi__get8(s); - } -} - -static int stbi__pnm_isdigit(char c) -{ - return c >= '0' && c <= '9'; -} - -static int stbi__pnm_getinteger(stbi__context* s, char* c) -{ - int value = 0; - - while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { - value = value * 10 + (*c - '0'); - *c = (char)stbi__get8(s); - if ((value > 214748364) || (value == 214748364 && *c > '7')) - return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); - } - - return value; -} - -static int stbi__pnm_info(stbi__context* s, int* x, int* y, int* comp) -{ - int maxv, dummy; - char c, p, t; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - stbi__rewind(s); - - // Get identifier - p = (char)stbi__get8(s); - t = (char)stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind(s); - return 0; - } - - *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm - - c = (char)stbi__get8(s); - stbi__pnm_skip_whitespace(s, &c); - - *x = stbi__pnm_getinteger(s, &c); // read width - if (*x == 0) - return stbi__err("invalid width", "PPM image header had zero or overflowing width"); - stbi__pnm_skip_whitespace(s, &c); - - *y = stbi__pnm_getinteger(s, &c); // read height - if (*y == 0) - return stbi__err("invalid width", "PPM image header had zero or overflowing width"); - stbi__pnm_skip_whitespace(s, &c); - - maxv = stbi__pnm_getinteger(s, &c); // read max value - if (maxv > 65535) - return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); - else if (maxv > 255) - return 16; - else - return 8; -} - -static int stbi__pnm_is16(stbi__context* s) -{ - if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) return 1; - return 0; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info( + s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) + *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, + ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *)stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, + ri->bits_per_channel / 8, 0); + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + if (!stbi__getn(s, out, + s->img_n * s->img_x * s->img_y * + (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc *)stbi__convert_format16( + (stbi__uint16 *)out, s->img_n, req_comp, + s->img_x, s->img_y); + } else { + out = stbi__convert_format(out, s->img_n, req_comp, + s->img_x, s->img_y); + } + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || + c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char)stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r') + *c = (char)stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value * 10 + (*c - '0'); + *c = (char)stbi__get8(s); + if ((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err( + "integer parse overflow", + "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? + 3 : + 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char)stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + if (*x == 0) + return stbi__err( + "invalid width", + "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err( + "invalid width", + "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err( + "max value > 65535", + "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; } #endif -static int stbi__info_main(stbi__context* s, int* x, int* y, int* comp) +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) { #ifndef STBI_NO_JPEG - if (stbi__jpeg_info(s, x, y, comp)) return 1; + if (stbi__jpeg_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_PNG - if (stbi__png_info(s, x, y, comp)) return 1; + if (stbi__png_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_GIF - if (stbi__gif_info(s, x, y, comp)) return 1; + if (stbi__gif_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_BMP - if (stbi__bmp_info(s, x, y, comp)) return 1; + if (stbi__bmp_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_PSD - if (stbi__psd_info(s, x, y, comp)) return 1; + if (stbi__psd_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_PIC - if (stbi__pic_info(s, x, y, comp)) return 1; + if (stbi__pic_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_PNM - if (stbi__pnm_info(s, x, y, comp)) return 1; + if (stbi__pnm_info(s, x, y, comp)) + return 1; #endif #ifndef STBI_NO_HDR - if (stbi__hdr_info(s, x, y, comp)) return 1; + if (stbi__hdr_info(s, x, y, comp)) + return 1; #endif - // test tga last because it's a crappy test! + // test tga last because it's a crappy test! #ifndef STBI_NO_TGA - if (stbi__tga_info(s, x, y, comp)) - return 1; + if (stbi__tga_info(s, x, y, comp)) + return 1; #endif - return stbi__err("unknown image type", "Image not of any known type, or corrupt"); + return stbi__err("unknown image type", + "Image not of any known type, or corrupt"); } -static int stbi__is_16_main(stbi__context* s) +static int stbi__is_16_main(stbi__context *s) { #ifndef STBI_NO_PNG - if (stbi__png_is16(s)) return 1; + if (stbi__png_is16(s)) + return 1; #endif #ifndef STBI_NO_PSD - if (stbi__psd_is16(s)) return 1; + if (stbi__psd_is16(s)) + return 1; #endif #ifndef STBI_NO_PNM - if (stbi__pnm_is16(s)) return 1; + if (stbi__pnm_is16(s)) + return 1; #endif - return 0; + return 0; } #ifndef STBI_NO_STDIO -STBIDEF int stbi_info(char const* filename, int* x, int* y, int* comp) +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) { - FILE* f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_info_from_file(f, x, y, comp); - fclose(f); - return result; + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) + return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; } -STBIDEF int stbi_info_from_file(FILE* f, int* x, int* y, int* comp) +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) { - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__info_main(&s, x, y, comp); - fseek(f, pos, SEEK_SET); - return r; + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s, x, y, comp); + fseek(f, pos, SEEK_SET); + return r; } -STBIDEF int stbi_is_16_bit(char const* filename) +STBIDEF int stbi_is_16_bit(char const *filename) { - FILE* f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_is_16_bit_from_file(f); - fclose(f); - return result; + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) + return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; } -STBIDEF int stbi_is_16_bit_from_file(FILE* f) +STBIDEF int stbi_is_16_bit_from_file(FILE *f) { - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__is_16_main(&s); - fseek(f, pos, SEEK_SET); - return r; + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f, pos, SEEK_SET); + return r; } #endif // !STBI_NO_STDIO -STBIDEF int stbi_info_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp) +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp) { - stbi__context s; - stbi__start_mem(&s, buffer, len); - return stbi__info_main(&s, x, y, comp); + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__info_main(&s, x, y, comp); } -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const* c, void* user, int* x, int* y, int* comp) +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, + int *x, int *y, int *comp) { - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks*)c, user); - return stbi__info_main(&s, x, y, comp); + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)c, user); + return stbi__info_main(&s, x, y, comp); } -STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const* buffer, int len) +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) { - stbi__context s; - stbi__start_mem(&s, buffer, len); - return stbi__is_16_main(&s); + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__is_16_main(&s); } -STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const* c, void* user) +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, + void *user) { - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks*)c, user); - return stbi__is_16_main(&s); + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)c, user); + return stbi__is_16_main(&s); } /* @@ -7551,4 +9039,4 @@ AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ -*/ \ No newline at end of file +*/ diff --git a/源代码/StgSharpC/vector.c b/源代码/StgSharpC/vector.c index 406ddfbe..c62fde5b 100644 --- a/源代码/StgSharpC/vector.c +++ b/源代码/StgSharpC/vector.c @@ -1,31 +1,38 @@ #include "StgSharpC.h" -#include "ssgc_internal.h" +#include "ssc_internal.h" -SSCAPI void SSCDECL normalize(__m128* source, __m128* target) +SSCAPI void SSCDECL normalize(__m128 *source, __m128 *target) { - // ¼ÆËãsourceµij¤¶ȵÄƽ·½ - __m128 a_length_sq = _mm_mul_ps(*source, *source); // ÏòÁ¿µã³Ë×ÔÉí - a_length_sq = _mm_add_ps(a_length_sq, _mm_shuffle_ps(a_length_sq, a_length_sq, _MM_SHUFFLE(2, 3, 0, 1))); - a_length_sq = _mm_add_ss(a_length_sq, _mm_shuffle_ps(a_length_sq, a_length_sq, _MM_SHUFFLE(0, 0, 3, 2))); + __m128 a_length_sq = _mm_mul_ps(*source, *source); + a_length_sq = _mm_add_ps(a_length_sq, + _mm_shuffle_ps(a_length_sq, a_length_sq, + _MM_SHUFFLE(2, 3, 0, 1))); + a_length_sq = _mm_add_ss(a_length_sq, + _mm_shuffle_ps(a_length_sq, a_length_sq, + _MM_SHUFFLE(0, 0, 3, 2))); - // ¹éһ»¯ÏòÁ¿source - __m128 a_inv_length = _mm_rsqrt_ps(a_length_sq); // ¼ÆËãsource³¤¶ȵĵ¹Êýƽ·½¸ù - *source = _mm_mul_ps(*source, a_inv_length); // ÓÃsource³ËÒÔÆ䳤¶ȵĵ¹Êýƽ·½¸ùµõ½µ¥λÏòÁ¿ + __m128 a_inv_length = _mm_rsqrt_ps(a_length_sq); + *source = _mm_mul_ps(*source, a_inv_length); - // ¼ÆËãtargetÓësourceµĵã»ý - __m128 dot_product = _mm_mul_ps(*target, *source); - dot_product = _mm_add_ps(dot_product, _mm_shuffle_ps(dot_product, dot_product, _MM_SHUFFLE(2, 3, 0, 1))); - dot_product = _mm_add_ss(dot_product, _mm_shuffle_ps(dot_product, dot_product, _MM_SHUFFLE(0, 0, 3, 2))); + __m128 dot_product = _mm_mul_ps(*target, *source); + dot_product = _mm_add_ps(dot_product, + _mm_shuffle_ps(dot_product, dot_product, + _MM_SHUFFLE(2, 3, 0, 1))); + dot_product = _mm_add_ss(dot_product, + _mm_shuffle_ps(dot_product, dot_product, + _MM_SHUFFLE(0, 0, 3, 2))); - // ´ÓtargetÖмõȥsourceµķ½Ïò·ÖÁ¿£¬ʹÆ䴹ֱÓÚsource - __m128 b_orthogonal = _mm_sub_ps(*target, _mm_mul_ps(*source, dot_product)); + __m128 b_orthogonal = + _mm_sub_ps(*target, _mm_mul_ps(*source, dot_product)); - // ¹éһ»¯ÏòÁ¿b_orthogonal - __m128 b_length_sq = _mm_mul_ps(b_orthogonal, b_orthogonal); - b_length_sq = _mm_add_ps(b_length_sq, _mm_shuffle_ps(b_length_sq, b_length_sq, _MM_SHUFFLE(2, 3, 0, 1))); - b_length_sq = _mm_add_ss(b_length_sq, _mm_shuffle_ps(b_length_sq, b_length_sq, _MM_SHUFFLE(0, 0, 3, 2))); - - __m128 b_inv_length = _mm_rsqrt_ps(b_length_sq); - *target = _mm_mul_ps(b_orthogonal, b_inv_length); + __m128 b_length_sq = _mm_mul_ps(b_orthogonal, b_orthogonal); + b_length_sq = _mm_add_ps(b_length_sq, + _mm_shuffle_ps(b_length_sq, b_length_sq, + _MM_SHUFFLE(2, 3, 0, 1))); + b_length_sq = _mm_add_ss(b_length_sq, + _mm_shuffle_ps(b_length_sq, b_length_sq, + _MM_SHUFFLE(0, 0, 3, 2))); + __m128 b_inv_length = _mm_rsqrt_ps(b_length_sq); + *target = _mm_mul_ps(b_orthogonal, b_inv_length); } diff --git a/源代码/StgSharpDebug/AlphaDemo/Program.cs b/源代码/StgSharpDebug/AlphaDemo/Program.cs new file mode 100644 index 00000000..d01d5b5b --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/Program.cs @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Program.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- + +using StgSharp.Controlling.UsrActivity; +using StgSharp.Geometries; +using StgSharp.Graphics; + +using StgSharp.Math; +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +using System.Xml.XPath; + +namespace StgSharp +{ + internal static class Program + { + + internal static unsafe void Main( string[] args ) + { + try { + Vector128 v1 = Vector128.Create( 0.0f ); + Vector128 v2 = Vector128.Create( 1.0f ); + + Vector128 v3 = Sse.Shuffle( v1, v2, 0b_01001011 ); + Vector128 v4 = Sse.Shuffle( v3, v2, 0b_01001011 ); + v3 = Sse.Add( v3, v4 ); + + Console.WriteLine( v3 ); + + /**/ + StgSharp.Init(); + StgSharp.InitGL( 4, 6 ); + StgSharp.GlobalSetting.VSyncActivated = false; + + ViewPort vp = new ViewPort(); + + ViewModelBase mainModel = new ViewModelMain( vp ); + mainModel.CreateAndBindView( "MainView", (1, 1, 1) ); + + mainModel.UseViewModel( "MainView" ); + + StgSharp.Terminate(); + /**/ + } + catch( Exception ex ) { + InternalIO.InternalWriteLog( $"{ex}", LogType.Error ); + if( true ) { } + Environment.FailFast( $"{ex.Message}\n{ex.StackTrace}" ); + } + } + + } +} \ No newline at end of file diff --git a/源代码/StgSharpDebug/AlphaDemo/RenderStream/Partical.cs b/源代码/StgSharpDebug/AlphaDemo/RenderStream/Partical.cs new file mode 100644 index 00000000..32178f33 --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/RenderStream/Partical.cs @@ -0,0 +1,428 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Partical.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Controls; +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; + +using StgSharp.Math; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public class ParticleRenderStream : glRender + { + + private AutoTextureGL autoT; + + private ElementBuffer ebo; + private ElementBuffer f_ebo; + private FrameBuffer fbo; + private Image i; + + private int temp = 0; + private PlainInstancingBuffer buffer; + private RenderBuffer rbo; + private ShaderProgram frameMainShader; + private ShaderProgram s; + private TextureGL f_t; + private TextureGL t; + private Uniform texUniform; + private Uniform time; + private VertexArray f_vao; + private VertexArray vao; + + private VertexBuffer f_vbo; + private VertexBuffer vbo; + + public ParticleRenderStream() { } + + public override bool IsContextSharable => true; + + public Rectangle ButtonBounding + { + get; + private set; + } + + public TextureProvider ButtonTextureProvider + { + get; + private set; + } + + //render a controlling item + public void ButtonMain( IEnumerable items ) + { + //Console.WriteLine("Render Button Itself"); + + GL.BindFrameBuffer( FrameBufferTarget.All, GlHandle.Zero ); //GL.Assert(true); + GL.ClearColor( 0.4f, TimePassed % 1.0f, 0f, 1.0f ); //GL.Assert(true); + GL.Clear( MaskBufferBit.COLOR /**/ | MaskBufferBit.DEPTH/**/ ); //GL.Assert(true); + + f_vao.Bind( 0 ); //GL.Assert(true); + + foreach( PlainGeometryMesh mesh in items ) { + //autoT.SelectTextureAndBind(mesh.TextureImage); + f_t.LoadTexture( 0, mesh.TextureImage ); + + //GL.Assert(true); + + frameMainShader.Use(); //GL.Assert(true); + + GL.DrawElements( + GeometryType.TRIANGLES, 6, TypeCode.UInt32, IntPtr.Zero ); + } + + //GL.ClearError(); + //GL.Assert(true); + } + + public void Main() + { + temp++; + + GL.ClearError(); + GL.Viewport( 0, 0, ( uint )Width, ( uint )Height ); + + //Console.Clear(); + buffer.UpdateAllParticles(); + + //Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + + fbo.Bind( 0 ); //GL.Assert(true); + vao.Bind( 0 ); //GL.Assert(true); + t.Bind2D( 0 ); //GL.Assert(false); + + GL.Viewport( 0, 0, ( uint )Width, ( uint )Height ); + + /**/ + + GL.TextureImage2d( + Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, + ( uint )Width, ( uint )Height, ImageChannel.WithAlphaChannel, + PixelChannelLayout.Byte, null ); + /**/ + + //GL.Assert(false); + //Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + + GL.ClearColor( ( 0.6f + TimePassed ) % 1.0f, 0.1f, 0.3f, 1 ); + GL.Assert( false ); + + //Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + GL.Clear( MaskBufferBit.COLOR /**/ | MaskBufferBit.DEPTH /**/ ); + + + //GL.Assert(false); + + vbo.Bind( 1 ); + vbo.WriteVectorData( + 1, buffer.CoordAndRotationSpan, BufferUsage.StreamDraw ); + + + s.Use(); + NativeCamera.SetAllUniforms(); + GL.SetUniformValue( time, TimePassed ); + + GL.DrawElementsInstanced( + GeometryType.TRIANGLES, 6, TypeCode.UInt32, IntPtr.Zero, 100 ); + + //Console.WriteLine(TimePassed); + //GL.Assert(true); + + GL.WaitAccomplishment(); + GL.BindVertexArray( GlHandle.Zero ); + /**/ + + //GL.Assert(true); + + ImageHelper.Resize( i, Width, Height, ImageMovement.Discard ); + + //GL.ClearError(); + //Console.Write($"size set to {Height},{Width}"); + //Console.WriteLine($"Image resized to {i.Height} {i.Width}"); + GL.GetTextureImage( + Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, + PixelChannelLayout.Byte, i.PixelBuffer ); + /* + for (int num = 0; num < i.PixelBuffer.Length; num+=10000) + { + Console.Write($"{i.PixelBuffer[num]}\t"); + } + /**/ + + //GL.Assert(true); + //Array.Fill(i.PixelBuffer, 24); + + GL.BindFrameBuffer( FrameBufferTarget.All, GlHandle.Zero ); + + //GL.Assert(true); + /**/ + } + + public void NothingMain() + { + GL.ClearError(); + + //GL.BindFrameBuffer(FrameBufferTarget.All, GlHandle.Zero); + GL.ClearColor( 0.5f, 0.2f, 0.3f, 1.0f ); + GL.Assert( false ); + } + + public void RenderButton( + ButtonStatus status, + float statusBegin, + in TextureProvider provider ) + { + provider.UpdateFromImage( i ); + } + + internal static Vec3 DefaultRotation( + TimeSpanProvider provider, + out float rotation ) + { + rotation = provider.SpanLengthLowPrecession; + float angle = provider.CurrentSecond * 2; + return ( new Vec3( Scaler.Cos( angle ), Scaler.Sin( angle ), + 0 ) ) * provider.SpanLengthLowPrecession; + } + + protected override void CustomizeDeinit() { } + + protected override void CustomizeInit() + { + //GL.ClearError(); + //GL.Assert(true); + + buffer = new PlainInstancingBuffer(); + for( int i = 0; i < 10; i++ ) { + float ai = Scaler.Abs( i - 5.0f ); + for( int t = 0; t < 10; t++ ) { + float at = Scaler.Abs( t - 5.0f ); + + ParticleOnPlain p = new ParticleOnPlain( buffer ); + ( ( IInstancing )p ).Coord = new Vec3( + ( ( ( -5 ) + i ) * 0.2f ) + 0.1f, + ( ( ( -5 ) + t ) * 0.2f ) + 0.1f, 0 ); + ( ( IInstancing )p ).Scale = + Scaler.MinOf( i, t ) * 0.15f; + ( ( IInstancing )p ).Motion = new GeometryMotion( + true, this._timeProvider, DefaultRotation ); + } + } + + //GL.Assert(true); + + //SetSizeLimit(800, 800, 800, 800); + + s = CreateShaderProgram(); + frameMainShader = CreateShaderProgram(); + Shader pvs = CreateShaderSegment( ShaderType.Vertex, 2 ); + Shader pfs = CreateShaderSegment( ShaderType.Fragment, 2 ); + + //GL.Assert(true); + pvs.Compile( 0, Shader.FromCodeFile( "Shader\\particle.vert" ) ); + + //GL.Assert(true); + pvs.AttachTo( 0, s ); + + //GL.Assert(true); + pfs.Compile( 0, Shader.FromCodeFile( "Shader\\particle.frag" ) ); + pfs.AttachTo( 0, s ); + s.Link(); + + //GL.Assert(true); + + pvs.Compile( 1, Shader.FromCodeFile( "Shader\\fbo.vert" ) ); + pvs.AttachTo( 1, frameMainShader ); + pfs.Compile( 1, Shader.FromCodeFile( "Shader\\fbo.frag" ) ); + pfs.AttachTo( 1, frameMainShader ); + frameMainShader.Link(); + + //GL.Assert(true); + vbo = CreateVertexBuffer( 3 ); + vao = CreateVertexArray( 1 ); + ebo = CreateElementBuffer( 1 ); + vbo.Bind( 0 ); + + Rectangle rec = new Rectangle( + 0.05f, 0.05f, 0.05f, -0.05f, -0.05f, -0.05f, -0.05f, 0.05f ); + + //GL.Assert(true); + vao.Bind( 0 ); + vbo.WriteVectorData( 0, rec.VertexStream, BufferUsage.StaticDraw ); + ebo.SetValue( 0, rec.VertexIndices, BufferUsage.StaticDraw ); + vao.SetVertexAttribute( + 0, 3, TypeCode.Single, false, 4 * sizeof( float ), 0 ); + + vbo.WriteVectorData( + 1, buffer.CoordAndRotationSpan, BufferUsage.StreamDraw ); + vao.SetVertexAttribute( + 1, 3, TypeCode.Single, false, 4 * sizeof( float ), 0 ); + vao.SetVertexAttribute( + 2, 1, TypeCode.Single, false, 4 * sizeof( float ), + 3 * sizeof( float ) ); + + GL.VertexAttributeDivisor( 1, 1 ); + GL.VertexAttributeDivisor( 2, 1 ); + + vbo.WriteScalerData( + 2, buffer.ScalingSpan, BufferUsage.StaticDraw ); + vao.SetVertexAttribute( + 3, 1, TypeCode.Single, false, sizeof( float ), 0 ); + + GL.VertexAttributeDivisor( 3, 1 ); + + vbo.Unbind(); + GL.BindVertexArray( GlHandle.Zero ); + + NativeCameraViewTarget( (0, 0, -100), (0, 0, 0), (0, 1, 0) ); + NativeCameraViewRange( new Degree( 1.5f ), Vec2.Zero, (50, 50) ); + NativeCameraUniform( s, "Camera" ); + + s.Use(); + + fbo = CreateFrameBuffer( 1 ); + rbo = CreateRenderBuffer( 1 ); + fbo.Bind( 0 ); + rbo.Bind( 0 ); + + //GL.Assert(true); + t = CreateTexture( 1 ); + t.Bind2D( 0 ); + GL.TextureImage2d( + Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, + ( uint )Width, ( uint )Height, ImageChannel.WithAlphaChannel, + PixelChannelLayout.Byte, null ); + t.Set2dWrapProperty( 0, TextureWrap.Repeat, TextureWrap.Repeat ); + t.Set2dFilterProperty( + 0, TextureFilter.Linear, TextureFilter.Linear ); + + //GL.Assert(true); + GL.FrameBufferTexture2d( + FrameBufferTarget.All, glAttachment.Color( 0 ), + Texture2DTarget.Texture2D, t[ 0 ], 0 ); + + GL.SetRenderBufferStorage( + RenderBufferInternalFormat.Depth24_Stencil8, this.Size ); + GL.CombineFrameBufferRenderBuffer( + FrameBufferAttachment.DepthAndStencil, rbo[ 0 ] ); + + Console.WriteLine( + GL.CheckFrameBufferStatus( FrameBufferTarget.All ) ); + + FrameBuffer.BindNull(); + + //GL.Assert(true); + int streamLength = this.Width * this.Height * 4; + byte[] imageStream = new byte[streamLength]; + i = Image.FromMemory( + this.Size, ImageChannel.WithAlphaChannel, imageStream ); + + + time = s.GetUniform( "time" ); + + Vec2[] buttonTextureCoordArray = { + (0f, 1f), + (1f, 1f), + (1f, 0f), + (0f, 0f) + }; + ButtonBounding = new Rectangle( + -0.9f, 0.9f, 0.9f, 0.9f, 0.9f, -0.9f, -0.9f, -0.9f ); + + //GL.Assert(true); + ButtonTextureProvider = new TextureProvider( + i, buttonTextureCoordArray ); + + f_vao = CreateVertexArray( 1 ); + f_vbo = CreateVertexBuffer( 2 ); + f_ebo = CreateElementBuffer( 1 ); + + //GL.Assert(true); + f_vao.Bind( 0 ); + + f_ebo.Bind( 0 ); + f_ebo.SetValue( + 0, ButtonBounding.VertexIndices, BufferUsage.StaticDraw ); + + //GL.Assert(true); + f_vbo.Bind( 0 ); + f_vbo.WriteVectorData( + 0, ButtonBounding.VertexStream, BufferUsage.StaticDraw ); + f_vao.SetVertexAttribute( + 0, 3, TypeCode.Single, false, 4 * sizeof( float ), 0 ); + + //GL.Assert(true); + f_vbo.Bind( 1 ); + f_vbo.WriteVectorData( + 1, buttonTextureCoordArray, BufferUsage.StaticDraw ); + f_vao.SetVertexAttribute( + 1, 3, TypeCode.Single, false, 4 * sizeof( float ), 0 ); + + //GL.Assert(true); + + autoT = CreateAutoTexture( 4 ); + autoT.DefaultTextureProperty = new TextureProperty( + TextureFilter.Nearest, TextureFilter.Nearest, + TextureWrap.Repeat, TextureWrap.Repeat ); + + f_t = CreateTexture( 1 ); + f_t.Bind2D( 0 ); + f_t.Set2dWrapProperty( 0, TextureWrap.Repeat, TextureWrap.Repeat ); + f_t.Set2dFilterProperty( + 0, TextureFilter.Nearest, TextureFilter.Nearest ); + + //GL.Assert(true); + f_t.ActivateAs( TextureUnit.Unit1 ); + + //GL.Assert(true); + frameMainShader.Use(); + texUniform = frameMainShader.GetUniform( "tex" ); + + //GL.Assert(true); + GL.SetUniformValue( texUniform, 1 ); + + //GL.Assert(true); + + GL.ClearError(); + GL.Assert( true ); + } + + } +} diff --git a/源代码/StgSharpDebug/AlphaDemo/View/Control.cs b/源代码/StgSharpDebug/AlphaDemo/View/Control.cs new file mode 100644 index 00000000..c5b8cb66 --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/View/Control.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Control.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Controlling.UsrActivity; +using StgSharp.MVVM.View; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain + { + + protected class Control : ViewResponder + { + + public Control( ViewMain view ) : base( view ) { } + + public override void CustomizedInitialize( + Func keyRegister ) { } + + public override bool ValidateInitializing() + { + return true; + } + + } + + } +} diff --git a/源代码/StgSharpDebug/AlphaDemo/View/Design.cs b/源代码/StgSharpDebug/AlphaDemo/View/Design.cs new file mode 100644 index 00000000..b174c17e --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/View/Design.cs @@ -0,0 +1,100 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Design.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Controlling; +using StgSharp.Controlling.UsrActivity; +using StgSharp.Controls; + +using StgSharp.Geometries; +using StgSharp.Graphics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain + { + + internal DemoButtonGroup Group + { + get; + set; + } + + internal TriggerButton OnlyButton + { + get; + set; + } + + internal class Design : ViewDesigner + { + + public Design( ViewMain view ) : base( view ) { } + + public override sealed void CustomizedInitialize() + { + Binding.Group = CreateKeyboardButtonGroup( + new KeyTrigger( KeyboardKey.Left, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Right, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Up, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Down, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Enter, KeyStatus.PRESS ) ); + Binding.OnlyButton = CreateKeyboardButton( + Binding.Stream.ButtonBounding, + Binding.Stream.ButtonTextureProvider, true ); + Binding.OnlyButton.RenderButtonTexture += Binding.Stream.RenderButton; + } + + public override bool ValidateInitializing() + { + return true; + } + + } + + } + + public class DemoButtonGroup : KeyboardButtonGroup + { + + public override sealed void Confirm() + { + return; + } + + } +} diff --git a/源代码/StgSharpDebug/AlphaDemo/View/NewRender.cs b/源代码/StgSharpDebug/AlphaDemo/View/NewRender.cs new file mode 100644 index 00000000..3fc9939f --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/View/NewRender.cs @@ -0,0 +1,71 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="NewRender.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Data; +using StgSharp.Graphics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain + { + + public ParticleRenderStream Stream + { + get; + set; + } + + private class NewRender : ViewRender + { + + public NewRender( ViewMain view ) : base( view ) { } + + public override void CustomizedInitialize() + { + Binding.Stream = CreateRenderStream( + (1, 1, 1) ); + Render[ "only".AsLabel() ] = Binding.Stream; + } + + public override bool ValidateInitializing() + { + return Binding.Stream != null; + } + + } + + } +} diff --git a/源代码/StgSharpDebug/AlphaDemo/View/ViewMain.cs b/源代码/StgSharpDebug/AlphaDemo/View/ViewMain.cs new file mode 100644 index 00000000..57795a8e --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/View/ViewMain.cs @@ -0,0 +1,100 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ViewMain.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.MVVM; +using StgSharp.MVVM.View; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain : ViewBase + { + + private Dictionary _databindingIndexMap; + + public ViewMain() + { + _databindingIndexMap = new Dictionary(); + } + + public override void CustomizedInitialize( + [NotNull]ViewModelBase viewModelBinding ) + { + Designer = new Design( this ); + Responder = new Control( this ); + Render = new NewRender( this ); + + Render.Initialize(); + Designer.Initialize(); + Responder.Initialize( viewModelBinding.MethodLookup ); + } + + public override bool TryGetObjectReference( + string name, + out DataBindingEntry entry ) + { + if( _databindingIndexMap.TryGetValue( name, out entry ) ) { + return true; + } + try { + entry = name switch + { + _ => default( DataBindingEntry ), + }; + return !entry.ExactEqual( default( DataBindingEntry ) ); + } + catch( Exception ) { + entry = default( DataBindingEntry ); + return false; + } + } + + protected internal override void Show() + { + Stream.RenderStart(); + + //Stream.NothingMain(); + + Stream.Main(); + Stream.ButtonMain( OnlyButton ); + Stream.RenderEnd(); + } + + } +} diff --git a/源代码/StgSharpDebug/AlphaDemo/ViewModelMain.cs b/源代码/StgSharpDebug/AlphaDemo/ViewModelMain.cs new file mode 100644 index 00000000..e0ec6b45 --- /dev/null +++ b/源代码/StgSharpDebug/AlphaDemo/ViewModelMain.cs @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ViewModelMain.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Graphics; + +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public class ViewModelMain : ViewModelBase + { + + private Dictionary dataBindingEntryIndexmap; + + public ViewModelMain( ViewPort vp ) + : base( vp, 60 ) + { + dataBindingEntryIndexmap = new Dictionary( + ); + } + + public override void CustomizeInitialize() { } + + public override bool TryGetObjectReference( + string name, + out DataBindingEntry entry ) + { + if( dataBindingEntryIndexmap.TryGetValue( name, out entry ) ) { + return true; + } + entry = name switch + { + _ => DataBindingEntry.NullBinding, + }; + + if( entry.ExactEqual( DataBindingEntry.NullBinding ) ) { + return false; + } + dataBindingEntryIndexmap.Add( name, entry ); + return true; + } + + }//------------------------------------- End of Class ------------------------------------------ +} diff --git a/源代码/StgSharpDebug/Properties/launchSettings.json b/源代码/StgSharpDebug/Properties/launchSettings.json index fbcd94d1..32cd25bd 100644 --- a/源代码/StgSharpDebug/Properties/launchSettings.json +++ b/源代码/StgSharpDebug/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "StgSharpDebug": { "commandName": "Project", - "nativeDebugging": false + "nativeDebugging": true } } } \ No newline at end of file diff --git a/源代码/StgSharpDebug/StgSharpDebug.csproj b/源代码/StgSharpDebug/StgSharpDebug.csproj index 8e591d6c..5c96976e 100644 --- a/源代码/StgSharpDebug/StgSharpDebug.csproj +++ b/源代码/StgSharpDebug/StgSharpDebug.csproj @@ -87,9 +87,6 @@ Linux - - - @@ -99,14 +96,14 @@ - + - all + diff --git a/源代码/StgSharpDebug/obj/StgSharpDebug.csproj.nuget.dgspec.json b/源代码/StgSharpDebug/obj/StgSharpDebug.csproj.nuget.dgspec.json index 727d9d9a..a1e9b780 100644 --- a/源代码/StgSharpDebug/obj/StgSharpDebug.csproj.nuget.dgspec.json +++ b/源代码/StgSharpDebug/obj/StgSharpDebug.csproj.nuget.dgspec.json @@ -26,7 +26,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -50,14 +49,14 @@ "net6.0": { "targetAlias": "net6.0", "dependencies": { - "BidirectionalDict": { - "target": "Package", - "version": "[1.2.0, )" - }, "Microsoft.Windows.CsWin32": { "suppressParent": "All", "target": "Package", "version": "[0.3.49-beta, )" + }, + "System.Collections.Concurrent": { + "target": "Package", + "version": "[4.3.0, )" } }, "imports": [ diff --git a/源代码/StgSharpDebug/obj/project.assets.json b/源代码/StgSharpDebug/obj/project.assets.json index cdba4e32..c05d8a4b 100644 --- a/源代码/StgSharpDebug/obj/project.assets.json +++ b/源代码/StgSharpDebug/obj/project.assets.json @@ -2,17 +2,22 @@ "version": 3, "targets": { "net6.0": { - "BidirectionalDict/1.2.0": { + "Microsoft.NETCore.Platforms/1.1.0": { "type": "package", "compile": { - "lib/netcoreapp3.1/BidirectionalDict.dll": { - "related": ".xml" - } + "lib/netstandard1.0/_._": {} }, "runtime": { - "lib/netcoreapp3.1/BidirectionalDict.dll": { - "related": ".xml" - } + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} } }, "Microsoft.Windows.CsWin32/0.3.49-beta": { @@ -59,6 +64,96 @@ "buildTransitive/netstandard1.0/Microsoft.Windows.WDK.Win32Metadata.props": {} } }, + "System.Collections/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Collections.Concurrent.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + } + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Globalization/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, "System.Memory/4.5.5": { "type": "package", "compile": { @@ -68,6 +163,61 @@ "lib/netcoreapp2.1/_._": {} } }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, "System.Runtime.CompilerServices.Unsafe/6.0.0": { "type": "package", "compile": { @@ -83,26 +233,92 @@ "build": { "buildTransitive/netcoreapp3.1/_._": {} } + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Threading/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } } } }, "libraries": { - "BidirectionalDict/1.2.0": { - "sha512": "hjLTwpPTQBdseFVTVH1vf7Pbaj5ATKIM3DQN8Hup22ixyC14+r1bE4YFjtZmWfcegvJR74zYtatBTwpOHmIMNQ==", + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", "type": "package", - "path": "bidirectionaldict/1.2.0", + "path": "microsoft.netcore.platforms/1.1.0", "files": [ ".nupkg.metadata", ".signature.p7s", - "LICENSE", - "bidirectionaldict.1.2.0.nupkg.sha512", - "bidirectionaldict.nuspec", - "lib/net48/BidirectionalDict.dll", - "lib/net48/BidirectionalDict.xml", - "lib/netcoreapp3.1/BidirectionalDict.dll", - "lib/netcoreapp3.1/BidirectionalDict.xml", - "lib/netstandard2.1/BidirectionalDict.dll", - "lib/netstandard2.1/BidirectionalDict.xml" + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" ] }, "Microsoft.Windows.CsWin32/0.3.49-beta": { @@ -190,6 +406,449 @@ "sdk_license.txt" ] }, + "System.Collections/4.3.0": { + "sha512": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "type": "package", + "path": "system.collections/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.3.0.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Collections.Concurrent/4.3.0": { + "sha512": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "type": "package", + "path": "system.collections.concurrent/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Collections.Concurrent.dll", + "lib/netstandard1.3/System.Collections.Concurrent.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.Concurrent.dll", + "ref/netcore50/System.Collections.Concurrent.xml", + "ref/netcore50/de/System.Collections.Concurrent.xml", + "ref/netcore50/es/System.Collections.Concurrent.xml", + "ref/netcore50/fr/System.Collections.Concurrent.xml", + "ref/netcore50/it/System.Collections.Concurrent.xml", + "ref/netcore50/ja/System.Collections.Concurrent.xml", + "ref/netcore50/ko/System.Collections.Concurrent.xml", + "ref/netcore50/ru/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hans/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.1/System.Collections.Concurrent.dll", + "ref/netstandard1.1/System.Collections.Concurrent.xml", + "ref/netstandard1.1/de/System.Collections.Concurrent.xml", + "ref/netstandard1.1/es/System.Collections.Concurrent.xml", + "ref/netstandard1.1/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.1/it/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.3/System.Collections.Concurrent.dll", + "ref/netstandard1.3/System.Collections.Concurrent.xml", + "ref/netstandard1.3/de/System.Collections.Concurrent.xml", + "ref/netstandard1.3/es/System.Collections.Concurrent.xml", + "ref/netstandard1.3/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.3/it/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.concurrent.4.3.0.nupkg.sha512", + "system.collections.concurrent.nuspec" + ] + }, + "System.Diagnostics.Debug/4.3.0": { + "sha512": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "type": "package", + "path": "system.diagnostics.debug/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Debug.dll", + "ref/netcore50/System.Diagnostics.Debug.xml", + "ref/netcore50/de/System.Diagnostics.Debug.xml", + "ref/netcore50/es/System.Diagnostics.Debug.xml", + "ref/netcore50/fr/System.Diagnostics.Debug.xml", + "ref/netcore50/it/System.Diagnostics.Debug.xml", + "ref/netcore50/ja/System.Diagnostics.Debug.xml", + "ref/netcore50/ko/System.Diagnostics.Debug.xml", + "ref/netcore50/ru/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/System.Diagnostics.Debug.dll", + "ref/netstandard1.0/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/System.Diagnostics.Debug.dll", + "ref/netstandard1.3/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.debug.4.3.0.nupkg.sha512", + "system.diagnostics.debug.nuspec" + ] + }, + "System.Diagnostics.Tracing/4.3.0": { + "sha512": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "type": "package", + "path": "system.diagnostics.tracing/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Diagnostics.Tracing.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.xml", + "ref/netcore50/de/System.Diagnostics.Tracing.xml", + "ref/netcore50/es/System.Diagnostics.Tracing.xml", + "ref/netcore50/fr/System.Diagnostics.Tracing.xml", + "ref/netcore50/it/System.Diagnostics.Tracing.xml", + "ref/netcore50/ja/System.Diagnostics.Tracing.xml", + "ref/netcore50/ko/System.Diagnostics.Tracing.xml", + "ref/netcore50/ru/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/System.Diagnostics.Tracing.dll", + "ref/netstandard1.1/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/System.Diagnostics.Tracing.dll", + "ref/netstandard1.2/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/System.Diagnostics.Tracing.dll", + "ref/netstandard1.3/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/System.Diagnostics.Tracing.dll", + "ref/netstandard1.5/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.tracing.4.3.0.nupkg.sha512", + "system.diagnostics.tracing.nuspec" + ] + }, + "System.Globalization/4.3.0": { + "sha512": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "type": "package", + "path": "system.globalization/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.3.0.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, "System.Memory/4.5.5": { "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", "type": "package", @@ -213,6 +872,293 @@ "version.txt" ] }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Resources.ResourceManager/4.3.0": { + "sha512": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "type": "package", + "path": "system.resources.resourcemanager/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.resources.resourcemanager.4.3.0.nupkg.sha512", + "system.resources.resourcemanager.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, "System.Runtime.CompilerServices.Unsafe/6.0.0": { "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", "type": "package", @@ -237,12 +1183,300 @@ "system.runtime.compilerservices.unsafe.nuspec", "useSharedDesignerContext.txt" ] + }, + "System.Runtime.Extensions/4.3.0": { + "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "type": "package", + "path": "system.runtime.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.extensions.4.3.0.nupkg.sha512", + "system.runtime.extensions.nuspec" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Threading/4.3.0": { + "sha512": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "type": "package", + "path": "system.threading/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.3.0.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] } }, "projectFileDependencyGroups": { "net6.0": [ - "BidirectionalDict >= 1.2.0", - "Microsoft.Windows.CsWin32 >= 0.3.49-beta" + "Microsoft.Windows.CsWin32 >= 0.3.49-beta", + "System.Collections.Concurrent >= 4.3.0" ] }, "packageFolders": { @@ -271,7 +1505,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -295,14 +1528,14 @@ "net6.0": { "targetAlias": "net6.0", "dependencies": { - "BidirectionalDict": { - "target": "Package", - "version": "[1.2.0, )" - }, "Microsoft.Windows.CsWin32": { "suppressParent": "All", "target": "Package", "version": "[0.3.49-beta, )" + }, + "System.Collections.Concurrent": { + "target": "Package", + "version": "[4.3.0, )" } }, "imports": [ diff --git a/源代码/StgSharpDebug/obj/x64/Benchmark/net6.0/StgSharpDebug.AssemblyInfo.cs b/源代码/StgSharpDebug/obj/x64/Benchmark/net6.0/StgSharpDebug.AssemblyInfo.cs index 59b97f26..e0efe855 100644 --- a/源代码/StgSharpDebug/obj/x64/Benchmark/net6.0/StgSharpDebug.AssemblyInfo.cs +++ b/源代码/StgSharpDebug/obj/x64/Benchmark/net6.0/StgSharpDebug.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Benchmark")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b207f16616b7bd967d647a809cc27e7174063451")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs index 038bd533..a7bb5045 100644 --- a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs +++ b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -31,4 +31,6 @@ // using System; using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute( + ".NETCoreApp,Version=v6.0", + FrameworkDisplayName = ".NET 6.0" )] diff --git a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.AssemblyInfo.cs b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.AssemblyInfo.cs index 4bc4f976..725658ea 100644 --- a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.AssemblyInfo.cs +++ b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.AssemblyInfo.cs @@ -1,3 +1,33 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="StgSharpDebug.AssemblyInfo.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- //------------------------------------------------------------------------------ // // 此代码由工具生成。 @@ -11,13 +41,14 @@ using System; using System.Reflection; -[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharpDebug")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1ee4e4a42f2a6b8609a6fce1d36c8da7f4182da6")] -[assembly: System.Reflection.AssemblyProductAttribute("StgSharpDebug")] -[assembly: System.Reflection.AssemblyTitleAttribute("StgSharpDebug")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyCompanyAttribute( "StgSharpDebug" )] +[assembly: System.Reflection.AssemblyConfigurationAttribute( "Debug" )] +[assembly: System.Reflection.AssemblyFileVersionAttribute( "1.0.0.0" )] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute( + "1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e" )] +[assembly: System.Reflection.AssemblyProductAttribute( "StgSharpDebug" )] +[assembly: System.Reflection.AssemblyTitleAttribute( "StgSharpDebug" )] +[assembly: System.Reflection.AssemblyVersionAttribute( "1.0.0.0" )] // 由 MSBuild WriteCodeFragment 类生成。 diff --git a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.csproj.FileListAbsolute.txt b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.csproj.FileListAbsolute.txt index ee592c48..d81ba894 100644 --- a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.csproj.FileListAbsolute.txt +++ b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.csproj.FileListAbsolute.txt @@ -7,11 +7,7 @@ D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharp D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\bin\x64\Debug\net6.0\StgSharpDebug.dll D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\bin\x64\Debug\net6.0\StgSharpDebug.pdb D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\bin\x64\Debug\net6.0\StgSharpDebug.xml -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.GeneratedMSBuildEditorConfig.editorconfig -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.AssemblyInfoInputs.cache -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.AssemblyInfo.cs -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.csproj.CoreCompileInputs.cache -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.sourcelink.json +D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.dll D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.exe D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\Shader\awesomeface.png D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\Shader\fbo.frag @@ -23,12 +19,14 @@ D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\Shader\particle.vert D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.deps.json D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.runtimeconfig.json -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.dll D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.pdb D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\Output\x64\Debug\net6.0\StgSharpDebug.xml +D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.GeneratedMSBuildEditorConfig.editorconfig +D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.AssemblyInfoInputs.cache +D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.AssemblyInfo.cs +D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.csproj.CoreCompileInputs.cache +D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.sourcelink.json D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.dll D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.xml D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.pdb D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.genruntimeconfig.cache -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharpDebug.csproj.AssemblyReference.cache -D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgSharpDebug\obj\x64\Debug\net6.0\StgSharp.D6C465D7.Up2Date diff --git a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.sourcelink.json b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.sourcelink.json index ad6e3f88..b229cf6b 100644 --- a/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.sourcelink.json +++ b/源代码/StgSharpDebug/obj/x64/Debug/net6.0/StgSharpDebug.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/1ee4e4a42f2a6b8609a6fce1d36c8da7f4182da6/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e/*"}} \ No newline at end of file diff --git a/源代码/StgsharpEnvDebug/obj/Debug/net6.0/StgsharpEnvDebug.AssemblyInfo.cs b/源代码/StgsharpEnvDebug/obj/Debug/net6.0/StgsharpEnvDebug.AssemblyInfo.cs index cf050289..606ef183 100644 --- a/源代码/StgsharpEnvDebug/obj/Debug/net6.0/StgsharpEnvDebug.AssemblyInfo.cs +++ b/源代码/StgsharpEnvDebug/obj/Debug/net6.0/StgsharpEnvDebug.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgsharpEnvDebug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1ee4e4a42f2a6b8609a6fce1d36c8da7f4182da6")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("StgsharpEnvDebug")] [assembly: System.Reflection.AssemblyTitleAttribute("StgsharpEnvDebug")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/源代码/StgsharpEnvDebug/obj/StgsharpEnvDebug.csproj.nuget.dgspec.json b/源代码/StgsharpEnvDebug/obj/StgsharpEnvDebug.csproj.nuget.dgspec.json index 44a22f7b..5a44e468 100644 --- a/源代码/StgsharpEnvDebug/obj/StgsharpEnvDebug.csproj.nuget.dgspec.json +++ b/源代码/StgsharpEnvDebug/obj/StgsharpEnvDebug.csproj.nuget.dgspec.json @@ -26,7 +26,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -95,7 +94,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/StgsharpEnvDebug/obj/project.assets.json b/源代码/StgsharpEnvDebug/obj/project.assets.json index ebe836fe..fd2fe53c 100644 --- a/源代码/StgsharpEnvDebug/obj/project.assets.json +++ b/源代码/StgsharpEnvDebug/obj/project.assets.json @@ -133,7 +133,6 @@ ], "sources": { "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { diff --git a/源代码/StgsharpEnvDebug/obj/x64/Benchmark/net6.0/StgsharpEnvDebug.AssemblyInfo.cs b/源代码/StgsharpEnvDebug/obj/x64/Benchmark/net6.0/StgsharpEnvDebug.AssemblyInfo.cs index a602a638..b4bd3cc7 100644 --- a/源代码/StgsharpEnvDebug/obj/x64/Benchmark/net6.0/StgsharpEnvDebug.AssemblyInfo.cs +++ b/源代码/StgsharpEnvDebug/obj/x64/Benchmark/net6.0/StgsharpEnvDebug.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgsharpEnvDebug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Benchmark")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b207f16616b7bd967d647a809cc27e7174063451")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0979123ac08c4f5e39b2f34d0d4ccd2d83b92b4e")] [assembly: System.Reflection.AssemblyProductAttribute("StgsharpEnvDebug")] [assembly: System.Reflection.AssemblyTitleAttribute("StgsharpEnvDebug")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

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 diff --git a/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.backup.json b/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.backup.json index 741b2e12..e245a07d 100644 --- a/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.backup.json +++ b/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.backup.json @@ -3,108 +3,515 @@ "WorkspaceRootPath": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\intrinsiccontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\intrinsiccontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\lable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\lable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat3.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\mat3.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\design.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\design.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\quick_hash.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\quick_hash.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\igraphicapis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\igraphicapis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_intrinsic.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\ssc_intrinsic.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\intrinsic.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\intrinsic.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\stb_image.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|C:\\PROGRAM FILES\\MICROSOFT VISUAL STUDIO\\2022\\ENTERPRISE\\VC\\TOOLS\\MSVC\\14.41.34120\\INCLUDE\\TMMINTRIN.H||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\autotexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\autotexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_internal.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\ssc_internal.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\cpuanimation\\iimageprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\cpuanimation\\iimageprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat2.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\mat2.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\dllmain.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\dllmain.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\vector.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\vector.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat4.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\mat4.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\stb_image.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_framework.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\ssc_framework.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix44.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix44.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix24.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix24.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix34.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix34.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\columnset4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\columnset4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\iregistertype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\iregistertype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\m256.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\m256.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{63382F83-D04E-45B6-BDE6-443273F6D010}|BenchMark\\BenchMark.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\benchmark\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63382F83-D04E-45B6-BDE6-443273F6D010}|BenchMark\\BenchMark.csproj|solutionrelative:benchmark\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\ivector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\ivector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\nativemethods.txt||{8B382828-6202-11D1-8870-0000F87579D2}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\nativemethods.txt||{8B382828-6202-11D1-8870-0000F87579D2}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\control||{8B382828-6202-11D1-8870-0000F87579D2}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\control||{8B382828-6202-11D1-8870-0000F87579D2}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3native.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\glfw3native.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\gl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\gl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matinterface.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matinterface.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\threading\\emptythread.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\threading\\emptythread.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\glapidefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\glapidefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glfucntionsourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glfucntionsourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\triggetfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\triggetfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\autotexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", @@ -114,105 +521,10 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\collections\\bidirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\collections\\bidirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Youmu\\AppData\\Local\\SourceServer\\60546032f23b31a03685e30ef880f5c48e6df2d00a71d09e625da4e2a208bd88\\Dictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\collections\\ibidrirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\collections\\ibidrirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\globalsuppressions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\globalsuppressions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\bpnodebuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\bpnodebuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -221,26 +533,14 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\counter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\counter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timesourceprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timesourceprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\cancellabletask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\cancellabletask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -249,10 +549,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\routeswitch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\routeswitch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -261,10 +557,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\iconvertabletoblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\iconvertabletoblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\bpnodeactionattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\bpnodeactionattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -273,314 +565,18 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glapicalling.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glapicalling.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\controlitemrender.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\controlitemrender.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\controlitemrender.vert||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\controlitemrender.vert||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\fbo.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\fbo.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\fbo.vert||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\fbo.vert||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\main.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\main.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\openglcontrollingitemrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\openglcontrollingitemrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\igeomtrybuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\igeomtrybuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\openglcontrollingitemrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\openglcontrollingitemrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\touhou\\view\\openningview.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\touhou\\view\\openningview.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\particle.vert||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\particle.vert||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\c6a36f44105246e8389794d6b1ff0c946741477e6dd52e219c7f2f689247fedc\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\SemaphoreSlim.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\3fbd2d3f2a21976ceea22ce6d61d2bfc56abbb0356d59a09e7367042f1d26101\\src\\libraries\\System.Private.CoreLib\\src\\System\\Object.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\structdefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\structdefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\particle.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\particle.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\control.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\control.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stgsharpdebug.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stgsharpdebug.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\textureprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\textureprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\View.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\View\\View.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stgsharp.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stgsharp.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\keyeventattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\keyeventattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\74ed84df48c00229a8da75e7d99c26a3409b78c17ddfc863196b29969f1b9863\\src\\libraries\\Common\\src\\System\\SR.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\6c91e49c16b65a4a6086c168a4f34965ffdd867f9cb4d0d10207e862c24f2808\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\Tasks\\Task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\pixels.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\pixels.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\shaderedit\\uniform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\shaderedit\\uniform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -593,10 +589,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -605,26 +597,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\triangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\triangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -641,46 +613,10 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\polygon5.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\polygon5.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\area.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\area.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\serialize\\issdserializable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\serialize\\issdserializable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\serialize\\define.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\serialize\\define.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\ssdvirtualfolder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\ssdvirtualfolder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -693,62 +629,14 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\ssdraw.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\ssdraw.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\globalkeystat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\globalkeystat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\errordefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\errordefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\particleonplain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\particleonplain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\iinstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\iinstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\iplainentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\iplainentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\touhou\\touhoubuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\touhou\\touhoubuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -761,34 +649,14 @@ "AbsoluteMoniker": "D:0:0:{183AA95A-FEBD-42A5-A205-AB7048678251}|OEM\\OEM.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\oem\\mainform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{183AA95A-FEBD-42A5-A205-AB7048678251}|OEM\\OEM.csproj|solutionrelative:oem\\mainform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\igeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\igeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\parallelogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\parallelogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\cordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\cordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\square.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\square.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\plaincoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\plaincoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\point.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\point.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -797,26 +665,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\spacecoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\spacecoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\spacegeometry\\class1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\spacegeometry\\class1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\coordinationbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\coordinationbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\plaininstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\plaininstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec4d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec4d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\cordination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\cordination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.cross.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.cross.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -825,183 +673,30 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.normalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.normalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\plain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\plain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\entities\\ientity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\entities\\ientity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\streamlocalcoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\streamlocalcoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\joysticktrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\joysticktrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\itrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\itrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\iinstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\iinstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\shaderedit\\shadergenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\shaderedit\\shadergenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\geometryscaler\\angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\geometryscaler\\angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEvent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\KeyEvent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\Coordination\\ICoord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Geometries\\Coordination\\ICoord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\ShowForm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\Form\\ShowForm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\FormThreading.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\Form\\FormThreading.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\Form.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\Form\\Form.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\glRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\glRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Test\\MainRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Test\\MainRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Render.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Demo\\View\\Render.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\View\\ViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewResponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\ViewResponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewRender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\View\\ViewRender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewDesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\ViewDesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\MultiKeyDictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\MultiKeyDictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\TimeFunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\TimeFunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\crossframeblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\crossframeblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\immintrin.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" } ], "DocumentGroupContainers": [ { "Orientation": 0, - "VerticalTabListWidth": 214, + "VerticalTabListWidth": 188, "DocumentGroups": [ { "DockedWidth": 197, - "SelectedChildIndex": 106, + "SelectedChildIndex": 35, "Children": [ { "$type": "Bookmark", @@ -1009,1860 +704,1377 @@ }, { "$type": "Document", - "DocumentIndex": 18, - "Title": "ImageHelper.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeToolTip": "StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "ViewState": "AgIAABsAAAAAAAAAAAD4vy8AAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-28T02:49:25.315Z" - }, - { - "$type": "Document", - "DocumentIndex": 28, - "Title": "Dictionary.cs", - "DocumentMoniker": "C:\\Users\\Youmu\\AppData\\Local\\SourceServer\\60546032f23b31a03685e30ef880f5c48e6df2d00a71d09e625da4e2a208bd88\\Dictionary.cs", - "ToolTip": "C:\\Users\\Youmu\\AppData\\Local\\SourceServer\\60546032f23b31a03685e30ef880f5c48e6df2d00a71d09e625da4e2a208bd88\\Dictionary.cs", - "ViewState": "AgIAAFkBAAAAAAAAAIA0wGQBAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T21:35:54.107Z" - }, - { - "$type": "Document", - "DocumentIndex": 34, - "Title": "SideNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAvwB4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:05:45.53Z" - }, - { - "$type": "Document", - "DocumentIndex": 36, - "Title": "BlueprintActionNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAvwB4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:04:09.577Z" - }, - { - "$type": "Document", - "DocumentIndex": 37, - "Title": "Blueprint.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "ViewState": "AgIAAAwAAAAAAAAAAAAvwB8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:04:06.765Z" - }, - { - "$type": "Document", - "DocumentIndex": 38, - "Title": "TimeSpanProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "ViewState": "AgIAACYAAAAAAAAAAAAvwB4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:04:00.578Z" - }, - { - "$type": "Document", - "DocumentIndex": 43, - "Title": "TimeFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAvwC4AAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:02:49.325Z" - }, - { - "$type": "Document", - "DocumentIndex": 47, - "Title": "BlueprintRunner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "ViewState": "AgIAAFwAAAAAAAAAAIA0wCgAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T17:53:00.315Z" - }, - { - "$type": "Document", - "DocumentIndex": 49, - "Title": "SizeFixedList.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "ViewState": "AgIAAA0AAAAAAAAAAAAvwH0AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T17:51:39.457Z" - }, - { - "$type": "Document", - "DocumentIndex": 50, - "Title": "IBidrirectionalDictionary.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "RelativeToolTip": "StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAC8AAAA/AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T23:33:42.221Z" - }, - { - "$type": "Document", - "DocumentIndex": 53, - "Title": "TexturePipeline.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\TexturePipeline.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", - "RelativeToolTip": "StgSharp\\Graphics\\TexturePipeline.cs", - "ViewState": "AgIAABUAAAAAAAAAAAAvwCgAAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T03:29:30.925Z" - }, - { - "$type": "Document", - "DocumentIndex": 55, - "Title": "Counter.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Counter.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Counter.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Counter.cs", - "RelativeToolTip": "StgSharp\\Logic\\Counter.cs", - "ViewState": "AgIAACQAAAAAAAAAAAAAACYAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T03:27:55.46Z" - }, - { - "$type": "Document", - "DocumentIndex": 27, - "Title": "BidirectionalDictionary.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "RelativeToolTip": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "ViewState": "AgIAAEMAAAAAAAAAAIAzwFUAAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T03:20:40.602Z" - }, - { - "$type": "Document", - "DocumentIndex": 67, - "Title": "BlueprintActionNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAAACYAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T02:58:10.928Z" - }, - { - "$type": "Document", - "DocumentIndex": 17, - "Title": "IImageProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "ViewState": "AgIAABgAAAAAAAAAAAAAACYAAAAdAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T00:21:20.169Z" - }, - { - "$type": "Document", - "DocumentIndex": 68, - "Title": "M128.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\M128.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Data\\M128.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\M128.cs", - "RelativeToolTip": "StgSharpDebug\\Data\\M128.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAowC4AAAAbAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T23:57:32.075Z" - }, - { - "$type": "Document", - "DocumentIndex": 245, - "Title": "CrossFrameBlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T22:04:59.351Z" - }, - { - "$type": "Document", - "DocumentIndex": 69, - "Title": "GlobalSetting.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\GlobalSetting.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Environment\\GlobalSetting.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\GlobalSetting.cs", - "RelativeToolTip": "StgSharpDebug\\Environment\\GlobalSetting.cs", - "ViewState": "AgIAADUAAAAAAAAAAAAvwEgAAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T22:04:46.699Z" - }, - { - "$type": "Document", - "DocumentIndex": 26, - "Title": "AutoTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ViewState": "AgIAAGwAAAAAAAAAAAAiwH4AAAAQAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T21:16:55.239Z" - }, - { - "$type": "Document", - "DocumentIndex": 72, - "Title": "glResourceManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAEMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T21:16:48.829Z" - }, - { - "$type": "Document", - "DocumentIndex": 80, - "Title": "GLBufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAADMAAAAFAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T20:33:11.097Z" - }, - { - "$type": "Document", - "DocumentIndex": 79, - "Title": "VBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ViewState": "AgIAAH8AAAAAAAAAAAAUwCoAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T21:48:41.305Z" - }, - { - "$type": "Document", - "DocumentIndex": 82, - "Title": "RBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T21:48:25.007Z" - }, - { - "$type": "Document", - "DocumentIndex": 86, - "Title": "glAPICalling.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T19:14:08.969Z" - }, - { - "$type": "Document", - "DocumentIndex": 29, - "Title": "glResourceGenrator.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ViewState": "AgIAADYAAAAAAAAAAIAzwFIAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T19:13:55.184Z" - }, - { - "$type": "Document", - "DocumentIndex": 78, - "Title": "glResourceManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "ViewState": "AgIAAEcAAAAAAAAAAAAqwFUAAAAPAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T19:13:42.377Z" - }, - { - "$type": "Document", - "DocumentIndex": 246, - "Title": "MultiKeyDictionary.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-23T20:00:13.62Z" - }, - { - "$type": "Document", - "DocumentIndex": 16, - "Title": "AutoTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ViewState": "AgIAAD8AAAAAAAAAAAAIwFMAAAA0AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-23T19:22:04.183Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 89, - "Title": "ControlItemRender.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\ControlItemRender.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\ControlItemRender.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-08-01T11:42:48.589Z" - }, - { - "$type": "Document", - "DocumentIndex": 94, - "Title": "main.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\main.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\main.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\main.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\main.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-08-01T11:40:09.913Z" - }, - { - "$type": "Document", - "DocumentIndex": 90, - "Title": "ControlItemRender.vert", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.vert", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\ControlItemRender.vert", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.vert", - "RelativeToolTip": "StgSharpDebug\\Shader\\ControlItemRender.vert", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-08-01T11:36:54.425Z" - }, - { - "$type": "Document", - "DocumentIndex": 96, - "Title": "OpenGLControllingItemRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\OpenGLControllingItemRenderStream.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\OpenGLControllingItemRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\OpenGLControllingItemRenderStream.cs", - "RelativeToolTip": "StgSharp\\MVVM\\OpenGLControllingItemRenderStream.cs", - "ViewState": "AgIAAAAAAAAAAAAAAIBgwBUAAAAwAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:32:58.353Z" - }, - { - "$type": "Document", - "DocumentIndex": 97, - "Title": "IGeomtryBuffer.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:26:58.217Z" - }, - { - "$type": "Document", - "DocumentIndex": 98, - "Title": "OpenGLControllingItemRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\OpenGLControllingItemRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\OpenGLControllingItemRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\OpenGLControllingItemRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\OpenGLControllingItemRenderStream.cs", - "ViewState": "AgIAAAcAAAAAAAAAAAAIwBoAAAAwAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:23:06.648Z" - }, - { - "$type": "Document", - "DocumentIndex": 99, - "Title": "OpenningView.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "RelativeToolTip": "StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:20:02.653Z" - }, - { - "$type": "Document", - "DocumentIndex": 91, - "Title": "TouhouWindow.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "RelativeToolTip": "StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:14:18.39Z" - }, - { - "$type": "Document", - "DocumentIndex": 95, - "Title": "InternalData.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\InternalData.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Data\\InternalData.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\InternalData.cs", - "RelativeToolTip": "StgSharpDebug\\Data\\InternalData.cs", - "ViewState": "AgIAAAcAAAAAAAAAAAAuwDMAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-30T23:52:16.105Z" - }, - { - "$type": "Document", - "DocumentIndex": 77, - "Title": "glApiManagerConst.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ViewState": "AgIAABgAAAAAAAAAAIBQwAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:56:27.205Z" - }, - { - "$type": "Document", - "DocumentIndex": 105, - "Title": "Object.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\3fbd2d3f2a21976ceea22ce6d61d2bfc56abbb0356d59a09e7367042f1d26101\\src\\libraries\\System.Private.CoreLib\\src\\System\\Object.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\3fbd2d3f2a21976ceea22ce6d61d2bfc56abbb0356d59a09e7367042f1d26101\\src\\libraries\\System.Private.CoreLib\\src\\System\\Object.cs", - "ViewState": "AgIAABIAAAAAAAAAAIAxwBkAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:53:04.659Z" - }, - { - "$type": "Document", - "DocumentIndex": 76, - "Title": "glException.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "ViewState": "AgIAAEMAAAAAAAAAAAAUwGUAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:18:29.968Z" - }, - { - "$type": "Document", - "DocumentIndex": 109, - "Title": "StructDefine.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "ViewState": "AgIAABIAAAAAAAAAAIBgwC0AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:08:05.513Z" - }, - { - "$type": "Document", - "DocumentIndex": 104, - "Title": "GLIO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "ViewState": "AgIAAGgAAAAAAAAAAAAqwGgAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:06:08.827Z" - }, - { - "$type": "Document", - "DocumentIndex": 116, - "Title": "ViewManage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "ViewState": "AgIAABoAAAAAAAAAAAA1wDIAAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:47:56.998Z" - }, - { - "$type": "Document", - "DocumentIndex": 41, - "Title": "TimeProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\TimeProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Environment\\TimeProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\TimeProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Environment\\TimeProvider.cs", - "ViewState": "AgIAABkAAAAAAAAAAAAnwDAAAAAlAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:44:41.918Z" - }, - { - "$type": "Document", - "DocumentIndex": 103, - "Title": "SemaphoreSlim.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\c6a36f44105246e8389794d6b1ff0c946741477e6dd52e219c7f2f689247fedc\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\SemaphoreSlim.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\c6a36f44105246e8389794d6b1ff0c946741477e6dd52e219c7f2f689247fedc\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\SemaphoreSlim.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:44:32.439Z" - }, - { - "$type": "Document", - "DocumentIndex": 12, - "Title": "ViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewPort.cs", - "ViewState": "AgIAADEAAAAAAAAAAEBBwDoAAAASAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:31:16.196Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 87, - "Title": "ViewResponder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "ViewState": "AgIAAFEAAAAAAAAAAAAWwHQAAAAvAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:20:17.17Z" - }, - { - "$type": "Document", - "DocumentIndex": 111, - "Title": "ShowViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "ViewState": "AgIAADIAAAAAAAAAAAAtwEgAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:28:00.87Z" - }, - { - "$type": "Document", - "DocumentIndex": 40, - "Title": "ViewModel.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "ViewState": "AgIAAFMAAAAAAAAAAAAvwGoAAAA5AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:24:58.03Z" - }, - { - "$type": "Document", - "DocumentIndex": 118, - "Title": "PlainGeometry.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAqwC0AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:16:05.323Z" - }, - { - "$type": "Document", - "DocumentIndex": 117, - "Title": "Rectangle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "ViewState": "AgIAABAAAAAAAAAAAAA1wCUAAAAFAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:14:47.657Z" - }, - { - "$type": "Document", - "DocumentIndex": 88, + "DocumentIndex": 7, "Title": "ViewDesigner.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", - "ViewState": "AgIAAFEAAAAAAAAAAAAmwGUAAAAUAAAAAAAAAA==", + "ViewState": "AgIAAHkAAAAAAAAAAAAmwAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T18:02:40.594Z" - }, - { - "$type": "Document", - "DocumentIndex": 123, - "Title": "KeyTrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T22:07:04.226Z" - }, - { - "$type": "Document", - "DocumentIndex": 125, - "Title": "DataBinding.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", - "ViewState": "AgIAADgAAAAAAAAAAAA0wC8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:50:43.739Z" - }, - { - "$type": "Document", - "DocumentIndex": 31, - "Title": "ViewBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "ViewState": "AgIAABIAAAAAAAAAAAApwH8AAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:46:52.221Z" - }, - { - "$type": "Document", - "DocumentIndex": 33, - "Title": "ViewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "ViewState": "AgIAAAwAAAAAAAAAAAAvwB8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:02:28.873Z" - }, - { - "$type": "Document", - "DocumentIndex": 2, - "Title": "NewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\NewRender.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\NewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\NewRender.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\NewRender.cs", - "ViewState": "AgIAACkAAAAAAAAAAAAswEAAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:00:30.407Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 128, - "Title": "ViewResponder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewResponder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", - "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewResponder.cs", - "ViewState": "AgIAABwAAAAAAAAAAIBgwDsAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-24T14:44:59.912Z" - }, - { - "$type": "Document", - "DocumentIndex": 10, - "Title": "ViewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", - "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewRender.cs", - "ViewState": "AgIAAFsAAAAAAAAAAAAuwG0AAAAgAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-24T14:44:50.254Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 127, - "Title": "ViewDesigner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewDesigner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", - "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewDesigner.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAIYAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-24T14:42:19.45Z" - }, - { - "$type": "Document", - "DocumentIndex": 113, - "Title": "Control.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Control.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\Control.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Control.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\Control.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-22T23:13:34.964Z" - }, - { - "$type": "Document", - "DocumentIndex": 23, - "Title": "Partical.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "ViewState": "AgIAAFQAAAAAAAAAAAAzwFsAAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-22T18:54:09.535Z" - }, - { - "$type": "Document", - "DocumentIndex": 236, - "Title": "Render.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Render.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\Render.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Render.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\Render.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-22T18:52:26.586Z" - }, - { - "$type": "Document", - "DocumentIndex": 112, - "Title": "PlainGeometryMesh.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "ViewState": "AgIAACsAAAAAAAAAAAAiwDoAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:21:10.362Z" - }, - { - "$type": "Document", - "DocumentIndex": 30, - "Title": "TexturePipeline.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TexturePipeline.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\TexturePipeline.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TexturePipeline.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\TexturePipeline.cs", - "ViewState": "AgIAABAAAAAAAAAAAAAhwCoAAAA0AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:20:56.032Z" - }, - { - "$type": "Document", - "DocumentIndex": 39, - "Title": "MarkingLable.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAvwC8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:08:20.718Z" - }, - { - "$type": "Document", - "DocumentIndex": 119, - "Title": "DecorationBox.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwBMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:08:04.698Z" - }, - { - "$type": "Document", - "DocumentIndex": 121, - "Title": "CharacterIndexImage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "ViewState": "AgIAAAMAAAAAAAAAAIBgwA0AAAArAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:07:37.453Z" - }, - { - "$type": "Document", - "DocumentIndex": 35, - "Title": "BattleField.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "ViewState": "AgIAAA0AAAAAAAAAAAAvwCAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:06:14.126Z" - }, - { - "$type": "Document", - "DocumentIndex": 120, - "Title": "ControllingIntem.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwA4AAAAHAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:05:39.942Z" - }, - { - "$type": "Document", - "DocumentIndex": 122, - "Title": "TextureProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\TextureProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\TextureProvider.cs", - "ViewState": "AgIAABIAAAAAAAAAAAAcwCMAAAASAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T17:09:02.036Z" - }, - { - "$type": "Document", - "DocumentIndex": 3, - "Title": "Design.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Design.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\Design.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Design.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\Design.cs", - "ViewState": "AgIAABQAAAAAAAAAAAAqwCYAAAAhAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T08:07:56.357Z", + "WhenOpened": "2024-10-02T17:23:25.276Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 1, - "Title": "ViewMain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\ViewMain.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\ViewMain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\ViewMain.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\ViewMain.cs", - "ViewState": "AgIAAEIAAAAAAAAAAIA1wFcAAAAVAAAAAAAAAA==", + "Title": "Lable.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Lable.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Lable.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Lable.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Lable.cs", + "ViewState": "AgIAACwAAAAAAAAAAAAAwDgAAAAgAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T08:06:54.118Z", + "WhenOpened": "2024-10-02T09:09:25.924Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 129, + "DocumentIndex": 15, + "Title": "tmmintrin.h", + "DocumentMoniker": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\tmmintrin.h", + "ToolTip": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\tmmintrin.h", + "ViewState": "AgIAACIAAAAAAAAAAIAwwC0AAAAhAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-10-02T02:14:03.631Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "quick_hash.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\quick_hash.c", + "RelativeDocumentMoniker": "StgSharpC\\quick_hash.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\quick_hash.c", + "RelativeToolTip": "StgSharpC\\quick_hash.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAZAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-10-02T01:00:22.214Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 40, + "Title": "intrinsicContextProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeToolTip": "StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAQwDMAAAAEAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T19:25:34.473Z" + }, + { + "$type": "Document", + "DocumentIndex": 21, + "Title": "vector.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\vector.c", + "RelativeDocumentMoniker": "StgSharpC\\vector.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\vector.c", + "RelativeToolTip": "StgSharpC\\vector.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-30T18:50:19.959Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 39, + "Title": "intrinsicContextProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ViewState": "AgIAAB4AAAAAAAAAAAAowC8AAAAoAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T18:13:26.275Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 171, + "Title": "immintrin.h", + "DocumentMoniker": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\immintrin.h", + "ToolTip": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\immintrin.h", + "ViewState": "AgIAAEgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-30T18:00:39.836Z" + }, + { + "$type": "Document", + "DocumentIndex": 46, + "Title": "Matrix43.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix43.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix43.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix43.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix43.cs", + "ViewState": "AgIAAIMAAAAAAAAAAAAQwJEAAABDAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:54.686Z" + }, + { + "$type": "Document", + "DocumentIndex": 47, + "Title": "Matrix23.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix23.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix23.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix23.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix23.cs", + "ViewState": "AgIAAGcAAAAAAAAAAAAQwHUAAAA7AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:50.079Z" + }, + { + "$type": "Document", + "DocumentIndex": 48, + "Title": "ColumnSet2.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeToolTip": "StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "ViewState": "AgIAACoAAAAAAAAAAAAQwDgAAAA8AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:33.294Z" + }, + { + "$type": "Document", + "DocumentIndex": 45, + "Title": "ColumnSet3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeToolTip": "StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "ViewState": "AgIAABEAAAAAAAAAAADwvzIAAAAsAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:28.515Z" + }, + { + "$type": "Document", + "DocumentIndex": 44, + "Title": "Matrix22.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix22.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix22.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix22.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix22.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAzwDEAAAARAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:27.126Z" + }, + { + "$type": "Document", + "DocumentIndex": 37, + "Title": "Matrix42.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "ViewState": "AgIAAKoAAAAAAAAAAAAAwIAAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:11.427Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 27, + "Title": "Matrix33.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix33.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix33.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix33.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix33.cs", + "ViewState": "AgIAAHwAAAAAAAAAAAAQwIwAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:42:19.077Z" + }, + { + "$type": "Document", + "DocumentIndex": 43, + "Title": "Matrix32.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix32.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix32.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix32.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix32.cs", + "ViewState": "AgIAAHEAAAAAAAAAAAAowH4AAAA7AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:41:00.831Z" + }, + { + "$type": "Document", + "DocumentIndex": 34, + "Title": "Matrix43.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "ViewState": "AgIAAIMAAAAAAAAAAAAQwJEAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:49:18.978Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 33, + "Title": "Matrix34.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "ViewState": "AgIAAHwAAAAAAAAAAAAQwIoAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:49:11.967Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 28, + "Title": "Matrix33.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "ViewState": "AgIAAHkAAAAAAAAAAAAuwIoAAAA0AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:49:07.562Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 32, + "Title": "Matrix32.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "ViewState": "AgIAAHAAAAAAAAAAAAAQwH4AAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:48:52.232Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 31, + "Title": "Matrix24.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "ViewState": "AgIAAHwAAAAAAAAAAAAzwIoAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:48:41.245Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 29, + "Title": "Matrix23.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "ViewState": "AgIAAGcAAAAAAAAAAAAQwHUAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:47:48.203Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 49, + "Title": "Matrix42.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix42.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix42.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix42.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix42.cs", + "ViewState": "AgIAAHIAAAAAAAAAAAAQwIAAAAA7AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:47:19.267Z" + }, + { + "$type": "Document", + "DocumentIndex": 63, + "Title": "Random.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Scalar\\Random.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Scalar\\Random.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Scalar\\Random.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Scalar\\Random.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAUwB8AAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:26:04.159Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "DataBinding.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", + "ViewState": "AgIAAFIAAAAAAAAAAAAgwFsAAAAuAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:58.341Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 54, + "Title": "DataHead.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataHead.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\SSD\\DataHead.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataHead.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\SSD\\DataHead.cs", + "ViewState": "AgIAABAAAAAAAAAAAAAQwB4AAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:53.902Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 56, + "Title": "Vector.Orthogonalize.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "ViewState": "AgIAAA8AAAAAAAAAAAAQwB8AAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:47.906Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 64, + "Title": "DataSegment.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "ViewState": "AgIAAHsAAAAAAAAAAAAUwIkAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:45.42Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 58, + "Title": "DataHead.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataHead.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\DataHead.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataHead.cs", + "RelativeToolTip": "StgSharp\\Data\\SSD\\DataHead.cs", + "ViewState": "AgIAAAwAAAAAAAAAAADwvx4AAAAeAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:40.498Z" + }, + { + "$type": "Document", + "DocumentIndex": 60, + "Title": "Random.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Scalar\\Random.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Scalar\\Random.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Scalar\\Random.cs", + "RelativeToolTip": "StgSharp\\Math\\Scalar\\Random.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAUwB8AAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:27.05Z" + }, + { + "$type": "Document", + "DocumentIndex": 66, "Title": "DataBinding.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\DataBinding.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\DataBinding.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\DataBinding.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\DataBinding.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACgAAAAhAAAAAAAAAA==", + "ViewState": "AgIAABAAAAAAAAAAAAAUwB4AAAAeAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-19T16:41:06.14Z" + "WhenOpened": "2024-09-29T23:25:26.263Z" }, { "$type": "Document", - "DocumentIndex": 132, - "Title": "KeyEventAttribute.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "DocumentIndex": 57, + "Title": "Vec4.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec4.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vec4.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec4.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Vec4.cs", + "ViewState": "AgIAABQAAAAAAAAAAAAiwB8AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-19T15:04:20.506Z" + "WhenOpened": "2024-09-29T23:25:05.778Z" }, { "$type": "Document", - "DocumentIndex": 237, - "Title": "DataBinding.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", + "DocumentIndex": 67, + "Title": "Vec3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec3.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vec3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec3.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Vec3.cs", + "ViewState": "AgIAABcAAAAAAAAAAAAUwC4AAAARAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-18T17:19:17.458Z" + "WhenOpened": "2024-09-29T23:25:00.158Z" }, { "$type": "Document", - "DocumentIndex": 115, - "Title": "StgSharpDebug", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeDocumentMoniker": "StgSharpDebug\\StgSharpDebug.csproj", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeToolTip": "StgSharpDebug\\StgSharpDebug.csproj", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2024-07-17T19:34:54.548Z" - }, - { - "$type": "Document", - "DocumentIndex": 15, - "Title": "ViewModelMain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\ViewModelMain.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\ViewModelMain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\ViewModelMain.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\ViewModelMain.cs", - "ViewState": "AgIAABkAAAAAAAAAAAAhwDAAAAA3AAAAAAAAAA==", + "DocumentIndex": 61, + "Title": "DataSegment.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\DataSegment.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", + "RelativeToolTip": "StgSharp\\Data\\SSD\\DataSegment.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAwwCAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-16T07:19:49.481Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 71, - "Title": "StgSharpDebug.csproj", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeDocumentMoniker": "StgSharpDebug\\StgSharpDebug.csproj", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeToolTip": "StgSharpDebug\\StgSharpDebug.csproj", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAAUAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2024-07-16T07:19:00.583Z" - }, - { - "$type": "Document", - "DocumentIndex": 247, - "Title": "TimeFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\TimeFunction.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\TimeFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\TimeFunction.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\TimeFunction.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T20:04:24.579Z" - }, - { - "$type": "Document", - "DocumentIndex": 25, - "Title": "TriggerButton.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "ViewState": "AgIAALMAAAAAAAAAAIA0wL4AAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T19:54:09.954Z" - }, - { - "$type": "Document", - "DocumentIndex": 114, - "Title": "ButtonGroup.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "ViewState": "AgIAADAAAAAAAAAAAAAqwEEAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T19:53:42.786Z" - }, - { - "$type": "Document", - "DocumentIndex": 238, - "Title": "ShowViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T19:07:20.391Z" - }, - { - "$type": "Document", - "DocumentIndex": 239, - "Title": "ViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T18:55:25.494Z" - }, - { - "$type": "Document", - "DocumentIndex": 124, - "Title": "KeyControl.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyControl.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\KeyControl.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyControl.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\KeyControl.cs", - "ViewState": "AgIAABAAAAAAAAAAAAAqwCQAAAAbAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T18:23:56.059Z" - }, - { - "$type": "Document", - "DocumentIndex": 240, - "Title": "ViewResponder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewResponder.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\ViewResponder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewResponder.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\ViewResponder.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T18:00:35.036Z" - }, - { - "$type": "Document", - "DocumentIndex": 241, - "Title": "ViewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T17:27:33.542Z" - }, - { - "$type": "Document", - "DocumentIndex": 242, - "Title": "ViewDesigner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewDesigner.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\ViewDesigner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewDesigner.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\ViewDesigner.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T17:21:21.477Z" - }, - { - "$type": "Document", - "DocumentIndex": 126, - "Title": "View.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\View.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\View\\View.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\View.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\View\\View.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T15:23:07.924Z" - }, - { - "$type": "Document", - "DocumentIndex": 133, - "Title": "vec3d.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\vec3d.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\vec3d.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\vec3d.cs", - "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\vec3d.cs", - "ViewState": "AgIAAF0AAAAAAAAAAAAmwEcAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-14T17:17:29.238Z" - }, - { - "$type": "Document", - "DocumentIndex": 44, - "Title": "GeometryOperation.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ViewState": "AgIAAB8AAAAAAAAAAAAvwDIAAAAQAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-13T17:37:00.956Z" - }, - { - "$type": "Document", - "DocumentIndex": 110, - "Title": "particle.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\particle.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\particle.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA4AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-13T05:34:34.109Z" - }, - { - "$type": "Document", - "DocumentIndex": 102, - "Title": "particle.vert", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.vert", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\particle.vert", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.vert", - "RelativeToolTip": "StgSharpDebug\\Shader\\particle.vert", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAAAoAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-13T05:34:25.67Z" - }, - { - "$type": "Document", - "DocumentIndex": 93, - "Title": "fbo.vert", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.vert", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\fbo.vert", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.vert", - "RelativeToolTip": "StgSharpDebug\\Shader\\fbo.vert", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-12T17:46:54.077Z" - }, - { - "$type": "Document", - "DocumentIndex": 92, - "Title": "fbo.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\fbo.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\fbo.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-12T17:46:52.616Z" - }, - { - "$type": "Document", - "DocumentIndex": 85, - "Title": "glEnum.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "ViewState": "AgIAAFUAAAAAAAAAAAASwGcAAAAQAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-12T17:36:17.134Z" - }, - { - "$type": "Document", - "DocumentIndex": 11, - "Title": "RenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\RenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\RenderStream.cs", - "ViewState": "AgIAAFEAAAAAAAAAAAAWwF4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-12T16:50:10.581Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 81, - "Title": "VAO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAqwCcAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-12T10:04:44.545Z" - }, - { - "$type": "Document", - "DocumentIndex": 24, - "Title": "TextureGL.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "ViewState": "AgIAAFkAAAAAAAAAAAArwGMAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T18:46:51.043Z" - }, - { - "$type": "Document", - "DocumentIndex": 136, - "Title": "SR.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\74ed84df48c00229a8da75e7d99c26a3409b78c17ddfc863196b29969f1b9863\\src\\libraries\\Common\\src\\System\\SR.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\74ed84df48c00229a8da75e7d99c26a3409b78c17ddfc863196b29969f1b9863\\src\\libraries\\Common\\src\\System\\SR.cs", - "ViewState": "AgIAABkAAAAAAAAAAADgvyIAAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T18:09:43.749Z" - }, - { - "$type": "Document", - "DocumentIndex": 20, - "Title": "ImageHelper.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "ViewState": "AgIAABsAAAAAAAAAAAD4vywAAAAkAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T13:33:11Z" - }, - { - "$type": "Document", - "DocumentIndex": 22, - "Title": "Image.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Image.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Image.cs", - "ViewState": "AgIAADkAAAAAAAAAAIA7wE8AAAAXAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T13:30:30.357Z" - }, - { - "$type": "Document", - "DocumentIndex": 139, - "Title": "Task.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\6c91e49c16b65a4a6086c168a4f34965ffdd867f9cb4d0d10207e862c24f2808\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\Tasks\\Task.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\6c91e49c16b65a4a6086c168a4f34965ffdd867f9cb4d0d10207e862c24f2808\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\Tasks\\Task.cs", - "ViewState": "AgIAAD8JAAAAAAAAAAAjwEcJAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T03:46:13.673Z" - }, - { - "$type": "Document", - "DocumentIndex": 107, - "Title": "GlHandle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "ViewState": "AgIAACQAAAAAAAAAAAAYwDoAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:49:23.76Z" - }, - { - "$type": "Document", - "DocumentIndex": 243, - "Title": "ViewManage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:32:18.12Z" + "WhenOpened": "2024-09-29T23:24:54.534Z" }, { "$type": "Document", "DocumentIndex": 0, - "Title": "glRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "ViewState": "AgIAAEYAAAAAAAAAAAASwFoAAAAjAAAAAAAAAA==", + "Title": "IntrinsicContext.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAgwDUAAAAIAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:31:57.791Z", + "WhenOpened": "2024-09-29T23:24:12.242Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 75, - "Title": "glApiManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "ViewState": "AgIAABUAAAAAAAAAAIBQwLAAAACCAAAAAAAAAA==", + "DocumentIndex": 62, + "Title": "RandomGenerator.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\RandomGenerator.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\RandomGenerator.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\RandomGenerator.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\RandomGenerator.cs", + "ViewState": "AgIAAA4AAAAAAAAAAAAgwB8AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:26:52.544Z" + "WhenOpened": "2024-09-29T23:23:55.248Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 140, - "Title": "glApiManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "ViewState": "AgIAACoAAAAAAAAAAAAYwD8AAAAWAAAAAAAAAA==", + "DocumentIndex": 69, + "Title": "M256.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "ViewState": "AgIAAB4AAAAAAAAAAAAAACYAAAASAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:24:34.903Z" + "WhenOpened": "2024-09-29T23:23:44.528Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 141, - "Title": "glApiManagerConst.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:24:33.785Z" - }, - { - "$type": "Document", - "DocumentIndex": 21, - "Title": "glFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "ViewState": "AgIAAOMBAAAAAAAAAIAzwPYBAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:05:53.065Z" - }, - { - "$type": "Document", - "DocumentIndex": 143, - "Title": "Camera.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Graphic\\Camera.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Graphic\\Camera.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Graphic\\Camera.cs", - "RelativeToolTip": "StgSharp\\Math\\Graphic\\Camera.cs", - "ViewState": "AgIAAIUAAAAAAAAAAAA0wJEAAAAiAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:59:14.403Z" - }, - { - "$type": "Document", - "DocumentIndex": 83, - "Title": "FBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:58:38.22Z" - }, - { - "$type": "Document", - "DocumentIndex": 84, - "Title": "EBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAYwC8AAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:58:29.9Z" - }, - { - "$type": "Document", - "DocumentIndex": 51, - "Title": "GlobalSuppressions.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\GlobalSuppressions.cs", - "RelativeDocumentMoniker": "StgSharp\\GlobalSuppressions.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\GlobalSuppressions.cs", - "RelativeToolTip": "StgSharp\\GlobalSuppressions.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:41:12.94Z" - }, - { - "$type": "Document", - "DocumentIndex": 108, - "Title": "BufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "ViewState": "AgIAADAAAAAAAAAAAIBgwE4AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:23:55.021Z" - }, - { - "$type": "Document", - "DocumentIndex": 149, - "Title": "glConst.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glConst.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\glConst.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glConst.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Define\\glConst.cs", - "ViewState": "AgIAAB0AAAAAAAAAAAAqwPQSAAAgAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:17:12.687Z" - }, - { - "$type": "Document", - "DocumentIndex": 148, - "Title": "VBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ViewState": "AgIAAIMAAAAAAAAAAAAowJIAAAAwAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:16:18.094Z" - }, - { - "$type": "Document", - "DocumentIndex": 150, - "Title": "VAO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ViewState": "AgIAADcAAAAAAAAAAAAUwEgAAAA1AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:15:13.91Z" - }, - { - "$type": "Document", - "DocumentIndex": 152, - "Title": "FBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ViewState": "AgIAAA4AAAAAAAAAAAAcwCYAAAAOAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:05:59.749Z" - }, - { - "$type": "Document", - "DocumentIndex": 156, - "Title": "InternalIO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\InternalIO.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\IO\\InternalIO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\InternalIO.cs", - "RelativeToolTip": "StgSharp\\Controlling\\IO\\InternalIO.cs", - "ViewState": "AgIAAFkAAAAAAAAAAAA0wGoAAAALAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T15:48:23.725Z" - }, - { - "$type": "Document", - "DocumentIndex": 142, - "Title": "Pixels.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Pixels.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Pixels.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Pixels.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Pixels.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T04:12:48.395Z" - }, - { - "$type": "Document", - "DocumentIndex": 161, - "Title": "glException.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glException.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glException.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glException.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glException.cs", - "ViewState": "AgIAABgAAAAAAAAAAAAYwDAAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-08T11:52:05.336Z" - }, - { - "$type": "Document", - "DocumentIndex": 130, - "Title": "StgSharp.csproj", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", - "RelativeDocumentMoniker": "StgSharp\\StgSharp.csproj", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", - "RelativeToolTip": "StgSharp\\StgSharp.csproj", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2024-07-08T10:39:35.673Z" - }, - { - "$type": "Document", - "DocumentIndex": 151, - "Title": "RBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAtAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-07T17:45:11.682Z" - }, - { - "$type": "Document", - "DocumentIndex": 138, - "Title": "GlHandle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "ViewState": "AgIAACYAAAAAAAAAAAAYwDMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T08:38:18.156Z" - }, - { - "$type": "Document", - "DocumentIndex": 153, - "Title": "BufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "ViewState": "AgIAABgAAAAAAAAAAAAYwCsAAAAqAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T06:22:32.666Z" - }, - { - "$type": "Document", - "DocumentIndex": 144, - "Title": "GLBufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T07:31:18.854Z" - }, - { - "$type": "Document", - "DocumentIndex": 154, - "Title": "EBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ViewState": "AgIAAA0AAAAAAAAAAAAswB4AAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T06:22:23.335Z" - }, - { - "$type": "Document", - "DocumentIndex": 235, - "Title": "MainRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Test\\MainRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Test\\MainRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Test\\MainRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Test\\MainRenderStream.cs", - "ViewState": "AgIAABsAAAAAAAAAAAA1wC4AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:36.555Z" - }, - { - "$type": "Document", - "DocumentIndex": 230, - "Title": "RBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:23.15Z" - }, - { - "$type": "Document", - "DocumentIndex": 244, - "Title": "ViewModel.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:20.456Z" - }, - { - "$type": "Document", - "DocumentIndex": 162, - "Title": "ShaderStruct.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "ViewState": "AgIAABUAAAAAAAAAAAAYwCgAAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:17.716Z" - }, - { - "$type": "Document", - "DocumentIndex": 231, - "Title": "EBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:15.821Z" - }, - { - "$type": "Document", - "DocumentIndex": 32, - "Title": "CollisionTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\CollisionTexture.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\CollisionTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\CollisionTexture.cs", - "RelativeToolTip": "StgSharpDebug\\Stg\\CollisionTexture.cs", - "ViewState": "AgIAAA8AAAAAAAAAAAAvwCIAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:12.581Z" - }, - { - "$type": "Document", - "DocumentIndex": 106, - "Title": "Camera.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Graphic\\Camera.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Graphic\\Camera.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Graphic\\Camera.cs", - "RelativeToolTip": "StgSharpDebug\\Math\\Graphic\\Camera.cs", - "ViewState": "AgIAADkAAAAAAAAAAAAcwEUAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:11.807Z" - }, - { - "$type": "Document", - "DocumentIndex": 232, - "Title": "Shader.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:06.545Z" - }, - { - "$type": "Document", - "DocumentIndex": 233, - "Title": "VBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T23:58:09.408Z" - }, - { - "$type": "Document", - "DocumentIndex": 234, - "Title": "glRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T23:55:40.542Z" - }, - { - "$type": "Document", - "DocumentIndex": 146, - "Title": "Uniform.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "ViewState": "AgIAAJEAAAAAAAAAAAAUwCsAAAAFAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T17:58:58.669Z" - }, - { - "$type": "Document", - "DocumentIndex": 7, - "Title": "IGraphicAPIs.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\IGraphicAPIs.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\IGraphicAPIs.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\IGraphicAPIs.cs", - "RelativeToolTip": "StgSharp\\Graphics\\IGraphicAPIs.cs", - "ViewState": "AgIAABIAAAAAAAAAAAAAAAgAAAA2AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T17:54:48.427Z", + "DocumentIndex": 13, + "Title": "intrinsic.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\intrinsic.c", + "RelativeDocumentMoniker": "StgSharpC\\intrinsic.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\intrinsic.c", + "RelativeToolTip": "StgSharpC\\intrinsic.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAwwBUAAAA3AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T22:48:24.45Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 14, + "Title": "stb_image.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.h", + "RelativeDocumentMoniker": "StgSharpC\\stb_image.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.h", + "RelativeToolTip": "StgSharpC\\stb_image.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T22:37:09.182Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "ssc_intrinsic.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_intrinsic.h", + "RelativeDocumentMoniker": "StgSharpC\\ssc_intrinsic.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_intrinsic.h", + "RelativeToolTip": "StgSharpC\\ssc_intrinsic.h", + "ViewState": "AgIAAC0AAAAAAAAAAAAAAD8AAAAoAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T22:32:24.64Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 70, "Title": "Program.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\Program.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\Program.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\Program.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\Program.cs", - "ViewState": "AgIAAC4AAAAAAAAAAIA+wEAAAAAAAAAAAAAAAA==", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\BenchMark\\Program.cs", + "RelativeDocumentMoniker": "BenchMark\\Program.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\BenchMark\\Program.cs", + "RelativeToolTip": "BenchMark\\Program.cs", + "ViewState": "AgIAAAYAAAAAAAAAAAAAACEAAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-26T19:34:28.297Z", + "WhenOpened": "2024-09-29T22:26:10.769Z" + }, + { + "$type": "Document", + "DocumentIndex": 30, + "Title": "Matrix44.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "ViewState": "AgIAALcAAAAAAAAAAAAowMQAAAA0AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:53:45.275Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 50, + "Title": "Matrix22.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "ViewState": "AgIAACcAAAAAAAAAAAAQwDUAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:50:22.312Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 72, + "Title": "GeometryOperation.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", + "RelativeToolTip": "StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", + "ViewState": "AgIAAGcAAAAAAAAAAAAnwHYAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:47:44.641Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 38, + "Title": "Vec2.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec2.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vec2.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec2.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vec2.cs", + "ViewState": "AgIAAEoAAAAAAAAAAABBwCkAAAAWAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:46:47.983Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 52, - "Title": "BpNodeBuilder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "ViewState": "AgIAAC8AAAAAAAAAAAAvwEIAAAAXAAAAAAAAAA==", + "Title": "Vec3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec3.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vec3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec3.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vec3.cs", + "ViewState": "AgIAADcAAAAAAAAAAIA1wB8AAAAOAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-26T19:26:13.669Z" + "WhenOpened": "2024-09-29T21:45:17.737Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 65, - "Title": "IConvertableToBlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "ViewState": "AgIAAA4AAAAAAAAAAAAYwCMAAAAcAAAAAAAAAA==", + "DocumentIndex": 51, + "Title": "Vec4.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec4.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vec4.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec4.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vec4.cs", + "ViewState": "AgIAAAwAAAAAAAAAAAAQwC8AAAAmAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-25T23:11:19.554Z" + "WhenOpened": "2024-09-29T21:44:04.683Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 66, - "Title": "BpNodeActionAttribute.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "ViewState": "AgIAAAkAAAAAAAAAAAAAACIAAAAcAAAAAAAAAA==", + "DocumentIndex": 71, + "Title": "IVector.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\IVector.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\IVector.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\IVector.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\IVector.cs", + "ViewState": "AgIAAB0AAAAAAAAAAAASwC4AAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-25T18:43:08.93Z" + "WhenOpened": "2024-09-29T21:40:46.434Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 163, - "Title": "glfw3.h", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", - "RelativeDocumentMoniker": "StgSharpC\\glfw3.h", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", - "RelativeToolTip": "StgSharpC\\glfw3.h", - "ViewState": "AgIAAAMRAAAAAAAAAAAqwBURAAAXAAAAAAAAAA==", + "DocumentIndex": 35, + "Title": "ColumnSet4.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "ViewState": "AgIAAEkAAAAAAAAAAAAswCYAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:37:40.402Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 25, + "Title": "ColumnSet2.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "ViewState": "AgIAAC8AAAAAAAAAAAAcwDsAAAAYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:37:34.496Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 36, + "Title": "ColumnSet3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "ViewState": "AgIAAEQAAAAAAAAAAAAmwCUAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:35:07.699Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 73, + "Title": "Bullet.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Bullet.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\Bullet.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Bullet.cs", + "RelativeToolTip": "StgSharpDebug\\Stg\\Bullet.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAC0AAAAQAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:33:00.53Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 74, + "Title": "NativeMethods.txt", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\NativeMethods.txt", + "RelativeDocumentMoniker": "StgSharpDebug\\NativeMethods.txt", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\NativeMethods.txt", + "RelativeToolTip": "StgSharpDebug\\NativeMethods.txt", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", + "WhenOpened": "2024-09-29T21:32:56.873Z" + }, + { + "$type": "Document", + "DocumentIndex": 75, + "Title": "Control", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Control", + "RelativeDocumentMoniker": "StgSharpDebug\\Control", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Control", + "RelativeToolTip": "StgSharpDebug\\Control", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", + "WhenOpened": "2024-09-29T21:32:55.128Z" + }, + { + "$type": "Document", + "DocumentIndex": 76, + "Title": "BlueprintActionNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ViewState": "AgIAACcAAAAAAAAAAAAAACkAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T20:59:53.281Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "mat3.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat3.c", + "RelativeDocumentMoniker": "StgSharpC\\mat3.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat3.c", + "RelativeToolTip": "StgSharpC\\mat3.c", + "ViewState": "AgIAAA4AAAAAAAAAAAAjwBMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T20:46:58.962Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 19, + "Title": "mat2.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat2.c", + "RelativeDocumentMoniker": "StgSharpC\\mat2.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat2.c", + "RelativeToolTip": "StgSharpC\\mat2.c", + "ViewState": "AgIAAA0AAAAAAAAAAAAgwCgAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T20:46:52.29Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 24, + "Title": "stb_image.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.c", + "RelativeDocumentMoniker": "StgSharpC\\stb_image.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.c", + "RelativeToolTip": "StgSharpC\\stb_image.c", + "ViewState": "AgIAAJASAAAAAAAAAAAewLISAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T20:37:47.434Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 26, + "Title": "ssc_framework.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_framework.h", + "RelativeDocumentMoniker": "StgSharpC\\ssc_framework.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_framework.h", + "RelativeToolTip": "StgSharpC\\ssc_framework.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-06-22T23:24:18.461Z" + "WhenOpened": "2024-09-29T19:54:56.607Z" }, { "$type": "Document", - "DocumentIndex": 248, - "Title": "CrossFrameBlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", + "DocumentIndex": 77, + "Title": "glfw3native.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3native.h", + "RelativeDocumentMoniker": "StgSharpC\\glfw3native.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3native.h \u2B24", + "RelativeToolTip": "StgSharpC\\glfw3native.h \u2B24", + "ViewState": "AgIAAE4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T19:54:32.432Z" + }, + { + "$type": "Document", + "DocumentIndex": 78, + "Title": "gl.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\gl.h", + "RelativeDocumentMoniker": "StgSharpC\\gl.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\gl.h", + "RelativeToolTip": "StgSharpC\\gl.h", + "ViewState": "AgIAAIQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T19:53:16.298Z" + }, + { + "$type": "Document", + "DocumentIndex": 20, + "Title": "dllmain.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\dllmain.c", + "RelativeDocumentMoniker": "StgSharpC\\dllmain.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\dllmain.c", + "RelativeToolTip": "StgSharpC\\dllmain.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T19:13:51.2Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 16, + "Title": "ssc_internal.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_internal.h", + "RelativeDocumentMoniker": "StgSharpC\\ssc_internal.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_internal.h", + "RelativeToolTip": "StgSharpC\\ssc_internal.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T17:54:05.067Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 22, + "Title": "mat4.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat4.c", + "RelativeDocumentMoniker": "StgSharpC\\mat4.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat4.c", + "RelativeToolTip": "StgSharpC\\mat4.c", + "ViewState": "AgIAABIAAAAAAAAAAAAAAAYAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T17:52:26.343Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 53, + "Title": "IRegisterType.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "ViewState": "AgIAABoAAAAAAAAAAAAewCQAAAASAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-17T18:41:24.48Z" + "WhenOpened": "2024-09-29T08:33:34.009Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 62, - "Title": "PipeLine.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "ViewState": "AgIAAGMAAAAAAAAAAAAowCgAAAAcAAAAAAAAAA==", + "DocumentIndex": 79, + "Title": "MatInterface.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "ViewState": "AgIAABUAAAAAAAAAAAAAABIAAAAHAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T23:18:28.288Z" + "WhenOpened": "2024-09-29T08:33:51.856Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 101, - "Title": "InternalData.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\InternalData.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\InternalData.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\InternalData.cs", - "RelativeToolTip": "StgSharp\\Data\\InternalData.cs", - "ViewState": "AgIAAAAAAAAAAAAAAIBQwBUAAAAMAAAAAAAAAA==", + "DocumentIndex": 12, + "Title": "M128.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "ViewState": "AgIAADkAAAAAAAAAAAA1wEQAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:31:52.702Z" + "WhenOpened": "2024-09-28T20:11:22.78Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 70, - "Title": "GlobalSetting.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\GlobalSetting.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\GlobalSetting.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\GlobalSetting.cs", - "RelativeToolTip": "StgSharp\\Environment\\GlobalSetting.cs", - "ViewState": "AgIAADQAAAAAAAAAAAAvwEkAAAA2AAAAAAAAAA==", + "DocumentIndex": 86, + "Title": "glEnum.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "ViewState": "AgIAAFwAAAAAAAAAAAAtwGUAAAA7AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:30:52.772Z" + "WhenOpened": "2024-09-28T19:12:37.646Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 175, - "Title": "globalKeyStat.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\globalKeyStat.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\globalKeyStat.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\globalKeyStat.cs", - "RelativeToolTip": "StgSharp\\Environment\\globalKeyStat.cs", + "DocumentIndex": 89, + "Title": "CollisionTexture.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", + "RelativeDocumentMoniker": "StgSharp\\Stg\\CollisionTexture.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", + "RelativeToolTip": "StgSharp\\Stg\\CollisionTexture.cs", + "ViewState": "AgIAAJUAAAAAAAAAAIAywKUAAABCAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-28T18:14:14.323Z" + }, + { + "$type": "Document", + "DocumentIndex": 55, + "Title": "TextureGL.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "ViewState": "AgIAAC0AAAAAAAAAAAA9wJcAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-28T18:13:40.533Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 96, + "Title": "MainThreadAssert.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeToolTip": "StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T19:46:51.552Z" + }, + { + "$type": "Document", + "DocumentIndex": 93, + "Title": "MainThreadAssert.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "ViewState": "AgIAAAMAAAAAAAAAAAAvwBEAAAAdAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T19:44:38.987Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 99, + "Title": "TextureBufferImage.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TextureBufferImage.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\TextureBufferImage.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TextureBufferImage.cs", + "RelativeToolTip": "StgSharp\\Graphics\\TextureBufferImage.cs", + "ViewState": "AgIAACsAAAAAAAAAAAAnwDoAAAAaAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T18:44:51.978Z" + }, + { + "$type": "Document", + "DocumentIndex": 100, + "Title": "TextureBufferImage.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "ViewState": "AgIAACoAAAAAAAAAAAAAwEsAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T11:13:19.671Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 92, + "Title": "ImageHelper.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "ViewState": "AgIAACIAAAAAAAAAAAAwwDQAAAANAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T10:06:10.864Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 104, + "Title": "glApiDefine.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glApiDefine.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\glApiDefine.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glApiDefine.cs", + "RelativeToolTip": "StgSharp\\Graphics\\Define\\glApiDefine.cs", + "ViewState": "AgIAACAAAAAAAAAAAAAewC8AAABRAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T04:53:08.572Z" + }, + { + "$type": "Document", + "DocumentIndex": 98, + "Title": "Image.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Image.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\Image.cs", + "ViewState": "AgIAAGEAAAAAAAAAAIA3wHAAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T19:17:53.043Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 90, + "Title": "CollisionTexture.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\CollisionTexture.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\CollisionTexture.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\CollisionTexture.cs", + "RelativeToolTip": "StgSharpDebug\\Stg\\CollisionTexture.cs", + "ViewState": "AgIAAJUAAAAAAAAAAIAywKYAAAArAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T19:10:11.893Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "NewRender.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "ViewState": "AgIAAC8AAAAAAAAAAAAUwEAAAAAuAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T11:11:30.893Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "ViewRender.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "ViewState": "AgIAAH4AAAAAAAAAAAAAAGUAAAAqAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T10:59:33.901Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 94, + "Title": "EmptyThread.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "ViewState": "AgIAABMAAAAAAAAAAAAswBkAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T10:56:02.291Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 41, + "Title": "InternalIO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "RelativeToolTip": "StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "ViewState": "AgIAAEYAAAAAAAAAAAAxwFYAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T10:55:42.887Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 106, + "Title": "framework.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\framework.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", + "RelativeToolTip": "StgSharp\\Graphics\\framework.cs", + "ViewState": "AgIAAGoAAAAAAAAAAAAjwHUAAACTAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T20:26:14.747Z" + }, + { + "$type": "Document", + "DocumentIndex": 107, + "Title": "framework.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\framework.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\framework.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\framework.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\framework.cs", + "ViewState": "AgIAAGoAAAAAAAAAAAAkwHUAAACVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T20:20:37.791Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 83, + "Title": "ViewPort.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewPort.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewPort.cs", + "ViewState": "AgIAAD4AAAAAAAAAAAAlwEsAAAAYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T20:17:33.106Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 109, + "Title": "RBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ViewState": "AgIAADEAAAAAAAAAAAAswEYAAAANAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:41:04.007Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 110, + "Title": "glRenderStream.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "ViewState": "AgIAAHoAAAAAAAAAAAAwwJsAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:37:47.129Z" + }, + { + "$type": "Document", + "DocumentIndex": 112, + "Title": "VAO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ViewState": "AgIAACcAAAAAAAAAAEBBwDgAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:20.928Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 97, + "Title": "Camera.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Graphic\\Camera.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Graphic\\Camera.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Graphic\\Camera.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Graphic\\Camera.cs", + "ViewState": "AgIAAOkAAAAAAAAAAIAywPkAAAAOAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:18.803Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 113, + "Title": "FBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "ViewState": "AgIAAEYAAAAAAAAAAIAzwFcAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:16.817Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 87, + "Title": "glConst.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glConst.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\glConst.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glConst.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\glConst.cs", + "ViewState": "AgIAACYAAAAAAAAAAAAewPgSAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:12.868Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 114, + "Title": "ShaderStruct.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "ViewState": "AgIAADgAAAAAAAAAAIAzwEkAAABGAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:09.259Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 80, + "Title": "glFunction.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "ViewState": "AgIAAMMAAAAAAAAAAAAnwNYAAAAhAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:33:36.487Z" + }, + { + "$type": "Document", + "DocumentIndex": 115, + "Title": "glFucntionSourceManager.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "ViewState": "AgIAAC4AAAAAAAAAAAAmwCIAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:33:08.722Z" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "StgSharpDebug.csproj", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", + "RelativeDocumentMoniker": "StgSharpDebug\\StgSharpDebug.csproj", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", + "RelativeToolTip": "StgSharpDebug\\StgSharpDebug.csproj", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:30:52.177Z" + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2024-09-24T19:11:24.482Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 176, - "Title": "ErrorDefine.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\ErrorDefine.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\ErrorDefine.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\ErrorDefine.cs", - "RelativeToolTip": "StgSharp\\Environment\\ErrorDefine.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "DocumentIndex": 108, + "Title": "TimeSpanProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "ViewState": "AgIAAMQAAAAAAAAAAAAgwNQAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:30:51.103Z" + "WhenOpened": "2024-09-23T05:38:37.835Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 59, - "Title": "CancellableTask.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\CancellableTask.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\CancellableTask.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\CancellableTask.cs", - "RelativeToolTip": "StgSharp\\Logic\\CancellableTask.cs", - "ViewState": "AgIAACAAAAAAAAAAAAAYwCQAAAAdAAAAAAAAAA==", + "DocumentIndex": 82, + "Title": "glException.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "ViewState": "AgIAABwAAAAAAAAAAAAvwC0AAAA0AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T19:05:18.993Z" + "WhenOpened": "2024-09-23T05:34:20.734Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 56, - "Title": "SizeFixedList.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "RelativeToolTip": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "ViewState": "AgIAAAUAAAAAAAAAAAAIwEQAAAAAAAAAAAAAAA==", + "DocumentIndex": 116, + "Title": "TimeSpanAwaitingToken.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ViewState": "AgIAAGgAAAAAAAAAAIAywHYAAAAIAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-15T10:12:43.359Z" + "WhenOpened": "2024-09-22T09:24:10.041Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 54, - "Title": "BlueprintRunner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "ViewState": "AgIAAGQAAAAAAAAAAAAhwJEAAAAVAAAAAAAAAA==", + "DocumentIndex": 91, + "Title": "ViewModel.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "ViewState": "AgIAANwAAAAAAAAAAAAhwOkAAAAOAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-15T09:28:36.087Z" + "WhenOpened": "2024-09-22T09:19:39.434Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 60, - "Title": "BlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "ViewState": "AgIAAGAAAAAAAAAAAAA1wLgAAAAtAAAAAAAAAA==", + "DocumentIndex": 6, + "Title": "ViewBase.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "ViewState": "AgIAAEMAAAAAAAAAAAAgwFIAAAA6AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-14T15:52:07.701Z" + "WhenOpened": "2024-09-22T09:18:52.076Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 64, - "Title": "SideNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\SideNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\SideNode.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAswCgAAAAcAAAAAAAAAA==", + "DocumentIndex": 95, + "Title": "glRenderStream.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "ViewState": "AgIAAKEAAAAAAAAAAAAgwK4AAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-14T13:21:31.686Z" + "WhenOpened": "2024-09-12T12:26:52.516Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 165, + "DocumentIndex": 85, + "Title": "RenderStream.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\RenderStream.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\RenderStream.cs", + "ViewState": "AgIAADQAAAAAAAAAAAAewEMAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-12T12:26:38.522Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "ShowViewPort.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "ViewState": "AgIAAH0AAAAAAAAAAAAewIcAAAAYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T16:02:42.363Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 81, + "Title": "glFunction.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "ViewState": "AgIAAMgAAAAAAAAAAMBAwNgAAAAjAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:54:58.392Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 88, + "Title": "ViewMain.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "ViewState": "AgIAAFIAAAAAAAAAAAAzwFwAAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:55:14.844Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 118, + "Title": "ViewModelMain.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "ViewState": "AgIAAC8AAAAAAAAAAAAcwEsAAAAYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:54:20.497Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 42, + "Title": "Program.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\Program.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\Program.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\Program.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\Program.cs", + "ViewState": "AgIAADMAAAAAAAAAAAAuwD8AAAAmAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:53:17.351Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 84, + "Title": "Partical.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "ViewState": "AgIAAM8AAAAAAAAAAAAgwOAAAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:49:43.304Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 119, "Title": "Platform.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\Platform.cs", "RelativeDocumentMoniker": "StgSharp\\Environment\\Platform.cs", @@ -2874,31 +2086,285 @@ }, { "$type": "Document", - "DocumentIndex": 166, + "DocumentIndex": 123, "Title": "TimeProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\TimeProvider.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\TimeProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\TimeProvider.cs", - "RelativeToolTip": "StgSharp\\Environment\\TimeProvider.cs", - "ViewState": "AgIAAG8AAAAAAAAAAAAWwHQAAAAJAAAAAAAAAA==", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeProvider.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeProvider.cs", + "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeProvider.cs", + "ViewState": "AgIAAHoAAAAAAAAAAAAQwIoAAAAjAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-12T18:36:15.947Z" + "WhenOpened": "2024-09-11T13:31:09.97Z" }, { "$type": "Document", - "DocumentIndex": 57, + "DocumentIndex": 117, + "Title": "TimeProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "ViewState": "AgIAAH4AAAAAAAAAAAD4v4oAAABAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T11:09:33.477Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 122, + "Title": "TimeSpanAwaitingToken.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ViewState": "AgIAAGwAAAAAAAAAAAA0wHsAAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-04T22:11:44.057Z" + }, + { + "$type": "Document", + "DocumentIndex": 126, + "Title": "TriggetFactory.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "ViewState": "AgIAAEoAAAAAAAAAAAAxwC0AAAA8AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-02T20:15:59.962Z" + }, + { + "$type": "Document", + "DocumentIndex": 131, + "Title": "TexturePipeline.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\TexturePipeline.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", + "RelativeToolTip": "StgSharp\\Graphics\\TexturePipeline.cs", + "ViewState": "AgIAABUAAAAAAAAAAAAvwCgAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-26T03:29:30.925Z" + }, + { + "$type": "Document", + "DocumentIndex": 129, + "Title": "BidirectionalDictionary.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "RelativeToolTip": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "ViewState": "AgIAAEMAAAAAAAAAAIAzwFUAAAANAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-26T03:20:40.602Z" + }, + { + "$type": "Document", + "DocumentIndex": 140, + "Title": "BlueprintActionNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ViewState": "AgIAABgAAAAAAAAAAIBQwCYAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-26T02:58:10.928Z" + }, + { + "$type": "Document", + "DocumentIndex": 128, + "Title": "AutoTexture.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "ViewState": "AgIAAGwAAAAAAAAAAAAiwH4AAAAQAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-25T21:16:55.239Z" + }, + { + "$type": "Document", + "DocumentIndex": 125, + "Title": "ViewResponder.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", + "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewResponder.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", + "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewResponder.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAEwDUAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-24T14:44:59.912Z" + }, + { + "$type": "Document", + "DocumentIndex": 124, + "Title": "ViewRender.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", + "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewRender.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", + "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewRender.cs", + "ViewState": "AgIAABQAAAAAAAAAAAAgwCQAAAAhAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-24T14:44:50.254Z" + }, + { + "$type": "Document", + "DocumentIndex": 142, + "Title": "ViewDesigner.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", + "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewDesigner.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", + "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewDesigner.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAIYAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-24T14:42:19.45Z" + }, + { + "$type": "Document", + "DocumentIndex": 146, + "Title": "VBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "ViewState": "AgIAAIMAAAAAAAAAAAAowJIAAAAwAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-10T17:16:18.094Z" + }, + { + "$type": "Document", + "DocumentIndex": 147, + "Title": "VAO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ViewState": "AgIAADcAAAAAAAAAAAAUwEgAAAA1AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-10T17:15:13.91Z" + }, + { + "$type": "Document", + "DocumentIndex": 143, + "Title": "StgSharp.csproj", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", + "RelativeDocumentMoniker": "StgSharp\\StgSharp.csproj", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", + "RelativeToolTip": "StgSharp\\StgSharp.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2024-07-08T10:39:35.673Z" + }, + { + "$type": "Document", + "DocumentIndex": 148, + "Title": "RBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-07T17:45:11.682Z" + }, + { + "$type": "Document", + "DocumentIndex": 144, + "Title": "Uniform.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "ViewState": "AgIAAJEAAAAAAAAAAAAUwCsAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-27T17:58:58.669Z" + }, + { + "$type": "Document", + "DocumentIndex": 139, + "Title": "BpNodeActionAttribute.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "ViewState": "AgIAAAYAAAAAAAAAAIBQwCIAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-25T18:43:08.93Z" + }, + { + "$type": "Document", + "DocumentIndex": 18, + "Title": "glfw3.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", + "RelativeDocumentMoniker": "StgSharpC\\glfw3.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", + "RelativeToolTip": "StgSharpC\\glfw3.h", + "ViewState": "AgIAABUAAAAAAAAAAAAAAFELAAALAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-06-22T23:24:18.461Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 133, + "Title": "SizeFixedList.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "RelativeToolTip": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "ViewState": "AgIAAAUAAAAAAAAAAAAIwEQAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-15T10:12:43.359Z" + }, + { + "$type": "Document", + "DocumentIndex": 132, + "Title": "BlueprintRunner.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "ViewState": "AgIAAGQAAAAAAAAAAAAhwJEAAAAVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-15T09:28:36.087Z" + }, + { + "$type": "Document", + "DocumentIndex": 135, + "Title": "BlueprintNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "ViewState": "AgIAAGAAAAAAAAAAAAA1wLgAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-14T15:52:07.701Z" + }, + { + "$type": "Document", + "DocumentIndex": 138, + "Title": "SideNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\SideNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\SideNode.cs", + "ViewState": "AgIAAAsAAAAAAAAAAAAswCgAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-14T13:21:31.686Z" + }, + { + "$type": "Document", + "DocumentIndex": 121, "Title": "TimeSpanProvider.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", - "ViewState": "AgIAAA8AAAAAAAAAAADwvyQAAAAZAAAAAAAAAA==", + "ViewState": "AgIAALsAAAAAAAAAAAAAAMIAAAAQAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-12T18:36:02.299Z" }, { "$type": "Document", - "DocumentIndex": 63, + "DocumentIndex": 137, "Title": "RouteSwitch.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\RouteSwitch.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\RouteSwitch.cs", @@ -2910,7 +2376,7 @@ }, { "$type": "Document", - "DocumentIndex": 168, + "DocumentIndex": 153, "Title": "Area.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\Area.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\Area.cs", @@ -2922,7 +2388,7 @@ }, { "$type": "Document", - "DocumentIndex": 172, + "DocumentIndex": 155, "Title": "SSD.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\SSD.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\SSD.cs", @@ -2934,7 +2400,7 @@ }, { "$type": "Document", - "DocumentIndex": 171, + "DocumentIndex": 154, "Title": "SSDVirtualFolder.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\SSDVirtualFolder.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\SSDVirtualFolder.cs", @@ -2946,19 +2412,7 @@ }, { "$type": "Document", - "DocumentIndex": 19, - "Title": "Image.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Image.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Image.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Image.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Image.cs", - "ViewState": "AgIAADAAAAAAAAAAAAAWwEIAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-09T13:44:55.317Z" - }, - { - "$type": "Document", - "DocumentIndex": 188, + "DocumentIndex": 159, "Title": "TouhouBuilder.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Touhou\\TouhouBuilder.cs", "RelativeDocumentMoniker": "StgSharp\\Stg\\Touhou\\TouhouBuilder.cs", @@ -2970,7 +2424,7 @@ }, { "$type": "Document", - "DocumentIndex": 100, + "DocumentIndex": 141, "Title": "TouhouWindow.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Touhou\\TouhouWindow.cs", "RelativeDocumentMoniker": "StgSharp\\Stg\\Touhou\\TouhouWindow.cs", @@ -2982,7 +2436,7 @@ }, { "$type": "Document", - "DocumentIndex": 189, + "DocumentIndex": 160, "Title": "Program.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgsharpEnvDebug\\Program.cs", "RelativeDocumentMoniker": "StgsharpEnvDebug\\Program.cs", @@ -2994,7 +2448,7 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 127, "Title": "ViewManage.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ViewManage.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\ViewManage.cs", @@ -3002,63 +2456,47 @@ "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\ViewManage.cs", "ViewState": "AgIAACcAAAAAAAAAAAAuwDgAAAAFAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-06T08:10:50.451Z", - "EditorCaption": "" + "WhenOpened": "2024-06-06T08:10:50.451Z" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 120, "Title": "ShowViewPort.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", - "ViewState": "AgIAAEIAAAAAAAAAAAD4v08AAAAeAAAAAAAAAA==", + "ViewState": "AgIAAE0AAAAAAAAAAAAwwFsAAAAlAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-06T07:49:36.575Z", - "EditorCaption": "" + "WhenOpened": "2024-06-06T07:49:36.575Z" }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 105, "Title": "ViewPort.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewPort.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewPort.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewPort.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewPort.cs", - "ViewState": "AgIAAHQAAAAAAAAAAIAwwIcAAAAfAAAAAAAAAA==", + "ViewState": "AgIAAHwAAAAAAAAAAAApwIkAAAA5AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-06T06:43:01.237Z", - "EditorCaption": "" + "WhenOpened": "2024-06-06T06:43:01.237Z" }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 102, "Title": "ViewModel.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ViewModel.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\ViewModel.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ViewModel.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\ViewModel.cs", - "ViewState": "AgIAAF4AAAAAAAAAAAAiwGsAAAAVAAAAAAAAAA==", + "ViewState": "AgIAAEAAAAAAAAAAAAAnwE8AAAAfAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-05T19:19:57.97Z", - "EditorCaption": "" + "WhenOpened": "2024-06-05T19:19:57.97Z" }, { "$type": "Document", - "DocumentIndex": 195, - "Title": "Cordinate.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-04T09:20:55.089Z" - }, - { - "$type": "Document", - "DocumentIndex": 196, + "DocumentIndex": 163, "Title": "Square.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Square.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Square.cs", @@ -3070,7 +2508,7 @@ }, { "$type": "Document", - "DocumentIndex": 193, + "DocumentIndex": 162, "Title": "Rectangle.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Rectangle.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Rectangle.cs", @@ -3082,7 +2520,7 @@ }, { "$type": "Document", - "DocumentIndex": 157, + "DocumentIndex": 149, "Title": "Triangle.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Triangle.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Triangle.cs", @@ -3094,19 +2532,7 @@ }, { "$type": "Document", - "DocumentIndex": 194, - "Title": "Parallelogram.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "ViewState": "AgIAACAAAAAAAAAAAAAtwD8AAAAGAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-03T18:45:48.87Z" - }, - { - "$type": "Document", - "DocumentIndex": 160, + "DocumentIndex": 152, "Title": "Polygon5.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Polygon5.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Polygon5.cs", @@ -3118,7 +2544,7 @@ }, { "$type": "Document", - "DocumentIndex": 158, + "DocumentIndex": 150, "Title": "Polygon6.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Polygon6.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Polygon6.cs", @@ -3130,31 +2556,19 @@ }, { "$type": "Document", - "DocumentIndex": 200, - "Title": "Class1.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "RelativeToolTip": "StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-03T08:05:08.74Z" - }, - { - "$type": "Document", - "DocumentIndex": 199, + "DocumentIndex": 165, "Title": "SpaceCoordinate.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", "RelativeToolTip": "StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", - "ViewState": "AgIAAA8AAAAAAAAAAIBgwCoAAAAxAAAAAAAAAA==", + "ViewState": "AgIAAAwAAAAAAAAAAMBowCoAAAAxAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-03T08:04:00.326Z" }, { "$type": "Document", - "DocumentIndex": 159, + "DocumentIndex": 151, "Title": "Polygon4.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Polygon4.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Polygon4.cs", @@ -3166,19 +2580,7 @@ }, { "$type": "Document", - "DocumentIndex": 204, - "Title": "Cordination.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Cordination.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Cordination.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Cordination.cs", - "RelativeToolTip": "StgSharp\\Math\\Linear\\Cordination.cs", - "ViewState": "AgIAAAYAAAAAAAAAAIBgwB8AAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-03T07:16:53.497Z" - }, - { - "$type": "Document", - "DocumentIndex": 198, + "DocumentIndex": 164, "Title": "Point.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Point.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\Point.cs", @@ -3190,91 +2592,19 @@ }, { "$type": "Document", - "DocumentIndex": 205, + "DocumentIndex": 166, "Title": "Vector.Cross.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Cross.cs", "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vector.Cross.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Cross.cs", "RelativeToolTip": "StgSharp\\Math\\Linear\\Vector.Cross.cs", - "ViewState": "AgIAABIAAAAAAAAAAIBgwB8AAAABAAAAAAAAAA==", + "ViewState": "AgIAAA8AAAAAAAAAAMBowB8AAAABAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-02T18:55:17.351Z" }, { "$type": "Document", - "DocumentIndex": 191, - "Title": "IGeometry.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IGeometry.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\IGeometry.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IGeometry.cs", - "RelativeToolTip": "StgSharp\\Geometries\\IGeometry.cs", - "ViewState": "AgIAAB8AAAAAAAAAAAAiwDMAAAAeAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T18:32:52.786Z" - }, - { - "$type": "Document", - "DocumentIndex": 211, - "Title": "JoystickTrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACsAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T17:59:29.232Z" - }, - { - "$type": "Document", - "DocumentIndex": 212, - "Title": "ITrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAiAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T17:56:15.991Z" - }, - { - "$type": "Document", - "DocumentIndex": 177, - "Title": "KeyTrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAmAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T17:48:14.248Z" - }, - { - "$type": "Document", - "DocumentIndex": 42, - "Title": "MarkingLable.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAvwDAAAAAUAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-01T19:38:52.786Z" - }, - { - "$type": "Document", - "DocumentIndex": 180, - "Title": "DecorationBox.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAqAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-01T19:38:36.894Z" - }, - { - "$type": "Document", - "DocumentIndex": 182, + "DocumentIndex": 158, "Title": "BattleField.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\BattleField.cs", "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\BattleField.cs", @@ -3286,78 +2616,7 @@ }, { "$type": "Document", - "DocumentIndex": 224, - "Title": "KeyEvent.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEvent.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\KeyEvent.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEvent.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\KeyEvent.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-31T17:44:19.826Z" - }, - { - "$type": "Document", - "DocumentIndex": 181, - "Title": "CharacterIndexImage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "ViewState": "AgIAAB8AAAAAAAAAAADgvzMAAAAmAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-31T07:27:57.971Z" - }, - { - "$type": "Document", - "DocumentIndex": 187, - "Title": "KeyControl.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\KeyControl.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\KeyControl.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\KeyControl.cs", - "RelativeToolTip": "StgSharp\\Controlling\\KeyControl.cs", - "ViewState": "AgIAAFMAAAAAAAAAAAAtwHIAAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-30T03:47:10.188Z" - }, - { - "$type": "Document", - "DocumentIndex": 131, - "Title": "ButtonGroup.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "ViewState": "AgIAAHwAAAAAAAAAAAAqwJAAAAAUAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-30T03:07:38.817Z" - }, - { - "$type": "Document", - "DocumentIndex": 178, - "Title": "PlainGeometryMesh.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\PlainGeometryMesh.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\PlainGeometryMesh.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\PlainGeometryMesh.cs", - "RelativeToolTip": "StgSharp\\Graphics\\PlainGeometryMesh.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACoAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T18:54:22.53Z" - }, - { - "$type": "Document", - "DocumentIndex": 183, - "Title": "ControllingIntem.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwBgAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T18:52:06.895Z" - }, - { - "$type": "Document", - "DocumentIndex": 179, + "DocumentIndex": 157, "Title": "TriggerButton.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\TriggerButton.cs", "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\TriggerButton.cs", @@ -3369,54 +2628,7 @@ }, { "$type": "Document", - "DocumentIndex": 225, - "Title": "KeyboardButton.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T18:45:36.72Z" - }, - { - "$type": "Document", - "DocumentIndex": 208, - "Title": "Plain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "ViewState": "AgIAADwAAAAAAAAAAAAUwEsAAAAfAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T03:14:59.807Z" - }, - { - "$type": "Document", - "DocumentIndex": 209, - "Title": "IEntity.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Entities\\IEntity.cs", - "RelativeDocumentMoniker": "StgSharp\\Entities\\IEntity.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Entities\\IEntity.cs", - "RelativeToolTip": "StgSharp\\Entities\\IEntity.cs", - "ViewState": "AgIAACIAAAAAAAAAAAAywDkAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T03:13:32.629Z" - }, - { - "$type": "Document", - "DocumentIndex": 167, - "Title": "DataSegment.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\DataSegment.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", - "RelativeToolTip": "StgSharp\\Data\\SSD\\DataSegment.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAC4AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T03:13:13.688Z" - }, - { - "$type": "Document", - "DocumentIndex": 173, + "DocumentIndex": 156, "Title": "SSDraw.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\SSDraw.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\SSDraw.cs", @@ -3428,42 +2640,19 @@ }, { "$type": "Document", - "DocumentIndex": 222, - "Title": "Angle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T02:36:43.754Z" - }, - { - "$type": "Document", - "DocumentIndex": 164, - "Title": "framework.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\framework.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", - "RelativeToolTip": "StgSharp\\Graphics\\framework.cs", - "ViewState": "AgIAAB4BAAAAAAAAAAAYwC8AAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:14:37.475Z" - }, - { - "$type": "Document", - "DocumentIndex": 45, + "DocumentIndex": 130, "Title": "TimeFunction.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeFunction.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeFunction.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeFunction.cs", "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeFunction.cs", - "ViewState": "AgIAAAkAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAA==", + "ViewState": "AgIAAAYAAAAAAAAAAIBQwB4AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T12:14:28.529Z" }, { "$type": "Document", - "DocumentIndex": 58, + "DocumentIndex": 134, "Title": "TimeSourceProvider.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSourceProvider.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeSourceProvider.cs", @@ -3475,7 +2664,7 @@ }, { "$type": "Document", - "DocumentIndex": 206, + "DocumentIndex": 167, "Title": "Vector.Normalize.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Normalize.cs", "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vector.Normalize.cs", @@ -3487,55 +2676,19 @@ }, { "$type": "Document", - "DocumentIndex": 184, - "Title": "ParticleOnPlain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "ViewState": "AgIAADkAAAAAAAAAAAAwwCoAAAApAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:13:03.322Z" - }, - { - "$type": "Document", - "DocumentIndex": 214, - "Title": "IInstancingBuffer.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancingBuffer.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\IInstancingBuffer.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancingBuffer.cs", - "RelativeToolTip": "StgSharp\\Geometries\\IInstancingBuffer.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAmAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:12:51.691Z" - }, - { - "$type": "Document", - "DocumentIndex": 185, - "Title": "IInstancing.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancing.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\IInstancing.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancing.cs", - "RelativeToolTip": "StgSharp\\Geometries\\IInstancing.cs", - "ViewState": "AgIAACkAAAAAAAAAAAAtwDYAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:12:47.113Z" - }, - { - "$type": "Document", - "DocumentIndex": 145, + "DocumentIndex": 111, "Title": "ShaderStruct.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", "RelativeToolTip": "StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "ViewState": "AgIAAAMAAAAAAAAAAIBgwCsAAAApAAAAAAAAAA==", + "ViewState": "AgIAADkAAAAAAAAAAAApwEkAAAA/AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T12:06:38.571Z" }, { "$type": "Document", - "DocumentIndex": 215, + "DocumentIndex": 169, "Title": "ShaderGenerator.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\ShaderEdit\\ShaderGenerator.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\ShaderEdit\\ShaderGenerator.cs", @@ -3547,139 +2700,56 @@ }, { "$type": "Document", - "DocumentIndex": 216, - "Title": "GLIO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\GLIO.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\IO\\GLIO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\GLIO.cs", - "RelativeToolTip": "StgSharp\\Controlling\\IO\\GLIO.cs", - "ViewState": "AgIAAEUAAAAAAAAAAAAcwCoAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:53:35.017Z" - }, - { - "$type": "Document", - "DocumentIndex": 73, + "DocumentIndex": 65, "Title": "TextureGL.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "ViewState": "AgIAACoAAAAAAAAAAIBQwDsAAAAAAAAAAAAAAA==", + "ViewState": "AgIAABEAAAAAAAAAAAAUwB8AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T09:52:02.572Z" }, { "$type": "Document", - "DocumentIndex": 135, - "Title": "glEnum.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glEnum.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\glEnum.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glEnum.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Define\\glEnum.cs", - "ViewState": "AgIAACUAAAAAAAAAAAAqwD0AAABLAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:51:55.169Z" - }, - { - "$type": "Document", - "DocumentIndex": 217, + "DocumentIndex": 170, "Title": "Angle.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryScaler\\Angle.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\GeometryScaler\\Angle.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryScaler\\Angle.cs", "RelativeToolTip": "StgSharp\\Geometries\\GeometryScaler\\Angle.cs", - "ViewState": "AgIAAHEAAAAAAAAAAEBAwH8AAAAJAAAAAAAAAA==", + "ViewState": "AgIAAHIAAAAAAAAAAAAlwH8AAAAJAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T09:50:33.189Z" }, { "$type": "Document", - "DocumentIndex": 74, - "Title": "CollisionTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", - "RelativeDocumentMoniker": "StgSharp\\Stg\\CollisionTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", - "RelativeToolTip": "StgSharp\\Stg\\CollisionTexture.cs", - "ViewState": "AgIAAIkAAAAAAAAAAAAhwKkAAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:47:06.034Z" - }, - { - "$type": "Document", - "DocumentIndex": 169, - "Title": "ISSDSerializable.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "RelativeToolTip": "StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAkAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-14T02:11:24.157Z" - }, - { - "$type": "Document", - "DocumentIndex": 170, - "Title": "Define.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\Define.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\Serialize\\Define.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\Define.cs", - "RelativeToolTip": "StgSharp\\Data\\Serialize\\Define.cs", - "ViewState": "AgIAAA8AAAAAAAAAAMBowAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-14T02:11:21.58Z" - }, - { - "$type": "Document", - "DocumentIndex": 218, - "Title": "M128.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\M128.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\M128.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\M128.cs", - "RelativeToolTip": "StgSharp\\Data\\M128.cs", - "ViewState": "AgIAACcAAAAAAAAAAIBgwD0AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-14T02:06:36.634Z" - }, - { - "$type": "Document", - "DocumentIndex": 174, + "DocumentIndex": 68, "Title": "RandomGenerator.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\RandomGenerator.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\RandomGenerator.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\RandomGenerator.cs", "RelativeToolTip": "StgSharp\\Data\\RandomGenerator.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABgAAAAMAAAAAAAAAA==", + "ViewState": "AgIAAKAAAAAAAAAAAAAUwK4AAAAiAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-14T01:44:33.9Z" }, { "$type": "Document", - "DocumentIndex": 213, + "DocumentIndex": 17, "Title": "StgSharpC.h", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h", "RelativeDocumentMoniker": "StgSharpC\\StgSharpC.h", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h", "RelativeToolTip": "StgSharpC\\StgSharpC.h", - "ViewState": "AgIAABgAAAAAAAAAAIAwwCgAAAAoAAAAAAAAAA==", + "ViewState": "AgIAAA8AAAAAAAAAAAAAABYAAAAkAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-05-11T21:42:41.09Z" + "WhenOpened": "2024-05-11T21:42:41.09Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 134, - "Title": "glFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "ViewState": "AgIAAPsAAAAAAAAAAABCwA4BAAArAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-11T21:22:23.016Z" - }, - { - "$type": "Document", - "DocumentIndex": 147, + "DocumentIndex": 145, "Title": "Shader.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", @@ -3691,117 +2761,43 @@ }, { "$type": "Document", - "DocumentIndex": 61, + "DocumentIndex": 136, "Title": "Blueprint.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\Blueprint.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\Blueprint.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\Blueprint.cs", "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\Blueprint.cs", - "ViewState": "AgIAADQAAAAAAAAAAAAYwDQAAAAeAAAAAAAAAA==", + "ViewState": "AgIAADQAAAAAAAAAAAA1wDQAAAAeAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-11T15:59:06.55Z" }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 103, "Title": "ViewBase.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewBase.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewBase.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewBase.cs", "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewBase.cs", - "ViewState": "AgIAALAAAAAAAAAAAAAWwMMAAAApAAAAAAAAAA==", + "ViewState": "AgIAAFoAAAAAAAAAAEBBwGgAAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-11T05:11:47.098Z", - "EditorCaption": "" + "WhenOpened": "2024-05-11T05:11:47.098Z" }, { "$type": "Document", - "DocumentIndex": 219, - "Title": "GeometryOperation.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "ViewState": "AgIAABUAAAAAAAAAAIA0wCUAAAAfAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-10T04:35:10.414Z" - }, - { - "$type": "Document", - "DocumentIndex": 46, - "Title": "GeometryOperation.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "RelativeToolTip": "StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ViewState": "AgIAAAYAAAAAAAAAAAAhwD8AAAAzAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-10T04:34:22.843Z" - }, - { - "$type": "Document", - "DocumentIndex": 192, - "Title": "PlainGeometry.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ViewState": "AgIAACUAAAAAAAAAAAAtwDoAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T11:36:04.039Z" - }, - { - "$type": "Document", - "DocumentIndex": 186, - "Title": "IPlainEntity.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwBMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T11:36:00.584Z" - }, - { - "$type": "Document", - "DocumentIndex": 155, - "Title": "glResourceGenrator.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACcAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T09:44:36.325Z" - }, - { - "$type": "Document", - "DocumentIndex": 48, - "Title": "glRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAvwCQAAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T09:42:14.767Z" - }, - { - "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 101, "Title": "RenderStream.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\RenderStream.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\RenderStream.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\RenderStream.cs", "RelativeToolTip": "StgSharp\\Graphics\\RenderStream.cs", - "ViewState": "AgIAAJIAAAAAAAAAAAAvwKkAAAAJAAAAAAAAAA==", + "ViewState": "AgIAADcAAAAAAAAAAIAzwEcAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T09:42:08.831Z", - "EditorCaption": "" + "WhenOpened": "2024-05-09T09:42:08.831Z" }, { "$type": "Document", - "DocumentIndex": 210, + "DocumentIndex": 168, "Title": "StreamLocalCoordinate.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\StreamLocalCoordinate.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\StreamLocalCoordinate.cs", @@ -3813,125 +2809,32 @@ }, { "$type": "Document", - "DocumentIndex": 221, - "Title": "vec3d.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec3d.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\vec3d.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec3d.cs", - "RelativeToolTip": "StgSharp\\Math\\Linear\\vec3d.cs", - "ViewState": "AgIAACwAAAAAAAAAAAAjwD4AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:42:19.181Z" - }, - { - "$type": "Document", - "DocumentIndex": 203, - "Title": "vec4d.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec4d.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\vec4d.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec4d.cs", - "RelativeToolTip": "StgSharp\\Math\\Linear\\vec4d.cs", - "ViewState": "AgIAAEcAAAAAAAAAAAAAwFcAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:40:47.919Z" - }, - { - "$type": "Document", - "DocumentIndex": 207, + "DocumentIndex": 59, "Title": "Vector.Orthogonalize.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", "RelativeToolTip": "StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", - "ViewState": "AgIAACcAAAAAAAAAAAAtwDEAAAArAAAAAAAAAA==", + "ViewState": "AgIAABkAAAAAAAAAAAAiwB4AAAAUAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-09T03:35:41.246Z" }, { "$type": "Document", - "DocumentIndex": 201, - "Title": "CoordinationBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "RelativeToolTip": "StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwAsAAAAFAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:32:12.398Z" - }, - { - "$type": "Document", - "DocumentIndex": 197, - "Title": "PlainCoordinate.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "RelativeToolTip": "StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "ViewState": "AgIAACMAAAAAAAAAAAAiwD8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:29:20.299Z" - }, - { - "$type": "Document", - "DocumentIndex": 202, - "Title": "PlainInstancingBuffer.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "ViewState": "AgIAAB4AAAAAAAAAAIBgwFYAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:28:11.182Z" - }, - { - "$type": "Document", - "DocumentIndex": 220, - "Title": "Bullet.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Bullet.cs", - "RelativeDocumentMoniker": "StgSharp\\Stg\\Bullet.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Bullet.cs", - "RelativeToolTip": "StgSharp\\Stg\\Bullet.cs", - "ViewState": "AgIAAFkAAAAAAAAAAIA1wDUAAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:22:55.279Z" - }, - { - "$type": "Document", - "DocumentIndex": 223, - "Title": "IInstancing.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-08T17:39:31.95Z" - }, - { - "$type": "Document", - "DocumentIndex": 137, + "DocumentIndex": 23, "Title": "StgSharpC.c", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c", "RelativeDocumentMoniker": "StgSharpC\\StgSharpC.c", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c", "RelativeToolTip": "StgSharpC\\StgSharpC.c", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA3AAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAaAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", - "WhenOpened": "2024-05-04T08:32:40.265Z" + "WhenOpened": "2024-05-04T08:32:40.265Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 227, - "Title": "ShowForm.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-01T20:46:20.87Z" - }, - { - "$type": "Document", - "DocumentIndex": 190, + "DocumentIndex": 161, "Title": "MainForm.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\OEM\\MainForm.cs", "RelativeDocumentMoniker": "OEM\\MainForm.cs", @@ -3940,39 +2843,6 @@ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-04-26T21:06:53.667Z" - }, - { - "$type": "Document", - "DocumentIndex": 228, - "Title": "FormThreading.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-25T19:29:47.069Z" - }, - { - "$type": "Document", - "DocumentIndex": 226, - "Title": "ICoord.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-25T01:07:46.041Z" - }, - { - "$type": "Document", - "DocumentIndex": 229, - "Title": "Form.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\Form.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Form\\Form.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\Form.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Form\\Form.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T09:01:45.978Z" } ] } diff --git a/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.json b/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.json index 86306331..b390dcab 100644 --- a/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.json +++ b/源代码/.vs/StgSharpDevelop/v17/DocumentLayout.json @@ -3,128 +3,515 @@ "WorkspaceRootPath": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\intrinsiccontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\intrinsiccontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\lable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\lable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat3.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\mat3.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\quick_hash.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\quick_hash.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\view\\newrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_intrinsic.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\ssc_intrinsic.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\intrinsic.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\intrinsic.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\stb_image.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|C:\\PROGRAM FILES\\MICROSOFT VISUAL STUDIO\\2022\\ENTERPRISE\\VC\\TOOLS\\MSVC\\14.41.34120\\INCLUDE\\TMMINTRIN.H||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_internal.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\ssc_internal.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat2.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\mat2.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\dllmain.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\dllmain.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\vector.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\vector.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat4.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\mat4.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\stb_image.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_framework.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\ssc_framework.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix33.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix44.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix44.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix24.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix24.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix34.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix34.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\columnset4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\columnset4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\intrinsic\\intrinsiccontextprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix32.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\intrinsic\\columnset3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix43.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix23.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\intrinsic\\columnset2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\matrix42.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matrix22.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\iregistertype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\iregistertype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec4.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\shaderedit\\shader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\shaderedit\\shader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\datahead.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\openglcontrollingitemrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\openglcontrollingitemrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\scalar\\random.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec3.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\design.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\design.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\intrinsic\\m256.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\intrinsic\\m256.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{63382F83-D04E-45B6-BDE6-443273F6D010}|BenchMark\\BenchMark.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\benchmark\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63382F83-D04E-45B6-BDE6-443273F6D010}|BenchMark\\BenchMark.csproj|solutionrelative:benchmark\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\igraphicapis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\igraphicapis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\ivector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\ivector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\nativemethods.txt||{8B382828-6202-11D1-8870-0000F87579D2}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\nativemethods.txt||{8B382828-6202-11D1-8870-0000F87579D2}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\control||{8B382828-6202-11D1-8870-0000F87579D2}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\control||{8B382828-6202-11D1-8870-0000F87579D2}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3native.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\glfw3native.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\autotexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\autotexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\gl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\gl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\cpuanimation\\iimageprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\cpuanimation\\iimageprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\matinterface.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\matinterface.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\renderstream\\partical.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\view\\viewmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\cpuanimation\\imagehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\threading\\emptythread.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\threading\\emptythread.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\threading\\mainthreadassert.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\image.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\texturebufferimage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\renderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\glapidefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\glapidefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glfucntionsourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glfucntionsourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\alphademo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\alphademo\\viewmodelmain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timespanawaitingtoken.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\triggetfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\triggetfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\autotexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", @@ -134,101 +521,10 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\collections\\bidirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\collections\\bidirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Youmu\\AppData\\Local\\SourceServer\\60546032f23b31a03685e30ef880f5c48e6df2d00a71d09e625da4e2a208bd88\\Dictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewrender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\viewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\markinglable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timefunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\geometryoperation\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glrenderstream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\collections\\ibidrirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\collections\\ibidrirectionaldictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\globalsuppressions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\globalsuppressions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\bpnodebuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\bpnodebuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\texturepipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -237,26 +533,14 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprintrunner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\counter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\counter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\collections\\sizefixedlist.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timespanprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\timing\\timesourceprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\timing\\timesourceprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\cancellabletask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\cancellabletask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -265,10 +549,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprint.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\routeswitch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\routeswitch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -277,10 +557,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\sidenode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\iconvertabletoblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\iconvertabletoblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\bpnodeactionattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\bpnodeactionattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -289,298 +565,18 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\logic\\blueprint\\blueprintactionnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\globalsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stgsharpdebug.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\texturegl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\collisiontexture.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glresourcemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glapicalling.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glapicalling.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\controlitemrender.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\controlitemrender.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\controlitemrender.vert||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\controlitemrender.vert||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\fbo.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\fbo.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\fbo.vert||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\fbo.vert||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\main.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\main.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\igeomtrybuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\igeomtrybuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stg\\touhou\\view\\openningview.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stg\\touhou\\view\\openningview.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\touhou\\touhouwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\internaldata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\particle.vert||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\particle.vert||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\c6a36f44105246e8389794d6b1ff0c946741477e6dd52e219c7f2f689247fedc\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\SemaphoreSlim.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\3fbd2d3f2a21976ceea22ce6d61d2bfc56abbb0356d59a09e7367042f1d26101\\src\\libraries\\System.Private.CoreLib\\src\\System\\Object.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\define\\structdefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\define\\structdefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\shader\\particle.frag||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\shader\\particle.frag||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\showviewport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\demo\\view\\control.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\demo\\view\\control.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\stgsharpdebug.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\stgsharpdebug.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\viewmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\textureprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\textureprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\mvvm\\viewmodel\\databinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\View.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\View\\View.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewdesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\mvvm\\view\\viewresponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stgsharp.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stgsharp.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\buttongroup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\controlling\\keyeventattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\controlling\\keyeventattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glfunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\glenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\74ed84df48c00229a8da75e7d99c26a3409b78c17ddfc863196b29969f1b9863\\src\\libraries\\Common\\src\\System\\SR.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.c||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glhandle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\6c91e49c16b65a4a6086c168a4f34965ffdd867f9cb4d0d10207e862c24f2808\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\Tasks\\Task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glapimanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glapimanagerconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\pixels.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\pixels.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\graphic\\camera.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\glbufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\shaderedit\\uniform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\shaderedit\\uniform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -593,10 +589,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\vbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\glconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\vao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -605,26 +597,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\rbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\fbo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\define\\bufferobjectbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\buffer\\ebo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glresourcegenrator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\io\\internalio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\triangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\triangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -641,46 +613,10 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\polygon5.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\polygon5.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\opengl\\glexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\graphics\\shaderedit\\shaderstruct.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\glfw3.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\framework.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\platform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\timeprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\datasegment.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\area.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\area.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\serialize\\issdserializable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\serialize\\issdserializable.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\serialize\\define.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\serialize\\define.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\ssdvirtualfolder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\ssdvirtualfolder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -693,62 +629,14 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\ssd\\ssdraw.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\ssd\\ssdraw.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\globalkeystat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\globalkeystat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\environment\\errordefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\environment\\errordefine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\keytrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\plaingeometrymesh.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\triggerbutton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\decorationbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\characterindeximage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\battlefield.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\controls\\controllingintem.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\particleonplain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\particleonplain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\iinstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\iinstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\iplainentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\iplainentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\touhou\\touhoubuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\touhou\\touhoubuilder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -761,34 +649,14 @@ "AbsoluteMoniker": "D:0:0:{183AA95A-FEBD-42A5-A205-AB7048678251}|OEM\\OEM.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\oem\\mainform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{183AA95A-FEBD-42A5-A205-AB7048678251}|OEM\\OEM.csproj|solutionrelative:oem\\mainform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\igeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\igeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\plaingeometry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\rectangle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\parallelogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\parallelogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\cordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\cordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\square.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\square.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\plaincoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\plaincoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\point.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\point.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -797,26 +665,6 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\spacecoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\spacecoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\spacegeometry\\class1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\spacegeometry\\class1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\coordinationbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\coordinationbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\plaininstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\plaininstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec4d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec4d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\cordination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\cordination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.cross.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.cross.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -825,183 +673,30 @@ "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.normalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.normalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vector.orthogonalize.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\plain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\plain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\entities\\ientity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\entities\\ientity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\coordination\\streamlocalcoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\coordination\\streamlocalcoordinate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\joysticktrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\joysticktrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\usractivity\\itrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\usractivity\\itrigger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{20CBFF26-6746-402E-992C-7B643E9423EB}|StgSharpC\\StgSharpC.vcxproj|solutionrelative:StgSharpC\\StgSharpC.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\iinstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\iinstancingbuffer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\graphics\\shaderedit\\shadergenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\graphics\\shaderedit\\shadergenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\controlling\\io\\glio.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\geometryscaler\\angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\geometryscaler\\angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\data\\m128.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\geometries\\plaingeometry\\define\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\geometries\\plaingeometry\\define\\geometryoperation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\stg\\bullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharp\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{3EAF2EE6-FA9E-4F57-951F-7E6F8125DFBF}|StgSharp\\StgSharp.csproj|solutionrelative:stgsharp\\math\\linear\\vec3d.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEvent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\KeyEvent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\Coordination\\ICoord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Geometries\\Coordination\\ICoord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\ShowForm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\Form\\ShowForm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\FormThreading.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\Form\\FormThreading.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\Form.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\Form\\Form.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\glRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\GL\\glRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Test\\MainRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Test\\MainRenderStream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Render.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Demo\\View\\Render.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\View\\ViewPort.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewResponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\ViewResponder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewRender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Graphics\\View\\ViewRender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewDesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Controlling\\ViewDesigner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\MultiKeyDictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\MultiKeyDictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\TimeFunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:StgSharpDebug\\Logic\\TimeFunction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|d:\\nitloadindustry\\\u7814\u7A76\u9879\u76EE\\1-flagship\\th2020\\projectfile\\\u6E90\u4EE3\u7801\\stgsharpdebug\\logic\\blueprint\\crossframeblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{610B992B-BB34-49C3-9993-676C595FC12E}|StgSharpDebug\\StgSharpDebug.csproj|solutionrelative:stgsharpdebug\\logic\\blueprint\\crossframeblueprintnode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\immintrin.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" } ], "DocumentGroupContainers": [ { "Orientation": 0, - "VerticalTabListWidth": 214, + "VerticalTabListWidth": 188, "DocumentGroups": [ { "DockedWidth": 197, - "SelectedChildIndex": 22, + "SelectedChildIndex": 35, "Children": [ { "$type": "Bookmark", @@ -1009,1866 +704,1377 @@ }, { "$type": "Document", - "DocumentIndex": 6, - "Title": "Shader.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", - "ViewState": "AgIAAJYAAAAAAAAAAAAvwKwAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-09-01T21:53:56.155Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 25, - "Title": "ImageHelper.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeToolTip": "StgSharp\\Graphics\\CPUanimation\\ImageHelper.cs", - "ViewState": "AgIAABsAAAAAAAAAAAD4vy8AAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-28T02:49:25.315Z" - }, - { - "$type": "Document", - "DocumentIndex": 33, - "Title": "Dictionary.cs", - "DocumentMoniker": "C:\\Users\\Youmu\\AppData\\Local\\SourceServer\\60546032f23b31a03685e30ef880f5c48e6df2d00a71d09e625da4e2a208bd88\\Dictionary.cs", - "ToolTip": "C:\\Users\\Youmu\\AppData\\Local\\SourceServer\\60546032f23b31a03685e30ef880f5c48e6df2d00a71d09e625da4e2a208bd88\\Dictionary.cs", - "ViewState": "AgIAAFkBAAAAAAAAAIA0wGQBAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T21:35:54.107Z" - }, - { - "$type": "Document", - "DocumentIndex": 38, - "Title": "SideNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\SideNode.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAvwB4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:05:45.53Z" - }, - { - "$type": "Document", - "DocumentIndex": 40, - "Title": "BlueprintActionNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAvwB4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:04:09.577Z" - }, - { - "$type": "Document", - "DocumentIndex": 41, - "Title": "Blueprint.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\Blueprint.cs", - "ViewState": "AgIAAAwAAAAAAAAAAAAvwB8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:04:06.765Z" - }, - { - "$type": "Document", - "DocumentIndex": 42, - "Title": "TimeSpanProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", - "ViewState": "AgIAACYAAAAAAAAAAAAvwB4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:04:00.578Z" - }, - { - "$type": "Document", - "DocumentIndex": 47, - "Title": "TimeFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeFunction.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAvwC4AAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T18:02:49.325Z" - }, - { - "$type": "Document", - "DocumentIndex": 51, - "Title": "BlueprintRunner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\BlueprintRunner.cs", - "ViewState": "AgIAAFwAAAAAAAAAAIA0wCgAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T17:53:00.315Z" - }, - { - "$type": "Document", - "DocumentIndex": 53, - "Title": "SizeFixedList.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Collections\\SizeFixedList.cs", - "ViewState": "AgIAAA0AAAAAAAAAAAAvwH0AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-27T17:51:39.457Z" - }, - { - "$type": "Document", - "DocumentIndex": 54, - "Title": "IBidrirectionalDictionary.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "RelativeToolTip": "StgSharp\\Logic\\Collections\\IBidrirectionalDictionary.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAC8AAAA/AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T23:33:42.221Z" - }, - { - "$type": "Document", - "DocumentIndex": 57, - "Title": "TexturePipeline.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\TexturePipeline.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", - "RelativeToolTip": "StgSharp\\Graphics\\TexturePipeline.cs", - "ViewState": "AgIAABUAAAAAAAAAAAAvwCgAAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T03:29:30.925Z" - }, - { - "$type": "Document", - "DocumentIndex": 59, - "Title": "Counter.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Counter.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Counter.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Counter.cs", - "RelativeToolTip": "StgSharp\\Logic\\Counter.cs", - "ViewState": "AgIAACQAAAAAAAAAAAAAACYAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T03:27:55.46Z" - }, - { - "$type": "Document", - "DocumentIndex": 32, - "Title": "BidirectionalDictionary.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "RelativeToolTip": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", - "ViewState": "AgIAAEMAAAAAAAAAAIAzwFUAAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T03:20:40.602Z" - }, - { - "$type": "Document", - "DocumentIndex": 71, - "Title": "BlueprintActionNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAAACYAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T02:58:10.928Z" - }, - { - "$type": "Document", - "DocumentIndex": 24, - "Title": "IImageProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\CPUanimation\\IImageProvider.cs", - "ViewState": "AgIAABgAAAAAAAAAAAAAACYAAAAdAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-26T00:21:20.169Z" - }, - { - "$type": "Document", - "DocumentIndex": 72, - "Title": "M128.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\M128.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Data\\M128.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\M128.cs", - "RelativeToolTip": "StgSharpDebug\\Data\\M128.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAowC4AAAAbAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T23:57:32.075Z" - }, - { - "$type": "Document", - "DocumentIndex": 245, - "Title": "CrossFrameBlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\CrossFrameBlueprintNode.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T22:04:59.351Z" - }, - { - "$type": "Document", - "DocumentIndex": 73, - "Title": "GlobalSetting.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\GlobalSetting.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Environment\\GlobalSetting.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\GlobalSetting.cs", - "RelativeToolTip": "StgSharpDebug\\Environment\\GlobalSetting.cs", - "ViewState": "AgIAADUAAAAAAAAAAAAvwEgAAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T22:04:46.699Z" - }, - { - "$type": "Document", - "DocumentIndex": 31, - "Title": "AutoTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ViewState": "AgIAAGwAAAAAAAAAAAAiwH4AAAAQAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T21:16:55.239Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 76, - "Title": "glResourceManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glResourceManager.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAEMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T21:16:48.829Z" - }, - { - "$type": "Document", - "DocumentIndex": 0, - "Title": "GLBufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ViewState": "AgIAAB4AAAAAAAAAAAAvwDIAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-25T20:33:11.097Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 83, - "Title": "VBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ViewState": "AgIAAH8AAAAAAAAAAAAUwCoAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T21:48:41.305Z" - }, - { - "$type": "Document", - "DocumentIndex": 85, - "Title": "RBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T21:48:25.007Z" - }, - { - "$type": "Document", - "DocumentIndex": 89, - "Title": "glAPICalling.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glAPICalling.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T19:14:08.969Z" - }, - { - "$type": "Document", - "DocumentIndex": 34, - "Title": "glResourceGenrator.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ViewState": "AgIAADYAAAAAAAAAAIAzwFIAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T19:13:55.184Z" - }, - { - "$type": "Document", - "DocumentIndex": 82, - "Title": "glResourceManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glResourceManager.cs", - "ViewState": "AgIAAEcAAAAAAAAAAAAqwFUAAAAPAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-24T19:13:42.377Z" - }, - { - "$type": "Document", - "DocumentIndex": 246, - "Title": "MultiKeyDictionary.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\MultiKeyDictionary.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-23T20:00:13.62Z" - }, - { - "$type": "Document", - "DocumentIndex": 23, - "Title": "AutoTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", - "ViewState": "AgIAAD8AAAAAAAAAAAAIwFMAAAA0AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-23T19:22:04.183Z" - }, - { - "$type": "Document", - "DocumentIndex": 92, - "Title": "ControlItemRender.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\ControlItemRender.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\ControlItemRender.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-08-01T11:42:48.589Z" - }, - { - "$type": "Document", - "DocumentIndex": 97, - "Title": "main.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\main.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\main.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\main.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\main.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-08-01T11:40:09.913Z" - }, - { - "$type": "Document", - "DocumentIndex": 93, - "Title": "ControlItemRender.vert", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.vert", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\ControlItemRender.vert", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\ControlItemRender.vert", - "RelativeToolTip": "StgSharpDebug\\Shader\\ControlItemRender.vert", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-08-01T11:36:54.425Z" - }, - { - "$type": "Document", - "DocumentIndex": 8, - "Title": "OpenGLControllingItemRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\OpenGLControllingItemRender.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\OpenGLControllingItemRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\OpenGLControllingItemRender.cs", - "RelativeToolTip": "StgSharp\\MVVM\\OpenGLControllingItemRender.cs", - "ViewState": "AgIAACEAAAAAAAAAAAAAACgAAAAsAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:32:58.353Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 99, - "Title": "IGeomtryBuffer.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\IGeomtryBuffer.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:26:58.217Z" - }, - { - "$type": "Document", - "DocumentIndex": 100, - "Title": "OpenningView.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "RelativeToolTip": "StgSharpDebug\\Stg\\Touhou\\View\\OpenningView.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:20:02.653Z" - }, - { - "$type": "Document", - "DocumentIndex": 94, - "Title": "TouhouWindow.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "RelativeToolTip": "StgSharpDebug\\Stg\\Touhou\\TouhouWindow.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-08-01T11:14:18.39Z" - }, - { - "$type": "Document", - "DocumentIndex": 98, - "Title": "InternalData.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\InternalData.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Data\\InternalData.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\InternalData.cs", - "RelativeToolTip": "StgSharpDebug\\Data\\InternalData.cs", - "ViewState": "AgIAAAcAAAAAAAAAAAAuwDMAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-30T23:52:16.105Z" - }, - { - "$type": "Document", - "DocumentIndex": 81, - "Title": "glApiManagerConst.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ViewState": "AgIAABgAAAAAAAAAAIBQwAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:56:27.205Z" - }, - { - "$type": "Document", - "DocumentIndex": 106, - "Title": "Object.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\3fbd2d3f2a21976ceea22ce6d61d2bfc56abbb0356d59a09e7367042f1d26101\\src\\libraries\\System.Private.CoreLib\\src\\System\\Object.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\3fbd2d3f2a21976ceea22ce6d61d2bfc56abbb0356d59a09e7367042f1d26101\\src\\libraries\\System.Private.CoreLib\\src\\System\\Object.cs", - "ViewState": "AgIAABIAAAAAAAAAAIAxwBkAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:53:04.659Z" - }, - { - "$type": "Document", - "DocumentIndex": 80, - "Title": "glException.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", - "ViewState": "AgIAAEMAAAAAAAAAAAAUwGUAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:18:29.968Z" - }, - { - "$type": "Document", - "DocumentIndex": 110, - "Title": "StructDefine.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\StructDefine.cs", - "ViewState": "AgIAABIAAAAAAAAAAIBgwC0AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:08:05.513Z" - }, - { - "$type": "Document", - "DocumentIndex": 105, - "Title": "GLIO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\IO\\GLIO.cs", - "ViewState": "AgIAAGgAAAAAAAAAAAAqwGgAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-29T22:06:08.827Z" - }, - { - "$type": "Document", - "DocumentIndex": 117, - "Title": "ViewManage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ViewManage.cs", - "ViewState": "AgIAABoAAAAAAAAAAAA1wDIAAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:47:56.998Z" - }, - { - "$type": "Document", - "DocumentIndex": 45, - "Title": "TimeProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\TimeProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Environment\\TimeProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Environment\\TimeProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Environment\\TimeProvider.cs", - "ViewState": "AgIAABkAAAAAAAAAAAAnwDAAAAAlAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:44:41.918Z" - }, - { - "$type": "Document", - "DocumentIndex": 104, - "Title": "SemaphoreSlim.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\c6a36f44105246e8389794d6b1ff0c946741477e6dd52e219c7f2f689247fedc\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\SemaphoreSlim.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\c6a36f44105246e8389794d6b1ff0c946741477e6dd52e219c7f2f689247fedc\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\SemaphoreSlim.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:44:32.439Z" - }, - { - "$type": "Document", - "DocumentIndex": 20, - "Title": "ViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewPort.cs", - "ViewState": "AgIAADEAAAAAAAAAAEBBwDoAAAASAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:31:16.196Z" - }, - { - "$type": "Document", - "DocumentIndex": 90, - "Title": "ViewResponder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewResponder.cs", - "ViewState": "AgIAAFEAAAAAAAAAAAAWwHQAAAAvAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T20:20:17.17Z" - }, - { - "$type": "Document", - "DocumentIndex": 112, - "Title": "ShowViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", - "ViewState": "AgIAADIAAAAAAAAAAAAtwEgAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:28:00.87Z" - }, - { - "$type": "Document", - "DocumentIndex": 44, - "Title": "ViewModel.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", - "ViewState": "AgIAAFMAAAAAAAAAAAAvwGoAAAA5AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:24:58.03Z" - }, - { - "$type": "Document", - "DocumentIndex": 119, - "Title": "PlainGeometry.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAqwC0AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:16:05.323Z" - }, - { - "$type": "Document", - "DocumentIndex": 118, - "Title": "Rectangle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\PlainGeometry\\Rectangle.cs", - "ViewState": "AgIAABAAAAAAAAAAAAA1wCUAAAAFAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T19:14:47.657Z" - }, - { - "$type": "Document", - "DocumentIndex": 91, + "DocumentIndex": 7, "Title": "ViewDesigner.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewDesigner.cs", - "ViewState": "AgIAAFEAAAAAAAAAAAAmwGUAAAAUAAAAAAAAAA==", + "ViewState": "AgIAAHkAAAAAAAAAAAAmwAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-28T18:02:40.594Z" + "WhenOpened": "2024-10-02T17:23:25.276Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 124, - "Title": "KeyTrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "DocumentIndex": 1, + "Title": "Lable.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Lable.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Lable.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Lable.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Lable.cs", + "ViewState": "AgIAACwAAAAAAAAAAAAAwDgAAAAiAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T22:07:04.226Z" + "WhenOpened": "2024-10-02T09:09:25.924Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 126, + "DocumentIndex": 15, + "Title": "tmmintrin.h", + "DocumentMoniker": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\tmmintrin.h", + "ToolTip": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\tmmintrin.h", + "ViewState": "AgIAACIAAAAAAAAAAIAwwC0AAAAhAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-10-02T02:14:03.631Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "quick_hash.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\quick_hash.c", + "RelativeDocumentMoniker": "StgSharpC\\quick_hash.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\quick_hash.c", + "RelativeToolTip": "StgSharpC\\quick_hash.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAZAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-10-02T01:00:22.214Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 40, + "Title": "intrinsicContextProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeToolTip": "StgSharp\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAQwDMAAAAEAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T19:25:34.473Z" + }, + { + "$type": "Document", + "DocumentIndex": 21, + "Title": "vector.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\vector.c", + "RelativeDocumentMoniker": "StgSharpC\\vector.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\vector.c", + "RelativeToolTip": "StgSharpC\\vector.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-30T18:50:19.959Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 39, + "Title": "intrinsicContextProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\intrinsicContextProvider.cs", + "ViewState": "AgIAAB4AAAAAAAAAAAAowC8AAAAoAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T18:13:26.275Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 171, + "Title": "immintrin.h", + "DocumentMoniker": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\immintrin.h", + "ToolTip": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\include\\immintrin.h", + "ViewState": "AgIAAEgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-30T18:00:39.836Z" + }, + { + "$type": "Document", + "DocumentIndex": 46, + "Title": "Matrix43.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix43.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix43.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix43.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix43.cs", + "ViewState": "AgIAAIMAAAAAAAAAAAAQwJEAAABDAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:54.686Z" + }, + { + "$type": "Document", + "DocumentIndex": 47, + "Title": "Matrix23.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix23.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix23.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix23.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix23.cs", + "ViewState": "AgIAAGcAAAAAAAAAAAAQwHUAAAA7AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:50.079Z" + }, + { + "$type": "Document", + "DocumentIndex": 48, + "Title": "ColumnSet2.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeToolTip": "StgSharp\\Data\\Intrinsic\\ColumnSet2.cs", + "ViewState": "AgIAACoAAAAAAAAAAAAQwDgAAAA8AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:33.294Z" + }, + { + "$type": "Document", + "DocumentIndex": 45, + "Title": "ColumnSet3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeToolTip": "StgSharp\\Data\\Intrinsic\\ColumnSet3.cs", + "ViewState": "AgIAABEAAAAAAAAAAADwvzIAAAAsAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:28.515Z" + }, + { + "$type": "Document", + "DocumentIndex": 44, + "Title": "Matrix22.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix22.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix22.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix22.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix22.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAzwDEAAAARAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:27.126Z" + }, + { + "$type": "Document", + "DocumentIndex": 37, + "Title": "Matrix42.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix42.cs", + "ViewState": "AgIAAKoAAAAAAAAAAAAAwIAAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:44:11.427Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 27, + "Title": "Matrix33.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix33.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix33.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix33.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix33.cs", + "ViewState": "AgIAAHwAAAAAAAAAAAAQwIwAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:42:19.077Z" + }, + { + "$type": "Document", + "DocumentIndex": 43, + "Title": "Matrix32.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix32.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix32.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix32.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix32.cs", + "ViewState": "AgIAAHEAAAAAAAAAAAAowH4AAAA7AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-30T17:41:00.831Z" + }, + { + "$type": "Document", + "DocumentIndex": 34, + "Title": "Matrix43.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix43.cs", + "ViewState": "AgIAAIMAAAAAAAAAAAAQwJEAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:49:18.978Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 33, + "Title": "Matrix34.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix34.cs", + "ViewState": "AgIAAHwAAAAAAAAAAAAQwIoAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:49:11.967Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 28, + "Title": "Matrix33.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix33.cs", + "ViewState": "AgIAAHkAAAAAAAAAAAAuwIoAAAA0AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:49:07.562Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 32, + "Title": "Matrix32.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix32.cs", + "ViewState": "AgIAAHAAAAAAAAAAAAAQwH4AAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:48:52.232Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 31, + "Title": "Matrix24.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix24.cs", + "ViewState": "AgIAAHwAAAAAAAAAAAAzwIoAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:48:41.245Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 29, + "Title": "Matrix23.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix23.cs", + "ViewState": "AgIAAGcAAAAAAAAAAAAQwHUAAAA4AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:47:48.203Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 49, + "Title": "Matrix42.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix42.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Matrix42.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Matrix42.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Matrix42.cs", + "ViewState": "AgIAAHIAAAAAAAAAAAAQwIAAAAA7AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:47:19.267Z" + }, + { + "$type": "Document", + "DocumentIndex": 63, + "Title": "Random.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Scalar\\Random.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Scalar\\Random.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Scalar\\Random.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Scalar\\Random.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAUwB8AAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:26:04.159Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, "Title": "DataBinding.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\DataBinding.cs", - "ViewState": "AgIAADgAAAAAAAAAAAA0wC8AAAAAAAAAAAAAAA==", + "ViewState": "AgIAAFIAAAAAAAAAAAAgwFsAAAAuAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:50:43.739Z" - }, - { - "$type": "Document", - "DocumentIndex": 36, - "Title": "ViewBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", - "ViewState": "AgIAABIAAAAAAAAAAAApwH8AAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:46:52.221Z" - }, - { - "$type": "Document", - "DocumentIndex": 37, - "Title": "ViewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", - "ViewState": "AgIAAAwAAAAAAAAAAAAvwB8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:02:28.873Z" - }, - { - "$type": "Document", - "DocumentIndex": 1, - "Title": "NewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\NewRender.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\NewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\NewRender.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\NewRender.cs", - "ViewState": "AgIAACkAAAAAAAAAAAAcwDgAAAAhAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-26T21:00:30.407Z", + "WhenOpened": "2024-09-29T23:25:58.341Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 129, - "Title": "ViewResponder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewResponder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", - "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewResponder.cs", - "ViewState": "AgIAABwAAAAAAAAAAIBgwDsAAAAAAAAAAAAAAA==", + "DocumentIndex": 54, + "Title": "DataHead.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataHead.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\SSD\\DataHead.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataHead.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\SSD\\DataHead.cs", + "ViewState": "AgIAABAAAAAAAAAAAAAQwB4AAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-24T14:44:59.912Z" - }, - { - "$type": "Document", - "DocumentIndex": 18, - "Title": "ViewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", - "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewRender.cs", - "ViewState": "AgIAAFsAAAAAAAAAAAAuwG0AAAAgAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-24T14:44:50.254Z" - }, - { - "$type": "Document", - "DocumentIndex": 128, - "Title": "ViewDesigner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", - "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewDesigner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", - "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewDesigner.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAIYAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-24T14:42:19.45Z" - }, - { - "$type": "Document", - "DocumentIndex": 114, - "Title": "Control.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Control.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\Control.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Control.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\Control.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-22T23:13:34.964Z" - }, - { - "$type": "Document", - "DocumentIndex": 5, - "Title": "Partical.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\RenderStream\\Partical.cs", - "ViewState": "AgIAACcAAAAAAAAAAAAnwC4AAAAwAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-22T18:54:09.535Z", + "WhenOpened": "2024-09-29T23:25:53.902Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 236, - "Title": "Render.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Render.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\Render.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Render.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\Render.cs", + "DocumentIndex": 56, + "Title": "Vector.Orthogonalize.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vector.Orthogonalize.cs", + "ViewState": "AgIAAA8AAAAAAAAAAAAQwB8AAAAUAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-22T18:52:26.586Z" - }, - { - "$type": "Document", - "DocumentIndex": 113, - "Title": "PlainGeometryMesh.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\PlainGeometryMesh.cs", - "ViewState": "AgIAACsAAAAAAAAAAAAiwDoAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:21:10.362Z" - }, - { - "$type": "Document", - "DocumentIndex": 35, - "Title": "TexturePipeline.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TexturePipeline.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\TexturePipeline.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TexturePipeline.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\TexturePipeline.cs", - "ViewState": "AgIAABAAAAAAAAAAAAAhwCoAAAA0AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:20:56.032Z" - }, - { - "$type": "Document", - "DocumentIndex": 43, - "Title": "MarkingLable.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\MarkingLable.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAvwC8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:08:20.718Z" - }, - { - "$type": "Document", - "DocumentIndex": 120, - "Title": "DecorationBox.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\DecorationBox.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwBMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:08:04.698Z" - }, - { - "$type": "Document", - "DocumentIndex": 122, - "Title": "CharacterIndexImage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\CharacterIndexImage.cs", - "ViewState": "AgIAAAMAAAAAAAAAAIBgwA0AAAArAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:07:37.453Z" - }, - { - "$type": "Document", - "DocumentIndex": 39, - "Title": "BattleField.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\BattleField.cs", - "ViewState": "AgIAAA0AAAAAAAAAAAAvwCAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:06:14.126Z" - }, - { - "$type": "Document", - "DocumentIndex": 121, - "Title": "ControllingIntem.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\ControllingIntem.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwA4AAAAHAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T18:05:39.942Z" - }, - { - "$type": "Document", - "DocumentIndex": 123, - "Title": "TextureProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureProvider.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\TextureProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureProvider.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\TextureProvider.cs", - "ViewState": "AgIAABIAAAAAAAAAAAAcwCMAAAASAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T17:09:02.036Z" - }, - { - "$type": "Document", - "DocumentIndex": 14, - "Title": "Design.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Design.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\Design.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\Design.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\Design.cs", - "ViewState": "AgIAABQAAAAAAAAAAAAqwCYAAAAhAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T08:07:56.357Z" - }, - { - "$type": "Document", - "DocumentIndex": 2, - "Title": "ViewMain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\ViewMain.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\View\\ViewMain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\View\\ViewMain.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\View\\ViewMain.cs", - "ViewState": "AgIAAEQAAAAAAAAAAAAvwFcAAAATAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-21T08:06:54.118Z", + "WhenOpened": "2024-09-29T23:25:47.906Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 64, + "Title": "DataSegment.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\SSD\\DataSegment.cs", + "ViewState": "AgIAAHsAAAAAAAAAAAAUwIkAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:45.42Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 58, + "Title": "DataHead.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataHead.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\DataHead.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataHead.cs", + "RelativeToolTip": "StgSharp\\Data\\SSD\\DataHead.cs", + "ViewState": "AgIAAAwAAAAAAAAAAADwvx4AAAAeAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:40.498Z" + }, + { + "$type": "Document", + "DocumentIndex": 60, + "Title": "Random.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Scalar\\Random.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Scalar\\Random.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Scalar\\Random.cs", + "RelativeToolTip": "StgSharp\\Math\\Scalar\\Random.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAUwB8AAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:27.05Z" + }, + { + "$type": "Document", + "DocumentIndex": 66, "Title": "DataBinding.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\DataBinding.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\DataBinding.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\DataBinding.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\DataBinding.cs", - "ViewState": "AgIAAB4AAAAAAAAAAAAgwDEAAAAAAAAAAAAAAA==", + "ViewState": "AgIAABAAAAAAAAAAAAAUwB4AAAAeAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-19T16:41:06.14Z", + "WhenOpened": "2024-09-29T23:25:26.263Z" + }, + { + "$type": "Document", + "DocumentIndex": 57, + "Title": "Vec4.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec4.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vec4.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec4.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Vec4.cs", + "ViewState": "AgIAABQAAAAAAAAAAAAiwB8AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:05.778Z" + }, + { + "$type": "Document", + "DocumentIndex": 67, + "Title": "Vec3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec3.cs", + "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vec3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vec3.cs", + "RelativeToolTip": "StgSharp\\Math\\Linear\\Vec3.cs", + "ViewState": "AgIAABcAAAAAAAAAAAAUwC4AAAARAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:25:00.158Z" + }, + { + "$type": "Document", + "DocumentIndex": 61, + "Title": "DataSegment.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", + "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\DataSegment.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", + "RelativeToolTip": "StgSharp\\Data\\SSD\\DataSegment.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAwwCAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:24:54.534Z" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "IntrinsicContext.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\IntrinsicContext.cs", + "ViewState": "AgIAACQAAAAAAAAAAAAAADgAAABIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:24:12.242Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 132, - "Title": "KeyEventAttribute.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEventAttribute.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\KeyEventAttribute.cs", + "DocumentIndex": 62, + "Title": "RandomGenerator.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\RandomGenerator.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\RandomGenerator.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\RandomGenerator.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\RandomGenerator.cs", + "ViewState": "AgIAAA4AAAAAAAAAAAAgwB8AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:23:55.248Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 69, + "Title": "M256.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\M256.cs", + "ViewState": "AgIAAB4AAAAAAAAAAAAAACYAAAASAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T23:23:44.528Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 13, + "Title": "intrinsic.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\intrinsic.c", + "RelativeDocumentMoniker": "StgSharpC\\intrinsic.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\intrinsic.c", + "RelativeToolTip": "StgSharpC\\intrinsic.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAwwBUAAAA3AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T22:48:24.45Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 14, + "Title": "stb_image.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.h", + "RelativeDocumentMoniker": "StgSharpC\\stb_image.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.h", + "RelativeToolTip": "StgSharpC\\stb_image.h", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T22:37:09.182Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "ssc_intrinsic.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_intrinsic.h", + "RelativeDocumentMoniker": "StgSharpC\\ssc_intrinsic.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_intrinsic.h", + "RelativeToolTip": "StgSharpC\\ssc_intrinsic.h", + "ViewState": "AgIAAC0AAAAAAAAAAAAAAD8AAAAoAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T22:32:24.64Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 70, + "Title": "Program.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\BenchMark\\Program.cs", + "RelativeDocumentMoniker": "BenchMark\\Program.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\BenchMark\\Program.cs", + "RelativeToolTip": "BenchMark\\Program.cs", + "ViewState": "AgIAAAYAAAAAAAAAAAAAACEAAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-19T15:04:20.506Z" - }, - { - "$type": "Document", - "DocumentIndex": 237, - "Title": "DataBinding.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\DataBinding.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-18T17:19:17.458Z" - }, - { - "$type": "Document", - "DocumentIndex": 116, - "Title": "StgSharpDebug", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeDocumentMoniker": "StgSharpDebug\\StgSharpDebug.csproj", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeToolTip": "StgSharpDebug\\StgSharpDebug.csproj", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2024-07-17T19:34:54.548Z" - }, - { - "$type": "Document", - "DocumentIndex": 22, - "Title": "ViewModelMain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\ViewModelMain.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\ViewModelMain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\ViewModelMain.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\ViewModelMain.cs", - "ViewState": "AgIAABkAAAAAAAAAAAAhwDAAAAA3AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-16T07:19:49.481Z" - }, - { - "$type": "Document", - "DocumentIndex": 75, - "Title": "StgSharpDebug.csproj", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeDocumentMoniker": "StgSharpDebug\\StgSharpDebug.csproj", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", - "RelativeToolTip": "StgSharpDebug\\StgSharpDebug.csproj", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAAUAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2024-07-16T07:19:00.583Z" - }, - { - "$type": "Document", - "DocumentIndex": 247, - "Title": "TimeFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\TimeFunction.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\TimeFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\TimeFunction.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\TimeFunction.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T20:04:24.579Z" + "WhenOpened": "2024-09-29T22:26:10.769Z" }, { "$type": "Document", "DocumentIndex": 30, - "Title": "TriggerButton.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\TriggerButton.cs", - "ViewState": "AgIAALMAAAAAAAAAAIA0wL4AAAAIAAAAAAAAAA==", + "Title": "Matrix44.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix44.cs", + "ViewState": "AgIAALcAAAAAAAAAAAAowMQAAAA0AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T19:54:09.954Z" + "WhenOpened": "2024-09-29T21:53:45.275Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 115, - "Title": "ButtonGroup.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\ButtonGroup.cs", - "ViewState": "AgIAADAAAAAAAAAAAAAqwEEAAAAJAAAAAAAAAA==", + "DocumentIndex": 50, + "Title": "Matrix22.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Matrix22.cs", + "ViewState": "AgIAACcAAAAAAAAAAAAQwDUAAAAbAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T19:53:42.786Z" + "WhenOpened": "2024-09-29T21:50:22.312Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 238, - "Title": "ShowViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\ShowViewPort.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T19:07:20.391Z" - }, - { - "$type": "Document", - "DocumentIndex": 239, - "Title": "ViewPort.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\View\\ViewPort.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T18:55:25.494Z" - }, - { - "$type": "Document", - "DocumentIndex": 125, - "Title": "KeyControl.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyControl.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\KeyControl.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyControl.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\KeyControl.cs", - "ViewState": "AgIAABAAAAAAAAAAAAAqwCQAAAAbAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T18:23:56.059Z" - }, - { - "$type": "Document", - "DocumentIndex": 240, - "Title": "ViewResponder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewResponder.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\ViewResponder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewResponder.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\ViewResponder.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T18:00:35.036Z" - }, - { - "$type": "Document", - "DocumentIndex": 241, - "Title": "ViewRender.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\View\\ViewRender.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T17:27:33.542Z" - }, - { - "$type": "Document", - "DocumentIndex": 242, - "Title": "ViewDesigner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewDesigner.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\ViewDesigner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\ViewDesigner.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\ViewDesigner.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T17:21:21.477Z" - }, - { - "$type": "Document", - "DocumentIndex": 127, - "Title": "View.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\View.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\View\\View.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\View\\View.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\View\\View.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-15T15:23:07.924Z" - }, - { - "$type": "Document", - "DocumentIndex": 133, - "Title": "vec3d.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\vec3d.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\vec3d.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\vec3d.cs", - "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\vec3d.cs", - "ViewState": "AgIAAF0AAAAAAAAAAAAmwEcAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-14T17:17:29.238Z" - }, - { - "$type": "Document", - "DocumentIndex": 48, + "DocumentIndex": 72, "Title": "GeometryOperation.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", "RelativeToolTip": "StgSharpDebug\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ViewState": "AgIAAB8AAAAAAAAAAAAvwDIAAAAQAAAAAAAAAA==", + "ViewState": "AgIAAGcAAAAAAAAAAAAnwHYAAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-13T17:37:00.956Z" - }, - { - "$type": "Document", - "DocumentIndex": 111, - "Title": "particle.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\particle.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\particle.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA4AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-13T05:34:34.109Z" - }, - { - "$type": "Document", - "DocumentIndex": 103, - "Title": "particle.vert", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.vert", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\particle.vert", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\particle.vert", - "RelativeToolTip": "StgSharpDebug\\Shader\\particle.vert", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAAAoAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-13T05:34:25.67Z" - }, - { - "$type": "Document", - "DocumentIndex": 96, - "Title": "fbo.vert", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.vert", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\fbo.vert", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.vert", - "RelativeToolTip": "StgSharpDebug\\Shader\\fbo.vert", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-12T17:46:54.077Z" - }, - { - "$type": "Document", - "DocumentIndex": 95, - "Title": "fbo.frag", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.frag", - "RelativeDocumentMoniker": "StgSharpDebug\\Shader\\fbo.frag", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Shader\\fbo.frag", - "RelativeToolTip": "StgSharpDebug\\Shader\\fbo.frag", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", - "WhenOpened": "2024-07-12T17:46:52.616Z" - }, - { - "$type": "Document", - "DocumentIndex": 88, - "Title": "glEnum.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", - "ViewState": "AgIAAFUAAAAAAAAAAAASwGcAAAAQAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-12T17:36:17.134Z" - }, - { - "$type": "Document", - "DocumentIndex": 19, - "Title": "RenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\RenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\RenderStream.cs", - "ViewState": "AgIAAFEAAAAAAAAAAAAWwF4AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-12T16:50:10.581Z" - }, - { - "$type": "Document", - "DocumentIndex": 84, - "Title": "VAO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAqwCcAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-12T10:04:44.545Z" - }, - { - "$type": "Document", - "DocumentIndex": 3, - "Title": "TextureGL.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "ViewState": "AgIAACUAAAAAAAAAAAAvwDgAAAAfAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T18:46:51.043Z", + "WhenOpened": "2024-09-29T21:47:44.641Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 136, - "Title": "SR.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\74ed84df48c00229a8da75e7d99c26a3409b78c17ddfc863196b29969f1b9863\\src\\libraries\\Common\\src\\System\\SR.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\74ed84df48c00229a8da75e7d99c26a3409b78c17ddfc863196b29969f1b9863\\src\\libraries\\Common\\src\\System\\SR.cs", - "ViewState": "AgIAABkAAAAAAAAAAADgvyIAAAANAAAAAAAAAA==", + "DocumentIndex": 38, + "Title": "Vec2.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec2.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vec2.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec2.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vec2.cs", + "ViewState": "AgIAAEoAAAAAAAAAAABBwCkAAAAWAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T18:09:43.749Z" + "WhenOpened": "2024-09-29T21:46:47.983Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 27, - "Title": "ImageHelper.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", - "ViewState": "AgIAABsAAAAAAAAAAAD4vywAAAAkAAAAAAAAAA==", + "DocumentIndex": 52, + "Title": "Vec3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec3.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vec3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec3.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vec3.cs", + "ViewState": "AgIAADcAAAAAAAAAAIA1wB8AAAAOAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T13:33:11Z" + "WhenOpened": "2024-09-29T21:45:17.737Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 29, - "Title": "Image.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Image.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Image.cs", - "ViewState": "AgIAADkAAAAAAAAAAIA7wE8AAAAXAAAAAAAAAA==", + "DocumentIndex": 51, + "Title": "Vec4.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec4.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\Vec4.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\Vec4.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\Vec4.cs", + "ViewState": "AgIAAAwAAAAAAAAAAAAQwC8AAAAmAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T13:30:30.357Z" + "WhenOpened": "2024-09-29T21:44:04.683Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 139, - "Title": "Task.cs", - "DocumentMoniker": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\6c91e49c16b65a4a6086c168a4f34965ffdd867f9cb4d0d10207e862c24f2808\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\Tasks\\Task.cs", - "ToolTip": "C:\\Users\\Nitlo\\AppData\\Local\\SourceServer\\6c91e49c16b65a4a6086c168a4f34965ffdd867f9cb4d0d10207e862c24f2808\\src\\libraries\\System.Private.CoreLib\\src\\System\\Threading\\Tasks\\Task.cs", - "ViewState": "AgIAAD8JAAAAAAAAAAAjwEcJAAAIAAAAAAAAAA==", + "DocumentIndex": 71, + "Title": "IVector.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\IVector.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\IVector.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\IVector.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\IVector.cs", + "ViewState": "AgIAAB0AAAAAAAAAAAASwC4AAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-11T03:46:13.673Z" + "WhenOpened": "2024-09-29T21:40:46.434Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 108, - "Title": "GlHandle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\GlHandle.cs", - "ViewState": "AgIAACQAAAAAAAAAAAAYwDoAAAAJAAAAAAAAAA==", + "DocumentIndex": 35, + "Title": "ColumnSet4.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet4.cs", + "ViewState": "AgIAAEkAAAAAAAAAAAAswCYAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:49:23.76Z" + "WhenOpened": "2024-09-29T21:37:40.402Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 243, - "Title": "ViewManage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\ViewManage.cs", + "DocumentIndex": 25, + "Title": "ColumnSet2.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet2.cs", + "ViewState": "AgIAAC8AAAAAAAAAAAAcwDsAAAAYAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:32:18.12Z" + "WhenOpened": "2024-09-29T21:37:34.496Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 13, - "Title": "glRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", - "ViewState": "AgIAADoAAAAAAAAAAAAswFEAAAA6AAAAAAAAAA==", + "DocumentIndex": 36, + "Title": "ColumnSet3.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\ColumnSet3.cs", + "ViewState": "AgIAAEQAAAAAAAAAAAAmwCUAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:31:57.791Z", + "WhenOpened": "2024-09-29T21:35:07.699Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 73, + "Title": "Bullet.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Bullet.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\Bullet.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\Bullet.cs", + "RelativeToolTip": "StgSharpDebug\\Stg\\Bullet.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAC0AAAAQAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T21:33:00.53Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 74, + "Title": "NativeMethods.txt", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\NativeMethods.txt", + "RelativeDocumentMoniker": "StgSharpDebug\\NativeMethods.txt", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\NativeMethods.txt", + "RelativeToolTip": "StgSharpDebug\\NativeMethods.txt", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", + "WhenOpened": "2024-09-29T21:32:56.873Z" + }, + { + "$type": "Document", + "DocumentIndex": 75, + "Title": "Control", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Control", + "RelativeDocumentMoniker": "StgSharpDebug\\Control", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Control", + "RelativeToolTip": "StgSharpDebug\\Control", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", + "WhenOpened": "2024-09-29T21:32:55.128Z" + }, + { + "$type": "Document", + "DocumentIndex": 76, + "Title": "BlueprintActionNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ViewState": "AgIAACcAAAAAAAAAAAAAACkAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T20:59:53.281Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "mat3.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat3.c", + "RelativeDocumentMoniker": "StgSharpC\\mat3.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat3.c", + "RelativeToolTip": "StgSharpC\\mat3.c", + "ViewState": "AgIAAA4AAAAAAAAAAAAjwBMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T20:46:58.962Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 19, + "Title": "mat2.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat2.c", + "RelativeDocumentMoniker": "StgSharpC\\mat2.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat2.c", + "RelativeToolTip": "StgSharpC\\mat2.c", + "ViewState": "AgIAAA0AAAAAAAAAAAAgwCgAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T20:46:52.29Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 24, + "Title": "stb_image.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.c", + "RelativeDocumentMoniker": "StgSharpC\\stb_image.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\stb_image.c", + "RelativeToolTip": "StgSharpC\\stb_image.c", + "ViewState": "AgIAAJASAAAAAAAAAAAewLISAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T20:37:47.434Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 26, + "Title": "ssc_framework.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_framework.h", + "RelativeDocumentMoniker": "StgSharpC\\ssc_framework.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_framework.h", + "RelativeToolTip": "StgSharpC\\ssc_framework.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T19:54:56.607Z" + }, + { + "$type": "Document", + "DocumentIndex": 77, + "Title": "glfw3native.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3native.h", + "RelativeDocumentMoniker": "StgSharpC\\glfw3native.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3native.h \u2B24", + "RelativeToolTip": "StgSharpC\\glfw3native.h \u2B24", + "ViewState": "AgIAAE4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T19:54:32.432Z" + }, + { + "$type": "Document", + "DocumentIndex": 78, + "Title": "gl.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\gl.h", + "RelativeDocumentMoniker": "StgSharpC\\gl.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\gl.h", + "RelativeToolTip": "StgSharpC\\gl.h", + "ViewState": "AgIAAIQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T19:53:16.298Z" + }, + { + "$type": "Document", + "DocumentIndex": 20, + "Title": "dllmain.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\dllmain.c", + "RelativeDocumentMoniker": "StgSharpC\\dllmain.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\dllmain.c", + "RelativeToolTip": "StgSharpC\\dllmain.c", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T19:13:51.2Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 16, + "Title": "ssc_internal.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_internal.h", + "RelativeDocumentMoniker": "StgSharpC\\ssc_internal.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\ssc_internal.h", + "RelativeToolTip": "StgSharpC\\ssc_internal.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-09-29T17:54:05.067Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 22, + "Title": "mat4.c", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat4.c", + "RelativeDocumentMoniker": "StgSharpC\\mat4.c", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\mat4.c", + "RelativeToolTip": "StgSharpC\\mat4.c", + "ViewState": "AgIAABIAAAAAAAAAAAAAAAYAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", + "WhenOpened": "2024-09-29T17:52:26.343Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 53, + "Title": "IRegisterType.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\IRegisterType.cs", + "ViewState": "AgIAABoAAAAAAAAAAAAewCQAAAASAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-29T08:33:34.009Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 79, - "Title": "glApiManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glApiManager.cs", - "ViewState": "AgIAABUAAAAAAAAAAIBQwLAAAACCAAAAAAAAAA==", + "Title": "MatInterface.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "RelativeToolTip": "StgSharpDebug\\Math\\Linear\\MatInterface.cs", + "ViewState": "AgIAABUAAAAAAAAAAAAAABIAAAAHAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:26:52.544Z" + "WhenOpened": "2024-09-29T08:33:51.856Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 140, - "Title": "glApiManager.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glApiManager.cs", - "ViewState": "AgIAACoAAAAAAAAAAAAYwD8AAAAWAAAAAAAAAA==", + "DocumentIndex": 12, + "Title": "M128.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "RelativeToolTip": "StgSharpDebug\\Data\\Intrinsic\\M128.cs", + "ViewState": "AgIAADkAAAAAAAAAAAA1wEQAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:24:34.903Z" - }, - { - "$type": "Document", - "DocumentIndex": 141, - "Title": "glApiManagerConst.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glApiManagerConst.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:24:33.785Z" - }, - { - "$type": "Document", - "DocumentIndex": 28, - "Title": "glFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", - "ViewState": "AgIAAOMBAAAAAAAAAIAzwPYBAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T18:05:53.065Z" - }, - { - "$type": "Document", - "DocumentIndex": 143, - "Title": "Camera.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Graphic\\Camera.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Graphic\\Camera.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Graphic\\Camera.cs", - "RelativeToolTip": "StgSharp\\Math\\Graphic\\Camera.cs", - "ViewState": "AgIAAIUAAAAAAAAAAAA0wJEAAAAiAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:59:14.403Z" + "WhenOpened": "2024-09-28T20:11:22.78Z", + "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 86, - "Title": "FBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAARAAAAAAAAAA==", + "Title": "glEnum.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\glEnum.cs", + "ViewState": "AgIAAFwAAAAAAAAAAAAtwGUAAAA7AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:58:38.22Z" + "WhenOpened": "2024-09-28T19:12:37.646Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 87, - "Title": "EBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAYwC8AAAAYAAAAAAAAAA==", + "DocumentIndex": 89, + "Title": "CollisionTexture.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", + "RelativeDocumentMoniker": "StgSharp\\Stg\\CollisionTexture.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", + "RelativeToolTip": "StgSharp\\Stg\\CollisionTexture.cs", + "ViewState": "AgIAAJUAAAAAAAAAAIAywKUAAABCAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:58:29.9Z" + "WhenOpened": "2024-09-28T18:14:14.323Z" }, { "$type": "Document", "DocumentIndex": 55, - "Title": "GlobalSuppressions.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\GlobalSuppressions.cs", - "RelativeDocumentMoniker": "StgSharp\\GlobalSuppressions.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\GlobalSuppressions.cs", - "RelativeToolTip": "StgSharp\\GlobalSuppressions.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Title": "TextureGL.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", + "ViewState": "AgIAAC0AAAAAAAAAAAA9wJcAAAAkAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:41:12.94Z" - }, - { - "$type": "Document", - "DocumentIndex": 109, - "Title": "BufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\BufferObjectBase.cs", - "ViewState": "AgIAADAAAAAAAAAAAIBgwE4AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:23:55.021Z" - }, - { - "$type": "Document", - "DocumentIndex": 149, - "Title": "glConst.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glConst.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\glConst.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glConst.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Define\\glConst.cs", - "ViewState": "AgIAAB0AAAAAAAAAAAAqwPQSAAAgAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:17:12.687Z" - }, - { - "$type": "Document", - "DocumentIndex": 148, - "Title": "VBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", - "ViewState": "AgIAAIMAAAAAAAAAAAAowJIAAAAwAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:16:18.094Z", + "WhenOpened": "2024-09-28T18:13:40.533Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 150, - "Title": "VAO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", - "ViewState": "AgIAADcAAAAAAAAAAAAUwEgAAAA1AAAAAAAAAA==", + "DocumentIndex": 96, + "Title": "MainThreadAssert.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeToolTip": "StgSharp\\Logic\\Threading\\MainThreadAssert.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAkAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:15:13.91Z", + "WhenOpened": "2024-09-27T19:46:51.552Z" + }, + { + "$type": "Document", + "DocumentIndex": 93, + "Title": "MainThreadAssert.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Threading\\MainThreadAssert.cs", + "ViewState": "AgIAAAMAAAAAAAAAAAAvwBEAAAAdAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T19:44:38.987Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 152, - "Title": "FBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\FBO.cs", - "ViewState": "AgIAAA4AAAAAAAAAAAAcwCYAAAAOAAAAAAAAAA==", + "DocumentIndex": 99, + "Title": "TextureBufferImage.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TextureBufferImage.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\TextureBufferImage.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TextureBufferImage.cs", + "RelativeToolTip": "StgSharp\\Graphics\\TextureBufferImage.cs", + "ViewState": "AgIAACsAAAAAAAAAAAAnwDoAAAAaAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T17:05:59.749Z", + "WhenOpened": "2024-09-27T18:44:51.978Z" + }, + { + "$type": "Document", + "DocumentIndex": 100, + "Title": "TextureBufferImage.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\TextureBufferImage.cs", + "ViewState": "AgIAACoAAAAAAAAAAAAAwEsAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-27T11:13:19.671Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 156, - "Title": "InternalIO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\InternalIO.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\IO\\InternalIO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\InternalIO.cs", - "RelativeToolTip": "StgSharp\\Controlling\\IO\\InternalIO.cs", - "ViewState": "AgIAAFkAAAAAAAAAAAA0wGoAAAALAAAAAAAAAA==", + "DocumentIndex": 92, + "Title": "ImageHelper.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\CPUanimation\\ImageHelper.cs", + "ViewState": "AgIAACIAAAAAAAAAAAAwwDQAAAANAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T15:48:23.725Z" - }, - { - "$type": "Document", - "DocumentIndex": 142, - "Title": "Pixels.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Pixels.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Pixels.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Pixels.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Pixels.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-10T04:12:48.395Z" - }, - { - "$type": "Document", - "DocumentIndex": 161, - "Title": "glException.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glException.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glException.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glException.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glException.cs", - "ViewState": "AgIAABgAAAAAAAAAAAAYwDAAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-08T11:52:05.336Z" - }, - { - "$type": "Document", - "DocumentIndex": 130, - "Title": "StgSharp.csproj", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", - "RelativeDocumentMoniker": "StgSharp\\StgSharp.csproj", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", - "RelativeToolTip": "StgSharp\\StgSharp.csproj", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2024-07-08T10:39:35.673Z" - }, - { - "$type": "Document", - "DocumentIndex": 151, - "Title": "RBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAtAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-07T17:45:11.682Z", + "WhenOpened": "2024-09-27T10:06:10.864Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 138, - "Title": "GlHandle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\GlHandle.cs", - "ViewState": "AgIAACYAAAAAAAAAAAAYwDMAAAAAAAAAAAAAAA==", + "DocumentIndex": 104, + "Title": "glApiDefine.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glApiDefine.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\glApiDefine.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glApiDefine.cs", + "RelativeToolTip": "StgSharp\\Graphics\\Define\\glApiDefine.cs", + "ViewState": "AgIAACAAAAAAAAAAAAAewC8AAABRAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T08:38:18.156Z" + "WhenOpened": "2024-09-27T04:53:08.572Z" }, { "$type": "Document", - "DocumentIndex": 153, - "Title": "BufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Define\\BufferObjectBase.cs", - "ViewState": "AgIAABgAAAAAAAAAAAAYwCsAAAAqAAAAAAAAAA==", + "DocumentIndex": 98, + "Title": "Image.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Image.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Image.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\Image.cs", + "ViewState": "AgIAAGEAAAAAAAAAAIA3wHAAAAAtAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T06:22:32.666Z" - }, - { - "$type": "Document", - "DocumentIndex": 144, - "Title": "GLBufferObjectBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\GLBufferObjectBase.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T07:31:18.854Z", + "WhenOpened": "2024-09-26T19:17:53.043Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 154, - "Title": "EBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\EBO.cs", - "ViewState": "AgIAAA0AAAAAAAAAAAAswB4AAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-07-06T06:22:23.335Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 235, - "Title": "MainRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Test\\MainRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Test\\MainRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Test\\MainRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Test\\MainRenderStream.cs", - "ViewState": "AgIAABsAAAAAAAAAAAA1wC4AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:36.555Z" - }, - { - "$type": "Document", - "DocumentIndex": 230, - "Title": "RBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\Buffer\\RBO.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:23.15Z" - }, - { - "$type": "Document", - "DocumentIndex": 244, - "Title": "ViewModel.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\ViewModel\\ViewModel.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:20.456Z" - }, - { - "$type": "Document", - "DocumentIndex": 162, - "Title": "ShaderStruct.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "ViewState": "AgIAABUAAAAAAAAAAAAYwCgAAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:17.716Z" - }, - { - "$type": "Document", - "DocumentIndex": 231, - "Title": "EBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\Buffer\\EBO.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:15.821Z" - }, - { - "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 90, "Title": "CollisionTexture.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\CollisionTexture.cs", "RelativeDocumentMoniker": "StgSharpDebug\\Stg\\CollisionTexture.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Stg\\CollisionTexture.cs", "RelativeToolTip": "StgSharpDebug\\Stg\\CollisionTexture.cs", - "ViewState": "AgIAABcAAAAAAAAAAIAwwHAAAAAMAAAAAAAAAA==", + "ViewState": "AgIAAJUAAAAAAAAAAIAywKYAAAArAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:12.581Z", + "WhenOpened": "2024-09-26T19:10:11.893Z", "EditorCaption": "" }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "NewRender.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\View\\NewRender.cs", + "ViewState": "AgIAAC8AAAAAAAAAAAAUwEAAAAAuAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T11:11:30.893Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "ViewRender.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewRender.cs", + "ViewState": "AgIAAH4AAAAAAAAAAAAAAGUAAAAqAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T10:59:33.901Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 94, + "Title": "EmptyThread.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Threading\\EmptyThread.cs", + "ViewState": "AgIAABMAAAAAAAAAAAAswBkAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T10:56:02.291Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 41, + "Title": "InternalIO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "RelativeToolTip": "StgSharpDebug\\Controlling\\IO\\InternalIO.cs", + "ViewState": "AgIAAEYAAAAAAAAAAAAxwFYAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-26T10:55:42.887Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 106, + "Title": "framework.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\framework.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", + "RelativeToolTip": "StgSharp\\Graphics\\framework.cs", + "ViewState": "AgIAAGoAAAAAAAAAAAAjwHUAAACTAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T20:26:14.747Z" + }, { "$type": "Document", "DocumentIndex": 107, + "Title": "framework.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\framework.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\framework.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\framework.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\framework.cs", + "ViewState": "AgIAAGoAAAAAAAAAAAAkwHUAAACVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T20:20:37.791Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 83, + "Title": "ViewPort.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewPort.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewPort.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewPort.cs", + "ViewState": "AgIAAD4AAAAAAAAAAAAlwEsAAAAYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T20:17:33.106Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 109, + "Title": "RBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ViewState": "AgIAADEAAAAAAAAAAAAswEYAAAANAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:41:04.007Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 110, + "Title": "glRenderStream.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", + "ViewState": "AgIAAHoAAAAAAAAAAAAwwJsAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:37:47.129Z" + }, + { + "$type": "Document", + "DocumentIndex": 112, + "Title": "VAO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ViewState": "AgIAACcAAAAAAAAAAEBBwDgAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:20.928Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 97, "Title": "Camera.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Graphic\\Camera.cs", "RelativeDocumentMoniker": "StgSharpDebug\\Math\\Graphic\\Camera.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Math\\Graphic\\Camera.cs", "RelativeToolTip": "StgSharpDebug\\Math\\Graphic\\Camera.cs", - "ViewState": "AgIAADkAAAAAAAAAAAAcwEUAAAAIAAAAAAAAAA==", + "ViewState": "AgIAAOkAAAAAAAAAAIAywPkAAAAOAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:11.807Z" + "WhenOpened": "2024-09-24T19:36:18.803Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 232, - "Title": "Shader.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\ShaderEdit\\Shader.cs", + "DocumentIndex": 113, + "Title": "FBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\Buffer\\FBO.cs", + "ViewState": "AgIAAEYAAAAAAAAAAIAzwFcAAAAbAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-28T00:00:06.545Z" + "WhenOpened": "2024-09-24T19:36:16.817Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 233, - "Title": "VBO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\Buffer\\VBO.cs", + "DocumentIndex": 87, + "Title": "glConst.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glConst.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Define\\glConst.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Define\\glConst.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\Define\\glConst.cs", + "ViewState": "AgIAACYAAAAAAAAAAAAewPgSAAAbAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T23:58:09.408Z" + "WhenOpened": "2024-09-24T19:36:12.868Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 234, + "DocumentIndex": 114, + "Title": "ShaderStruct.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\ShaderEdit\\ShaderStruct.cs", + "ViewState": "AgIAADgAAAAAAAAAAIAzwEkAAABGAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:36:09.259Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 80, + "Title": "glFunction.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", + "ViewState": "AgIAAMMAAAAAAAAAAAAnwNYAAAAhAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:33:36.487Z" + }, + { + "$type": "Document", + "DocumentIndex": 115, + "Title": "glFucntionSourceManager.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glFucntionSourceManager.cs", + "ViewState": "AgIAAC4AAAAAAAAAAAAmwCIAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-24T19:33:08.722Z" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "StgSharpDebug.csproj", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", + "RelativeDocumentMoniker": "StgSharpDebug\\StgSharpDebug.csproj", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\StgSharpDebug.csproj", + "RelativeToolTip": "StgSharpDebug\\StgSharpDebug.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2024-09-24T19:11:24.482Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 108, + "Title": "TimeSpanProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeSpanProvider.cs", + "ViewState": "AgIAAMQAAAAAAAAAAAAgwNQAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-23T05:38:37.835Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 82, + "Title": "glException.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glException.cs", + "ViewState": "AgIAABwAAAAAAAAAAAAvwC0AAAA0AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-23T05:34:20.734Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 116, + "Title": "TimeSpanAwaitingToken.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ViewState": "AgIAAGgAAAAAAAAAAIAywHYAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-22T09:24:10.041Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 91, + "Title": "ViewModel.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ViewModel.cs", + "ViewState": "AgIAANwAAAAAAAAAAAAhwOkAAAAOAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-22T09:19:39.434Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "ViewBase.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\View\\ViewBase.cs", + "ViewState": "AgIAAEMAAAAAAAAAAAAgwFIAAAA6AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-22T09:18:52.076Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 95, "Title": "glRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\GL\\glRenderStream.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glRenderStream.cs", + "ViewState": "AgIAAKEAAAAAAAAAAAAgwK4AAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T23:55:40.542Z" + "WhenOpened": "2024-09-12T12:26:52.516Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 146, - "Title": "Uniform.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", - "ViewState": "AgIAAJEAAAAAAAAAAAAUwCsAAAAFAAAAAAAAAA==", + "DocumentIndex": 85, + "Title": "RenderStream.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\RenderStream.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\RenderStream.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\RenderStream.cs", + "ViewState": "AgIAADQAAAAAAAAAAAAewEMAAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T17:58:58.669Z" + "WhenOpened": "2024-09-12T12:26:38.522Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 16, - "Title": "IGraphicAPIs.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\IGraphicAPIs.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\IGraphicAPIs.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\IGraphicAPIs.cs", - "RelativeToolTip": "StgSharp\\Graphics\\IGraphicAPIs.cs", - "ViewState": "AgIAABIAAAAAAAAAAAAAAAgAAAA2AAAAAAAAAA==", + "DocumentIndex": 10, + "Title": "ShowViewPort.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "RelativeToolTip": "StgSharpDebug\\MVVM\\ViewModel\\ShowViewPort.cs", + "ViewState": "AgIAAH0AAAAAAAAAAAAewIcAAAAYAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T17:54:48.427Z" + "WhenOpened": "2024-09-11T16:02:42.363Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 21, + "DocumentIndex": 81, + "Title": "glFunction.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "RelativeToolTip": "StgSharpDebug\\Graphics\\OpenGL\\glFunction.cs", + "ViewState": "AgIAAMgAAAAAAAAAAMBAwNgAAAAjAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:54:58.392Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 88, + "Title": "ViewMain.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\View\\ViewMain.cs", + "ViewState": "AgIAAFIAAAAAAAAAAAAzwFwAAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:55:14.844Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 118, + "Title": "ViewModelMain.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\ViewModelMain.cs", + "ViewState": "AgIAAC8AAAAAAAAAAAAcwEsAAAAYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T15:54:20.497Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 42, "Title": "Program.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\Program.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Demo\\Program.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Demo\\Program.cs", - "RelativeToolTip": "StgSharpDebug\\Demo\\Program.cs", - "ViewState": "AgIAAC4AAAAAAAAAAIA+wEAAAAAAAAAAAAAAAA==", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\Program.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\Program.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\Program.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\Program.cs", + "ViewState": "AgIAADMAAAAAAAAAAAAuwD8AAAAmAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-26T19:34:28.297Z" + "WhenOpened": "2024-09-11T15:53:17.351Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 56, - "Title": "BpNodeBuilder.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BpNodeBuilder.cs", - "ViewState": "AgIAAC8AAAAAAAAAAAAvwEIAAAAXAAAAAAAAAA==", + "DocumentIndex": 84, + "Title": "Partical.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "RelativeToolTip": "StgSharpDebug\\AlphaDemo\\RenderStream\\Partical.cs", + "ViewState": "AgIAAM8AAAAAAAAAAAAgwOAAAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-26T19:26:13.669Z" + "WhenOpened": "2024-09-11T15:49:43.304Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 69, - "Title": "IConvertableToBlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\IConvertableToBlueprintNode.cs", - "ViewState": "AgIAAA4AAAAAAAAAAAAYwCMAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-25T23:11:19.554Z" - }, - { - "$type": "Document", - "DocumentIndex": 70, - "Title": "BpNodeActionAttribute.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", - "ViewState": "AgIAAAkAAAAAAAAAAAAAACIAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-25T18:43:08.93Z" - }, - { - "$type": "Document", - "DocumentIndex": 163, - "Title": "glfw3.h", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", - "RelativeDocumentMoniker": "StgSharpC\\glfw3.h", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", - "RelativeToolTip": "StgSharpC\\glfw3.h", - "ViewState": "AgIAAAMRAAAAAAAAAAAqwBURAAAXAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-06-22T23:24:18.461Z" - }, - { - "$type": "Document", - "DocumentIndex": 248, - "Title": "CrossFrameBlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "RelativeToolTip": "StgSharpDebug\\Logic\\Blueprint\\CrossFrameBlueprintNode.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-17T18:41:24.48Z" - }, - { - "$type": "Document", - "DocumentIndex": 66, - "Title": "PipeLine.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\PipeLine.cs", - "ViewState": "AgIAAGMAAAAAAAAAAAAowCgAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T23:18:28.288Z" - }, - { - "$type": "Document", - "DocumentIndex": 102, - "Title": "InternalData.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\InternalData.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\InternalData.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\InternalData.cs", - "RelativeToolTip": "StgSharp\\Data\\InternalData.cs", - "ViewState": "AgIAAAAAAAAAAAAAAIBQwBUAAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:31:52.702Z" - }, - { - "$type": "Document", - "DocumentIndex": 74, - "Title": "GlobalSetting.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\GlobalSetting.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\GlobalSetting.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\GlobalSetting.cs", - "RelativeToolTip": "StgSharp\\Environment\\GlobalSetting.cs", - "ViewState": "AgIAADQAAAAAAAAAAAAvwEkAAAA2AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:30:52.772Z" - }, - { - "$type": "Document", - "DocumentIndex": 175, - "Title": "globalKeyStat.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\globalKeyStat.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\globalKeyStat.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\globalKeyStat.cs", - "RelativeToolTip": "StgSharp\\Environment\\globalKeyStat.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:30:52.177Z" - }, - { - "$type": "Document", - "DocumentIndex": 176, - "Title": "ErrorDefine.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\ErrorDefine.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\ErrorDefine.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\ErrorDefine.cs", - "RelativeToolTip": "StgSharp\\Environment\\ErrorDefine.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T20:30:51.103Z" - }, - { - "$type": "Document", - "DocumentIndex": 63, - "Title": "CancellableTask.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\CancellableTask.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\CancellableTask.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\CancellableTask.cs", - "RelativeToolTip": "StgSharp\\Logic\\CancellableTask.cs", - "ViewState": "AgIAACAAAAAAAAAAAAAYwCQAAAAdAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-16T19:05:18.993Z" - }, - { - "$type": "Document", - "DocumentIndex": 60, - "Title": "SizeFixedList.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "RelativeToolTip": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", - "ViewState": "AgIAAAUAAAAAAAAAAAAIwEQAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-15T10:12:43.359Z" - }, - { - "$type": "Document", - "DocumentIndex": 58, - "Title": "BlueprintRunner.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", - "ViewState": "AgIAAGQAAAAAAAAAAAAhwJEAAAAVAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-15T09:28:36.087Z" - }, - { - "$type": "Document", - "DocumentIndex": 64, - "Title": "BlueprintNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", - "ViewState": "AgIAAGAAAAAAAAAAAAA1wLgAAAAtAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-14T15:52:07.701Z" - }, - { - "$type": "Document", - "DocumentIndex": 68, - "Title": "SideNode.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", - "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\SideNode.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", - "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\SideNode.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAswCgAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-14T13:21:31.686Z" - }, - { - "$type": "Document", - "DocumentIndex": 165, + "DocumentIndex": 119, "Title": "Platform.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\Platform.cs", "RelativeDocumentMoniker": "StgSharp\\Environment\\Platform.cs", @@ -2880,31 +2086,285 @@ }, { "$type": "Document", - "DocumentIndex": 166, + "DocumentIndex": 123, "Title": "TimeProvider.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\TimeProvider.cs", - "RelativeDocumentMoniker": "StgSharp\\Environment\\TimeProvider.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Environment\\TimeProvider.cs", - "RelativeToolTip": "StgSharp\\Environment\\TimeProvider.cs", - "ViewState": "AgIAAG8AAAAAAAAAAAAWwHQAAAAJAAAAAAAAAA==", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeProvider.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeProvider.cs", + "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeProvider.cs", + "ViewState": "AgIAAHoAAAAAAAAAAAAQwIoAAAAjAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-12T18:36:15.947Z" + "WhenOpened": "2024-09-11T13:31:09.97Z" }, { "$type": "Document", - "DocumentIndex": 61, + "DocumentIndex": 117, + "Title": "TimeProvider.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "RelativeDocumentMoniker": "StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "RelativeToolTip": "StgSharpDebug\\Logic\\Timing\\TimeProvider.cs", + "ViewState": "AgIAAH4AAAAAAAAAAAD4v4oAAABAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-11T11:09:33.477Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 122, + "Title": "TimeSpanAwaitingToken.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeSpanAwaitingToken.cs", + "ViewState": "AgIAAGwAAAAAAAAAAAA0wHsAAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-04T22:11:44.057Z" + }, + { + "$type": "Document", + "DocumentIndex": 126, + "Title": "TriggetFactory.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\TriggetFactory.cs", + "ViewState": "AgIAAEoAAAAAAAAAAAAxwC0AAAA8AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-09-02T20:15:59.962Z" + }, + { + "$type": "Document", + "DocumentIndex": 131, + "Title": "TexturePipeline.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\TexturePipeline.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\TexturePipeline.cs", + "RelativeToolTip": "StgSharp\\Graphics\\TexturePipeline.cs", + "ViewState": "AgIAABUAAAAAAAAAAAAvwCgAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-26T03:29:30.925Z" + }, + { + "$type": "Document", + "DocumentIndex": 129, + "Title": "BidirectionalDictionary.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "RelativeToolTip": "StgSharp\\Logic\\Collections\\BidirectionalDictionary.cs", + "ViewState": "AgIAAEMAAAAAAAAAAIAzwFUAAAANAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-26T03:20:40.602Z" + }, + { + "$type": "Document", + "DocumentIndex": 140, + "Title": "BlueprintActionNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintActionNode.cs", + "ViewState": "AgIAABgAAAAAAAAAAIBQwCYAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-26T02:58:10.928Z" + }, + { + "$type": "Document", + "DocumentIndex": 128, + "Title": "AutoTexture.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\AutoTexture.cs", + "ViewState": "AgIAAGwAAAAAAAAAAAAiwH4AAAAQAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-08-25T21:16:55.239Z" + }, + { + "$type": "Document", + "DocumentIndex": 125, + "Title": "ViewResponder.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", + "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewResponder.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewResponder.cs", + "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewResponder.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAEwDUAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-24T14:44:59.912Z" + }, + { + "$type": "Document", + "DocumentIndex": 124, + "Title": "ViewRender.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", + "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewRender.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewRender.cs", + "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewRender.cs", + "ViewState": "AgIAABQAAAAAAAAAAAAgwCQAAAAhAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-24T14:44:50.254Z" + }, + { + "$type": "Document", + "DocumentIndex": 142, + "Title": "ViewDesigner.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", + "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewDesigner.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewDesigner.cs", + "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewDesigner.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAIYAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-24T14:42:19.45Z" + }, + { + "$type": "Document", + "DocumentIndex": 146, + "Title": "VBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VBO.cs", + "ViewState": "AgIAAIMAAAAAAAAAAAAowJIAAAAwAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-10T17:16:18.094Z" + }, + { + "$type": "Document", + "DocumentIndex": 147, + "Title": "VAO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\VAO.cs", + "ViewState": "AgIAADcAAAAAAAAAAAAUwEgAAAA1AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-10T17:15:13.91Z" + }, + { + "$type": "Document", + "DocumentIndex": 143, + "Title": "StgSharp.csproj", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", + "RelativeDocumentMoniker": "StgSharp\\StgSharp.csproj", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\StgSharp.csproj", + "RelativeToolTip": "StgSharp\\StgSharp.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2024-07-08T10:39:35.673Z" + }, + { + "$type": "Document", + "DocumentIndex": 148, + "Title": "RBO.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\RBO.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-07T17:45:11.682Z" + }, + { + "$type": "Document", + "DocumentIndex": 144, + "Title": "Uniform.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Uniform.cs", + "ViewState": "AgIAAJEAAAAAAAAAAAAUwCsAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-27T17:58:58.669Z" + }, + { + "$type": "Document", + "DocumentIndex": 139, + "Title": "BpNodeActionAttribute.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BpNodeActionAttribute.cs", + "ViewState": "AgIAAAYAAAAAAAAAAIBQwCIAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-25T18:43:08.93Z" + }, + { + "$type": "Document", + "DocumentIndex": 18, + "Title": "glfw3.h", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", + "RelativeDocumentMoniker": "StgSharpC\\glfw3.h", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\glfw3.h", + "RelativeToolTip": "StgSharpC\\glfw3.h", + "ViewState": "AgIAABUAAAAAAAAAAAAAAFELAAALAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-06-22T23:24:18.461Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 133, + "Title": "SizeFixedList.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "RelativeToolTip": "StgSharp\\Logic\\Collections\\SizeFixedList.cs", + "ViewState": "AgIAAAUAAAAAAAAAAAAIwEQAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-15T10:12:43.359Z" + }, + { + "$type": "Document", + "DocumentIndex": 132, + "Title": "BlueprintRunner.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintRunner.cs", + "ViewState": "AgIAAGQAAAAAAAAAAAAhwJEAAAAVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-15T09:28:36.087Z" + }, + { + "$type": "Document", + "DocumentIndex": 135, + "Title": "BlueprintNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\BlueprintNode.cs", + "ViewState": "AgIAAGAAAAAAAAAAAAA1wLgAAAAtAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-14T15:52:07.701Z" + }, + { + "$type": "Document", + "DocumentIndex": 138, + "Title": "SideNode.cs", + "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", + "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\SideNode.cs", + "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\SideNode.cs", + "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\SideNode.cs", + "ViewState": "AgIAAAsAAAAAAAAAAAAswCgAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-14T13:21:31.686Z" + }, + { + "$type": "Document", + "DocumentIndex": 121, "Title": "TimeSpanProvider.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeSpanProvider.cs", - "ViewState": "AgIAAA8AAAAAAAAAAADwvyQAAAAZAAAAAAAAAA==", + "ViewState": "AgIAALsAAAAAAAAAAAAAAMIAAAAQAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-12T18:36:02.299Z" }, { "$type": "Document", - "DocumentIndex": 67, + "DocumentIndex": 137, "Title": "RouteSwitch.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\RouteSwitch.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\RouteSwitch.cs", @@ -2916,7 +2376,7 @@ }, { "$type": "Document", - "DocumentIndex": 168, + "DocumentIndex": 153, "Title": "Area.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\Area.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\Area.cs", @@ -2928,7 +2388,7 @@ }, { "$type": "Document", - "DocumentIndex": 172, + "DocumentIndex": 155, "Title": "SSD.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\SSD.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\SSD.cs", @@ -2940,7 +2400,7 @@ }, { "$type": "Document", - "DocumentIndex": 171, + "DocumentIndex": 154, "Title": "SSDVirtualFolder.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\SSDVirtualFolder.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\SSDVirtualFolder.cs", @@ -2952,19 +2412,7 @@ }, { "$type": "Document", - "DocumentIndex": 26, - "Title": "Image.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Image.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Image.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Image.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Image.cs", - "ViewState": "AgIAADAAAAAAAAAAAAAWwEIAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-09T13:44:55.317Z" - }, - { - "$type": "Document", - "DocumentIndex": 188, + "DocumentIndex": 159, "Title": "TouhouBuilder.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Touhou\\TouhouBuilder.cs", "RelativeDocumentMoniker": "StgSharp\\Stg\\Touhou\\TouhouBuilder.cs", @@ -2976,7 +2424,7 @@ }, { "$type": "Document", - "DocumentIndex": 101, + "DocumentIndex": 141, "Title": "TouhouWindow.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Touhou\\TouhouWindow.cs", "RelativeDocumentMoniker": "StgSharp\\Stg\\Touhou\\TouhouWindow.cs", @@ -2988,7 +2436,7 @@ }, { "$type": "Document", - "DocumentIndex": 189, + "DocumentIndex": 160, "Title": "Program.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgsharpEnvDebug\\Program.cs", "RelativeDocumentMoniker": "StgsharpEnvDebug\\Program.cs", @@ -3000,7 +2448,7 @@ }, { "$type": "Document", - "DocumentIndex": 17, + "DocumentIndex": 127, "Title": "ViewManage.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ViewManage.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\ViewManage.cs", @@ -3012,58 +2460,43 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 120, "Title": "ShowViewPort.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\ShowViewPort.cs", - "ViewState": "AgIAACMAAAAAAAAAAIAxwDEAAAAAAAAAAAAAAA==", + "ViewState": "AgIAAE0AAAAAAAAAAAAwwFsAAAAlAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-06T07:49:36.575Z", - "EditorCaption": "" + "WhenOpened": "2024-06-06T07:49:36.575Z" }, { "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 105, "Title": "ViewPort.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewPort.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewPort.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewPort.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewPort.cs", - "ViewState": "AgIAAHQAAAAAAAAAAIA/wIsAAAAAAAAAAAAAAA==", + "ViewState": "AgIAAHwAAAAAAAAAAAApwIkAAAA5AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-06T06:43:01.237Z", - "EditorCaption": "" + "WhenOpened": "2024-06-06T06:43:01.237Z" }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 102, "Title": "ViewModel.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ViewModel.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\ViewModel\\ViewModel.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\ViewModel\\ViewModel.cs", "RelativeToolTip": "StgSharp\\MVVM\\ViewModel\\ViewModel.cs", - "ViewState": "AgIAABEBAAAAAAAAAAAywBYBAAAAAAAAAAAAAA==", + "ViewState": "AgIAAEAAAAAAAAAAAAAnwE8AAAAfAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-05T19:19:57.97Z", - "EditorCaption": "" + "WhenOpened": "2024-06-05T19:19:57.97Z" }, { "$type": "Document", - "DocumentIndex": 195, - "Title": "Cordinate.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Cordinate.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-04T09:20:55.089Z" - }, - { - "$type": "Document", - "DocumentIndex": 196, + "DocumentIndex": 163, "Title": "Square.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Square.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Square.cs", @@ -3075,7 +2508,7 @@ }, { "$type": "Document", - "DocumentIndex": 193, + "DocumentIndex": 162, "Title": "Rectangle.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Rectangle.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Rectangle.cs", @@ -3087,7 +2520,7 @@ }, { "$type": "Document", - "DocumentIndex": 157, + "DocumentIndex": 149, "Title": "Triangle.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Triangle.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Triangle.cs", @@ -3099,19 +2532,7 @@ }, { "$type": "Document", - "DocumentIndex": 194, - "Title": "Parallelogram.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Parallelogram.cs", - "ViewState": "AgIAACAAAAAAAAAAAAAtwD8AAAAGAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-03T18:45:48.87Z" - }, - { - "$type": "Document", - "DocumentIndex": 160, + "DocumentIndex": 152, "Title": "Polygon5.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Polygon5.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Polygon5.cs", @@ -3123,7 +2544,7 @@ }, { "$type": "Document", - "DocumentIndex": 158, + "DocumentIndex": 150, "Title": "Polygon6.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Polygon6.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Polygon6.cs", @@ -3135,31 +2556,19 @@ }, { "$type": "Document", - "DocumentIndex": 200, - "Title": "Class1.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "RelativeToolTip": "StgSharp\\Geometries\\SpaceGeometry\\Class1.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-03T08:05:08.74Z" - }, - { - "$type": "Document", - "DocumentIndex": 199, + "DocumentIndex": 165, "Title": "SpaceCoordinate.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", "RelativeToolTip": "StgSharp\\Geometries\\Coordination\\SpaceCoordinate.cs", - "ViewState": "AgIAAA8AAAAAAAAAAIBgwCoAAAAxAAAAAAAAAA==", + "ViewState": "AgIAAAwAAAAAAAAAAMBowCoAAAAxAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-03T08:04:00.326Z" }, { "$type": "Document", - "DocumentIndex": 159, + "DocumentIndex": 151, "Title": "Polygon4.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Polygon4.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Polygon4.cs", @@ -3171,19 +2580,7 @@ }, { "$type": "Document", - "DocumentIndex": 204, - "Title": "Cordination.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Cordination.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Cordination.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Cordination.cs", - "RelativeToolTip": "StgSharp\\Math\\Linear\\Cordination.cs", - "ViewState": "AgIAAAYAAAAAAAAAAIBgwB8AAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-03T07:16:53.497Z" - }, - { - "$type": "Document", - "DocumentIndex": 198, + "DocumentIndex": 164, "Title": "Point.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Point.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\Point.cs", @@ -3195,91 +2592,19 @@ }, { "$type": "Document", - "DocumentIndex": 205, + "DocumentIndex": 166, "Title": "Vector.Cross.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Cross.cs", "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vector.Cross.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Cross.cs", "RelativeToolTip": "StgSharp\\Math\\Linear\\Vector.Cross.cs", - "ViewState": "AgIAABIAAAAAAAAAAIBgwB8AAAABAAAAAAAAAA==", + "ViewState": "AgIAAA8AAAAAAAAAAMBowB8AAAABAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-02T18:55:17.351Z" }, { "$type": "Document", - "DocumentIndex": 191, - "Title": "IGeometry.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IGeometry.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\IGeometry.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IGeometry.cs", - "RelativeToolTip": "StgSharp\\Geometries\\IGeometry.cs", - "ViewState": "AgIAAB8AAAAAAAAAAAAiwDMAAAAeAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T18:32:52.786Z" - }, - { - "$type": "Document", - "DocumentIndex": 211, - "Title": "JoystickTrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\JoystickTrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACsAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T17:59:29.232Z" - }, - { - "$type": "Document", - "DocumentIndex": 212, - "Title": "ITrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\ITrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAiAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T17:56:15.991Z" - }, - { - "$type": "Document", - "DocumentIndex": 177, - "Title": "KeyTrigger.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "RelativeToolTip": "StgSharp\\Controlling\\UsrActivity\\KeyTrigger.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAmAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-02T17:48:14.248Z" - }, - { - "$type": "Document", - "DocumentIndex": 46, - "Title": "MarkingLable.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\MarkingLable.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAvwDAAAAAUAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-01T19:38:52.786Z" - }, - { - "$type": "Document", - "DocumentIndex": 180, - "Title": "DecorationBox.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\DecorationBox.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAqAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-01T19:38:36.894Z" - }, - { - "$type": "Document", - "DocumentIndex": 182, + "DocumentIndex": 158, "Title": "BattleField.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\BattleField.cs", "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\BattleField.cs", @@ -3291,78 +2616,7 @@ }, { "$type": "Document", - "DocumentIndex": 224, - "Title": "KeyEvent.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEvent.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\KeyEvent.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\KeyEvent.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\KeyEvent.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-31T17:44:19.826Z" - }, - { - "$type": "Document", - "DocumentIndex": 181, - "Title": "CharacterIndexImage.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\CharacterIndexImage.cs", - "ViewState": "AgIAAB8AAAAAAAAAAADgvzMAAAAmAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-31T07:27:57.971Z" - }, - { - "$type": "Document", - "DocumentIndex": 187, - "Title": "KeyControl.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\KeyControl.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\KeyControl.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\KeyControl.cs", - "RelativeToolTip": "StgSharp\\Controlling\\KeyControl.cs", - "ViewState": "AgIAAFMAAAAAAAAAAAAtwHIAAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-30T03:47:10.188Z" - }, - { - "$type": "Document", - "DocumentIndex": 131, - "Title": "ButtonGroup.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\ButtonGroup.cs", - "ViewState": "AgIAAHwAAAAAAAAAAAAqwJAAAAAUAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-30T03:07:38.817Z" - }, - { - "$type": "Document", - "DocumentIndex": 178, - "Title": "PlainGeometryMesh.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\PlainGeometryMesh.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\PlainGeometryMesh.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\PlainGeometryMesh.cs", - "RelativeToolTip": "StgSharp\\Graphics\\PlainGeometryMesh.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACoAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T18:54:22.53Z" - }, - { - "$type": "Document", - "DocumentIndex": 183, - "Title": "ControllingIntem.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "RelativeToolTip": "StgSharp\\Controlling\\Controls\\ControllingIntem.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwBgAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T18:52:06.895Z" - }, - { - "$type": "Document", - "DocumentIndex": 179, + "DocumentIndex": 157, "Title": "TriggerButton.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\Controls\\TriggerButton.cs", "RelativeDocumentMoniker": "StgSharp\\Controlling\\Controls\\TriggerButton.cs", @@ -3374,54 +2628,7 @@ }, { "$type": "Document", - "DocumentIndex": 225, - "Title": "KeyboardButton.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "RelativeToolTip": "StgSharpDebug\\Controlling\\Controls\\KeyboardButton.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T18:45:36.72Z" - }, - { - "$type": "Document", - "DocumentIndex": 208, - "Title": "Plain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Plain.cs", - "ViewState": "AgIAADwAAAAAAAAAAAAUwEsAAAAfAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T03:14:59.807Z" - }, - { - "$type": "Document", - "DocumentIndex": 209, - "Title": "IEntity.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Entities\\IEntity.cs", - "RelativeDocumentMoniker": "StgSharp\\Entities\\IEntity.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Entities\\IEntity.cs", - "RelativeToolTip": "StgSharp\\Entities\\IEntity.cs", - "ViewState": "AgIAACIAAAAAAAAAAAAywDkAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T03:13:32.629Z" - }, - { - "$type": "Document", - "DocumentIndex": 167, - "Title": "DataSegment.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\DataSegment.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\DataSegment.cs", - "RelativeToolTip": "StgSharp\\Data\\SSD\\DataSegment.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAC4AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T03:13:13.688Z" - }, - { - "$type": "Document", - "DocumentIndex": 173, + "DocumentIndex": 156, "Title": "SSDraw.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\SSD\\SSDraw.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\SSD\\SSDraw.cs", @@ -3433,42 +2640,19 @@ }, { "$type": "Document", - "DocumentIndex": 222, - "Title": "Angle.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\GeometryOperation\\Angle.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-29T02:36:43.754Z" - }, - { - "$type": "Document", - "DocumentIndex": 164, - "Title": "framework.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\framework.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\framework.cs", - "RelativeToolTip": "StgSharp\\Graphics\\framework.cs", - "ViewState": "AgIAAB4BAAAAAAAAAAAYwC8AAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:14:37.475Z" - }, - { - "$type": "Document", - "DocumentIndex": 49, + "DocumentIndex": 130, "Title": "TimeFunction.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeFunction.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeFunction.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeFunction.cs", "RelativeToolTip": "StgSharp\\Logic\\Timing\\TimeFunction.cs", - "ViewState": "AgIAAAkAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAA==", + "ViewState": "AgIAAAYAAAAAAAAAAIBQwB4AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T12:14:28.529Z" }, { "$type": "Document", - "DocumentIndex": 62, + "DocumentIndex": 134, "Title": "TimeSourceProvider.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Timing\\TimeSourceProvider.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Timing\\TimeSourceProvider.cs", @@ -3480,7 +2664,7 @@ }, { "$type": "Document", - "DocumentIndex": 206, + "DocumentIndex": 167, "Title": "Vector.Normalize.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Normalize.cs", "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vector.Normalize.cs", @@ -3492,55 +2676,19 @@ }, { "$type": "Document", - "DocumentIndex": 184, - "Title": "ParticleOnPlain.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\ParticleOnPlain.cs", - "ViewState": "AgIAADkAAAAAAAAAAAAwwCoAAAApAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:13:03.322Z" - }, - { - "$type": "Document", - "DocumentIndex": 214, - "Title": "IInstancingBuffer.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancingBuffer.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\IInstancingBuffer.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancingBuffer.cs", - "RelativeToolTip": "StgSharp\\Geometries\\IInstancingBuffer.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAmAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:12:51.691Z" - }, - { - "$type": "Document", - "DocumentIndex": 185, - "Title": "IInstancing.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancing.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\IInstancing.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\IInstancing.cs", - "RelativeToolTip": "StgSharp\\Geometries\\IInstancing.cs", - "ViewState": "AgIAACkAAAAAAAAAAAAtwDYAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T12:12:47.113Z" - }, - { - "$type": "Document", - "DocumentIndex": 145, + "DocumentIndex": 111, "Title": "ShaderStruct.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", "RelativeToolTip": "StgSharp\\Graphics\\ShaderEdit\\ShaderStruct.cs", - "ViewState": "AgIAAAMAAAAAAAAAAIBgwCsAAAApAAAAAAAAAA==", + "ViewState": "AgIAADkAAAAAAAAAAAApwEkAAAA/AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T12:06:38.571Z" }, { "$type": "Document", - "DocumentIndex": 215, + "DocumentIndex": 169, "Title": "ShaderGenerator.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\ShaderEdit\\ShaderGenerator.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\ShaderEdit\\ShaderGenerator.cs", @@ -3552,141 +2700,56 @@ }, { "$type": "Document", - "DocumentIndex": 216, - "Title": "GLIO.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\GLIO.cs", - "RelativeDocumentMoniker": "StgSharp\\Controlling\\IO\\GLIO.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Controlling\\IO\\GLIO.cs", - "RelativeToolTip": "StgSharp\\Controlling\\IO\\GLIO.cs", - "ViewState": "AgIAAEUAAAAAAAAAAAAcwCoAAAAIAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:53:35.017Z" - }, - { - "$type": "Document", - "DocumentIndex": 77, + "DocumentIndex": 65, "Title": "TextureGL.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\Buffer\\TextureGL.cs", - "ViewState": "AgIAACoAAAAAAAAAAIBQwDsAAAAAAAAAAAAAAA==", + "ViewState": "AgIAABEAAAAAAAAAAAAUwB8AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:52:02.572Z", - "EditorCaption": "" + "WhenOpened": "2024-05-28T09:52:02.572Z" }, { "$type": "Document", - "DocumentIndex": 135, - "Title": "glEnum.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glEnum.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\Define\\glEnum.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\Define\\glEnum.cs", - "RelativeToolTip": "StgSharp\\Graphics\\Define\\glEnum.cs", - "ViewState": "AgIAACUAAAAAAAAAAAAqwD0AAABLAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:51:55.169Z" - }, - { - "$type": "Document", - "DocumentIndex": 217, + "DocumentIndex": 170, "Title": "Angle.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryScaler\\Angle.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\GeometryScaler\\Angle.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryScaler\\Angle.cs", "RelativeToolTip": "StgSharp\\Geometries\\GeometryScaler\\Angle.cs", - "ViewState": "AgIAAHEAAAAAAAAAAEBAwH8AAAAJAAAAAAAAAA==", + "ViewState": "AgIAAHIAAAAAAAAAAAAlwH8AAAAJAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-28T09:50:33.189Z" }, { "$type": "Document", - "DocumentIndex": 78, - "Title": "CollisionTexture.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", - "RelativeDocumentMoniker": "StgSharp\\Stg\\CollisionTexture.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\CollisionTexture.cs", - "RelativeToolTip": "StgSharp\\Stg\\CollisionTexture.cs", - "ViewState": "AgIAAIkAAAAAAAAAAAAhwKkAAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-28T09:47:06.034Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 169, - "Title": "ISSDSerializable.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "RelativeToolTip": "StgSharp\\Data\\Serialize\\ISSDSerializable.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAkAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-14T02:11:24.157Z" - }, - { - "$type": "Document", - "DocumentIndex": 170, - "Title": "Define.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\Define.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\Serialize\\Define.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\Serialize\\Define.cs", - "RelativeToolTip": "StgSharp\\Data\\Serialize\\Define.cs", - "ViewState": "AgIAAA8AAAAAAAAAAMBowAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-14T02:11:21.58Z" - }, - { - "$type": "Document", - "DocumentIndex": 218, - "Title": "M128.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\M128.cs", - "RelativeDocumentMoniker": "StgSharp\\Data\\M128.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\M128.cs", - "RelativeToolTip": "StgSharp\\Data\\M128.cs", - "ViewState": "AgIAACcAAAAAAAAAAIBgwD0AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-14T02:06:36.634Z" - }, - { - "$type": "Document", - "DocumentIndex": 174, + "DocumentIndex": 68, "Title": "RandomGenerator.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\RandomGenerator.cs", "RelativeDocumentMoniker": "StgSharp\\Data\\RandomGenerator.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Data\\RandomGenerator.cs", "RelativeToolTip": "StgSharp\\Data\\RandomGenerator.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABgAAAAMAAAAAAAAAA==", + "ViewState": "AgIAAKAAAAAAAAAAAAAUwK4AAAAiAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-14T01:44:33.9Z" }, { "$type": "Document", - "DocumentIndex": 213, + "DocumentIndex": 17, "Title": "StgSharpC.h", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h", "RelativeDocumentMoniker": "StgSharpC\\StgSharpC.h", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.h", "RelativeToolTip": "StgSharpC\\StgSharpC.h", - "ViewState": "AgIAABgAAAAAAAAAAIAwwCgAAAAoAAAAAAAAAA==", + "ViewState": "AgIAAA8AAAAAAAAAAAAAABYAAAAkAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-05-11T21:42:41.09Z" + "WhenOpened": "2024-05-11T21:42:41.09Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 134, - "Title": "glFunction.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glFunction.cs", - "ViewState": "AgIAAPsAAAAAAAAAAABCwA4BAAArAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-11T21:22:23.016Z" - }, - { - "$type": "Document", - "DocumentIndex": 147, + "DocumentIndex": 145, "Title": "Shader.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", @@ -3694,123 +2757,47 @@ "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\ShaderEdit\\Shader.cs", "ViewState": "AgIAALwAAAAAAAAAAAAcwN4AAAAcAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-11T19:37:12.456Z", - "EditorCaption": "" + "WhenOpened": "2024-05-11T19:37:12.456Z" }, { "$type": "Document", - "DocumentIndex": 65, + "DocumentIndex": 136, "Title": "Blueprint.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\Blueprint.cs", "RelativeDocumentMoniker": "StgSharp\\Logic\\Blueprint\\Blueprint.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Logic\\Blueprint\\Blueprint.cs", "RelativeToolTip": "StgSharp\\Logic\\Blueprint\\Blueprint.cs", - "ViewState": "AgIAADQAAAAAAAAAAAAYwDQAAAAeAAAAAAAAAA==", + "ViewState": "AgIAADQAAAAAAAAAAAA1wDQAAAAeAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-11T15:59:06.55Z" }, { "$type": "Document", - "DocumentIndex": 15, + "DocumentIndex": 103, "Title": "ViewBase.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewBase.cs", "RelativeDocumentMoniker": "StgSharp\\MVVM\\View\\ViewBase.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\MVVM\\View\\ViewBase.cs", "RelativeToolTip": "StgSharp\\MVVM\\View\\ViewBase.cs", - "ViewState": "AgIAALAAAAAAAAAAAAAWwMMAAAApAAAAAAAAAA==", + "ViewState": "AgIAAFoAAAAAAAAAAEBBwGgAAAATAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-11T05:11:47.098Z" }, { "$type": "Document", - "DocumentIndex": 219, - "Title": "GeometryOperation.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\GeometryOperation.cs", - "ViewState": "AgIAABUAAAAAAAAAAIA0wCUAAAAfAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-10T04:35:10.414Z" - }, - { - "$type": "Document", - "DocumentIndex": 50, - "Title": "GeometryOperation.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "RelativeToolTip": "StgSharp\\Geometries\\GeometryOperation\\GeometryOperation.cs", - "ViewState": "AgIAAAYAAAAAAAAAAAAhwD8AAAAzAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-10T04:34:22.843Z" - }, - { - "$type": "Document", - "DocumentIndex": 192, - "Title": "PlainGeometry.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainGeometry.cs", - "ViewState": "AgIAACUAAAAAAAAAAAAtwDoAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T11:36:04.039Z" - }, - { - "$type": "Document", - "DocumentIndex": 186, - "Title": "IPlainEntity.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\IPlainEntity.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwBMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T11:36:00.584Z" - }, - { - "$type": "Document", - "DocumentIndex": 155, - "Title": "glResourceGenrator.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glResourceGenrator.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAACcAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T09:44:36.325Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 52, - "Title": "glRenderStream.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeDocumentMoniker": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "RelativeToolTip": "StgSharp\\Graphics\\OpenGL\\glRenderStream.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAvwCQAAAAYAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T09:42:14.767Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 101, "Title": "RenderStream.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\RenderStream.cs", "RelativeDocumentMoniker": "StgSharp\\Graphics\\RenderStream.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Graphics\\RenderStream.cs", "RelativeToolTip": "StgSharp\\Graphics\\RenderStream.cs", - "ViewState": "AgIAACcAAAAAAAAAAAAAANoAAAAAAAAAAAAAAA==", + "ViewState": "AgIAADcAAAAAAAAAAIAzwEcAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T09:42:08.831Z", - "EditorCaption": "" + "WhenOpened": "2024-05-09T09:42:08.831Z" }, { "$type": "Document", - "DocumentIndex": 210, + "DocumentIndex": 168, "Title": "StreamLocalCoordinate.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\StreamLocalCoordinate.cs", "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\StreamLocalCoordinate.cs", @@ -3822,125 +2809,32 @@ }, { "$type": "Document", - "DocumentIndex": 221, - "Title": "vec3d.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec3d.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\vec3d.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec3d.cs", - "RelativeToolTip": "StgSharp\\Math\\Linear\\vec3d.cs", - "ViewState": "AgIAACwAAAAAAAAAAAAjwD4AAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:42:19.181Z" - }, - { - "$type": "Document", - "DocumentIndex": 203, - "Title": "vec4d.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec4d.cs", - "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\vec4d.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\vec4d.cs", - "RelativeToolTip": "StgSharp\\Math\\Linear\\vec4d.cs", - "ViewState": "AgIAAEcAAAAAAAAAAAAAwFcAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:40:47.919Z" - }, - { - "$type": "Document", - "DocumentIndex": 207, + "DocumentIndex": 59, "Title": "Vector.Orthogonalize.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", "RelativeDocumentMoniker": "StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", "RelativeToolTip": "StgSharp\\Math\\Linear\\Vector.Orthogonalize.cs", - "ViewState": "AgIAACcAAAAAAAAAAAAtwDEAAAArAAAAAAAAAA==", + "ViewState": "AgIAABkAAAAAAAAAAAAiwB4AAAAUAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-09T03:35:41.246Z" }, { "$type": "Document", - "DocumentIndex": 201, - "Title": "CoordinationBase.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "RelativeToolTip": "StgSharp\\Geometries\\Coordination\\CoordinationBase.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAuwAsAAAAFAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:32:12.398Z" - }, - { - "$type": "Document", - "DocumentIndex": 197, - "Title": "PlainCoordinate.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "RelativeToolTip": "StgSharp\\Geometries\\Coordination\\PlainCoordinate.cs", - "ViewState": "AgIAACMAAAAAAAAAAAAiwD8AAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:29:20.299Z" - }, - { - "$type": "Document", - "DocumentIndex": 202, - "Title": "PlainInstancingBuffer.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "RelativeDocumentMoniker": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "RelativeToolTip": "StgSharp\\Geometries\\PlainGeometry\\Define\\PlainInstancingBuffer.cs", - "ViewState": "AgIAAB4AAAAAAAAAAIBgwFYAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:28:11.182Z" - }, - { - "$type": "Document", - "DocumentIndex": 220, - "Title": "Bullet.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Bullet.cs", - "RelativeDocumentMoniker": "StgSharp\\Stg\\Bullet.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharp\\Stg\\Bullet.cs", - "RelativeToolTip": "StgSharp\\Stg\\Bullet.cs", - "ViewState": "AgIAAFkAAAAAAAAAAIA1wDUAAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-09T03:22:55.279Z" - }, - { - "$type": "Document", - "DocumentIndex": 223, - "Title": "IInstancing.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\PlainGeometry\\Define\\IInstancing.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-08T17:39:31.95Z" - }, - { - "$type": "Document", - "DocumentIndex": 137, + "DocumentIndex": 23, "Title": "StgSharpC.c", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c", "RelativeDocumentMoniker": "StgSharpC\\StgSharpC.c", "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpC\\StgSharpC.c", "RelativeToolTip": "StgSharpC\\StgSharpC.c", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA3AAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAaAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", - "WhenOpened": "2024-05-04T08:32:40.265Z" + "WhenOpened": "2024-05-04T08:32:40.265Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 227, - "Title": "ShowForm.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Form\\ShowForm.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-05-01T20:46:20.87Z" - }, - { - "$type": "Document", - "DocumentIndex": 190, + "DocumentIndex": 161, "Title": "MainForm.cs", "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\OEM\\MainForm.cs", "RelativeDocumentMoniker": "OEM\\MainForm.cs", @@ -3949,39 +2843,6 @@ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-04-26T21:06:53.667Z" - }, - { - "$type": "Document", - "DocumentIndex": 228, - "Title": "FormThreading.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Form\\FormThreading.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-25T19:29:47.069Z" - }, - { - "$type": "Document", - "DocumentIndex": 226, - "Title": "ICoord.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "RelativeToolTip": "StgSharpDebug\\Geometries\\Coordination\\ICoord.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-25T01:07:46.041Z" - }, - { - "$type": "Document", - "DocumentIndex": 229, - "Title": "Form.cs", - "DocumentMoniker": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\Form.cs", - "RelativeDocumentMoniker": "StgSharpDebug\\Graphics\\Form\\Form.cs", - "ToolTip": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u6E90\u4EE3\u7801\\StgSharpDebug\\Graphics\\Form\\Form.cs", - "RelativeToolTip": "StgSharpDebug\\Graphics\\Form\\Form.cs", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T09:01:45.978Z" } ] } diff --git a/源代码/.vs/StgSharpDevelop/v17/HierarchyCache.v1.txt b/源代码/.vs/StgSharpDevelop/v17/HierarchyCache.v1.txt index 7dbca70ffa663634417bde933a74b9771626e2d6..ac4d0de4ea944a96c7b6ebdf3b6d44855005ce2c 100644 GIT binary patch delta 1956 zcmaJ>drVVT7|(a1FDPPBCQcR$F$U;bTW(8x9obeW#w;99HgHLEiJe$`|F?#utj9 zkg{1&WT#H{tl3J_=ziEh*%&mlivYCER)Vx`hIE@%QdR~7t{~PZp#$A+(Fm8LKyEs||`V_`!O}d$h8$nF;m>pw`*{PXg$!;`4geS&SW+tIBTjDCZIH59| zND-1VjYh*(iZP;@ZF8hgWgCs}=0hPG=zJO7S|_5P!-eSKh8(oCeHmJ^K1{G&G~C{c zKIxi{j&x{Zn}vZ+3MTAypoY$DVaa+OpracK@Qqo-@7|_W(hlL_hG9UL10J(2Xq%q;40aFcwqtsMe&7 z84bMkLJC6?RJP3!p6L2UfnOSiZ-w7>&{V2}^96_|jH74Zu(0i`&p~)F7^R>bJ-D=y z{0o`*XB7G=S%sf>^JqnHvv6eB2TFl^XaV8%{dJVE`_X)v!b#YGzY6E2!CqxuV?4xX z(%?XLA_@f>gHF!J`dJqj6u(S`g&=o%=d=D=%oG*(RLzI%43mVxO}h_rq%^nAGazH^i(zZo#g>P&%MD* zna7C`A)IjnFKUI3+*loMzpEyx9p8eYr`F+XSs;HZUhe;FL(Pv=|C#03p)XXTVG_Jb z$zrK`a5KKv3JPT+G3pk=u_W?%5**RM9#t|SF3p17Mai(n$@-m~*UK*Vay%RIj5Vji z*T6SbOP2WhbZCiXn3Bj)!%1w+0pFgTaMGUV|LYU-&ma)c$x-!#JAUy`=z$8 zV%E4CV>!$My!;i2F34z-z;xe4G^Lwn7bvKW4#VN>#kW$Tskm;i^?z#Ybgl*>tr@IIz6w*xz2D~V8 za}93RK{o0UTJi0j0i(gA7>=7E5h#g;FgDG={ipvSs@N2;*iez9_!=-L1|_*#~d=^V!keh<2ys-4wK)LGyO3rR>d cq(%GPQ2)Ki$-BJ+Kb_h}Gf&c&j delta 1103 zcmX|9ZERCz6wbMADf?h`z?P8_9b_Rh+ueGr+*Q z6;-#&dKH0ZWpi$;A}PGg$-Qez8ymByCNW{-=(DyL_Tk?H4K|e%urJ-{xL;5?H`b+^ z8IHsD@qEMW!HKhtr540n`LlP2>*fhMldL{FY3D@B?tTQtjx3pcp1K3@i=!Lx++d{zVfNtDv@6|OfN?za6n3SnNk;@4ueW<<*^!E8m_}v z4sE4(9`XWtG6GHJMAdTFi@V;~SXh+gE+&-tyj8_*87wgkDx8%I1!!RQ zN{QVcOg>M7lh9AU{%Hhg<%t=_m}`gs>~!^Yhm%g^T7c>|%Yc0FGn}EBKSXf)67i&- zh>;l`-o%eH{bW}hs;Kc-CsTw_n>v8kZ@ZkK!YEEGVX>y$Zrj(=*5luRJrE1_;LKvb zF>ixjCvlZRIr*myhDgRys49(9<U$2S7JAO^@RI^!xSQi5K-yI1-NQ!DK>j4s}~Ajl>=c7XW`S9*kHP zOu@B`9>yQ0#$5U`xYq*1y3sDcC5CRi(!o&QLLK1f+%Wz!zn)xu5C-wad=DqTKq6-H@we)VJ98e;9i@mh~!oTstN1{ulZUzKSeR-c0)x8IdKhI&Cl`}-|vCd z<&MYoXe4im%=JJGM9Hll7=x%G^uSk)F}oi&Z#Hh$Lsx~dLjn6b8v6DOL%Y87gOMGD z+57O{w|=D+?{GjD-o3|$k7jF;T&y6|r=b_!Svwxf)voGJ>fzvCT>Nc>_Wr&JaN*Aj vWcU#{ZhZa(>|3?L8|{qh;ZQP~hzDbB(NMCkfotZQ-FI6D=Clq|T2uNznsT7{ diff --git a/源代码/.vs/StgSharpDevelop/v17/Solution.VC.db b/源代码/.vs/StgSharpDevelop/v17/Solution.VC.db index 097bd967d570e9e358696187e4b5e0079b9a16ce..76ff64d3244ea18bf38c1b1ba0364a5fb46d4ca0 100644 GIT binary patch delta 59038 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 T1<+Zj33L*|0_Z4cp~K$*$)}^- delta 53927 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

qHd0;mbit7k{7oPL-;uVuQ|Yc=IY}A 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≤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 >o#@V%P2 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ǵ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℞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

U&_hR#oNiH+oCt|AShVgB4Rb|eO;&v%GK` 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 delta 3429 zcmcInYitx%6wVo>K-;a9(#O(5w_#(qQl`6o&|+z1+0t72TG>ib7Rz+z7KYBw9cJ#v zwh;?NqY20(lXx*;kQhZV(U?t~zw!qqB9Fhu2ZpFW)x=05G4akm=yqA!-5597$=q}A z`OfRR_nx_SujrF|MeyQhaG?+`m=_C=xCWyNk%NjrCa@mi1A-=u%Zf~7Wbm4fH6!+J z;gu!ujCs4b$_&md-4Gs>MI9S>g7AJ-(y=V@A!(8yl~oD9WQ1E5mfJ7tydzf;QX$76pR!=Tmq?dEkZTuoAwl%oOZS!ERX$wuQO5xy|@ZbJmo=eng@e| z7!Zh{OdBLW0vpF5h3Cx|&yKPv&2pU6?KaUerQFH?W~C|3N<6-W$sVwM$WtfJw5Aa+ zD^K!GYZ_j*wC0__47@y(u`9)imPd2qksHOFb=KO1cjuy;HQ2f2<&2SMfCH%j=aW7v z+w2Onv!8FzzW)bPioSW#B^B-S(C77KWyFKaa8st{PGrb4h_JsNH=i9Pwx{H@2i|7a z`401zx7NJVwbH!SQDTZ+Wv0|DA_GU z1YK770FFekYW@~jW1epGwk5^k)UykzXJvw5-hR?wm#LOu7(XHylLjv-%H}xw>|)EDb0!i9aR8fe zX){S0CORA>Rdk~Xr0Yo97L^q#6xHlT6iI6n^GVWepCU*#tj1z^y=%qtK_MzLONtfi zgR9k*&Hz@4juk~#_lNt@baF`FMBs+?^hy_31%31uf<4yZ3HWd-sj5B4#F*|@xDG}50msJ1R^a3AO`9WKnS9Kic!F&w~A zm9XtE8m^>(b>Bvh&U(3RN)%~q%aS21A+}&uV!`$)5oz|WVxq?rq7aJ@+ZYweF*{Lu z%b?0SSIjknV_sdXs}8Pd zW5Lo9b}EFezD~|jVs-7{?w4A%d%5FBV1mLKu7TnYxpKPx5_`7aQu^om8x5gN5akyx(~BjeTAWx1~llWj!t$qy|2RtiVfIEzc$#c@h7*6 zwiDp#aRPOq(W4*1DBVNhHF~{|g|_uFoS^3oXo4uc-Nfypr@~wr{i2UMOpCX2qxSGL J{a^~*{{qB8o%sL& diff --git a/源代码/.vs/StgSharpDevelop/DesignTimeBuild/.dtbcache.v2 b/源代码/.vs/StgSharpDevelop/DesignTimeBuild/.dtbcache.v2 index d8990c188b9da0bb3a4cd4efe8184fa672427d04..842c4b8ca7e9cdfff07c88e55791d01e32f21c0e 100644 GIT binary patch literal 275189 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