From 3ff5abe55d130ee511cc21067593c6203842f8a0 Mon Sep 17 00:00:00 2001 From: cutealien Date: Wed, 4 May 2022 21:38:12 +0000 Subject: [PATCH] Merging r6364 through r6379 from trunk to ogl-es branch git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6380 dfc29bdd-3216-0410-991c-e03cc46cb475 --- changes.txt | 2 + .../xcschemes/01.HelloWorld.xcscheme | 10 +- .../01.HelloWorld/HelloWorld_vc16.vcxproj | 234 ++ .../xcschemes/02.Quake3Map.xcscheme | 10 +- examples/02.Quake3Map/Quake3Map_vc16.vcxproj | 234 ++ .../xcschemes/03.CustomSceneNode.xcscheme | 10 +- .../CustomSceneNode_vc16.vcxproj | 246 ++ .../xcschemes/04.Movement.xcscheme | 10 +- examples/04.Movement/Movement_vc16.vcxproj | 234 ++ .../xcschemes/05.UserInterface.xcscheme | 10 +- .../UserInterface_vc16.vcxproj | 234 ++ .../xcschemes/06.2DGraphics.xcscheme | 10 +- .../06.2DGraphics/2DGraphics_vc16.vcxproj | 234 ++ .../xcschemes/07.Collision.xcscheme | 10 +- examples/07.Collision/Collision_vc16.vcxproj | 234 ++ .../xcschemes/08.SpecialFX.xcscheme | 10 +- examples/08.SpecialFX/SpecialFX_vc16.vcxproj | 234 ++ examples/08.SpecialFX/main.cpp | 1 + .../Meshviewer.xcodeproj/project.pbxproj | 38 +- .../xcschemes/09.Meshviewer.xcscheme | 10 +- .../09.Meshviewer/Meshviewer_vc16.vcxproj | 234 ++ .../xcschemes/10.Shaders.xcscheme | 10 +- examples/10.Shaders/Shaders_vc16.vcxproj | 234 ++ examples/10.Shaders/main.cpp | 6 + .../project.pbxproj | 49 +- .../xcschemes/11.PerPixelLighting.xcscheme | 10 +- .../PerPixelLighting_vc16.vcxproj | 234 ++ examples/11.PerPixelLighting/main.cpp | 2 + .../project.pbxproj | 49 +- .../xcschemes/12.TerrainRendering.xcscheme | 10 +- .../TerrainRendering_vc16.vcxproj | 234 ++ .../RenderToTexture.xcodeproj/project.pbxproj | 49 +- .../xcschemes/13.RenderToTexture.xcscheme | 10 +- .../RenderToTexture_vc16.vcxproj | 234 ++ .../14.Win32Window/Win32Window_vc16.vcxproj | 238 ++ .../LoadIrrFile.xcodeproj/project.pbxproj | 49 +- .../xcschemes/15.LoadIrrFile.xcscheme | 10 +- .../15.LoadIrrFile/LoadIrrFile_vc16.vcxproj | 234 ++ .../Quake3MapShader.xcodeproj/project.pbxproj | 49 +- .../xcschemes/16.Quake3MapShader.xcscheme | 10 +- .../Quake3MapShader_vc16.vcxproj | 191 ++ .../SplitScreen.xcodeproj/project.pbxproj | 49 +- .../xcschemes/18.SplitScreen.xcscheme | 10 +- .../18.SplitScreen/SplitScreen_vc16.vcxproj | 192 ++ .../project.pbxproj | 49 +- .../xcschemes/19.MouseAndJoystick.xcscheme | 10 +- .../MouseAndJoystick_vc16.vcxproj | 230 ++ .../ManagedLights.xcodeproj/project.pbxproj | 49 +- .../xcschemes/20.ManagedLights.xcscheme | 10 +- .../ManagedLights_vc16.vcxproj | 233 ++ .../Quake3Explorer.xcodeproj/project.pbxproj | 49 +- .../xcschemes/21.Quake3Explorer.xcscheme | 10 +- .../Quake3Explorer_vc16.vcxproj | 198 ++ .../MaterialViewer.xcodeproj/project.pbxproj | 49 +- .../xcschemes/22.MaterialViewer.xcscheme | 10 +- .../MaterialViewer_vc16.vcxproj | 234 ++ examples/22.MaterialViewer/main.cpp | 29 +- examples/22.MaterialViewer/main.h | 6 +- .../SMeshHandling.xcodeproj/project.pbxproj | 49 +- .../xcschemes/23.SMeshHandling.xcscheme | 10 +- .../SMeshHandling_vc16.vcxproj | 190 ++ examples/23.SMeshHandling/main.cpp | 2 + .../CursorControl.xcodeproj/project.pbxproj | 38 +- .../xcschemes/24.CursorControl.xcscheme | 10 +- .../CursorControl_vc16.vcxproj | 186 ++ .../XmlHandling.xcodeproj/project.pbxproj | 49 +- .../xcschemes/25.XmlHandling.xcscheme | 10 +- .../25.XmlHandling/XmlHandling_vc16.vcxproj | 180 ++ .../OcclusionQuery.xcodeproj/project.pbxproj | 49 +- .../xcschemes/26.OcclusionQuery.xcscheme | 10 +- .../OcclusionQuery_vc16.vcxproj | 234 ++ .../PostProcessing_vc16.vcxproj | 234 ++ examples/27.PostProcessing/main.cpp | 4 +- .../28.CubeMapping/CubeMapping_vc16.vcxproj | 234 ++ .../xcschemes/30.Profiling.xcscheme | 10 +- examples/30.Profiling/Profiling_vc16.vcxproj | 186 ++ examples/BuildAllExamples_vc14.sln | 13 +- examples/BuildAllExamples_vc16.sln | 849 +++++ examples/Demo/CMainMenu.cpp | 38 +- examples/Demo/Demo.xcodeproj/project.pbxproj | 49 +- .../xcshareddata/xcschemes/Demo.xcscheme | 10 +- examples/Demo/Demo_vc16.vcxproj | 282 ++ include/IOSOperator.h | 4 +- include/ISceneManager.h | 4 +- include/IrrCompileConfig.h | 7 + include/SExposedVideoData.h | 1 + include/driverChoice.h | 36 + include/matrix4.h | 6 +- include/vector3d.h | 30 + source/Irrlicht/C3DSMeshFileLoader.cpp | 3 +- source/Irrlicht/CBlit.h | 4 +- source/Irrlicht/CCameraSceneNode.cpp | 4 + source/Irrlicht/CDepthBuffer.cpp | 6 +- source/Irrlicht/CGLXManager.cpp | 14 +- source/Irrlicht/CGUISpriteBank.cpp | 53 +- source/Irrlicht/CGUISpriteBank.h | 14 +- source/Irrlicht/CImage.cpp | 19 +- source/Irrlicht/CImage.h | 2 +- source/Irrlicht/CIrrDeviceOSX.mm | 176 +- source/Irrlicht/COSOperator.cpp | 24 +- source/Irrlicht/CSceneManager.cpp | 6 +- source/Irrlicht/CSceneManager.h | 29 +- .../Irrlicht/CSceneNodeAnimatorCameraMaya.cpp | 12 +- .../Irrlicht/CSceneNodeAnimatorCameraMaya.h | 4 +- source/Irrlicht/CSoftware2MaterialRenderer.h | 2 +- source/Irrlicht/CSoftwareDriver2.cpp | 2812 +++++++++++------ source/Irrlicht/CSoftwareDriver2.h | 78 +- source/Irrlicht/CSoftwareTexture2.cpp | 334 +- source/Irrlicht/CSoftwareTexture2.h | 65 +- source/Irrlicht/CTRGouraud2.cpp | 16 +- source/Irrlicht/CTRGouraudAlpha2.cpp | 651 ---- source/Irrlicht/CTRGouraudAlphaNoZ2.cpp | 18 +- source/Irrlicht/CTRGouraudNoZ2.cpp | 16 +- source/Irrlicht/CTRNormalMap.cpp | 492 ++- source/Irrlicht/CTRParallaxMap.cpp | 1180 +++++++ source/Irrlicht/CTRStencilShadow.cpp | 16 +- source/Irrlicht/CTRTextureBlend.cpp | 22 +- source/Irrlicht/CTRTextureDetailMap2.cpp | 19 +- source/Irrlicht/CTRTextureGouraud2.cpp | 27 +- source/Irrlicht/CTRTextureGouraudAdd2.cpp | 62 +- source/Irrlicht/CTRTextureGouraudAddNoZ2.cpp | 22 +- source/Irrlicht/CTRTextureGouraudAlpha.cpp | 128 +- source/Irrlicht/CTRTextureGouraudAlphaNoZ.cpp | 65 +- source/Irrlicht/CTRTextureGouraudNoZ2.cpp | 226 +- .../CTRTextureGouraudVertexAlpha2.cpp | 16 +- source/Irrlicht/CTRTextureLightMap2_Add.cpp | 16 +- source/Irrlicht/CTRTextureLightMap2_M1.cpp | 12 +- source/Irrlicht/CTRTextureLightMap2_M2.cpp | 16 +- source/Irrlicht/CTRTextureLightMap2_M4.cpp | 503 +-- .../CTRTextureLightMapGouraud2_M4.cpp | 16 +- source/Irrlicht/CTRTextureWire2.cpp | 193 +- .../CTR_transparent_reflection_2_layer.cpp | 365 ++- source/Irrlicht/CTextSceneNode.cpp | 5 +- source/Irrlicht/IBurningShader.cpp | 150 +- source/Irrlicht/IBurningShader.h | 776 ++--- .../Irrlicht.xcodeproj/project.pbxproj | 55 +- source/Irrlicht/Irrlicht14.0.vcxproj | 30 +- source/Irrlicht/Irrlicht14.0.vcxproj.filters | 12 +- source/Irrlicht/Irrlicht15.0.vcxproj | 2 +- source/Irrlicht/Irrlicht16.0.sln | 49 + source/Irrlicht/Irrlicht16.0.vcxproj | 1348 ++++++++ source/Irrlicht/Irrlicht16.0.vcxproj.filters | 2391 ++++++++++++++ source/Irrlicht/Makefile | 18 +- source/Irrlicht/S4DVertex.h | 573 ++-- .../Irrlicht/SoftwareDriver2_compile_config.h | 118 +- source/Irrlicht/SoftwareDriver2_helper.h | 618 ++-- source/Irrlicht/burning_shader_color.cpp | 10 +- source/Irrlicht/burning_shader_color_fraq.h | 18 +- .../burning_shader_compile_fragment_default.h | 32 +- .../burning_shader_compile_fragment_end.h | 5 +- .../burning_shader_compile_fragment_start.h | 29 +- .../Irrlicht/burning_shader_compile_start.h | 2 + .../burning_shader_compile_triangle.h | 61 +- source/Irrlicht/bzip2/bzcompress.c | 2 +- tests/draw2DImage.cpp | 3 +- tests/drawVertexPrimitive.cpp | 3 + tests/media/Burning's Video-2dmatFilter.png | Bin 18757 -> 19982 bytes tests/media/Burning's Video-addBlend2D.png | Bin 5896 -> 6849 bytes .../Burning's Video-ambient-lighting.png | Bin 392 -> 392 bytes tests/media/Burning's Video-b3dAnimation.png | Bin 5879 -> 5884 bytes .../Burning's Video-b3dJointPosition.png | Bin 2982 -> 2988 bytes tests/media/Burning's Video-billboard.png | Bin 4577 -> 4633 bytes .../Burning's Video-billboardOrientation.png | Bin 10488 -> 10070 bytes .../Burning's Video-draw2DImage4cFilter.png | Bin 23716 -> 35379 bytes .../media/Burning's Video-draw2DImagePNG.png | Bin 0 -> 25231 bytes .../media/Burning's Video-draw2DImageRTT.png | Bin 2471 -> 2477 bytes .../media/Burning's Video-draw2DImageRect.png | Bin 4832 -> 5684 bytes tests/media/Burning's Video-drawPixel.png | Bin 27966 -> 24188 bytes .../media/Burning's Video-drawRectOutline.png | Bin 492 -> 568 bytes tests/media/Burning's Video-drawVPL_a.png | Bin 359 -> 2860 bytes tests/media/Burning's Video-drawVPL_b.png | Bin 359 -> 24847 bytes tests/media/Burning's Video-drawVPL_c.png | Bin 359 -> 24847 bytes tests/media/Burning's Video-drawVPL_d.png | Bin 359 -> 19293 bytes tests/media/Burning's Video-drawVPL_e.png | Bin 16056 -> 16099 bytes tests/media/Burning's Video-drawVPL_f.png | Bin 359 -> 15246 bytes tests/media/Burning's Video-drawVPL_g.png | Bin 14337 -> 14363 bytes tests/media/Burning's Video-drawVPL_h.png | Bin 13300 -> 14192 bytes tests/media/Burning's Video-drawVPL_i.png | Bin 13181 -> 15247 bytes tests/media/Burning's Video-drawVPL_j.png | Bin 359 -> 15311 bytes tests/media/Burning's Video-drawVPL_k.png | Bin 359 -> 2860 bytes tests/media/Burning's Video-fireball.png | Bin 0 -> 1540 bytes .../Burning's Video-flyCircleAnimator.png | Bin 2567 -> 2588 bytes .../media/Burning's Video-guiDisabledMenu.png | Bin 740 -> 703 bytes tests/media/Burning's Video-lightType.png | Bin 5471 -> 5490 bytes tests/media/Burning's Video-lightmaps.png | Bin 33502 -> 35533 bytes tests/media/Burning's Video-loadScene.png | Bin 24949 -> 25093 bytes ...urning's Video-makeColorKeyTexture-new.png | Bin 19696 -> 19578 bytes ...urning's Video-makeColorKeyTexture-old.png | Bin 20940 -> 20828 bytes tests/media/Burning's Video-md2Animation.png | Bin 5077 -> 5226 bytes tests/media/Burning's Video-md2Normals.png | Bin 6457 -> 6661 bytes tests/media/Burning's Video-meshTransform.png | Bin 1851 -> 1849 bytes tests/media/Burning's Video-multiTexture.png | Bin 7646 -> 7427 bytes tests/media/Burning's Video-orthoCam.png | Bin 4542 -> 4536 bytes ...Burning's Video-planeMatrix-scaledClip.png | Bin 40447 -> 35533 bytes tests/media/Burning's Video-projMat.png | Bin 814 -> 405 bytes tests/media/Burning's Video-renderMipmap.png | Bin 814 -> 775 bytes tests/media/Burning's Video-rttAndText.png | Bin 6789 -> 7142 bytes .../media/Burning's Video-rttWith2DImage.png | Bin 14596 -> 14603 bytes tests/media/Burning's Video-shotsInShots0.png | Bin 5544 -> 5267 bytes tests/media/Burning's Video-shotsInShots2.png | Bin 5544 -> 5267 bytes .../Burning's Video-stencilSelfShadow.png | Bin 14841 -> 13617 bytes tests/media/Burning's Video-stencilShadow.png | Bin 3495 -> 6130 bytes tests/media/Burning's Video-terrainGap.png | Bin 3898 -> 3053 bytes .../Burning's Video-terrainSceneNode-1.png | Bin 39271 -> 33428 bytes .../Burning's Video-terrainSceneNode-2.png | Bin 41628 -> 35836 bytes .../Burning's Video-testGeometryCreator.png | Bin 8407 -> 8828 bytes .../media/Burning's Video-testTerrainMesh.png | Bin 33283 -> 31341 bytes tests/media/Burning's Video-textureMatrix.png | Bin 15212 -> 13577 bytes .../media/Burning's Video-textureMatrix2.png | Bin 15190 -> 13519 bytes ...ing's Video-textureMatrixInMixedScenes.png | Bin 1187 -> 1109 bytes .../Burning's Video-transparentAddColor.png | Bin 29747 -> 23545 bytes ...urning's Video-transparentAlphaChannel.png | Bin 29346 -> 24002 bytes ...ing's Video-transparentAlphaChannelRef.png | Bin 30009 -> 24373 bytes ...ng's Video-transparentReflection2Layer.png | Bin 32288 -> 28054 bytes ...Burning's Video-transparentVertexAlpha.png | Bin 29855 -> 23800 bytes ...ideo-transparentVertexAlphaChannelMore.png | Bin 4719 -> 4924 bytes tests/media/Burning's Video-viewPortText.png | Bin 8955 -> 7630 bytes .../Burning's Video-writeImageToFile.png | Bin 27966 -> 24188 bytes tests/tests-last-passed-at.txt | 4 +- tests/tests_vc16.sln | 71 + tests/tests_vc16.vcxproj | 311 ++ tools/GUIEditor/CMemoryReadWriteFile.cpp | 6 +- tools/GUIEditor/GUI Editor_vc16.vcxproj | 254 ++ .../newFontTool/irrFontTool_vc16.vcxproj | 235 ++ .../MeshConverter/MeshConverter_vc16.vcxproj | 230 ++ 225 files changed, 19003 insertions(+), 4768 deletions(-) create mode 100644 examples/01.HelloWorld/HelloWorld_vc16.vcxproj create mode 100644 examples/02.Quake3Map/Quake3Map_vc16.vcxproj create mode 100644 examples/03.CustomSceneNode/CustomSceneNode_vc16.vcxproj create mode 100644 examples/04.Movement/Movement_vc16.vcxproj create mode 100644 examples/05.UserInterface/UserInterface_vc16.vcxproj create mode 100644 examples/06.2DGraphics/2DGraphics_vc16.vcxproj create mode 100644 examples/07.Collision/Collision_vc16.vcxproj create mode 100644 examples/08.SpecialFX/SpecialFX_vc16.vcxproj create mode 100644 examples/09.Meshviewer/Meshviewer_vc16.vcxproj create mode 100644 examples/10.Shaders/Shaders_vc16.vcxproj create mode 100644 examples/11.PerPixelLighting/PerPixelLighting_vc16.vcxproj create mode 100644 examples/12.TerrainRendering/TerrainRendering_vc16.vcxproj create mode 100644 examples/13.RenderToTexture/RenderToTexture_vc16.vcxproj create mode 100644 examples/14.Win32Window/Win32Window_vc16.vcxproj create mode 100644 examples/15.LoadIrrFile/LoadIrrFile_vc16.vcxproj create mode 100644 examples/16.Quake3MapShader/Quake3MapShader_vc16.vcxproj create mode 100644 examples/18.SplitScreen/SplitScreen_vc16.vcxproj create mode 100644 examples/19.MouseAndJoystick/MouseAndJoystick_vc16.vcxproj create mode 100644 examples/20.ManagedLights/ManagedLights_vc16.vcxproj create mode 100644 examples/21.Quake3Explorer/Quake3Explorer_vc16.vcxproj create mode 100644 examples/22.MaterialViewer/MaterialViewer_vc16.vcxproj create mode 100644 examples/23.SMeshHandling/SMeshHandling_vc16.vcxproj create mode 100644 examples/24.CursorControl/CursorControl_vc16.vcxproj create mode 100644 examples/25.XmlHandling/XmlHandling_vc16.vcxproj create mode 100644 examples/26.OcclusionQuery/OcclusionQuery_vc16.vcxproj create mode 100644 examples/27.PostProcessing/PostProcessing_vc16.vcxproj create mode 100644 examples/28.CubeMapping/CubeMapping_vc16.vcxproj create mode 100644 examples/30.Profiling/Profiling_vc16.vcxproj create mode 100644 examples/BuildAllExamples_vc16.sln create mode 100644 examples/Demo/Demo_vc16.vcxproj delete mode 100644 source/Irrlicht/CTRGouraudAlpha2.cpp create mode 100644 source/Irrlicht/CTRParallaxMap.cpp create mode 100644 source/Irrlicht/Irrlicht16.0.sln create mode 100644 source/Irrlicht/Irrlicht16.0.vcxproj create mode 100644 source/Irrlicht/Irrlicht16.0.vcxproj.filters create mode 100644 tests/media/Burning's Video-draw2DImagePNG.png create mode 100644 tests/media/Burning's Video-fireball.png create mode 100644 tests/tests_vc16.sln create mode 100644 tests/tests_vc16.vcxproj create mode 100644 tools/GUIEditor/GUI Editor_vc16.vcxproj create mode 100644 tools/IrrFontTool/newFontTool/irrFontTool_vc16.vcxproj create mode 100644 tools/MeshConverter/MeshConverter_vc16.vcxproj diff --git a/changes.txt b/changes.txt index d165ba97..0a19f48a 100644 --- a/changes.txt +++ b/changes.txt @@ -10,6 +10,8 @@ Changes in ogl-es (not yet released - will be merged with trunk at some point) -------------------------- Changes in 1.9 (not yet released) +- COSOperator::getSystemMemory now returns some value on OSX (thought same for total and available). + Thanks @sfan5 for patch https://irrlicht.sourceforge.io/forum/viewtopic.php?f=2&t=52819 and https://github.com/minetest/irrlicht/commit/e469c54f76f6d24f92389b4e8a27b9cce7152888 - Fix CVertexBuffer::setType switching types for non-empty arrays. Before we had some bad casts which could result in random initializing of some vertex data. - IVertexBuffer interface changes: pointer() now returns void*. Adding a const version of getData(). Some set functions have now overload for all vertex types. - S3DVertex now always initializes color to 0xffffff. That was previously the only uninitialized variable in there. Also both derived classes have now a constructor taking a const S3DVertex&. diff --git a/examples/01.HelloWorld/HelloWorld.xcodeproj/xcshareddata/xcschemes/01.HelloWorld.xcscheme b/examples/01.HelloWorld/HelloWorld.xcodeproj/xcshareddata/xcschemes/01.HelloWorld.xcscheme index ba196db3..16aad335 100644 --- a/examples/01.HelloWorld/HelloWorld.xcodeproj/xcshareddata/xcschemes/01.HelloWorld.xcscheme +++ b/examples/01.HelloWorld/HelloWorld.xcodeproj/xcshareddata/xcschemes/01.HelloWorld.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 01.HelloWorld + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9} + HelloWorld + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\01.HelloWorld.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\01.HelloWorld.exe + ..\..\lib\Win64-Visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\01.HelloWorld.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + ..\..\bin\Win64-VisualStudio\01.HelloWorld.exe + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/02.Quake3Map/Quake3Map.xcodeproj/xcshareddata/xcschemes/02.Quake3Map.xcscheme b/examples/02.Quake3Map/Quake3Map.xcodeproj/xcshareddata/xcschemes/02.Quake3Map.xcscheme index 68dd239a..90d7fda0 100644 --- a/examples/02.Quake3Map/Quake3Map.xcodeproj/xcshareddata/xcschemes/02.Quake3Map.xcscheme +++ b/examples/02.Quake3Map/Quake3Map.xcodeproj/xcshareddata/xcschemes/02.Quake3Map.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 02.Quake3Map + {D1A464A2-D479-458C-98A2-60965D823CD1} + Quake3Map + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/Quake3Map.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\02.Quake3Map.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/Quake3Map.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\02.Quake3Map.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/Quake3Map.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\02.Quake3Map.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/Quake3Map.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\02.Quake3Map.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/03.CustomSceneNode/CustomSceneNode.xcodeproj/xcshareddata/xcschemes/03.CustomSceneNode.xcscheme b/examples/03.CustomSceneNode/CustomSceneNode.xcodeproj/xcshareddata/xcschemes/03.CustomSceneNode.xcscheme index e186f6d6..cd414dfd 100644 --- a/examples/03.CustomSceneNode/CustomSceneNode.xcodeproj/xcshareddata/xcschemes/03.CustomSceneNode.xcscheme +++ b/examples/03.CustomSceneNode/CustomSceneNode.xcodeproj/xcshareddata/xcschemes/03.CustomSceneNode.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 03.CustomSceneNode + {171CCDFA-C140-4956-8EB7-F0168F4521D3} + CustomSceneNode + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/CustomSceneNode.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\03.CustomSceneNode.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/CustomSceneNode.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\03.CustomSceneNode.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/CustomSceneNode.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + .\Release/CustomSceneNode.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\03.CustomSceneNode.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + .\Release/CustomSceneNode.pdb + Console + false + + + + + + + .\Release/CustomSceneNode.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + .\Release/CustomSceneNode.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\03.CustomSceneNode.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + .\Release/CustomSceneNode.pdb + Console + false + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/04.Movement/Movement.xcodeproj/xcshareddata/xcschemes/04.Movement.xcscheme b/examples/04.Movement/Movement.xcodeproj/xcshareddata/xcschemes/04.Movement.xcscheme index aec7f206..0b94277d 100644 --- a/examples/04.Movement/Movement.xcodeproj/xcshareddata/xcschemes/04.Movement.xcscheme +++ b/examples/04.Movement/Movement.xcodeproj/xcshareddata/xcschemes/04.Movement.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 04.Movement + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF} + Movement + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/Movement.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\04.Movement.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/Movement.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\04.Movement.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/Movement.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\04.Movement.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/Movement.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\04.Movement.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/05.UserInterface/UserInterface.xcodeproj/xcshareddata/xcschemes/05.UserInterface.xcscheme b/examples/05.UserInterface/UserInterface.xcodeproj/xcshareddata/xcschemes/05.UserInterface.xcscheme index 3edc9eb3..932a1308 100644 --- a/examples/05.UserInterface/UserInterface.xcodeproj/xcshareddata/xcschemes/05.UserInterface.xcscheme +++ b/examples/05.UserInterface/UserInterface.xcodeproj/xcshareddata/xcschemes/05.UserInterface.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 05.UserInterface + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53} + UserInterface + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/UserInterface.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\05.UserInterface.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/UserInterface.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\05.UserInterface.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/UserInterface.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\05.UserInterface.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/UserInterface.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\05.UserInterface.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/06.2DGraphics/2DGraphics.xcodeproj/xcshareddata/xcschemes/06.2DGraphics.xcscheme b/examples/06.2DGraphics/2DGraphics.xcodeproj/xcshareddata/xcschemes/06.2DGraphics.xcscheme index 6a138026..86e39f9e 100644 --- a/examples/06.2DGraphics/2DGraphics.xcodeproj/xcshareddata/xcschemes/06.2DGraphics.xcscheme +++ b/examples/06.2DGraphics/2DGraphics.xcodeproj/xcshareddata/xcschemes/06.2DGraphics.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 06.2DGraphics + {E71B6F18-10DC-4101-A541-F6D33F71B2BD} + 2DGraphics + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Release/2DGraphics.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\06.2DGraphics.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/2DGraphics.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\06.2DGraphics.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Debug/2DGraphics.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\06.2DGraphics.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/2DGraphics.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\06.2DGraphics.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/07.Collision/Collision.xcodeproj/xcshareddata/xcschemes/07.Collision.xcscheme b/examples/07.Collision/Collision.xcodeproj/xcshareddata/xcschemes/07.Collision.xcscheme index c9728c83..0ba7a3b4 100644 --- a/examples/07.Collision/Collision.xcodeproj/xcshareddata/xcschemes/07.Collision.xcscheme +++ b/examples/07.Collision/Collision.xcodeproj/xcshareddata/xcschemes/07.Collision.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 07.Collision + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E} + Collision + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/Collision.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\07.Collision.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/Collision.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\07.Collision.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/Collision.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\07.Collision.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/Collision.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\07.Collision.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/08.SpecialFX/SpecialFX.xcodeproj/xcshareddata/xcschemes/08.SpecialFX.xcscheme b/examples/08.SpecialFX/SpecialFX.xcodeproj/xcshareddata/xcschemes/08.SpecialFX.xcscheme index 71ffc702..5b8c08d4 100644 --- a/examples/08.SpecialFX/SpecialFX.xcodeproj/xcshareddata/xcschemes/08.SpecialFX.xcscheme +++ b/examples/08.SpecialFX/SpecialFX.xcodeproj/xcshareddata/xcschemes/08.SpecialFX.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 08.SpecialFX + {C869BF55-B9D6-4980-BC92-60FA0CF8411A} + SpecialFX + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Release/SpecialFX.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\08.SpecialFx.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/SpecialFX.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\08.SpecialFx.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Debug/SpecialFX.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\08.SpecialFx.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/SpecialFX.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\08.SpecialFx.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/08.SpecialFX/main.cpp b/examples/08.SpecialFX/main.cpp index c72674b7..7e3d80bf 100644 --- a/examples/08.SpecialFX/main.cpp +++ b/examples/08.SpecialFX/main.cpp @@ -291,6 +291,7 @@ int main() // disable mouse cursor device->getCursorControl()->setVisible(false); + switchToMayaCamera(device); s32 lastFPS = -1; diff --git a/examples/09.Meshviewer/Meshviewer.xcodeproj/project.pbxproj b/examples/09.Meshviewer/Meshviewer.xcodeproj/project.pbxproj index e9137d14..919cd807 100644 --- a/examples/09.Meshviewer/Meshviewer.xcodeproj/project.pbxproj +++ b/examples/09.Meshviewer/Meshviewer.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 1240; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -112,7 +112,7 @@ }; buildConfigurationList = 5E34C6DC1B7F4A0C00F212E8 /* Build configuration list for PBXProject "Meshviewer" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -154,20 +154,27 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -175,7 +182,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,19 +190,26 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -203,7 +217,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -211,6 +225,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -248,6 +263,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.7; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -259,6 +275,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -291,6 +308,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.7; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/09.Meshviewer/Meshviewer.xcodeproj/xcshareddata/xcschemes/09.Meshviewer.xcscheme b/examples/09.Meshviewer/Meshviewer.xcodeproj/xcshareddata/xcschemes/09.Meshviewer.xcscheme index 0625d5ee..2c9efb98 100644 --- a/examples/09.Meshviewer/Meshviewer.xcodeproj/xcshareddata/xcschemes/09.Meshviewer.xcscheme +++ b/examples/09.Meshviewer/Meshviewer.xcodeproj/xcshareddata/xcschemes/09.Meshviewer.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 09.Meshviewer + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06} + Meshviewer + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Release/Meshviewer.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\09.MeshViewer.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/Meshviewer.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\09.MeshViewer.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Debug/Meshviewer.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\09.MeshViewer.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/Meshviewer.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\09.MeshViewer.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/10.Shaders/Shaders.xcodeproj/xcshareddata/xcschemes/10.Shaders.xcscheme b/examples/10.Shaders/Shaders.xcodeproj/xcshareddata/xcschemes/10.Shaders.xcscheme index b6111a44..f93a8597 100644 --- a/examples/10.Shaders/Shaders.xcodeproj/xcshareddata/xcschemes/10.Shaders.xcscheme +++ b/examples/10.Shaders/Shaders.xcodeproj/xcshareddata/xcschemes/10.Shaders.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 10.Shaders + {27158C82-CD15-4A9B-9848-35E7065B209F} + Shaders + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/Shaders.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\10.Shaders.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/Shaders.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\10.Shaders.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/Shaders.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\10.Shaders.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/Shaders.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\10.Shaders.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/10.Shaders/main.cpp b/examples/10.Shaders/main.cpp index ff80bd51..915a2cc0 100644 --- a/examples/10.Shaders/main.cpp +++ b/examples/10.Shaders/main.cpp @@ -236,6 +236,12 @@ int main() vsFileName = mediaPath + "opengl.vsh"; } break; + case video::EDT_BURNINGSVIDEO: + UseHighLevelShaders = true; + psFileName = mediaPath + "opengl.frag"; + vsFileName = mediaPath + "opengl.vert"; + break; + default: break; } diff --git a/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/project.pbxproj b/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/project.pbxproj index cac51bca..b68887ad 100644 --- a/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/project.pbxproj +++ b/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/xcshareddata/xcschemes/11.PerPixelLighting.xcscheme b/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/xcshareddata/xcschemes/11.PerPixelLighting.xcscheme index ddd1fcf4..039161a4 100644 --- a/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/xcshareddata/xcschemes/11.PerPixelLighting.xcscheme +++ b/examples/11.PerPixelLighting/PerPixelLighting.xcodeproj/xcshareddata/xcschemes/11.PerPixelLighting.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 11.PerPixelLighting + {C4B42409-542D-4EFC-9E6B-44713FD47A33} + PerPixelLighting + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/PerPixelLighting.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\11.PerPixelLighting.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/PerPixelLighting.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\11.PerPixelLighting.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/PerPixelLighting.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\11.PerPixelLighting.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/PerPixelLighting.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\11.PerPixelLighting.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/11.PerPixelLighting/main.cpp b/examples/11.PerPixelLighting/main.cpp index afa59cb5..77c48a08 100644 --- a/examples/11.PerPixelLighting/main.cpp +++ b/examples/11.PerPixelLighting/main.cpp @@ -212,6 +212,8 @@ int main() // disable mouse cursor device->getCursorControl()->setVisible(false); + switchToMayaCamera(device); + /* Because we want the whole scene to look a little bit scarier, we add some fog to it. This is done by a call to IVideoDriver::setFog(). There diff --git a/examples/12.TerrainRendering/TerrainRendering.xcodeproj/project.pbxproj b/examples/12.TerrainRendering/TerrainRendering.xcodeproj/project.pbxproj index 63b8efe1..2b2a99f4 100644 --- a/examples/12.TerrainRendering/TerrainRendering.xcodeproj/project.pbxproj +++ b/examples/12.TerrainRendering/TerrainRendering.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/12.TerrainRendering/TerrainRendering.xcodeproj/xcshareddata/xcschemes/12.TerrainRendering.xcscheme b/examples/12.TerrainRendering/TerrainRendering.xcodeproj/xcshareddata/xcschemes/12.TerrainRendering.xcscheme index 13efddb9..5edb10e8 100644 --- a/examples/12.TerrainRendering/TerrainRendering.xcodeproj/xcshareddata/xcschemes/12.TerrainRendering.xcscheme +++ b/examples/12.TerrainRendering/TerrainRendering.xcodeproj/xcshareddata/xcschemes/12.TerrainRendering.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 12.TerrainRendering + {3A5B74E5-6390-43B0-A459-2793B81FFD31} + TerrainRendering + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/TerrainRendering.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\12.TerrainRendering.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/TerrainRendering.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\12.TerrainRendering.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/TerrainRendering.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\12.TerrainRendering.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/TerrainRendering.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\12.TerrainRendering.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/13.RenderToTexture/RenderToTexture.xcodeproj/project.pbxproj b/examples/13.RenderToTexture/RenderToTexture.xcodeproj/project.pbxproj index f2f6fb31..9cd7d0c9 100644 --- a/examples/13.RenderToTexture/RenderToTexture.xcodeproj/project.pbxproj +++ b/examples/13.RenderToTexture/RenderToTexture.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/13.RenderToTexture/RenderToTexture.xcodeproj/xcshareddata/xcschemes/13.RenderToTexture.xcscheme b/examples/13.RenderToTexture/RenderToTexture.xcodeproj/xcshareddata/xcschemes/13.RenderToTexture.xcscheme index 3c99c7ce..c19b8b45 100644 --- a/examples/13.RenderToTexture/RenderToTexture.xcodeproj/xcshareddata/xcschemes/13.RenderToTexture.xcscheme +++ b/examples/13.RenderToTexture/RenderToTexture.xcodeproj/xcshareddata/xcschemes/13.RenderToTexture.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 13.RenderToTexture + {0914E5C8-5352-467B-8421-C9EB35BD5596} + RenderToTexture + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Release/RenderToTexture.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\13.RenderToTexture.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/RenderToTexture.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\13.RenderToTexture.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Debug/RenderToTexture.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\13.RenderToTexture.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/RenderToTexture.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\13.RenderToTexture.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/14.Win32Window/Win32Window_vc16.vcxproj b/examples/14.Win32Window/Win32Window_vc16.vcxproj new file mode 100644 index 00000000..6444538b --- /dev/null +++ b/examples/14.Win32Window/Win32Window_vc16.vcxproj @@ -0,0 +1,238 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 14.Win32Window + {772FBE05-D05A-467B-9842-BEC409EEA8D0} + Win32Window + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/Win32Window.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + opengl32.lib;%(AdditionalDependencies) + ..\..\bin\Win32-VisualStudio\14.Win32Window.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/Win32Window.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + opengl32.lib;%(AdditionalDependencies) + ..\..\bin\Win64-VisualStudio\14.Win32Window.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/Win32Window.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + opengl32.lib;%(AdditionalDependencies) + ..\..\bin\Win32-VisualStudio\14.Win32Window.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/Win32Window.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + opengl32.lib;%(AdditionalDependencies) + ..\..\bin\Win64-VisualStudio\14.Win32Window.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/project.pbxproj b/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/project.pbxproj index 69bd0417..a640c46d 100644 --- a/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/project.pbxproj +++ b/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/xcshareddata/xcschemes/15.LoadIrrFile.xcscheme b/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/xcshareddata/xcschemes/15.LoadIrrFile.xcscheme index 0de8a807..4b64996f 100644 --- a/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/xcshareddata/xcschemes/15.LoadIrrFile.xcscheme +++ b/examples/15.LoadIrrFile/LoadIrrFile.xcodeproj/xcshareddata/xcschemes/15.LoadIrrFile.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 15.LoadIrrFile + {78C9F424-523C-49AC-94B7-823AA4A26BF9} + LoadIrrFile + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/LoadIrrFile.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/LoadIrrFile.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/LoadIrrFile.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/LoadIrrFile.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/project.pbxproj b/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/project.pbxproj index 31edfb14..e6f6e9ef 100644 --- a/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/project.pbxproj +++ b/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/xcshareddata/xcschemes/16.Quake3MapShader.xcscheme b/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/xcshareddata/xcschemes/16.Quake3MapShader.xcscheme index 02775ec0..823ce607 100644 --- a/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/xcshareddata/xcschemes/16.Quake3MapShader.xcscheme +++ b/examples/16.Quake3MapShader/Quake3MapShader.xcodeproj/xcshareddata/xcschemes/16.Quake3MapShader.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 16.Quake3MapShader + {EB3B38EA-5CE7-4983-845B-880661E69D09} + 16.Quake3MapShader + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + true + true + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win32-VisualStudio\16.Quake3MapShader.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + Cdecl + + + ..\..\bin\Win64-VisualStudio\16.Quake3MapShader.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\16.Quake3MapShader.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\16.Quake3MapShader.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + \ No newline at end of file diff --git a/examples/18.SplitScreen/SplitScreen.xcodeproj/project.pbxproj b/examples/18.SplitScreen/SplitScreen.xcodeproj/project.pbxproj index 1201daf9..781c95c6 100644 --- a/examples/18.SplitScreen/SplitScreen.xcodeproj/project.pbxproj +++ b/examples/18.SplitScreen/SplitScreen.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/18.SplitScreen/SplitScreen.xcodeproj/xcshareddata/xcschemes/18.SplitScreen.xcscheme b/examples/18.SplitScreen/SplitScreen.xcodeproj/xcshareddata/xcschemes/18.SplitScreen.xcscheme index 0af4a284..e05ed836 100644 --- a/examples/18.SplitScreen/SplitScreen.xcodeproj/xcshareddata/xcschemes/18.SplitScreen.xcscheme +++ b/examples/18.SplitScreen/SplitScreen.xcodeproj/xcshareddata/xcschemes/18.SplitScreen.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 18.SplitScreen + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0} + 18.SplitScreen + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + true + true + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win32-VisualStudio\18.SplitScreen.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SplitScreen.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win64-VisualStudio\18.SplitScreen.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SplitScreen.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\18.SplitScreen.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\18.SplitScreen.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + \ No newline at end of file diff --git a/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/project.pbxproj b/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/project.pbxproj index 5a3cddf3..1513e0e1 100644 --- a/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/project.pbxproj +++ b/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/xcshareddata/xcschemes/19.MouseAndJoystick.xcscheme b/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/xcshareddata/xcschemes/19.MouseAndJoystick.xcscheme index a7e77e1d..335bb5f3 100644 --- a/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/xcshareddata/xcschemes/19.MouseAndJoystick.xcscheme +++ b/examples/19.MouseAndJoystick/MouseAndJoystick.xcodeproj/xcshareddata/xcschemes/19.MouseAndJoystick.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 19.MouseAndJoystick + {FE853A36-E0D1-4AC5-A792-B643E70D2953} + MouseAndJoystick + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/MouseAndJoystick.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\19.MouseAndJoystick.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/MouseAndJoystick.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\19.MouseAndJoystick.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/MouseAndJoystick.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\19.MouseAndJoystick.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/MouseAndJoystick.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\19.MouseAndJoystick.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/20.ManagedLights/ManagedLights.xcodeproj/project.pbxproj b/examples/20.ManagedLights/ManagedLights.xcodeproj/project.pbxproj index 34988448..7104e5d3 100644 --- a/examples/20.ManagedLights/ManagedLights.xcodeproj/project.pbxproj +++ b/examples/20.ManagedLights/ManagedLights.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/20.ManagedLights/ManagedLights.xcodeproj/xcshareddata/xcschemes/20.ManagedLights.xcscheme b/examples/20.ManagedLights/ManagedLights.xcodeproj/xcshareddata/xcschemes/20.ManagedLights.xcscheme index 5e640be9..b6e558b8 100644 --- a/examples/20.ManagedLights/ManagedLights.xcodeproj/xcshareddata/xcschemes/20.ManagedLights.xcscheme +++ b/examples/20.ManagedLights/ManagedLights.xcodeproj/xcshareddata/xcschemes/20.ManagedLights.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 20.ManagedLights + {16007FE2-142B-47F8-93E1-519BA3F39E71} + ManagedLights + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/ManagedLights.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\Lib\Win32-visualstudio\Irrlicht.lib;%(AdditionalDependencies) + ..\..\bin\Win32-VisualStudio\20.ManagedLights.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/ManagedLights.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\bin\Win64-VisualStudio\20.ManagedLights.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/ManagedLights.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\20.ManagedLights.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/ManagedLights.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\20.ManagedLights.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/project.pbxproj b/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/project.pbxproj index ea3f8bdb..fe92ce06 100644 --- a/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/project.pbxproj +++ b/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/project.pbxproj @@ -113,7 +113,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -125,6 +125,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -166,28 +167,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -195,27 +176,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -260,6 +221,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -303,6 +265,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/xcshareddata/xcschemes/21.Quake3Explorer.xcscheme b/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/xcshareddata/xcschemes/21.Quake3Explorer.xcscheme index 4dfc785a..a0c51066 100644 --- a/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/xcshareddata/xcschemes/21.Quake3Explorer.xcscheme +++ b/examples/21.Quake3Explorer/Quake3Explorer.xcodeproj/xcshareddata/xcschemes/21.Quake3Explorer.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 21.Quake3Explorer + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD} + 21.Quake3Explorer + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + true + true + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win32-VisualStudio\21.Quake3Explorer.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)Quake3MapShader.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win64-VisualStudio\21.Quake3Explorer.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)Quake3MapShader.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + + + Level3 + + + FastCall + + + ..\..\bin\Win32-VisualStudio\21.Quake3Explorer.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + + + Level3 + + + FastCall + + + ..\..\bin\Win64-VisualStudio\21.Quake3Explorer.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/22.MaterialViewer/MaterialViewer.xcodeproj/project.pbxproj b/examples/22.MaterialViewer/MaterialViewer.xcodeproj/project.pbxproj index c278e231..d8ba1884 100644 --- a/examples/22.MaterialViewer/MaterialViewer.xcodeproj/project.pbxproj +++ b/examples/22.MaterialViewer/MaterialViewer.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/22.MaterialViewer/MaterialViewer.xcodeproj/xcshareddata/xcschemes/22.MaterialViewer.xcscheme b/examples/22.MaterialViewer/MaterialViewer.xcodeproj/xcshareddata/xcschemes/22.MaterialViewer.xcscheme index eed2899f..e9a422fd 100644 --- a/examples/22.MaterialViewer/MaterialViewer.xcodeproj/xcshareddata/xcschemes/22.MaterialViewer.xcscheme +++ b/examples/22.MaterialViewer/MaterialViewer.xcodeproj/xcshareddata/xcschemes/22.MaterialViewer.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 22.MaterialViewer + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA} + MaterialViewer + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Release/MaterialViewer.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\22.MaterialViewer.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + .\Release/MaterialViewer.pdb + Console + + + + + + + .\Release/MaterialViewer.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\22.MaterialViewer.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + .\Release/MaterialViewer.pdb + Console + + + + + + + .\Debug/MaterialViewer.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\22.MaterialViewer.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + .\Debug/MaterialViewer.pdb + Console + + + + + + + .\Debug/MaterialViewer.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\22.MaterialViewer.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + .\Debug/MaterialViewer.pdb + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/22.MaterialViewer/main.cpp b/examples/22.MaterialViewer/main.cpp index d814d4fa..37490b9a 100755 --- a/examples/22.MaterialViewer/main.cpp +++ b/examples/22.MaterialViewer/main.cpp @@ -450,6 +450,12 @@ void CMaterialControl::init(IrrlichtDevice * device, const core::position2d TypicalColorsControl = new CTypicalColorsControl(guiEnv, core::position2d(pos.X, top), true, guiEnv->getRootGUIElement()); top += 300; + guiEnv->addStaticText(L"Shininess", core::rect(pos.X, top, pos.X + 150, top + 15), true, false, 0, -1, true); + top += 15; + ShininessControl = guiEnv->addScrollBar(true, core::rect(pos.X, top, pos.X + 150, top + 15)); + ShininessControl->setMax(10000); + top += 20; + // Controls for selecting the material textures guiEnv->addStaticText(L"Textures", core::rect(pos.X, top, pos.X+150, top+15), true, false, 0, -1, true); top += 15; @@ -475,6 +481,9 @@ void CMaterialControl::setMaterial(const irr::video::SMaterial & material) TypicalColorsControl->setColorsToMaterialColors(material); for (irr::u32 i=0; isetDirty(); + + if (ShininessControl) + ShininessControl->setPos((int)(material.Shininess*100.f)); } void CMaterialControl::update(scene::IMeshSceneNode* sceneNode, scene::IMeshSceneNode* sceneNode2T, scene::IMeshSceneNode* sceneNodeTangents) @@ -558,6 +567,7 @@ void CMaterialControl::updateMaterial(video::SMaterial & material) material.TextureLayer[i].Texture = Driver->findTexture( io::path(TextureControls[i]->getSelectedTextureName()) ); } } + material.Shininess = ShininessControl->getPos() * 0.01f; } /* @@ -765,6 +775,7 @@ bool CApp::init(int argc, char *argv[]) ComboMeshType->setAlignment(irr::gui::EGUIA_LOWERRIGHT, irr::gui::EGUIA_LOWERRIGHT, irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT); ComboMeshType->addItem(L"cube"); ComboMeshType->addItem(L"sphere"); + ComboMeshType->addItem(L"sphere highres"); ControlVertexColors = new CColorControl( guiEnv, core::position2d(440, controlsTop+30), L"Vertex colors", guiEnv->getRootGUIElement()); ControlVertexColors->setAlignment(irr::gui::EGUIA_LOWERRIGHT, irr::gui::EGUIA_LOWERRIGHT, irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT); ControlVertexColors->setColor(irr::video::SColor(255,255,255,255)); @@ -817,8 +828,8 @@ bool CApp::update() GlobalAmbient->resetDirty(); } - const float zoomSpeed = 10.f * deltaTime; - const float rotationSpeed = 100.f * deltaTime; + const float zoomSpeed = (KeysPressed[KEY_LSHIFT] ? 40.f : 10.f) * deltaTime; + const float rotationSpeed = (KeysPressed[KEY_LSHIFT] ? 20.f : 100.f) * deltaTime; // Let the user move the light around irr::gui::IGUIElement* focus=guiEnv->getFocus(); // some checks to prevent interfering with UI input @@ -843,7 +854,7 @@ bool CApp::update() } // Let the user move the camera around - if (MousePressed) + if (MousePressed && !focus) { gui::ICursorControl* cursorControl = Device->getCursorControl(); const core::position2d& mousePos = cursorControl->getPosition (); @@ -1051,13 +1062,13 @@ void CApp::setActiveMeshNodeType(ENodeType nodeType) // add the nodes which are used to show the materials const irr::f32 size = 35.f; - if ( nodeType == ENT_CUBE) + if ( nodeType == ENT_CUBE ) { SceneNode = smgr->addCubeSceneNode (size, 0, -1, core::vector3df(0, 0, 0), core::vector3df(0.f, 45.f, 0.f), core::vector3df(1.0f, 1.0f, 1.0f), - scene::ECMT_1BUF_24VTX_NP); + scene::ECMT_1BUF_24VTX_NP); // avoid wrong colored lines at cube-borders (uv's go from 0-1 currently, which does not work well with interpolation) for ( u32 i=0; i < irr::video::MATERIAL_MAX_TEXTURES_USED; ++i) { @@ -1067,8 +1078,14 @@ void CApp::setActiveMeshNodeType(ENodeType nodeType) } else { - SceneNode = smgr->addSphereSceneNode(size*0.5f); + SceneNode = smgr->addSphereSceneNode(size * 0.5f, nodeType == ENT_SPHERE_HIGHRES ? 128 : 16); } + // off center to test shader + //SceneNode->setPosition(core::vector3df(20.f, -4.f, 10.f)); + //SceneNode->setScale(core::vector3df(1.f, 0.2f, 1.5f)); + //SceneNode->setRotation(core::vector3df(0.f, 30.f, -10.f)); + //defaultMaterial.NormalizeNormals = true; + SceneNode->getMaterial(0) = defaultMaterial; // SceneNode->setDebugDataVisible(scene::EDS_NORMALS); // showing normals can sometimes be useful to understand what's going on diff --git a/examples/22.MaterialViewer/main.h b/examples/22.MaterialViewer/main.h index dc121cd8..8bbaefc2 100644 --- a/examples/22.MaterialViewer/main.h +++ b/examples/22.MaterialViewer/main.h @@ -146,6 +146,7 @@ public: CMaterialControl() : Initialized(false), Driver(0) , TypicalColorsControl(0), ButtonLighting(0), InfoLighting(0), ComboMaterial(0) + , ShininessControl(0) {} // Destructor @@ -183,6 +184,8 @@ protected: irr::gui::IGUIStaticText* InfoLighting; irr::gui::IGUIComboBox * ComboMaterial; irr::core::array TextureControls; + + irr::gui::IGUIScrollBar* ShininessControl; }; /* @@ -302,7 +305,8 @@ protected: enum ENodeType { ENT_CUBE, - ENT_SPHERE + ENT_SPHERE, + ENT_SPHERE_HIGHRES, }; void setActiveMeshNodeType(ENodeType nodeType); diff --git a/examples/23.SMeshHandling/SMeshHandling.xcodeproj/project.pbxproj b/examples/23.SMeshHandling/SMeshHandling.xcodeproj/project.pbxproj index 4382e543..7c448566 100644 --- a/examples/23.SMeshHandling/SMeshHandling.xcodeproj/project.pbxproj +++ b/examples/23.SMeshHandling/SMeshHandling.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/23.SMeshHandling/SMeshHandling.xcodeproj/xcshareddata/xcschemes/23.SMeshHandling.xcscheme b/examples/23.SMeshHandling/SMeshHandling.xcodeproj/xcshareddata/xcschemes/23.SMeshHandling.xcscheme index 9a7fc357..c8a3b972 100644 --- a/examples/23.SMeshHandling/SMeshHandling.xcodeproj/xcshareddata/xcschemes/23.SMeshHandling.xcscheme +++ b/examples/23.SMeshHandling/SMeshHandling.xcodeproj/xcshareddata/xcschemes/23.SMeshHandling.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 23.SMeshHandling + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7} + 23.SMeshHandling + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + true + true + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SMeshHandling.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SMeshHandling.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + \ No newline at end of file diff --git a/examples/23.SMeshHandling/main.cpp b/examples/23.SMeshHandling/main.cpp index a4ef9ebc..5cc50e40 100644 --- a/examples/23.SMeshHandling/main.cpp +++ b/examples/23.SMeshHandling/main.cpp @@ -356,6 +356,7 @@ int main(int argc, char* argv[]) // Add the mesh to the scene graph IMeshSceneNode* meshnode = smgr -> addMeshSceneNode(mesh.Mesh); meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, false); + meshnode->getMaterial(0).Shininess = 80.f; // light is just for nice effects ILightSceneNode *node = smgr->addLightSceneNode(0, vector3df(0,100,0), @@ -378,6 +379,7 @@ int main(int argc, char* argv[]) camera->setTarget(vector3df(200.f, -80.f, 150.f)); camera->setFarValue(20000.0f); } + switchToMayaCamera(device); /* Just a usual render loop with event handling. The custom mesh is diff --git a/examples/24.CursorControl/CursorControl.xcodeproj/project.pbxproj b/examples/24.CursorControl/CursorControl.xcodeproj/project.pbxproj index 2000a263..12d52ceb 100644 --- a/examples/24.CursorControl/CursorControl.xcodeproj/project.pbxproj +++ b/examples/24.CursorControl/CursorControl.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 1240; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -112,7 +112,7 @@ }; buildConfigurationList = 5E34C6DC1B7F4A0C00F212E8 /* Build configuration list for PBXProject "CursorControl" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -154,20 +154,27 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -175,7 +182,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,19 +190,26 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -203,7 +217,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.11; }; name = Release; }; @@ -211,6 +225,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -248,6 +263,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.7; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -259,6 +275,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -291,6 +308,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.7; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/24.CursorControl/CursorControl.xcodeproj/xcshareddata/xcschemes/24.CursorControl.xcscheme b/examples/24.CursorControl/CursorControl.xcodeproj/xcshareddata/xcschemes/24.CursorControl.xcscheme index 2bf741e7..3d3f3e0f 100644 --- a/examples/24.CursorControl/CursorControl.xcodeproj/xcshareddata/xcschemes/24.CursorControl.xcscheme +++ b/examples/24.CursorControl/CursorControl.xcodeproj/xcshareddata/xcschemes/24.CursorControl.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 24.CursorControl + {02B67A37-50E1-49DB-BECF-905BC029C2FE} + 24.CursorControl + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win32-VisualStudio\24.CursorControl.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)CursorControl.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win64-VisualStudio\24.CursorControl.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)CursorControl.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\24.CursorControl.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\24.CursorControl.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + \ No newline at end of file diff --git a/examples/25.XmlHandling/XmlHandling.xcodeproj/project.pbxproj b/examples/25.XmlHandling/XmlHandling.xcodeproj/project.pbxproj index 6a162330..4dae06db 100644 --- a/examples/25.XmlHandling/XmlHandling.xcodeproj/project.pbxproj +++ b/examples/25.XmlHandling/XmlHandling.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/25.XmlHandling/XmlHandling.xcodeproj/xcshareddata/xcschemes/25.XmlHandling.xcscheme b/examples/25.XmlHandling/XmlHandling.xcodeproj/xcshareddata/xcschemes/25.XmlHandling.xcscheme index 2d21c8eb..b1d1fdf0 100644 --- a/examples/25.XmlHandling/XmlHandling.xcodeproj/xcshareddata/xcschemes/25.XmlHandling.xcscheme +++ b/examples/25.XmlHandling/XmlHandling.xcodeproj/xcshareddata/xcschemes/25.XmlHandling.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 25.XmlHandling + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E} + 25.XmlHandling + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + + + Level3 + + + Cdecl + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + + + Level3 + + + Cdecl + + + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + \ No newline at end of file diff --git a/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/project.pbxproj b/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/project.pbxproj index 26ea259a..7d7f30c0 100644 --- a/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/project.pbxproj +++ b/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 5E34C6D91B7F4A0C00F212E8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0710; TargetAttributes = { 5E34CC501B7F8E6E00F212E8 = { CreatedOnToolsVersion = 6.1; @@ -115,6 +115,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -154,28 +155,8 @@ 5E34C6DD1B7F4A0C00F212E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -183,27 +164,7 @@ 5E34C6DE1B7F4A0C00F212E8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.7; }; name = Release; }; @@ -248,6 +209,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -291,6 +253,7 @@ INSTALL_PATH = /; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/xcshareddata/xcschemes/26.OcclusionQuery.xcscheme b/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/xcshareddata/xcschemes/26.OcclusionQuery.xcscheme index 3004daa8..c4bc3632 100644 --- a/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/xcshareddata/xcschemes/26.OcclusionQuery.xcscheme +++ b/examples/26.OcclusionQuery/OcclusionQuery.xcodeproj/xcshareddata/xcschemes/26.OcclusionQuery.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 26.OcclusionQuery + {5CE0E2E7-879D-4152-B61D-24E7D0707B45} + OcclusionQuery + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug\OcclusionQuery.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\26.OcclusionQuery.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug\OcclusionQuery.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\26.OcclusionQuery.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release\OcclusionQuery.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\26.OcclusionQuery.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release\OcclusionQuery.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\26.OcclusionQuery.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/27.PostProcessing/PostProcessing_vc16.vcxproj b/examples/27.PostProcessing/PostProcessing_vc16.vcxproj new file mode 100644 index 00000000..20171507 --- /dev/null +++ b/examples/27.PostProcessing/PostProcessing_vc16.vcxproj @@ -0,0 +1,234 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 27.PostProcessing + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2} + PostProcessing + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/PostProcessing.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\27.PostProcessing.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/PostProcessing.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\27.PostProcessing.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/PostProcessing.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\27.PostProcessing.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/PostProcessing.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\27.PostProcessing.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/27.PostProcessing/main.cpp b/examples/27.PostProcessing/main.cpp index 2f49ccfc..1c9df3f5 100644 --- a/examples/27.PostProcessing/main.cpp +++ b/examples/27.PostProcessing/main.cpp @@ -17,11 +17,10 @@ written in HLSL and GLSL. We include all headers and define necessary variables as we have done before. */ +#include #include "driverChoice.h" #include "exampleHelper.h" -#include - using namespace irr; #ifdef _MSC_VER @@ -218,6 +217,7 @@ int main() break; case video::EDT_OPENGL: + case video::EDT_BURNINGSVIDEO: psFileName = mediaPath + "pp_opengl.frag"; vsFileName = mediaPath + "pp_opengl.vert"; break; diff --git a/examples/28.CubeMapping/CubeMapping_vc16.vcxproj b/examples/28.CubeMapping/CubeMapping_vc16.vcxproj new file mode 100644 index 00000000..32acf040 --- /dev/null +++ b/examples/28.CubeMapping/CubeMapping_vc16.vcxproj @@ -0,0 +1,234 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 28.CubeMapping + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A} + CubeMapping + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/CubeMapping.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\28.CubeMapping.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/CubeMapping.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\28.CubeMapping.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/CubeMapping.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\28.CubeMapping.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/CubeMapping.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win64-VisualStudio\28.CubeMapping.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/examples/30.Profiling/Profiling.xcodeproj/xcshareddata/xcschemes/30.Profiling.xcscheme b/examples/30.Profiling/Profiling.xcodeproj/xcshareddata/xcschemes/30.Profiling.xcscheme index 111087e8..966cbae1 100644 --- a/examples/30.Profiling/Profiling.xcodeproj/xcshareddata/xcschemes/30.Profiling.xcscheme +++ b/examples/30.Profiling/Profiling.xcodeproj/xcshareddata/xcschemes/30.Profiling.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 30.Profiling + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97} + 30.Profiling + Win32Proj + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win32-VisualStudio\30.Profiling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)Profiling.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + ..\..\bin\Win64-VisualStudio\30.Profiling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)Profiling.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\30.Profiling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\30.Profiling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + + \ No newline at end of file diff --git a/examples/BuildAllExamples_vc14.sln b/examples/BuildAllExamples_vc14.sln index 4766c3b5..52bdb31e 100644 --- a/examples/BuildAllExamples_vc14.sln +++ b/examples/BuildAllExamples_vc14.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32413.511 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "01.HelloWorld", "01.HelloWorld\HelloWorld_vc14.vcxproj", "{5AD4C95C-BA38-4692-BA4B-8C25A86208F9}" ProjectSection(ProjectDependencies) = postProject @@ -147,8 +147,14 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "..\source\Irrlicht\Irrlicht14.0.vcxproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "27.PostProcessing", "27.PostProcessing\PostProcessing_vc14.vcxproj", "{F25F2AC4-AEDA-4A95-9769-01A2652B54A2}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "28.CubeMapping", "28.CubeMapping\CubeMapping_vc14.vcxproj", "{DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1096,4 +1102,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2722D524-E069-40BF-B51A-2BD81342E7D7} + EndGlobalSection EndGlobal diff --git a/examples/BuildAllExamples_vc16.sln b/examples/BuildAllExamples_vc16.sln new file mode 100644 index 00000000..942e8b7b --- /dev/null +++ b/examples/BuildAllExamples_vc16.sln @@ -0,0 +1,849 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32413.511 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "01.HelloWorld", "01.HelloWorld\HelloWorld_vc16.vcxproj", "{5AD4C95C-BA38-4692-BA4B-8C25A86208F9}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "02.Quake3Map", "02.Quake3Map\Quake3Map_vc16.vcxproj", "{D1A464A2-D479-458C-98A2-60965D823CD1}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03.CustomSceneNode", "03.CustomSceneNode\CustomSceneNode_vc16.vcxproj", "{171CCDFA-C140-4956-8EB7-F0168F4521D3}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "04.Movement", "04.Movement\Movement_vc16.vcxproj", "{7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "05.UserInterface", "05.UserInterface\UserInterface_vc16.vcxproj", "{622C9DD7-0391-49FF-AF53-24F9D5A8EC53}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "06.2DGraphics", "06.2DGraphics\2DGraphics_vc16.vcxproj", "{E71B6F18-10DC-4101-A541-F6D33F71B2BD}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "07.Collision", "07.Collision\Collision_vc16.vcxproj", "{3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "08.SpecialFX", "08.SpecialFX\SpecialFX_vc16.vcxproj", "{C869BF55-B9D6-4980-BC92-60FA0CF8411A}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "09.Meshviewer", "09.Meshviewer\Meshviewer_vc16.vcxproj", "{2AE24484-22FC-481B-9A40-7CD0DA5C8E06}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "10.Shaders", "10.Shaders\Shaders_vc16.vcxproj", "{27158C82-CD15-4A9B-9848-35E7065B209F}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "11.PerPixelLighting", "11.PerPixelLighting\PerPixelLighting_vc16.vcxproj", "{C4B42409-542D-4EFC-9E6B-44713FD47A33}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "12.TerrainRendering", "12.TerrainRendering\TerrainRendering_vc16.vcxproj", "{3A5B74E5-6390-43B0-A459-2793B81FFD31}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "13.RenderToTexture", "13.RenderToTexture\RenderToTexture_vc16.vcxproj", "{0914E5C8-5352-467B-8421-C9EB35BD5596}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "14.Win32Window", "14.Win32Window\Win32Window_vc16.vcxproj", "{772FBE05-D05A-467B-9842-BEC409EEA8D0}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "15.LoadIrrFile", "15.LoadIrrFile\LoadIrrFile_vc16.vcxproj", "{78C9F424-523C-49AC-94B7-823AA4A26BF9}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "16.Quake3MapShader", "16.Quake3MapShader\Quake3MapShader_vc16.vcxproj", "{EB3B38EA-5CE7-4983-845B-880661E69D09}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "18.SplitScreen", "18.SplitScreen\SplitScreen_vc16.vcxproj", "{1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "19.MouseAndJoystick", "19.MouseAndJoystick\MouseAndJoystick_vc16.vcxproj", "{FE853A36-E0D1-4AC5-A792-B643E70D2953}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "20.ManagedLights", "20.ManagedLights\ManagedLights_vc16.vcxproj", "{16007FE2-142B-47F8-93E1-519BA3F39E71}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "21.Quake3Explorer", "21.Quake3Explorer\Quake3Explorer_vc16.vcxproj", "{CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "22.MaterialViewer", "22.MaterialViewer\MaterialViewer_vc16.vcxproj", "{4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "23.SMeshHandling", "23.SMeshHandling\SMeshHandling_vc16.vcxproj", "{6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "24.CursorControl", "24.CursorControl\CursorControl_vc16.vcxproj", "{02B67A37-50E1-49DB-BECF-905BC029C2FE}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "25.XmlHandling", "25.XmlHandling\XmlHandling_vc16.vcxproj", "{8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "26.OcclusionQuery", "26.OcclusionQuery\OcclusionQuery_vc16.vcxproj", "{5CE0E2E7-879D-4152-B61D-24E7D0707B45}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "30.Profiling", "30.Profiling\Profiling_vc16.vcxproj", "{65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUI Editor", "..\tools\GUIEditor\GUI Editor_vc16.vcxproj", "{621827DF-F399-4754-AD51-B53F4DC6BB0D}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FontTool", "..\tools\IrrFontTool\newFontTool\irrFontTool_vc16.vcxproj", "{FBE4BE88-FC64-4F51-8A43-B7883BA1195B}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeshConverter", "..\tools\MeshConverter\MeshConverter_vc16.vcxproj", "{E72B637E-4AA6-46F3-885F-AC67B4B470ED}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Demo", "Demo\Demo_vc16.vcxproj", "{6F076455-D955-45D4-9C68-4AD4E45F2D47}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "..\source\Irrlicht\Irrlicht16.0.vcxproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "27.PostProcessing", "27.PostProcessing\PostProcessing_vc16.vcxproj", "{F25F2AC4-AEDA-4A95-9769-01A2652B54A2}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "28.CubeMapping", "28.CubeMapping\CubeMapping_vc16.vcxproj", "{DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}" + ProjectSection(ProjectDependencies) = postProject + {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + SDL-Debug|Win32 = SDL-Debug|Win32 + SDL-Debug|x64 = SDL-Debug|x64 + Static lib - Debug|Win32 = Static lib - Debug|Win32 + Static lib - Debug|x64 = Static lib - Debug|x64 + Static lib - Release|Win32 = Static lib - Release|Win32 + Static lib - Release|x64 = Static lib - Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Debug|Win32.ActiveCfg = Debug|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Debug|Win32.Build.0 = Debug|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Debug|x64.ActiveCfg = Debug|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Debug|x64.Build.0 = Debug|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Release|Win32.ActiveCfg = Release|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Release|Win32.Build.0 = Release|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Release|x64.ActiveCfg = Release|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Release|x64.Build.0 = Release|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.SDL-Debug|x64.Build.0 = Debug|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Debug|x64.Build.0 = Debug|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Release|Win32.Build.0 = Release|Win32 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Release|x64.ActiveCfg = Release|x64 + {5AD4C95C-BA38-4692-BA4B-8C25A86208F9}.Static lib - Release|x64.Build.0 = Release|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Debug|Win32.ActiveCfg = Debug|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Debug|Win32.Build.0 = Debug|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Debug|x64.ActiveCfg = Debug|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Debug|x64.Build.0 = Debug|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Release|Win32.ActiveCfg = Release|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Release|Win32.Build.0 = Release|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Release|x64.ActiveCfg = Release|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Release|x64.Build.0 = Release|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.SDL-Debug|x64.Build.0 = Debug|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Debug|x64.Build.0 = Debug|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Release|Win32.Build.0 = Release|Win32 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Release|x64.ActiveCfg = Release|x64 + {D1A464A2-D479-458C-98A2-60965D823CD1}.Static lib - Release|x64.Build.0 = Release|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Debug|Win32.Build.0 = Debug|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Debug|x64.ActiveCfg = Debug|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Debug|x64.Build.0 = Debug|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Release|Win32.ActiveCfg = Release|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Release|Win32.Build.0 = Release|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Release|x64.ActiveCfg = Release|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Release|x64.Build.0 = Release|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.SDL-Debug|x64.Build.0 = Debug|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Debug|x64.Build.0 = Debug|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Release|Win32.Build.0 = Release|Win32 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Release|x64.ActiveCfg = Release|x64 + {171CCDFA-C140-4956-8EB7-F0168F4521D3}.Static lib - Release|x64.Build.0 = Release|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Debug|Win32.ActiveCfg = Debug|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Debug|Win32.Build.0 = Debug|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Debug|x64.ActiveCfg = Debug|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Debug|x64.Build.0 = Debug|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Release|Win32.ActiveCfg = Release|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Release|Win32.Build.0 = Release|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Release|x64.ActiveCfg = Release|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Release|x64.Build.0 = Release|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.SDL-Debug|x64.Build.0 = Debug|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Debug|x64.Build.0 = Debug|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Release|Win32.Build.0 = Release|Win32 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Release|x64.ActiveCfg = Release|x64 + {7BDBB7E8-E0C9-4A0D-83C1-D389D6140FEF}.Static lib - Release|x64.Build.0 = Release|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Debug|Win32.ActiveCfg = Debug|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Debug|Win32.Build.0 = Debug|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Debug|x64.ActiveCfg = Debug|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Debug|x64.Build.0 = Debug|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Release|Win32.ActiveCfg = Release|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Release|Win32.Build.0 = Release|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Release|x64.ActiveCfg = Release|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Release|x64.Build.0 = Release|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.SDL-Debug|x64.Build.0 = Debug|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Debug|x64.Build.0 = Debug|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Release|Win32.Build.0 = Release|Win32 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Release|x64.ActiveCfg = Release|x64 + {622C9DD7-0391-49FF-AF53-24F9D5A8EC53}.Static lib - Release|x64.Build.0 = Release|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Debug|Win32.ActiveCfg = Debug|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Debug|Win32.Build.0 = Debug|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Debug|x64.ActiveCfg = Debug|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Debug|x64.Build.0 = Debug|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Release|Win32.ActiveCfg = Release|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Release|Win32.Build.0 = Release|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Release|x64.ActiveCfg = Release|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Release|x64.Build.0 = Release|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.SDL-Debug|x64.Build.0 = Debug|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Debug|x64.Build.0 = Debug|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Release|Win32.Build.0 = Release|Win32 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Release|x64.ActiveCfg = Release|x64 + {E71B6F18-10DC-4101-A541-F6D33F71B2BD}.Static lib - Release|x64.Build.0 = Release|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Debug|Win32.ActiveCfg = Debug|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Debug|Win32.Build.0 = Debug|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Debug|x64.ActiveCfg = Debug|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Debug|x64.Build.0 = Debug|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Release|Win32.ActiveCfg = Release|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Release|Win32.Build.0 = Release|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Release|x64.ActiveCfg = Release|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Release|x64.Build.0 = Release|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.SDL-Debug|x64.Build.0 = Debug|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Debug|x64.Build.0 = Debug|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Release|Win32.Build.0 = Release|Win32 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Release|x64.ActiveCfg = Release|x64 + {3E30297B-5BE3-4A5C-B31E-08A28ADDB29E}.Static lib - Release|x64.Build.0 = Release|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Debug|Win32.Build.0 = Debug|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Debug|x64.ActiveCfg = Debug|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Debug|x64.Build.0 = Debug|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Release|Win32.ActiveCfg = Release|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Release|Win32.Build.0 = Release|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Release|x64.ActiveCfg = Release|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Release|x64.Build.0 = Release|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.SDL-Debug|x64.Build.0 = Debug|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Debug|x64.Build.0 = Debug|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Release|Win32.Build.0 = Release|Win32 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Release|x64.ActiveCfg = Release|x64 + {C869BF55-B9D6-4980-BC92-60FA0CF8411A}.Static lib - Release|x64.Build.0 = Release|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Debug|Win32.ActiveCfg = Debug|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Debug|Win32.Build.0 = Debug|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Debug|x64.ActiveCfg = Debug|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Debug|x64.Build.0 = Debug|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Release|Win32.ActiveCfg = Release|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Release|Win32.Build.0 = Release|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Release|x64.ActiveCfg = Release|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Release|x64.Build.0 = Release|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.SDL-Debug|x64.Build.0 = Debug|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Debug|x64.Build.0 = Debug|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Release|Win32.Build.0 = Release|Win32 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Release|x64.ActiveCfg = Release|x64 + {2AE24484-22FC-481B-9A40-7CD0DA5C8E06}.Static lib - Release|x64.Build.0 = Release|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Debug|Win32.ActiveCfg = Debug|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Debug|Win32.Build.0 = Debug|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Debug|x64.ActiveCfg = Debug|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Debug|x64.Build.0 = Debug|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Release|Win32.ActiveCfg = Release|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Release|Win32.Build.0 = Release|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Release|x64.ActiveCfg = Release|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Release|x64.Build.0 = Release|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.SDL-Debug|x64.Build.0 = Debug|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Debug|x64.Build.0 = Debug|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Release|Win32.Build.0 = Release|Win32 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Release|x64.ActiveCfg = Release|x64 + {27158C82-CD15-4A9B-9848-35E7065B209F}.Static lib - Release|x64.Build.0 = Release|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Debug|Win32.Build.0 = Debug|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Debug|x64.ActiveCfg = Debug|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Debug|x64.Build.0 = Debug|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Release|Win32.ActiveCfg = Release|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Release|Win32.Build.0 = Release|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Release|x64.ActiveCfg = Release|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Release|x64.Build.0 = Release|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.SDL-Debug|x64.Build.0 = Debug|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Debug|x64.Build.0 = Debug|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Release|Win32.Build.0 = Release|Win32 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Release|x64.ActiveCfg = Release|x64 + {C4B42409-542D-4EFC-9E6B-44713FD47A33}.Static lib - Release|x64.Build.0 = Release|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Debug|Win32.Build.0 = Debug|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Debug|x64.ActiveCfg = Debug|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Debug|x64.Build.0 = Debug|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Release|Win32.ActiveCfg = Release|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Release|Win32.Build.0 = Release|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Release|x64.ActiveCfg = Release|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Release|x64.Build.0 = Release|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.SDL-Debug|x64.Build.0 = Debug|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Debug|x64.Build.0 = Debug|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Release|Win32.Build.0 = Release|Win32 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Release|x64.ActiveCfg = Release|x64 + {3A5B74E5-6390-43B0-A459-2793B81FFD31}.Static lib - Release|x64.Build.0 = Release|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Debug|Win32.ActiveCfg = Debug|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Debug|Win32.Build.0 = Debug|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Debug|x64.ActiveCfg = Debug|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Debug|x64.Build.0 = Debug|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Release|Win32.ActiveCfg = Release|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Release|Win32.Build.0 = Release|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Release|x64.ActiveCfg = Release|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Release|x64.Build.0 = Release|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.SDL-Debug|x64.Build.0 = Debug|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Debug|x64.Build.0 = Debug|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Release|Win32.Build.0 = Release|Win32 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Release|x64.ActiveCfg = Release|x64 + {0914E5C8-5352-467B-8421-C9EB35BD5596}.Static lib - Release|x64.Build.0 = Release|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Debug|Win32.ActiveCfg = Debug|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Debug|Win32.Build.0 = Debug|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Debug|x64.ActiveCfg = Debug|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Debug|x64.Build.0 = Debug|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Release|Win32.ActiveCfg = Release|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Release|Win32.Build.0 = Release|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Release|x64.ActiveCfg = Release|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Release|x64.Build.0 = Release|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.SDL-Debug|x64.Build.0 = Debug|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Debug|x64.Build.0 = Debug|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Release|Win32.Build.0 = Release|Win32 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Release|x64.ActiveCfg = Release|x64 + {772FBE05-D05A-467B-9842-BEC409EEA8D0}.Static lib - Release|x64.Build.0 = Release|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Debug|Win32.ActiveCfg = Debug|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Debug|Win32.Build.0 = Debug|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Debug|x64.ActiveCfg = Debug|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Debug|x64.Build.0 = Debug|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Release|Win32.ActiveCfg = Release|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Release|Win32.Build.0 = Release|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Release|x64.ActiveCfg = Release|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Release|x64.Build.0 = Release|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.SDL-Debug|x64.Build.0 = Debug|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Debug|x64.Build.0 = Debug|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Release|Win32.Build.0 = Release|Win32 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Release|x64.ActiveCfg = Release|x64 + {78C9F424-523C-49AC-94B7-823AA4A26BF9}.Static lib - Release|x64.Build.0 = Release|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Debug|Win32.ActiveCfg = Debug|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Debug|Win32.Build.0 = Debug|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Debug|x64.ActiveCfg = Debug|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Debug|x64.Build.0 = Debug|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Release|Win32.ActiveCfg = Release|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Release|Win32.Build.0 = Release|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Release|x64.ActiveCfg = Release|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Release|x64.Build.0 = Release|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.SDL-Debug|x64.Build.0 = Debug|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Debug|x64.Build.0 = Debug|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Release|Win32.Build.0 = Release|Win32 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Release|x64.ActiveCfg = Release|x64 + {EB3B38EA-5CE7-4983-845B-880661E69D09}.Static lib - Release|x64.Build.0 = Release|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Debug|Win32.ActiveCfg = Debug|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Debug|Win32.Build.0 = Debug|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Debug|x64.ActiveCfg = Debug|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Debug|x64.Build.0 = Debug|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Release|Win32.ActiveCfg = Release|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Release|Win32.Build.0 = Release|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Release|x64.ActiveCfg = Release|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Release|x64.Build.0 = Release|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.SDL-Debug|x64.Build.0 = Debug|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Debug|x64.Build.0 = Debug|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Release|Win32.Build.0 = Release|Win32 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Release|x64.ActiveCfg = Release|x64 + {1AB9413E-4F53-42A3-8CB2-CB4BE22336D0}.Static lib - Release|x64.Build.0 = Release|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Debug|Win32.ActiveCfg = Debug|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Debug|Win32.Build.0 = Debug|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Debug|x64.ActiveCfg = Debug|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Debug|x64.Build.0 = Debug|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Release|Win32.ActiveCfg = Release|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Release|Win32.Build.0 = Release|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Release|x64.ActiveCfg = Release|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Release|x64.Build.0 = Release|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.SDL-Debug|x64.Build.0 = Debug|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Debug|x64.Build.0 = Debug|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Release|Win32.Build.0 = Release|Win32 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Release|x64.ActiveCfg = Release|x64 + {FE853A36-E0D1-4AC5-A792-B643E70D2953}.Static lib - Release|x64.Build.0 = Release|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Debug|Win32.ActiveCfg = Debug|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Debug|Win32.Build.0 = Debug|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Debug|x64.ActiveCfg = Debug|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Debug|x64.Build.0 = Debug|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Release|Win32.ActiveCfg = Release|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Release|Win32.Build.0 = Release|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Release|x64.ActiveCfg = Release|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Release|x64.Build.0 = Release|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.SDL-Debug|x64.Build.0 = Debug|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Debug|x64.Build.0 = Debug|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Release|Win32.Build.0 = Release|Win32 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Release|x64.ActiveCfg = Release|x64 + {16007FE2-142B-47F8-93E1-519BA3F39E71}.Static lib - Release|x64.Build.0 = Release|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Debug|Win32.ActiveCfg = Debug|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Debug|Win32.Build.0 = Debug|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Debug|x64.ActiveCfg = Debug|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Debug|x64.Build.0 = Debug|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Release|Win32.ActiveCfg = Release|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Release|Win32.Build.0 = Release|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Release|x64.ActiveCfg = Release|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Release|x64.Build.0 = Release|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.SDL-Debug|x64.Build.0 = Debug|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Debug|x64.Build.0 = Debug|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Release|Win32.Build.0 = Release|Win32 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Release|x64.ActiveCfg = Release|x64 + {CDC4AAA9-72E1-4FFA-A04D-7EF59D8B97CD}.Static lib - Release|x64.Build.0 = Release|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Debug|Win32.ActiveCfg = Debug|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Debug|Win32.Build.0 = Debug|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Debug|x64.ActiveCfg = Debug|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Debug|x64.Build.0 = Debug|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Release|Win32.ActiveCfg = Release|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Release|Win32.Build.0 = Release|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Release|x64.ActiveCfg = Release|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Release|x64.Build.0 = Release|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.SDL-Debug|x64.Build.0 = Debug|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Debug|x64.Build.0 = Debug|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Release|Win32.Build.0 = Release|Win32 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Release|x64.ActiveCfg = Release|x64 + {4E6C2F8D-BA92-4C5B-96FD-72D4FE8BD7FA}.Static lib - Release|x64.Build.0 = Release|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Debug|Win32.ActiveCfg = Debug|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Debug|Win32.Build.0 = Debug|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Debug|x64.ActiveCfg = Debug|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Debug|x64.Build.0 = Debug|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Release|Win32.ActiveCfg = Release|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Release|Win32.Build.0 = Release|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Release|x64.ActiveCfg = Release|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Release|x64.Build.0 = Release|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.SDL-Debug|x64.Build.0 = Debug|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Debug|x64.Build.0 = Debug|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Release|Win32.Build.0 = Release|Win32 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Release|x64.ActiveCfg = Release|x64 + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7}.Static lib - Release|x64.Build.0 = Release|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Debug|Win32.ActiveCfg = Debug|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Debug|Win32.Build.0 = Debug|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Debug|x64.ActiveCfg = Debug|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Debug|x64.Build.0 = Debug|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Release|Win32.ActiveCfg = Release|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Release|Win32.Build.0 = Release|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Release|x64.ActiveCfg = Release|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Release|x64.Build.0 = Release|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.SDL-Debug|x64.Build.0 = Debug|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Debug|x64.Build.0 = Debug|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Release|Win32.Build.0 = Release|Win32 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Release|x64.ActiveCfg = Release|x64 + {02B67A37-50E1-49DB-BECF-905BC029C2FE}.Static lib - Release|x64.Build.0 = Release|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Debug|Win32.Build.0 = Debug|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Debug|x64.ActiveCfg = Debug|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Debug|x64.Build.0 = Debug|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Release|Win32.ActiveCfg = Release|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Release|Win32.Build.0 = Release|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Release|x64.ActiveCfg = Release|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Release|x64.Build.0 = Release|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.SDL-Debug|x64.Build.0 = Debug|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Debug|x64.Build.0 = Debug|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Release|Win32.Build.0 = Release|Win32 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Release|x64.ActiveCfg = Release|x64 + {8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}.Static lib - Release|x64.Build.0 = Release|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Debug|Win32.ActiveCfg = Debug|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Debug|Win32.Build.0 = Debug|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Debug|x64.ActiveCfg = Debug|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Debug|x64.Build.0 = Debug|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Release|Win32.ActiveCfg = Release|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Release|Win32.Build.0 = Release|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Release|x64.ActiveCfg = Release|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Release|x64.Build.0 = Release|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.SDL-Debug|x64.Build.0 = Debug|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Debug|x64.Build.0 = Debug|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Release|Win32.Build.0 = Release|Win32 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Release|x64.ActiveCfg = Release|x64 + {5CE0E2E7-879D-4152-B61D-24E7D0707B45}.Static lib - Release|x64.Build.0 = Release|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Debug|Win32.ActiveCfg = Debug|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Debug|Win32.Build.0 = Debug|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Debug|x64.ActiveCfg = Debug|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Debug|x64.Build.0 = Debug|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Release|Win32.ActiveCfg = Release|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Release|Win32.Build.0 = Release|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Release|x64.ActiveCfg = Release|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Release|x64.Build.0 = Release|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.SDL-Debug|x64.Build.0 = Debug|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Debug|x64.Build.0 = Debug|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Release|Win32.Build.0 = Release|Win32 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Release|x64.ActiveCfg = Release|x64 + {65D9DE2E-B73E-4ADF-96D1-BF4A8B7F4F97}.Static lib - Release|x64.Build.0 = Release|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Debug|Win32.ActiveCfg = Debug|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Debug|Win32.Build.0 = Debug|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Debug|x64.ActiveCfg = Debug|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Debug|x64.Build.0 = Debug|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Release|Win32.ActiveCfg = Release|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Release|Win32.Build.0 = Release|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Release|x64.ActiveCfg = Release|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Release|x64.Build.0 = Release|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.SDL-Debug|x64.Build.0 = Debug|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Debug|x64.Build.0 = Debug|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Release|Win32.Build.0 = Release|Win32 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Release|x64.ActiveCfg = Release|x64 + {621827DF-F399-4754-AD51-B53F4DC6BB0D}.Static lib - Release|x64.Build.0 = Release|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Debug|Win32.ActiveCfg = Debug|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Debug|Win32.Build.0 = Debug|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Debug|x64.ActiveCfg = Debug|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Debug|x64.Build.0 = Debug|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Release|Win32.ActiveCfg = Release|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Release|Win32.Build.0 = Release|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Release|x64.ActiveCfg = Release|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Release|x64.Build.0 = Release|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.SDL-Debug|x64.Build.0 = Debug|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Debug|x64.Build.0 = Debug|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Release|Win32.Build.0 = Release|Win32 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Release|x64.ActiveCfg = Release|x64 + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B}.Static lib - Release|x64.Build.0 = Release|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Debug|Win32.Build.0 = Debug|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Debug|x64.ActiveCfg = Debug|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Debug|x64.Build.0 = Debug|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Release|Win32.ActiveCfg = Release|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Release|Win32.Build.0 = Release|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Release|x64.ActiveCfg = Release|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Release|x64.Build.0 = Release|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.SDL-Debug|x64.Build.0 = Debug|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Debug|x64.Build.0 = Debug|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Release|Win32.Build.0 = Release|Win32 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Release|x64.ActiveCfg = Release|x64 + {E72B637E-4AA6-46F3-885F-AC67B4B470ED}.Static lib - Release|x64.Build.0 = Release|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Debug|Win32.ActiveCfg = Debug|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Debug|Win32.Build.0 = Debug|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Debug|x64.ActiveCfg = Debug|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Debug|x64.Build.0 = Debug|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Release|Win32.ActiveCfg = Release|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Release|Win32.Build.0 = Release|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Release|x64.ActiveCfg = Release|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Release|x64.Build.0 = Release|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.SDL-Debug|x64.Build.0 = Debug|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Debug|x64.Build.0 = Debug|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Release|Win32.Build.0 = Release|Win32 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Release|x64.ActiveCfg = Release|x64 + {6F076455-D955-45D4-9C68-4AD4E45F2D47}.Static lib - Release|x64.Build.0 = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|Win32.ActiveCfg = Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|Win32.Build.0 = Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x64.ActiveCfg = Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x64.Build.0 = Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.ActiveCfg = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.Build.0 = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.ActiveCfg = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.Build.0 = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|Win32.ActiveCfg = SDL-Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|Win32.Build.0 = SDL-Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.ActiveCfg = SDL-Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.Build.0 = SDL-Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|Win32.ActiveCfg = Static lib - Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|Win32.Build.0 = Static lib - Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.ActiveCfg = Static lib - Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.Build.0 = Static lib - Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|Win32.ActiveCfg = Static lib - Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|Win32.Build.0 = Static lib - Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.ActiveCfg = Static lib - Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.Build.0 = Static lib - Release|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Debug|Win32.ActiveCfg = Debug|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Debug|Win32.Build.0 = Debug|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Debug|x64.ActiveCfg = Debug|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Debug|x64.Build.0 = Debug|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Release|Win32.ActiveCfg = Release|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Release|Win32.Build.0 = Release|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Release|x64.ActiveCfg = Release|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Release|x64.Build.0 = Release|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.SDL-Debug|x64.Build.0 = Debug|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Debug|x64.Build.0 = Debug|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Release|Win32.Build.0 = Release|Win32 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Release|x64.ActiveCfg = Release|x64 + {F25F2AC4-AEDA-4A95-9769-01A2652B54A2}.Static lib - Release|x64.Build.0 = Release|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Debug|Win32.Build.0 = Debug|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Debug|x64.ActiveCfg = Debug|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Debug|x64.Build.0 = Debug|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Release|Win32.ActiveCfg = Release|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Release|Win32.Build.0 = Release|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Release|x64.ActiveCfg = Release|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Release|x64.Build.0 = Release|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.SDL-Debug|Win32.ActiveCfg = Debug|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.SDL-Debug|Win32.Build.0 = Debug|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.SDL-Debug|x64.Build.0 = Debug|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Debug|Win32.ActiveCfg = Debug|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Debug|Win32.Build.0 = Debug|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Debug|x64.Build.0 = Debug|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Release|Win32.ActiveCfg = Release|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Release|Win32.Build.0 = Release|Win32 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Release|x64.ActiveCfg = Release|x64 + {DEE0160F-8FBD-43EC-BB96-1B9C0ED1B51A}.Static lib - Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2722D524-E069-40BF-B51A-2BD81342E7D7} + EndGlobalSection +EndGlobal diff --git a/examples/Demo/CMainMenu.cpp b/examples/Demo/CMainMenu.cpp index f67d9f3c..dcfa29c6 100644 --- a/examples/Demo/CMainMenu.cpp +++ b/examples/Demo/CMainMenu.cpp @@ -27,11 +27,7 @@ CMainMenu::CMainMenu() bool CMainMenu::run() { - video::E_DRIVER_TYPE driverType = video::EDT_OPENGL; - if (!IrrlichtDevice::isDriverSupported(video::EDT_OPENGL)) - driverType = video::EDT_BURNINGSVIDEO; - - MenuDevice = createDevice(driverType, + MenuDevice = createDevice(video::EDT_BURNINGSVIDEO, core::dimension2d(512, 384), 16, false, false, false, this); const io::path mediaPath = getExampleMediaPath(); @@ -72,14 +68,17 @@ bool CMainMenu::run() // add list box gui::IGUIListBox* box = guienv->addListBox(core::rect(10,10,220,120), optTab, 1); - for (u32 i=1; iaddItem(L"OpenGL 1.5"); + box->addItem(L"Direct3D 9.0c"); + box->addItem(L"Burning's Video 0.54"); + box->addItem(L"Irrlicht Software Renderer 1.0"); + switch (driverType ) { - if (IrrlichtDevice::isDriverSupported(video::E_DRIVER_TYPE(i))) - { - box->addItem(core::stringw(video::DRIVER_TYPE_NAMES[i]).c_str()); - if ( driverType == video::E_DRIVER_TYPE(i) ) - selected = box->getItemCount()-1; - } + case video::EDT_OPENGL: selected = 0; break; + case video::EDT_DIRECT3D9: selected = 1; break; + case video::EDT_BURNINGSVIDEO: selected = 2; break; + case video::EDT_SOFTWARE: selected = 3; break; + default: break; } box->setSelected(selected); @@ -261,17 +260,12 @@ bool CMainMenu::run() MenuDevice->drop(); - for (u32 i=1; i - - - - + + - - + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {6F076455-D955-45D4-9C68-4AD4E45F2D47} + Demo + 10.0 + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/Demo.tlb + + + + + MaxSpeed + Default + false + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\bin\Win32-VisualStudio\Demo.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Windows + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/Demo.tlb + + + + + MaxSpeed + Default + false + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + $(OutDir)$(TargetName)$(TargetExt) + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Windows + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Demo.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Windows + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/Demo.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + Windows + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + \ No newline at end of file diff --git a/include/IOSOperator.h b/include/IOSOperator.h index c62cc18c..bde1d075 100644 --- a/include/IOSOperator.h +++ b/include/IOSOperator.h @@ -38,8 +38,8 @@ public: virtual bool getProcessorSpeedMHz(u32* MHz) const = 0; //! Get the total and available system RAM - /** \param totalBytes: will contain the total system memory in bytes - \param availableBytes: will contain the available memory in bytes + /** \param totalBytes: will contain the total system memory in Kilobytes (1024 B) + \param availableBytes: will contain the available memory in Kilobytes (1024 B) \return True if successful, false if not */ virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0; diff --git a/include/ISceneManager.h b/include/ISceneManager.h index 8c4cd32d..f333d16f 100644 --- a/include/ISceneManager.h +++ b/include/ISceneManager.h @@ -616,7 +616,9 @@ namespace scene virtual ICameraSceneNode* addCameraSceneNodeMaya(ISceneNode* parent=0, f32 rotateSpeed=-1500.f, f32 zoomSpeed=200.f, f32 translationSpeed=1500.f, s32 id=-1, f32 distance=70.f, - bool makeActive=true) =0; + bool makeActive=true + , f32 rotX = 0.f, f32 rotY = 0.f + ) =0; //! Adds a camera scene node with an animator which provides mouse and keyboard control appropriate for first person shooters (FPS). /** This FPS camera is intended to provide a demonstration of a diff --git a/include/IrrCompileConfig.h b/include/IrrCompileConfig.h index 5897f04b..7db6376a 100644 --- a/include/IrrCompileConfig.h +++ b/include/IrrCompileConfig.h @@ -966,4 +966,11 @@ precision will be lower but speed higher. currently X86 only #endif #endif +//! Solve Camera errors - Debug Feature +/* - Allow Camera 90 degree up, Target==Position,buildCameraLookAtMatrixLH + - pre v1.9 CCameraSceneNode moved the up non-particular in the positive x-Direction. not compatible + - Enabled is not compatible with Irrlicht Collision and Response. +*/ +//#define _IRR_COMPILE_WITH_90_DEGREE_CAMERA + #endif // IRR_COMPILE_CONFIG_H_INCLUDED diff --git a/include/SExposedVideoData.h b/include/SExposedVideoData.h index 184cd993..b6b9f068 100644 --- a/include/SExposedVideoData.h +++ b/include/SExposedVideoData.h @@ -61,6 +61,7 @@ struct SExposedVideoData void* X11Display; void* X11Context; unsigned long X11Window; + unsigned long GLXWindow; }; struct SOpenGLOSX diff --git a/include/driverChoice.h b/include/driverChoice.h index 402e71c1..334553cf 100644 --- a/include/driverChoice.h +++ b/include/driverChoice.h @@ -50,6 +50,42 @@ namespace irr #endif } + /* + For using an alternative camera in the examples. + Try to translate the viewpoint (Maya internal CameraRotation) + */ + static inline void switchToMayaCamera(IrrlichtDevice* device) + { +#if 1 + return; +#else + if (!device) return; + + scene::ICameraSceneNode* camera = device->getSceneManager()->getActiveCamera(); + if (!camera || camera->getID() == 54321) return; + + + core::vector3df target = camera->getTarget() - camera->getPosition(); + core::vector3df relativeRotation = target.getHorizontalAngle(); + + scene::ICameraSceneNode* maya = device->getSceneManager()->addCameraSceneNodeMaya( + 0, -1500, 1000, 1500, + 54321, + target.getLength(), + true, + relativeRotation.X + 90, relativeRotation.Y + ); + if (maya) + { + maya->setNearValue(camera->getNearValue()); + maya->setFarValue(camera->getFarValue()); + } + + device->getCursorControl()->setVisible(true); + device->setResizable(true); +#endif + } + } // end namespace irr #endif diff --git a/include/matrix4.h b/include/matrix4.h index f39de7d9..26a3306b 100644 --- a/include/matrix4.h +++ b/include/matrix4.h @@ -1908,10 +1908,10 @@ namespace core const vector3df& upVector) { vector3df zaxis = target - position; - zaxis.normalize(); + zaxis.normalize_z(); - vector3df xaxis = upVector.crossProduct(zaxis); - xaxis.normalize(); + vector3df xaxis = normalize_y(upVector).crossProduct(zaxis); + xaxis.normalize_x(); vector3df yaxis = zaxis.crossProduct(xaxis); diff --git a/include/vector3d.h b/include/vector3d.h index dfc35b58..dc2e9556 100644 --- a/include/vector3d.h +++ b/include/vector3d.h @@ -195,6 +195,36 @@ namespace core return (*this *= newlength); } +#if defined(_IRR_COMPILE_WITH_90_DEGREE_CAMERA) + vector3d& normalize_camera_direction(const vector3d& def) + { + f64 l = (f64)X * X + (f64)Y * Y + (f64)Z * Z; + if (::fabs(l) < 0.000000001) + { + X = def.X; + Y = def.Y; + Z = def.Z; + } + else + { + l = 1.0 / ::sqrt(l); + f64 v; + v = X * l; X = ::fabs(v) < 0.00000001 ? (T)0 : (T)v; + v = Y * l; Y = ::fabs(v) < 0.00000001 ? (T)0 : (T)v; + v = Z * l; Z = ::fabs(v) < 0.00000001 ? (T)0 : (T)v; + } + return *this; + } +#define normalize_x() normalize_camera_direction(core::vector3df(1.f, 0.f, 0.f)) +#define normalize_z() normalize_camera_direction(core::vector3df(0.f, 0.f, 1.f)) +#define normalize_y(v) core::vector3df(v).normalize_camera_direction(core::vector3df(0.f, 1.f, 0.f)) +#else +#define normalize_x() normalize() +#define normalize_z() normalize() +#define normalize_y(v) v +#endif + + //! Inverts the vector. vector3d& invert() { diff --git a/source/Irrlicht/C3DSMeshFileLoader.cpp b/source/Irrlicht/C3DSMeshFileLoader.cpp index f5626cde..ef1dbf8b 100644 --- a/source/Irrlicht/C3DSMeshFileLoader.cpp +++ b/source/Irrlicht/C3DSMeshFileLoader.cpp @@ -613,7 +613,7 @@ bool C3DSMeshFileLoader::readTrackChunk(io::IReadFile* file, ChunkData& data, // apply transformation to mesh buffer #if 0 - if (mb) + if (false)//mb) { video::S3DVertex *vertices=(video::S3DVertex*)mb->getVertices(); if (data.header.id==C3DS_POS_TRACK_TAG) @@ -1370,4 +1370,3 @@ void C3DSMeshFileLoader::readString(io::IReadFile* file, ChunkData& data, core:: } // end namespace irr #endif // _IRR_COMPILE_WITH_3DS_LOADER_ - diff --git a/source/Irrlicht/CBlit.h b/source/Irrlicht/CBlit.h index c2fcf775..ee3b079a 100644 --- a/source/Irrlicht/CBlit.h +++ b/source/Irrlicht/CBlit.h @@ -1473,7 +1473,7 @@ static s32 StretchBlit(eBlitter operation, // Methods for Software drivers //! draws a rectangle -static void drawRectangle(video::IImage* img, const core::rect& rect, const video::SColor &color) +static inline void drawRectangle(video::IImage* img, const core::rect& rect, const video::SColor &color) { Blit(color.getAlpha() == 0xFF ? BLITTER_COLOR : BLITTER_COLOR_ALPHA, img, 0, &rect.UpperLeftCorner, 0, &rect, color.color); @@ -1481,7 +1481,7 @@ static void drawRectangle(video::IImage* img, const core::rect& rect, const //! draws a line from to with color -static void drawLine(video::IImage* img, const core::position2d& from, +static inline void drawLine(video::IImage* img, const core::position2d& from, const core::position2d& to, const video::SColor &color) { AbsRectangle clip; diff --git a/source/Irrlicht/CCameraSceneNode.cpp b/source/Irrlicht/CCameraSceneNode.cpp index e0b68fc7..34c66895 100644 --- a/source/Irrlicht/CCameraSceneNode.cpp +++ b/source/Irrlicht/CCameraSceneNode.cpp @@ -265,6 +265,9 @@ void CCameraSceneNode::render() //! update void CCameraSceneNode::updateMatrices() { +#if defined(_IRR_COMPILE_WITH_90_DEGREE_CAMERA) + ViewArea.getTransform(video::ETS_VIEW).buildCameraLookAtMatrixLH(getAbsolutePosition(), Target, UpVector); +#else core::vector3df pos = getAbsolutePosition(); core::vector3df tgtv = Target - pos; tgtv.normalize(); @@ -282,6 +285,7 @@ void CCameraSceneNode::updateMatrices() } ViewArea.getTransform(video::ETS_VIEW).buildCameraLookAtMatrixLH(pos, Target, up); +#endif ViewArea.getTransform(video::ETS_VIEW) *= Affector; recalculateViewArea(); } diff --git a/source/Irrlicht/CDepthBuffer.cpp b/source/Irrlicht/CDepthBuffer.cpp index ec05bdab..6fe25cc2 100644 --- a/source/Irrlicht/CDepthBuffer.cpp +++ b/source/Irrlicht/CDepthBuffer.cpp @@ -40,7 +40,7 @@ CDepthBuffer::~CDepthBuffer() //! clears the zbuffer -void CDepthBuffer::clear(f32 value, interlaced_control interlaced) +void CDepthBuffer::clear(f32 value, const interlaced_control interlaced) { ieee754 zMaxValue; @@ -69,7 +69,7 @@ void CDepthBuffer::setSize(const core::dimension2d& size) size_t TotalSize = Pitch * size.Height; Buffer = new u8[align_next(TotalSize,16)]; - clear( 1.f, interlace_disabled()); + clear( 1.f, interlaced_disabled()); } @@ -135,7 +135,7 @@ void CStencilBuffer::setSize(const core::dimension2d& size) size_t TotalSize = Pitch * size.Height; Buffer = new u8[align_next(TotalSize,16)]; - clear(0, interlace_disabled()); + clear(0, interlaced_disabled()); } diff --git a/source/Irrlicht/CGLXManager.cpp b/source/Irrlicht/CGLXManager.cpp index dd1c28ba..22ae5776 100644 --- a/source/Irrlicht/CGLXManager.cpp +++ b/source/Irrlicht/CGLXManager.cpp @@ -294,7 +294,11 @@ bool CGLXManager::generateSurface() return false; } - CurrentContext.OpenGLLinux.X11Window=GlxWin; + CurrentContext.OpenGLLinux.GLXWindow=GlxWin; + } + else + { + CurrentContext.OpenGLLinux.GLXWindow=CurrentContext.OpenGLLinux.X11Window; } return true; } @@ -353,13 +357,14 @@ bool CGLXManager::activateContext(const SExposedVideoData& videoData, bool resto { if (videoData.OpenGLLinux.X11Display && videoData.OpenGLLinux.X11Context) { - if (!glXMakeCurrent((Display*)videoData.OpenGLLinux.X11Display, videoData.OpenGLLinux.X11Window, (GLXContext)videoData.OpenGLLinux.X11Context)) + if (!glXMakeCurrent((Display*)videoData.OpenGLLinux.X11Display, videoData.OpenGLLinux.GLXWindow, (GLXContext)videoData.OpenGLLinux.X11Context)) { os::Printer::log("Context activation failed."); return false; } else { + CurrentContext.OpenGLLinux.GLXWindow = videoData.OpenGLLinux.GLXWindow; CurrentContext.OpenGLLinux.X11Window = videoData.OpenGLLinux.X11Window; CurrentContext.OpenGLLinux.X11Display = videoData.OpenGLLinux.X11Display; } @@ -367,13 +372,14 @@ bool CGLXManager::activateContext(const SExposedVideoData& videoData, bool resto else { // in case we only got a window ID, try with the existing values for display and context - if (!glXMakeCurrent((Display*)PrimaryContext.OpenGLLinux.X11Display, videoData.OpenGLLinux.X11Window, (GLXContext)PrimaryContext.OpenGLLinux.X11Context)) + if (!glXMakeCurrent((Display*)PrimaryContext.OpenGLLinux.X11Display, videoData.OpenGLLinux.GLXWindow, (GLXContext)PrimaryContext.OpenGLLinux.X11Context)) { os::Printer::log("Context activation failed."); return false; } else { + CurrentContext.OpenGLLinux.GLXWindow = videoData.OpenGLLinux.GLXWindow; CurrentContext.OpenGLLinux.X11Window = videoData.OpenGLLinux.X11Window; CurrentContext.OpenGLLinux.X11Display = PrimaryContext.OpenGLLinux.X11Display; } @@ -425,7 +431,7 @@ void CGLXManager::destroyContext() bool CGLXManager::swapBuffers() { - glXSwapBuffers((Display*)CurrentContext.OpenGLLinux.X11Display, CurrentContext.OpenGLLinux.X11Window); + glXSwapBuffers((Display*)CurrentContext.OpenGLLinux.X11Display, CurrentContext.OpenGLLinux.GLXWindow); return true; } diff --git a/source/Irrlicht/CGUISpriteBank.cpp b/source/Irrlicht/CGUISpriteBank.cpp index c89bb26e..19f8b771 100644 --- a/source/Irrlicht/CGUISpriteBank.cpp +++ b/source/Irrlicht/CGUISpriteBank.cpp @@ -32,10 +32,7 @@ CGUISpriteBank::CGUISpriteBank(IGUIEnvironment* env) : CGUISpriteBank::~CGUISpriteBank() { - // drop textures - for (u32 i=0; idrop(); + clear(); // drop video driver if (Driver) @@ -133,15 +130,38 @@ s32 CGUISpriteBank::addTextureAsSprite(video::ITexture* texture) return Sprites.size() - 1; } +// get FrameNr for time. return true on exisiting frame +inline bool CGUISpriteBank::getFrameNr(u32& frame,u32 index, u32 time, bool loop) const +{ + frame = 0; + if (index >= Sprites.size()) + return false; + + const SGUISprite& sprite = Sprites[index]; + const u32 frameSize = sprite.Frames.size(); + if (frameSize < 1) + return false; + + if (sprite.frameTime) + { + u32 f = (time / sprite.frameTime); + if (loop) + frame = f % frameSize; + else + frame = (f >= frameSize) ? frameSize - 1 : f; + } + return true; +} + //! draws a sprite in 2d with scale and color void CGUISpriteBank::draw2DSprite(u32 index, const core::position2di& pos, const core::rect* clip, const video::SColor& color, u32 starttime, u32 currenttime, bool loop, bool center) { - if (index >= Sprites.size() || Sprites[index].Frames.empty() ) + u32 frame = 0; + if (!getFrameNr(frame, index, currenttime - starttime, loop)) return; - u32 frame = getFrameNr(index, currenttime - starttime, loop); const video::ITexture* tex = getTexture(Sprites[index].Frames[frame].textureNumber); if (!tex) return; @@ -163,10 +183,10 @@ void CGUISpriteBank::draw2DSprite(u32 index, const core::rect& destRect, const core::rect* clip, const video::SColor * const colors, u32 timeTicks, bool loop) { - if (index >= Sprites.size() || Sprites[index].Frames.empty() ) + u32 frame = 0; + if (!getFrameNr(frame,index, timeTicks, loop)) return; - u32 frame = getFrameNr(index, timeTicks, loop); const video::ITexture* tex = getTexture(Sprites[index].Frames[frame].textureNumber); if (!tex) return; @@ -201,21 +221,16 @@ void CGUISpriteBank::draw2DSpriteBatch( const core::array& indices, { const u32 index = indices[i]; - if (index >= Sprites.size() || Sprites[index].Frames.empty() ) - continue; - // work out frame number u32 frame = 0; - if (Sprites[index].frameTime) - { - u32 f = ((currenttime - starttime) / Sprites[index].frameTime); - if (loop) - frame = f % Sprites[index].Frames.size(); - else - frame = (f >= Sprites[index].Frames.size()) ? Sprites[index].Frames.size()-1 : f; - } + if (!getFrameNr(frame, index, currenttime - starttime, loop)) + return; const u32 texNum = Sprites[index].Frames[frame].textureNumber; + if (texNum >= drawBatches.size()) + { + continue; + } SDrawBatch& currentBatch = drawBatches[texNum]; const u32 rn = Sprites[index].Frames[frame].rectNumber; diff --git a/source/Irrlicht/CGUISpriteBank.h b/source/Irrlicht/CGUISpriteBank.h index 1d63c531..e3272ad5 100644 --- a/source/Irrlicht/CGUISpriteBank.h +++ b/source/Irrlicht/CGUISpriteBank.h @@ -67,19 +67,7 @@ public: protected: - inline u32 getFrameNr(u32 index, u32 time, bool loop) const - { - u32 frame = 0; - if (Sprites[index].frameTime && Sprites[index].Frames.size() ) - { - u32 f = (time / Sprites[index].frameTime); - if (loop) - frame = f % Sprites[index].Frames.size(); - else - frame = (f >= Sprites[index].Frames.size()) ? Sprites[index].Frames.size()-1 : f; - } - return frame; - } + bool getFrameNr(u32& frameNr, u32 index, u32 time, bool loop) const; struct SDrawBatch { diff --git a/source/Irrlicht/CImage.cpp b/source/Irrlicht/CImage.cpp index 182623d0..c97f35f5 100644 --- a/source/Irrlicht/CImage.cpp +++ b/source/Irrlicht/CImage.cpp @@ -284,8 +284,8 @@ void CImage::copyToScalingBoxFilter(IImage* target, s32 bias, bool blend) target->getData(); - s32 fx = core::ceil32( sourceXStep ); - s32 fy = core::ceil32( sourceYStep ); + const s32 fx = core::ceil32( sourceXStep ); + const s32 fy = core::ceil32( sourceYStep ); f32 sx; f32 sy; @@ -403,14 +403,15 @@ void CImage::flip(bool topBottom, bool leftRight) } //! get a filtered pixel -inline SColor CImage::getPixelBox( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) const +inline SColor CImage::getPixelBox( const s32 x, const s32 y, const s32 fx, const s32 fy, const s32 bias ) const { +/* if (IImage::isCompressedFormat(Format)) { os::Printer::log("IImage::getPixelBox method doesn't work with compressed images.", ELL_WARNING); return SColor(0); } - +*/ SColor c; s32 a = 0, r = 0, g = 0, b = 0; @@ -430,12 +431,12 @@ inline SColor CImage::getPixelBox( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) cons } - s32 sdiv = s32_log2_s32(fx * fy); + const s32 sdiv = fx * fy; // s32_log2_s32(fx * fy); - a = core::s32_clamp( ( a >> sdiv ) + bias, 0, 255 ); - r = core::s32_clamp( ( r >> sdiv ) + bias, 0, 255 ); - g = core::s32_clamp( ( g >> sdiv ) + bias, 0, 255 ); - b = core::s32_clamp( ( b >> sdiv ) + bias, 0, 255 ); + a = core::s32_clamp( ( a / sdiv ) + bias, 0, 255 ); + r = core::s32_clamp( ( r / sdiv ) + bias, 0, 255 ); + g = core::s32_clamp( ( g / sdiv ) + bias, 0, 255 ); + b = core::s32_clamp( ( b / sdiv ) + bias, 0, 255 ); c.set( a, r, g, b ); return c; diff --git a/source/Irrlicht/CImage.h b/source/Irrlicht/CImage.h index 1f0ae700..edf3cd5b 100644 --- a/source/Irrlicht/CImage.h +++ b/source/Irrlicht/CImage.h @@ -62,7 +62,7 @@ public: virtual void fill(const SColor &color) IRR_OVERRIDE; private: - inline SColor getPixelBox ( s32 x, s32 y, s32 fx, s32 fy, s32 bias ) const; + inline SColor getPixelBox ( const s32 x, const s32 y, const s32 fx, const s32 fy, s32 bias ) const; }; } // end namespace video diff --git a/source/Irrlicht/CIrrDeviceOSX.mm b/source/Irrlicht/CIrrDeviceOSX.mm index 3cccb7cb..138f5481 100644 --- a/source/Irrlicht/CIrrDeviceOSX.mm +++ b/source/Irrlicht/CIrrDeviceOSX.mm @@ -550,9 +550,10 @@ namespace irr //! constructor CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param) : CIrrDeviceStub(param), Window(NULL), Display(NULL), - SoftwareDriverTarget(nil), DeviceWidth(0), DeviceHeight(0), - ScreenWidth(0), ScreenHeight(0), MouseButtonStates(0), SoftwareRendererType(0), - IsActive(true), IsFullscreen(false), IsShiftDown(false), IsControlDown(false), IsResizable(false), NativeScale(1.0f) + DeviceWidth(0), DeviceHeight(0), + ScreenWidth(0), ScreenHeight(0), MouseButtonStates(0), + IsActive(true), IsFullscreen(false), IsShiftDown(false), IsControlDown(false), IsResizable(false), NativeScale(1.0f), + SoftwareDriverTarget(nil), SoftwareRendererType(0) { struct utsname name; @@ -631,6 +632,12 @@ CIrrDeviceMacOSX::~CIrrDeviceMacOSX() void CIrrDeviceMacOSX::closeDevice() { + if ( SoftwareDriverTarget != nil ) + { + [SoftwareDriverTarget release]; + SoftwareDriverTarget = nil; + } + if (Window != nil) { [Window setIsVisible:FALSE]; @@ -652,6 +659,30 @@ bool CIrrDeviceMacOSX::createWindow() CGDisplayErr error; CGRect displayRect; CGDisplayModeRef displaymode, olddisplaymode; + + ScreenWidth = (int)CGDisplayPixelsWide(Display); + ScreenHeight = (int)CGDisplayPixelsHigh(Display); + + //NSBackingStoreNonretained not working since El Capitan (TA has) + const NSBackingStoreType backing_type = NSBackingStoreBuffered; + + if (!CreationParams.Fullscreen) + { + if (!CreationParams.WindowId) //create another window when WindowId is null + { + int x = (CreationParams.WindowPosition.X > 0) ? CreationParams.WindowPosition.X : 0; + int y = (CreationParams.WindowPosition.Y > 0) ? CreationParams.WindowPosition.Y : 0; + + if (CreationParams.WindowPosition.Y > -1) + { + int screenHeight = [[[NSScreen screens] objectAtIndex:0] frame].size.height; + y = screenHeight - y - CreationParams.WindowSize.Height; + } + + Window = [[NSWindow alloc] initWithContentRect:NSMakeRect(x, y, CreationParams.WindowSize.Width,CreationParams.WindowSize.Height) + styleMask:NSTitledWindowMask+NSClosableWindowMask+NSResizableWindowMask + backing:backing_type + defer:NO]; #endif bool result = false; @@ -849,6 +880,26 @@ void CIrrDeviceMacOSX::setResize(u32 width, u32 height) core::dimension2d new_size((u32) (width * NativeScale), (u32) (height * NativeScale)); ((CCursorControl *)CursorControl)->updateWindowSize(new_size); getVideoDriver()->OnResize(new_size); +#if 0 + NSRect driverFrame = [Window contentRectForFrameRect:[Window frame]]; + getVideoDriver()->OnResize(core::dimension2d( (s32)driverFrame.size.width, (s32)driverFrame.size.height)); + DeviceWidth = (s32)driverFrame.size.width; + DeviceHeight = (s32)driverFrame.size.height; + + //SceneManager ( Camera ) should react with reset, otherwise sticky mouse + irr::SEvent ievent; + ievent.EventType = irr::EET_MOUSE_INPUT_EVENT; + MouseButtonStates &= ~irr::EMBSM_LEFT; + ievent.MouseInput.ButtonStates = MouseButtonStates; + ievent.MouseInput.Event = irr::EMIE_LMOUSE_LEFT_UP; + ievent.MouseInput.Control = false; + ievent.MouseInput.Shift = false; + + const core::position2di& curr = ((CCursorControl *)CursorControl)->getPosition(false); + ievent.MouseInput.X = curr.X; + ievent.MouseInput.Y = curr.Y; + postEventFromUser(ievent); +#endif } else getVideoDriver()->OnResize(core::dimension2d((u32) (width * NativeScale), (u32) (height * NativeScale))); @@ -872,6 +923,10 @@ void CIrrDeviceMacOSX::createDriver() #ifdef _IRR_COMPILE_WITH_SOFTWARE_ VideoDriver = video::createSoftwareDriver(CreationParams.WindowSize, CreationParams.Fullscreen, FileSystem, this); SoftwareRendererType = 2; + if (Window) + { + Window.contentView.wantsLayer = YES; + } #else os::Printer::log("No Software driver support compiled in.", ELL_ERROR); #endif @@ -881,6 +936,12 @@ void CIrrDeviceMacOSX::createDriver() #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ VideoDriver = video::createBurningVideoDriver(CreationParams, FileSystem, this); SoftwareRendererType = 1; + if (Window) + { + Window.contentView.wantsLayer = YES; + [ Window setOpaque:YES]; + } + #else os::Printer::log("Burning's video driver was not compiled in.", ELL_ERROR); #endif @@ -989,7 +1050,7 @@ bool CIrrDeviceMacOSX::run() case NSLeftMouseUp: ievent.EventType = irr::EET_MOUSE_INPUT_EVENT; - MouseButtonStates &= !irr::EMBSM_LEFT; + MouseButtonStates &= ~irr::EMBSM_LEFT; ievent.MouseInput.ButtonStates = MouseButtonStates; ievent.MouseInput.Event = irr::EMIE_LMOUSE_LEFT_UP; postMouseEvent(event,ievent); @@ -1005,7 +1066,7 @@ bool CIrrDeviceMacOSX::run() case NSOtherMouseUp: ievent.EventType = irr::EET_MOUSE_INPUT_EVENT; - MouseButtonStates &= !irr::EMBSM_MIDDLE; + MouseButtonStates &= ~irr::EMBSM_MIDDLE; ievent.MouseInput.ButtonStates = MouseButtonStates; ievent.MouseInput.Event = irr::EMIE_MMOUSE_LEFT_UP; postMouseEvent(event,ievent); @@ -1032,7 +1093,7 @@ bool CIrrDeviceMacOSX::run() case NSRightMouseUp: ievent.EventType = irr::EET_MOUSE_INPUT_EVENT; ievent.MouseInput.Event = irr::EMIE_RMOUSE_LEFT_UP; - MouseButtonStates &= !irr::EMBSM_RIGHT; + MouseButtonStates &= ~irr::EMBSM_RIGHT; ievent.MouseInput.ButtonStates = MouseButtonStates; postMouseEvent(event,ievent); break; @@ -1458,6 +1519,108 @@ core::position2di CIrrDeviceMacOSX::getWindowPosition() bool CIrrDeviceMacOSX::present(video::IImage* surface, void* windowId, core::rect* src ) +{ +#if defined (_IRR_COMPILE_WITH_SOFTWARE_) || defined(_IRR_COMPILE_WITH_BURNINGSVIDEO_) + if (SoftwareRendererType > 0 && surface) + { + int src_width = surface->getDimension().Width; + int src_height = surface->getDimension().Height; + const u32 src_pitch = surface->getPitch(); + + const u8* src = (u8*)surface->getData(); + const video::ECOLOR_FORMAT src_format = surface->getColorFormat(); + + //little endian likely not in memory ARGB + //ECOLOR_FORMAT dstFormat = ECF_B8G8R8A8; + const u32 dst_colorsamples = SoftwareRendererType == 2 ? 3 : 3; + const u32 dst_pitch = src_width * dst_colorsamples; + + @autoreleasepool { + NSBitmapImageRep *rep = [[ + [NSBitmapImageRep alloc] initWithBitmapDataPlanes: nil + pixelsWide: src_width + pixelsHigh: src_height + bitsPerSample: 8 + samplesPerPixel: dst_colorsamples + hasAlpha: dst_colorsamples == 4 ? YES : NO + isPlanar: NO + colorSpaceName: NSDeviceRGBColorSpace + bitmapFormat: NSAlphaNonpremultipliedBitmapFormat + bytesPerRow: dst_pitch + bitsPerPixel: 8 * dst_colorsamples] autorelease + ]; + + if ( rep == nil) return false; + // convert to BGR + u8* dst = (u8*) [rep bitmapData]; + if ( 0 == dst ) return false; + + + int blitter = 0; + if ( src_format == video::ECF_A8R8G8B8 && dst_colorsamples == 3 ) blitter = 1; + else if ( src_format == video::ECF_A8R8G8B8 && dst_colorsamples == 4 ) blitter = 2; + else if ( src_format == video::ECF_A1R5G5B5 && dst_colorsamples == 3 ) blitter = 3; + + for (s32 y=0; y < src_height; ++y) + { + switch(blitter) + { + // video::CColorConverter::convert_A8R8G8B8toB8G8R8(srcdata, minWidth, destData); // broken ? + case 1: + { + const u8* sB = src; + u8* dB = dst; + + for (s32 x = 0; x < src_width; ++x) + { + dB[0] = sB[2]; + dB[1] = sB[1]; + dB[2] = sB[0]; + //dB[3] = sB[3]; + + sB += 4; + dB += 3; + } + } break; + + case 2: + { + const u32* sB = (const u32*)src; + u32 * dB = (u32*)dst; + + for (s32 x = 0; x < src_width; ++x) + { + size_t v = *sB++; + *dB++ = + (( v & 0x00ff0000 ) >> 16 ) | + (( v & 0x0000ff00 ) ) | + (( v & 0x000000ff ) << 16 ) | + 0xff000000; + } + } break; + + case 3: video::CColorConverter::convert_A1R5G5B5toB8G8R8(src, src_width, dst); break; + default: video::CColorConverter::convert_viaFormat(src, src_format, src_width, dst, video::ECF_R8G8B8); break; + } + src += src_pitch; + dst += dst_pitch; + } + + // add layer + NSSize imageSize = NSMakeSize(src_width, src_height); + NSImage *image = [[[NSImage alloc] initWithSize: imageSize] autorelease]; + + [image addRepresentation: rep]; + Window.contentView.layer.contents = image; + } + return true; + } +#endif + return false; +} + +#if 0 +bool CIrrDeviceMacOSX::present_v0(video::IImage* surface, void* windowId, core::rect* src ) { // todo: implement window ID and src rectangle @@ -1537,6 +1700,7 @@ bool CIrrDeviceMacOSX::present(video::IImage* surface, void* windowId, core::rec return false; } +#endif #if defined (_IRR_COMPILE_WITH_JOYSTICK_EVENTS_) diff --git a/source/Irrlicht/COSOperator.cpp b/source/Irrlicht/COSOperator.cpp index 8ad9aa1b..e38b588f 100644 --- a/source/Irrlicht/COSOperator.cpp +++ b/source/Irrlicht/COSOperator.cpp @@ -235,24 +235,19 @@ bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const return true; #endif -#elif defined(_IRR_POSIX_API_) && !defined(__FreeBSD__) -#if defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES) - long ps = sysconf(_SC_PAGESIZE); - long pp = sysconf(_SC_PHYS_PAGES); - long ap = sysconf(_SC_AVPHYS_PAGES); +#elif defined(_IRR_POSIX_API_) && defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES) + long ps = sysconf(_SC_PAGESIZE); + long pp = sysconf(_SC_PHYS_PAGES); + long ap = sysconf(_SC_AVPHYS_PAGES); - if ((ps==-1)||(pp==-1)||(ap==-1)) + if (ps == -1 || (Total && pp == -1) || (Avail && ap == -1)) return false; if (Total) - *Total = (u32)((ps*(long long)pp)>>10); + *Total = (u32)((pp>>10)*ps); if (Avail) - *Avail = (u32)((ps*(long long)ap)>>10); + *Avail = (u32)((ap>>10)*ps); return true; -#else - // TODO: implement for non-availability of symbols/features - return false; -#endif #elif defined(_IRR_OSX_PLATFORM_) int mib[2]; int64_t physical_memory; @@ -263,6 +258,11 @@ bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const mib[1] = HW_MEMSIZE; length = sizeof(int64_t); sysctl(mib, 2, &physical_memory, &length, NULL, 0); + + if (Total) + *Total = (u32)(physical_memory>>10); + if (Avail) + *Avail = (u32)(physical_memory>>10); // we don't know better return true; #else // TODO: implement for others diff --git a/source/Irrlicht/CSceneManager.cpp b/source/Irrlicht/CSceneManager.cpp index b860182d..d921ccab 100644 --- a/source/Irrlicht/CSceneManager.cpp +++ b/source/Irrlicht/CSceneManager.cpp @@ -775,14 +775,16 @@ ICameraSceneNode* CSceneManager::addCameraSceneNode(ISceneNode* parent, //! The returned pointer must not be dropped. ICameraSceneNode* CSceneManager::addCameraSceneNodeMaya(ISceneNode* parent, f32 rotateSpeed, f32 zoomSpeed, f32 translationSpeed, s32 id, f32 distance, - bool makeActive) + bool makeActive + , f32 rotX, f32 rotY) { ICameraSceneNode* node = addCameraSceneNode(parent, core::vector3df(), core::vector3df(0,0,100), id, makeActive); if (node) { ISceneNodeAnimator* anm = new CSceneNodeAnimatorCameraMaya(CursorControl, - rotateSpeed, zoomSpeed, translationSpeed, distance); + rotateSpeed, zoomSpeed, translationSpeed, distance + ,rotX,rotY); node->addAnimator(anm); anm->drop(); diff --git a/source/Irrlicht/CSceneManager.h b/source/Irrlicht/CSceneManager.h index 5051ecce..7314e1b3 100644 --- a/source/Irrlicht/CSceneManager.h +++ b/source/Irrlicht/CSceneManager.h @@ -147,7 +147,9 @@ namespace scene virtual ICameraSceneNode* addCameraSceneNodeMaya(ISceneNode* parent=0, f32 rotateSpeed=-1500.f, f32 zoomSpeed=200.f, f32 translationSpeed=1500.f, s32 id=-1, f32 distance=70.f, - bool makeActive=true) IRR_OVERRIDE; + bool makeActive=true + , f32 rotX = 0.f, f32 rotY = 0.f + ) IRR_OVERRIDE; //! Adds a camera scene node which is able to be controled with the mouse and keys //! like in most first person shooters (FPS): @@ -565,13 +567,36 @@ namespace scene void* TextureValue; }; + /* + const core::aabbox3d box = Node->getTransformedBoundingBox(); + Distance = core::min_(camera.getDistanceFromSQ(box.MinEdge), camera.getDistanceFromSQ(box.MaxEdge)); + */ + static inline f32 estimatedSphereDistance(const ISceneNode* node, const core::vector3df& camera) + { + const core::aabbox3d& box = node->getBoundingBox(); + const f32* m = node->getAbsoluteTransformation().pointer(); + + f32 p[4]; + p[0] = camera.X - (box.MinEdge.X * m[0] + box.MinEdge.Y * m[4] + box.MinEdge.Z * m[8] + m[12]); + p[1] = camera.Y - (box.MinEdge.X * m[1] + box.MinEdge.Y * m[5] + box.MinEdge.Z * m[9] + m[13]); + p[2] = camera.Z - (box.MinEdge.X * m[2] + box.MinEdge.Y * m[6] + box.MinEdge.Z * m[10] + m[14]); + f32 l0 = (p[0] * p[0]) + (p[1] * p[1]) + (p[2] * p[2]); + + p[0] = camera.X - (box.MaxEdge.X * m[0] + box.MaxEdge.Y * m[4] + box.MaxEdge.Z * m[8] + m[12]); + p[1] = camera.Y - (box.MaxEdge.X * m[1] + box.MaxEdge.Y * m[5] + box.MaxEdge.Z * m[9] + m[13]); + p[2] = camera.Z - (box.MaxEdge.X * m[2] + box.MaxEdge.Y * m[6] + box.MaxEdge.Z * m[10] + m[14]); + f32 l1 = (p[0] * p[0]) + (p[1] * p[1]) + (p[2] * p[2]); + return core::min_(l0, l1); + } + //! sort on distance (center) to camera struct TransparentNodeEntry { TransparentNodeEntry(ISceneNode* n, const core::vector3df& camera) : Node(n) { - Distance = Node->getAbsoluteTransformation().getTranslation().getDistanceFromSQ(camera); + //Distance = Node->getAbsoluteTransformation().getTranslation().getDistanceFromSQ(camera); + Distance = estimatedSphereDistance(n, camera); } bool operator < (const TransparentNodeEntry& other) const diff --git a/source/Irrlicht/CSceneNodeAnimatorCameraMaya.cpp b/source/Irrlicht/CSceneNodeAnimatorCameraMaya.cpp index 69fee69f..53657016 100644 --- a/source/Irrlicht/CSceneNodeAnimatorCameraMaya.cpp +++ b/source/Irrlicht/CSceneNodeAnimatorCameraMaya.cpp @@ -15,11 +15,13 @@ namespace scene //! constructor CSceneNodeAnimatorCameraMaya::CSceneNodeAnimatorCameraMaya(gui::ICursorControl* cursor, - f32 rotateSpeed, f32 zoomSpeed, f32 translateSpeed, f32 distance) + f32 rotateSpeed, f32 zoomSpeed, f32 translateSpeed, f32 distance + , f32 rotX, f32 rotY +) : CursorControl(cursor), OldCamera(0), MousePos(0.5f, 0.5f), TargetMinDistance(0.f), ZoomSpeed(zoomSpeed), RotateSpeed(rotateSpeed), TranslateSpeed(translateSpeed), - CurrentZoom(distance), RotX(0.0f), RotY(0.0f), + CurrentZoom(distance), RotX(rotX), RotY(rotY), Zooming(false), Rotating(false), Moving(false), Translating(false) { #ifdef _DEBUG @@ -164,18 +166,18 @@ void CSceneNodeAnimatorCameraMaya::animateNode(ISceneNode *node, u32 timeMs) // Translation --------------------------------- core::vector3df translate(OldTarget); - const core::vector3df upVector(camera->getUpVector()); + const core::vector3df upVector(normalize_y(camera->getUpVector())); const core::vector3df target = camera->getTarget(); core::vector3df pos = camera->getPosition(); core::vector3df tvectX = pos - target; tvectX = tvectX.crossProduct(upVector); - tvectX.normalize(); + tvectX.normalize_z(); const SViewFrustum* const va = camera->getViewFrustum(); core::vector3df tvectY = (va->getFarLeftDown() - va->getFarRightDown()); tvectY = tvectY.crossProduct(upVector.Y > 0 ? pos - target : target - pos); - tvectY.normalize(); + tvectY.normalize_x(); if (isMouseKeyDown(2) && !Zooming) { diff --git a/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h b/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h index e1031236..9b3993d3 100644 --- a/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h +++ b/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h @@ -29,7 +29,9 @@ namespace scene public: //! Constructor CSceneNodeAnimatorCameraMaya(gui::ICursorControl* cursor, f32 rotateSpeed = -1500.f, - f32 zoomSpeed = 200.f, f32 translationSpeed = 1500.f, f32 distance=70.f); + f32 zoomSpeed = 200.f, f32 translationSpeed = 1500.f, f32 distance=70.f + , f32 rotX = 0.f, f32 rotY = 0.f + ); //! Destructor virtual ~CSceneNodeAnimatorCameraMaya(); diff --git a/source/Irrlicht/CSoftware2MaterialRenderer.h b/source/Irrlicht/CSoftware2MaterialRenderer.h index 3fa42acf..a346d664 100644 --- a/source/Irrlicht/CSoftware2MaterialRenderer.h +++ b/source/Irrlicht/CSoftware2MaterialRenderer.h @@ -30,7 +30,7 @@ public: bool resetAllRenderstates, IMaterialRendererServices* services) IRR_OVERRIDE { if (Driver) - Driver->setFallback_Material(material.MaterialType); + Driver->setFallback_Material(material.MaterialType, BVT_Fix); } protected: diff --git a/source/Irrlicht/CSoftwareDriver2.cpp b/source/Irrlicht/CSoftwareDriver2.cpp index e6a9a036..90b0517d 100644 --- a/source/Irrlicht/CSoftwareDriver2.cpp +++ b/source/Irrlicht/CSoftwareDriver2.cpp @@ -18,6 +18,51 @@ // Matrix now here +template +bool mat33_transposed_inverse(irr::core::CMatrix4& out, const irr::core::CMatrix4& M) +{ + const T* burning_restrict m = M.pointer(); + + double d = + (m[0] * m[5] - m[1] * m[4]) * (m[10] * m[15] - m[11] * m[14]) - + (m[0] * m[6] - m[2] * m[4]) * (m[9] * m[15] - m[11] * m[13]) + + (m[0] * m[7] - m[3] * m[4]) * (m[9] * m[14] - m[10] * m[13]) + + (m[1] * m[6] - m[2] * m[5]) * (m[8] * m[15] - m[11] * m[12]) - + (m[1] * m[7] - m[3] * m[5]) * (m[8] * m[14] - m[10] * m[12]) + + (m[2] * m[7] - m[3] * m[6]) * (m[8] * m[13] - m[9] * m[12]); + + if (fabs(d) < DBL_MIN) + { + out.makeIdentity(); + return false; + } + + d = 1.0 / d; + T* burning_restrict o = out.pointer(); + o[0] = (T)(d * (m[5] * (m[10] * m[15] - m[11] * m[14]) + m[6] * (m[11] * m[13] - m[9] * m[15]) + m[7] * (m[9] * m[14] - m[10] * m[13]))); + o[4] = (T)(d * (m[9] * (m[2] * m[15] - m[3] * m[14]) + m[10] * (m[3] * m[13] - m[1] * m[15]) + m[11] * (m[1] * m[14] - m[2] * m[13]))); + o[8] = (T)(d * (m[13] * (m[2] * m[7] - m[3] * m[6]) + m[14] * (m[3] * m[5] - m[1] * m[7]) + m[15] * (m[1] * m[6] - m[2] * m[5]))); + o[12] = 0.f; + + o[1] = (T)(d * (m[6] * (m[8] * m[15] - m[11] * m[12]) + m[7] * (m[10] * m[12] - m[8] * m[14]) + m[4] * (m[11] * m[14] - m[10] * m[15]))); + o[5] = (T)(d * (m[10] * (m[0] * m[15] - m[3] * m[12]) + m[11] * (m[2] * m[12] - m[0] * m[14]) + m[8] * (m[3] * m[14] - m[2] * m[15]))); + o[9] = (T)(d * (m[14] * (m[0] * m[7] - m[3] * m[4]) + m[15] * (m[2] * m[4] - m[0] * m[6]) + m[12] * (m[3] * m[6] - m[2] * m[7]))); + o[13] = 0.f; + + o[2] = (T)(d * (m[7] * (m[8] * m[13] - m[9] * m[12]) + m[4] * (m[9] * m[15] - m[11] * m[13]) + m[5] * (m[11] * m[12] - m[8] * m[15]))); + o[6] = (T)(d * (m[11] * (m[0] * m[13] - m[1] * m[12]) + m[8] * (m[1] * m[15] - m[3] * m[13]) + m[9] * (m[3] * m[12] - m[0] * m[15]))); + o[10] = (T)(d * (m[15] * (m[0] * m[5] - m[1] * m[4]) + m[12] * (m[1] * m[7] - m[3] * m[5]) + m[13] * (m[3] * m[4] - m[0] * m[7]))); + o[14] = 0.f; + + o[3] = 0.f; + o[7] = 0.f; + o[11] = 0.f; + o[15] = 1.f; + + return true; +} + +#if 0 template bool mat44_transposed_inverse(irr::core::CMatrix4& out, const irr::core::CMatrix4& M) { @@ -61,13 +106,13 @@ bool mat44_transposed_inverse(irr::core::CMatrix4& out, const irr::core::CMat return true; } +#endif -#if 0 // difference to CMatrix4::getInverse . higher precision in determinant. return identity on failure template -bool mat44_inverse(CMatrix4& out, const CMatrix4& M) +bool mat44_inverse(irr::core::CMatrix4& out, const irr::core::CMatrix4& M) { - const T* m = M.pointer(); + const T* burning_restrict m = M.pointer(); double d = (m[0] * m[5] - m[1] * m[4]) * (m[10] * m[15] - m[11] * m[14]) - @@ -84,7 +129,7 @@ bool mat44_inverse(CMatrix4& out, const CMatrix4& M) } d = 1.0 / d; - T* o = out.pointer(); + T* burning_restrict o = out.pointer(); o[0] = (T)(d * (m[5] * (m[10] * m[15] - m[11] * m[14]) + m[6] * (m[11] * m[13] - m[9] * m[15]) + m[7] * (m[9] * m[14] - m[10] * m[13]))); o[1] = (T)(d * (m[9] * (m[2] * m[15] - m[3] * m[14]) + m[10] * (m[3] * m[13] - m[1] * m[15]) + m[11] * (m[1] * m[14] - m[2] * m[13]))); o[2] = (T)(d * (m[13] * (m[2] * m[7] - m[3] * m[6]) + m[14] * (m[3] * m[5] - m[1] * m[7]) + m[15] * (m[1] * m[6] - m[2] * m[5]))); @@ -107,7 +152,7 @@ bool mat44_inverse(CMatrix4& out, const CMatrix4& M) return true; } -#endif + // void CMatrix4::transformVec4(T *out, const T * in) const template @@ -121,6 +166,15 @@ inline void transformVec4Vec4(const irr::core::CMatrix4& m, T* burning_restri out[3] = in[0] * M[3] + in[1] * M[7] + in[2] * M[11] + in[3] * M[15]; } +template +inline void transformVec3Vec3(const irr::core::CMatrix4& m, T* burning_restrict out, const T* burning_restrict in) +{ + const T* burning_restrict M = m.pointer(); + out[0] = in[0] * M[0] + in[1] * M[4] + in[2] * M[8] + M[12]; + out[1] = in[0] * M[1] + in[1] * M[5] + in[2] * M[9] + M[13]; + out[2] = in[0] * M[2] + in[1] * M[6] + in[2] * M[10] + M[14]; +} + #if 0 // void CMatrix4::transformVect(T *out, const core::vector3df &in) const template @@ -135,21 +189,127 @@ inline void transformVec3Vec4(const irr::core::CMatrix4& m, T* burning_restri #endif template -inline void rotateVec3Vec4(const irr::core::CMatrix4& m, T* burning_restrict out, const T* burning_restrict in) +inline void rotateMat44Vec3Vec4(const irr::core::CMatrix4& m, T* burning_restrict out, const T* burning_restrict in) { const T* burning_restrict M = m.pointer(); out[0] = in[0] * M[0] + in[1] * M[4] + in[2] * M[8]; out[1] = in[0] * M[1] + in[1] * M[5] + in[2] * M[9]; out[2] = in[0] * M[2] + in[1] * M[6] + in[2] * M[10]; - out[3] = 0.f; + out[3] = in[0] * M[3] + in[1] * M[7] + in[2] * M[11]; + //out[3] = 0.f; } +template +inline void rotateMat33Vec3Vec4(const irr::core::CMatrix4& m, T* burning_restrict out, const T* burning_restrict in) +{ + const T* burning_restrict M = m.pointer(); + + out[0] = in[0] * M[0] + in[1] * M[4] + in[2] * M[8]; + out[1] = in[0] * M[1] + in[1] * M[5] + in[2] * M[9]; + out[2] = in[0] * M[2] + in[1] * M[6] + in[2] * M[10]; + out[3] = 0.f; //in[0] * M[3] + in[1] * M[7] + in[2] * M[11]; +} + +#if 0 +template +irr::video::sVec4 operator* (const irr::core::CMatrix4& m, const irr::core::vector3df& in) +{ + const T* burning_restrict M = m.pointer(); + return irr::video::sVec4( + in.X * M[0] + in.Y * M[4] + in.Z * M[8] + M[12], + in.X * M[1] + in.Y * M[5] + in.Z * M[9] + M[13], + in.X * M[2] + in.Y * M[6] + in.Z * M[10] + M[14], + in.X * M[3] + in.Y * M[7] + in.Z * M[11] + M[15]); +} + +template +irr::video::sVec4 operator* (const irr::core::vector3df& in, const irr::core::CMatrix4& m) +{ + const T* burning_restrict M = m.pointer(); + return irr::video::sVec4( + in.X * M[0] + in.Y * M[1] + in.Z * M[2] + M[3], + in.X * M[4] + in.Y * M[5] + in.Z * M[6] + M[7], + in.X * M[8] + in.Y * M[9] + in.Z * M[10] + M[11], + in.X * M[12] + in.Y * M[13] + in.Z * M[14] + M[15]); +} +#endif + +template +irr::video::sVec4 operator* (const irr::core::CMatrix4& m, const irr::video::sVec4& v) +{ + const T* burning_restrict M = m.pointer(); + const float* burning_restrict in = &v.x; + return irr::video::sVec4( + in[0] * M[0] + in[1] * M[4] + in[2] * M[8] + in[3] * M[12], + in[0] * M[1] + in[1] * M[5] + in[2] * M[9] + in[3] * M[13], + in[0] * M[2] + in[1] * M[6] + in[2] * M[10] + in[3] * M[14], + in[0] * M[3] + in[1] * M[7] + in[2] * M[11] + in[3] * M[15]); +} + +template +irr::video::sVec4 operator* (const irr::video::sVec4& v, const irr::core::CMatrix4& m) +{ + const T* burning_restrict M = m.pointer(); + const float* burning_restrict in = &v.x; + return irr::video::sVec4( + in[0] * M[0] + in[1] * M[1] + in[2] * M[2] + in[3] * M[3], + in[0] * M[4] + in[1] * M[5] + in[2] * M[6] + in[3] * M[7], + in[0] * M[8] + in[1] * M[9] + in[2] * M[10] + in[3] * M[11], + in[0] * M[12] + in[1] * M[13] + in[2] * M[14] + in[3] * M[15]); +} + +static inline float dot(const irr::video::sVec4& a, const irr::video::sVec4& b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; +} + +static inline float inversesqrt(const float x ) +{ + return x!= 0.f ? 1.f / sqrtf(x) : 0.f; +} + + +static inline irr::video::sVec4 operator-(const irr::video::sVec4& a) +{ + return irr::video::sVec4(-a.x, -a.y, -a.z, -a.w); +} + +static inline irr::video::sVec4 normalize(const irr::video::sVec4& a) +{ + float l = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + if (l < 0.00000001f) + return irr::video::sVec4(0.f, 0.f, 1.f, 1.f); + l = 1.f / sqrtf(l); + return irr::video::sVec4(a.x * l, a.y * l, a.z * l, a.w * l); +} + +// sVec3 xyz +static inline irr::video::sVec4 cross(const irr::video::sVec4& a, const irr::video::sVec4& b) +{ + return irr::video::sVec4(a.y * b.z - b.y * a.z, a.z * b.x - b.z * a.x, a.x * b.y - b.x * a.y, 0.f); +} + + +void irr::video::sVec4::setA8R8G8B8(const u32 argb) +{ + //error term necessary. cancels out(somehow) at 255 argb((tofixpoint(r/w)+fix_0.5) + static const f32 is = 1.f / (255.f); + r = ((argb & 0x00FF0000) >> 16) * is; + g = ((argb & 0x0000FF00) >> 8) * is; + b = ((argb & 0x000000FF)) * is; + a = ((argb & 0xFF000000) >> 24) * is; +} + + +//need to prevent floating point over/underflow //based on https://github.com/ekmett/approximate/blob/master/cbits/fast.c powf_fast_precise static inline float powf_limit(const float a, const float b) { - if (a <= 0.0000001f) return 0.f; - else if (a >= 1.f) return 1.f; + if (a < 0.00000001f) + return 0.f; + else if (a >= 1.f) + return a * b; /* calculate approximation with fraction of the exponent */ int e = (int)b; @@ -162,8 +322,8 @@ static inline float powf_limit(const float a, const float b) if (e & 1) { r *= ua; } - if (ua < 0.00000001f) - break; + if (ua < 0.000000001f) + return 0.f; ua *= ua; e >>= 1; } @@ -172,12 +332,27 @@ static inline float powf_limit(const float a, const float b) return r; } -//! clamp(value,0,1) -static inline float clampf01(const float v) + +/* + if (condition) state |= m; else state &= ~m; +*/ +REALINLINE void burning_setbit32(unsigned int& state, int condition, const unsigned int mask) { - return v < 0.f ? 0.f : v > 1.f ? 1.f : v; + // 0, or any positive to mask + //s32 conmask = -condition >> 31; + state ^= ((-condition >> 31) ^ state) & mask; } +/* + if (condition) state |= mask; else state &= ~mask; +*/ +static inline void burning_setbit(size_t& state, int condition, size_t mask) +{ + if (condition) state |= mask; + else state &= ~mask; +} + + // IImage::fill static void image_fill(irr::video::IImage* image, const irr::video::SColor& color, const interlaced_control interlaced) { @@ -199,41 +374,155 @@ static void image_fill(irr::video::IImage* image, const irr::video::SColor& colo } -union scale_setup -{ - struct - { - unsigned char x : 3; - unsigned char y : 3; - unsigned char i : 2; - }; - unsigned char v; -}; //setup Antialias. v0.52 uses as Interlaced -void get_scale(scale_setup& s, const irr::SIrrlichtCreationParameters& params) +void get_scale(interlaced_control& o, const irr::SIrrlichtCreationParameters& params) { - s.x = 1; - s.y = 1; - s.i = 0; - if (params.AntiAlias && params.WindowSize.Width <= 160 && params.WindowSize.Height <= 120) + o.raw = 0; + o.bypass = 1; +#if !defined(SOFTWARE_DRIVER_2_RENDERTARGET_SCALE) + return; +#endif + + //test case + if (0 || params.WindowSize.Width <= 160 || params.WindowSize.Height <= 128) { return; } + union scale_setup + { + struct + { + unsigned char x : 3; + unsigned char y : 3; + unsigned char i : 2; + }; + unsigned char v; + }; + + scale_setup s; + s.x = 1; + s.y = 1; + s.i = 0; + switch (params.AntiAlias) { + default: + case 0: s.x = 1; s.y = 1; s.i = 0; break; case 2: s.x = 1; s.y = 1; s.i = 1; break; case 4: s.x = 2; s.y = 2; s.i = 0; break; - case 8: s.x = 2; s.y = 2; s.i = 1; break; + case 8: s.x = 2; s.y = 2; s.i = params.Vsync ? 1 : 0; break; case 16:s.x = 4; s.y = 4; s.i = 0; break; case 32:s.x = 4; s.y = 4; s.i = 1; break; case 3: s.x = 3; s.y = 3; s.i = 0; break; case 5: s.x = 3; s.y = 3; s.i = 1; break; } + + /* + if (params.WindowSize.Height > 384) + { + s.i = params.Vsync ? 0 : 1; + s.x = params.AntiAlias ? 1 : 2; + s.y = params.AntiAlias ? 1 : 2; + } + */ + + o.enable = s.i; + o.target_scalex = s.x - 1; + o.tex_scalex = 0; // s.x >= 2 ? s.x - 1 : 0; + +#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) + o.enable = params.Vsync ? 0 : 1; + + switch (params.AntiAlias) + { + default: + case 0: o.target_scalex = 0; o.tex_scalex = 0; break; + case 2: o.target_scalex = 1; o.tex_scalex = 0; break; + case 4: o.target_scalex = 1; o.tex_scalex = 1; break; + case 8: o.target_scalex = 2; o.tex_scalex = 1; break; + } +#endif + + o.bypass = o.enable == 0; + o.nr = 0; + o.target_scaley = o.target_scalex; + o.tex_scaley = o.tex_scalex; + + if (o.enable || o.target_scalex || o.tex_scalex) + { + char buf[256]; + snprintf_irr(buf, sizeof(buf), "Burningvideo: Interlaced:%u,%u target:%u,%u tex:%u,%u", + o.enable, + o.bypass, + o.target_scalex, + o.target_scaley, + o.tex_scalex, + o.tex_scaley + ); + irr::os::Printer::log(buf, irr::ELL_NONE); + } } +#if 0 +//code snippets +#include +#include +#include +#include +void switch_between_ortho_and_perspective_projection(irr::IrrlichtDevice* device, irr::video::E_DRIVER_TYPE driverType) +{ + //switch between ortho and perspective projection + irr::scene::ICameraSceneNode* cam = device->getSceneManager()->addCameraSceneNode(); + cam->setPosition(irr::core::vector3df(300, 250, -300)); + cam->setTarget(irr::core::vector3df(0, 20, 0)); + if (1 || driverType != irr::video::EDT_BURNINGSVIDEO) + { + cam->setProjectionMatrix(irr::core::matrix4().buildProjectionMatrixOrthoLH(120, 90, 0.9f, 5000.f, driverType != irr::video::EDT_OPENGL), true); + } + else + { + irr::f32 w = (2.f * 0.9f) / (2.f / 120.f * (cam->getTarget() - cam->getPosition()).getLength()); + cam->setProjectionMatrix(irr::core::matrix4().buildProjectionMatrixPerspectiveLH(w, w * (90.f / 120.f), 0.9f, 5000.f, driverType != irr::video::EDT_OPENGL), true); + } +} + +/* + For using an alternative camera in the examples. + Try to translate the viewpoint (Maya internal CameraRotation) +*/ +static inline void switchToMayaCamera(irr::IrrlichtDevice* device) +{ + if (!device) return; + + irr::scene::ICameraSceneNode* camera = device->getSceneManager()->getActiveCamera(); + if (!camera || camera->getID() == 54321) return; + + + irr::core::vector3df target = camera->getTarget() - camera->getPosition(); + irr::core::vector3df relativeRotation = target.getHorizontalAngle(); + + irr::scene::ICameraSceneNode* maya = device->getSceneManager()->addCameraSceneNodeMaya( + 0, -1500, 1000, 1500, + 54321, + target.getLength(), + true, + relativeRotation.X + 90, relativeRotation.Y + ); + if (maya) + { + maya->setNearValue(camera->getNearValue()); + maya->setFarValue(camera->getFarValue()); + } + + device->getCursorControl()->setVisible(true); + device->setResizable(true); +} +#endif + + //turn on/off fpu exception void fpu_exception(int on) { @@ -244,10 +533,7 @@ void fpu_exception(int on) #endif } -namespace irr -{ -namespace video -{ +burning_namespace_start //! constructor CBurningVideoDriver::CBurningVideoDriver(const irr::SIrrlichtCreationParameters& params, io::IFileSystem* io, video::IImagePresenter* presenter) @@ -266,21 +552,20 @@ CBurningVideoDriver::CBurningVideoDriver(const irr::SIrrlichtCreationParameters& VertexCache_map_source_format(); //Use AntiAlias(hack) to shrink BackBuffer Size and keep ScreenSize the same as Input - scale_setup scale; - get_scale(scale, params); - //Control Interlaced BackBuffer - Interlaced.enable = scale.i; - Interlaced.bypass = !Interlaced.enable; - Interlaced.nr = 0; + //Control Interlaced/scaled BackBuffer + get_scale(Interlaced, params); + TexBias[ETF_STACK_3D] = 1.f; + TexBias[ETF_STACK_2D] = 1.f; // create backbuffer. - core::dimension2du use(params.WindowSize.Width / scale.x, params.WindowSize.Height / scale.y); + core::dimension2du use(params.WindowSize.Width / (Interlaced.target_scalex + 1), + params.WindowSize.Height / (Interlaced.target_scaley + 1)); BackBuffer = new CImage(SOFTWARE_DRIVER_2_RENDERTARGET_COLOR_FORMAT, use); if (BackBuffer) { //BackBuffer->fill(SColor(0)); - image_fill(BackBuffer, SColor(0), interlace_disabled()); + image_fill(BackBuffer, SColor(0), interlaced_disabled()); // create z buffer if (params.ZBufferBits) @@ -327,7 +612,7 @@ CBurningVideoDriver::CBurningVideoDriver(const irr::SIrrlichtCreationParameters& BurningShader[ETR_TEXTURE_GOURAUD_ALPHA] = createTRTextureGouraudAlpha(this); BurningShader[ETR_TEXTURE_GOURAUD_ALPHA_NOZ] = createTRTextureGouraudAlphaNoZ(this); - BurningShader[ETR_NORMAL_MAP_SOLID] = createTRNormalMap(this); + //BurningShader[ETR_NORMAL_MAP_SOLID] = createTRNormalMap(this, EMT_NORMAL_MAP_SOLID); BurningShader[ETR_STENCIL_SHADOW] = createTRStencilShadow(this); BurningShader[ETR_TEXTURE_BLEND] = createTRTextureBlend(this); @@ -359,12 +644,28 @@ CBurningVideoDriver::CBurningVideoDriver(const irr::SIrrlichtCreationParameters& addMaterialRenderer(tmr); // EMT_TRANSPARENT_ALPHA_CHANNEL_REF, addMaterialRenderer(tmr); // EMT_TRANSPARENT_VERTEX_ALPHA, addMaterialRenderer(tmr); // EMT_TRANSPARENT_REFLECTION_2_LAYER, + +#if 0 addMaterialRenderer(smr); // EMT_NORMAL_MAP_SOLID, addMaterialRenderer(tmr); // EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR, addMaterialRenderer(tmr); // EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA, addMaterialRenderer(smr); // EMT_PARALLAX_MAP_SOLID, addMaterialRenderer(tmr); // EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR, addMaterialRenderer(tmr); // EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA, +#else + // add normal map renderers + s32 tmp = 0; + video::IMaterialRenderer* renderer = 0; + renderer = createTRNormalMap(this, tmp, EMT_NORMAL_MAP_SOLID); renderer->drop(); + renderer = createTRNormalMap(this, tmp, EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR); renderer->drop(); + renderer = createTRNormalMap(this, tmp, EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA); renderer->drop(); + + renderer = createTRParallaxMap(this, tmp, EMT_PARALLAX_MAP_SOLID); renderer->drop(); + renderer = createTRParallaxMap(this, tmp, EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR); renderer->drop(); + renderer = createTRParallaxMap(this, tmp, EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA); renderer->drop(); + +#endif + addMaterialRenderer(tmr); // EMT_ONETEXTURE_BLEND smr->drop(); @@ -372,14 +673,14 @@ CBurningVideoDriver::CBurningVideoDriver(const irr::SIrrlichtCreationParameters& //umr->drop (); // select render target - setRenderTargetImage2(BackBuffer,0, 0); + setRenderTargetImage2(BackBuffer, 0, 0); //reset Lightspace - EyeSpace.reset(); - EyeSpace.resetFog(); + EyeSpace.init(); // select the right renderer setMaterial(Material.org); + samples_passed = 0; } @@ -392,8 +693,13 @@ CBurningVideoDriver::~CBurningVideoDriver() BackBuffer->drop(); BackBuffer = 0; } + //release textures + if (CurrentShader) + { + } + Material.mat2D.setTexture(0, 0); - // delete triangle renderers + // deleteMaterialRenders for (s32 i = 0; i < ETR2_COUNT; ++i) { if (BurningShader[i]) @@ -402,6 +708,7 @@ CBurningVideoDriver::~CBurningVideoDriver() BurningShader[i] = 0; } } + //deleteMaterialRenders(); // delete Additional buffer if (StencilBuffer) @@ -429,7 +736,6 @@ CBurningVideoDriver::~CBurningVideoDriver() } fpu_exception(0); - } @@ -462,10 +768,6 @@ bool CBurningVideoDriver::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const on = 1; break; - case EVDF_DEPTH_CLAMP: // shadow - on = 1; - break; - case EVDF_ARB_FRAGMENT_PROGRAM_1: case EVDF_ARB_VERTEX_PROGRAM_1: on = 1; @@ -479,6 +781,9 @@ bool CBurningVideoDriver::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const case EVDF_TEXTURE_NPOT: // for 2D on = 0; break; + case EVDF_DEPTH_CLAMP: // shadow + on = 1; + break; #endif #if defined(SOFTWARE_DRIVER_2_2D_AS_3D) @@ -488,6 +793,9 @@ bool CBurningVideoDriver::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const break; #endif #endif + case EVDF_OCCLUSION_QUERY: + on = 1; + break; default: on = 0; break; @@ -507,7 +815,7 @@ void CBurningVideoDriver::transform_calc(E_TRANSFORMATION_STATE_BURNING_VIDEO st size_t ok = 0; switch (state) { - case ETS_PROJ_MODEL_VIEW: + case ETS_MODEL_VIEW_PROJ: if (0 == (flag[ETS_VIEW_PROJECTION] & ETF_VALID)) transform_calc(ETS_VIEW_PROJECTION); ok = flag[ETS_WORLD] & flag[ETS_VIEW] & flag[ETS_PROJECTION] & flag[ETS_VIEW_PROJECTION] & ETF_VALID; break; @@ -520,6 +828,9 @@ void CBurningVideoDriver::transform_calc(E_TRANSFORMATION_STATE_BURNING_VIDEO st case ETS_NORMAL: ok = flag[ETS_MODEL_VIEW] & ETF_VALID; break; + case ETS_MODEL_INVERSE: + ok = flag[ETS_WORLD] & ETF_VALID; + break; default: break; } @@ -527,7 +838,7 @@ void CBurningVideoDriver::transform_calc(E_TRANSFORMATION_STATE_BURNING_VIDEO st if (!ok) { char buf[256]; - sprintf(buf, "transform_calc not valid for %d\n", state); + sprintf(buf, "transform_calc not valid for %d", state); os::Printer::log(buf, ELL_WARNING); } @@ -535,7 +846,7 @@ void CBurningVideoDriver::transform_calc(E_TRANSFORMATION_STATE_BURNING_VIDEO st switch (state) { - case ETS_PROJ_MODEL_VIEW: + case ETS_MODEL_VIEW_PROJ: if (flag[ETS_WORLD] & ETF_IDENTITY) { matrix[state] = matrix[ETS_VIEW_PROJECTION]; @@ -560,7 +871,17 @@ void CBurningVideoDriver::transform_calc(E_TRANSFORMATION_STATE_BURNING_VIDEO st } break; case ETS_NORMAL: - mat44_transposed_inverse(matrix[state], matrix[ETS_MODEL_VIEW]); + mat33_transposed_inverse(matrix[state], matrix[ETS_MODEL_VIEW]); + break; + case ETS_MODEL_INVERSE: + if (flag[ETS_WORLD] & ETF_IDENTITY) + { + matrix[state] = matrix[ETS_WORLD]; + } + else + { + mat44_inverse(matrix[state], matrix[ETS_WORLD]); + } break; default: @@ -594,7 +915,7 @@ void CBurningVideoDriver::setTransform(E_TRANSFORMATION_STATE state, const core: burning_setbit(TransformationFlag[state], mat.getDefinitelyIdentityMatrix(), ETF_IDENTITY); #else burning_setbit(flag[state], - !memcmp(mat.pointer(), core::IdentityMatrix.pointer(), sizeof(mat)), ETF_IDENTITY + 0 == memcmp(mat.pointer(), core::IdentityMatrix.pointer(), sizeof(mat)), ETF_IDENTITY ); #endif @@ -604,19 +925,20 @@ void CBurningVideoDriver::setTransform(E_TRANSFORMATION_STATE state, const core: switch (state) { case ETS_PROJECTION: - flag[ETS_PROJ_MODEL_VIEW] &= ~ETF_VALID; + flag[ETS_MODEL_VIEW_PROJ] &= ~ETF_VALID; flag[ETS_VIEW_PROJECTION] &= ~ETF_VALID; break; case ETS_VIEW: - flag[ETS_PROJ_MODEL_VIEW] &= ~ETF_VALID; + flag[ETS_MODEL_VIEW_PROJ] &= ~ETF_VALID; flag[ETS_VIEW_PROJECTION] &= ~ETF_VALID; flag[ETS_MODEL_VIEW] &= ~ETF_VALID; flag[ETS_NORMAL] &= ~ETF_VALID; break; case ETS_WORLD: - flag[ETS_PROJ_MODEL_VIEW] &= ~ETF_VALID; + flag[ETS_MODEL_VIEW_PROJ] &= ~ETF_VALID; flag[ETS_MODEL_VIEW] &= ~ETF_VALID; flag[ETS_NORMAL] &= ~ETF_VALID; + flag[ETS_MODEL_INVERSE] &= ~ETF_VALID; break; case ETS_TEXTURE_0: case ETS_TEXTURE_1: @@ -636,7 +958,7 @@ void CBurningVideoDriver::setTransform(E_TRANSFORMATION_STATE state, const core: #endif if (0 == (flag[state] & ETF_IDENTITY)) { - EyeSpace.TL_Flag |= TL_TEXTURE_TRANSFORM; + flag[state] |= ETF_TEXGEN_MATRIX; } break; default: @@ -693,7 +1015,7 @@ bool CBurningVideoDriver::setRenderTarget(video::ITexture* texture, bool clearBa CSoftwareRenderTarget2 target(this); target.RenderTexture = texture; target.TargetType = ERT_RENDER_TEXTURE; - target.Texture[0] = texture; + target.Textures[0] = texture; if (texture) texture->grab(); @@ -728,7 +1050,7 @@ bool CBurningVideoDriver::setRenderTargetEx(IRenderTarget* target, u16 clearFlag #if !defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) RenderTargetTexture = target ? target->getTexture()[0] : 0; #else - RenderTargetTexture = target ? ((CSoftwareRenderTarget2*)target)->Texture[0] : 0; + RenderTargetTexture = target ? ((CSoftwareRenderTarget2*)target)->Textures[0] : 0; #endif if (RenderTargetTexture) @@ -739,7 +1061,7 @@ bool CBurningVideoDriver::setRenderTargetEx(IRenderTarget* target, u16 clearFlag } else { - Interlaced.bypass = !Interlaced.enable; + Interlaced.bypass = Interlaced.enable == 0; setRenderTargetImage2(BackBuffer); } @@ -791,29 +1113,30 @@ void CBurningVideoDriver::setRenderTargetImage2(video::IImage* color, video::IIm //--------- Transform from NDC to DC, transform TexCoo ---------------------------------------------- -//! Blur 2D Image with PixelOffset. (default 0.375f for OpenGL and Burning) -/** SideEffects: -* if IRRLICHT_2D_TEXEL_OFFSET > 0 is applied to OpenGL/Burning, Pixel-exact Texture Coordinates do not match. -* Currently Version 1.8,1.9 has that in the Irrlicht 2D Examples where you get a Magenta Border on the Sprites -* and in the draw2DImage4cFilter Tests -*/ -#define IRRLICHT_2D_TEXEL_OFFSET 0.f - //--------- Transform from NDC to DC ---------------------------------------------- -// used to scale <-1,-1><1,1> to viewport [center,scale] +// used to scale <-1,-1><1,1> to viewport [scale,center] // controls subtexel and fill convention. // Don't tweak SOFTWARE_DRIVER_2_SUBTEXEL (-0.5f in m[1]) anymore to control texture blur effect, it's used for viewport scaling. // naming is misleading. it will write outside memory location.. -void buildNDCToDCMatrix(f32* m, const core::rect& viewport, f32 tx) +//xw = (xn+1)*(w/2) + x +void buildNDCToDCMatrix(f32* burning_restrict dc_matrix, const core::rect& viewport, const f32 center) { - m[0] = (viewport.LowerRightCorner.X - viewport.UpperLeftCorner.X + tx) * 0.5f; - m[1] = (viewport.UpperLeftCorner.X + viewport.LowerRightCorner.X-1) * 0.5f; + //const f32 center = -0.5f; // combined with top / left fill convention to (0,0)-(x-1,y-1) + + f32 x0 = viewport.UpperLeftCorner.X + center; + f32 x1 = viewport.LowerRightCorner.X - 1 - center; + f32 y0 = viewport.UpperLeftCorner.Y + center; + f32 y1 = viewport.LowerRightCorner.Y - 1 - center; + + dc_matrix[0] = (x1 - x0) * 0.5f; + dc_matrix[1] = dc_matrix[0] + x0; + + dc_matrix[2] = (y0 - y1) * 0.5f; + dc_matrix[3] = dc_matrix[2] + y1; - m[2] = (viewport.LowerRightCorner.Y - viewport.UpperLeftCorner.Y + tx) * -0.5f; - m[3] = (viewport.UpperLeftCorner.Y + viewport.LowerRightCorner.Y-1) * 0.5f; } @@ -821,13 +1144,23 @@ void buildNDCToDCMatrix(f32* m, const core::rect& viewport, f32 tx) //! sets a viewport void CBurningVideoDriver::setViewPort(const core::rect& area) { + //const core::rect rendert(0, 0, getCurrentRenderTargetSize().Width, getCurrentRenderTargetSize().Height); + const core::rect rendert(0, 0, RenderTargetSize.Width, RenderTargetSize.Height); + ViewPort = area; - - core::rect rendert(0, 0, RenderTargetSize.Width, RenderTargetSize.Height); ViewPort.clipAgainst(rendert); + const s32 viewarea = ViewPort.getArea(); - buildNDCToDCMatrix(Transformation_ETS_CLIPSCALE[0], ViewPort, 1.f/2048.f); //SkyBox,Billboard 90° problem - buildNDCToDCMatrix(Transformation_ETS_CLIPSCALE[1], ViewPort, 0.f); // OverrideMaterial2DEnabled ? -IRRLICHT_2D_TEXEL_OFFSET : 0.f); + //is this even possible to be pixel-perfect if i have not the same depth range as openGL? + //fill convention maybe flipped because window space is flipped so +-1 pixel always off? + buildNDCToDCMatrix(Transformation_ETS_CLIPSCALE[ETF_STACK_3D], ViewPort, -0.5f); + + //Pixel Offset in window space here and not in view-space to avoid clipping + //[-0.5,-0.5]-[w-0.5,h-0.5] + buildNDCToDCMatrix(Transformation_ETS_CLIPSCALE[ETF_STACK_2D], ViewPort, -0.5f); + + TexBias[ETF_STACK_3D] = viewarea <= (160 * 120) ? 1.5f : Interlaced.target_scalex ? 0.75f : 0.75f; + TexBias[ETF_STACK_2D] = 1.5f; if (CurrentShader) CurrentShader->setRenderTarget(RenderTargetSurface, ViewPort, Interlaced); @@ -862,17 +1195,16 @@ void CBurningVideoDriver::setScissor(int x, int y, int width, int height) cam is (0,0,-1) */ -const sVec4 CBurningVideoDriver::NDCPlane[6 + 2] = +static const sVec4 NDCPlane[6 + 2] = { - sVec4(0.f, 0.f, -1.f, -1.f), // near - sVec4(0.f, 0.f, 1.f, -1.f), // far + sVec4(0.f, 0.f, 1.f, -1.f), // near + sVec4(0.f, 0.f, -1.f, -1.f), // far sVec4(1.f, 0.f, 0.f, -1.f), // left sVec4(-1.f, 0.f, 0.f, -1.f), // right sVec4(0.f, 1.f, 0.f, -1.f), // bottom - sVec4(0.f, -1.f, 0.f, -1.f) // top + sVec4(0.f, -1.f, 0.f, -1.f) // top }; - /* test a vertex if it's inside the standard frustum @@ -943,9 +1275,9 @@ REALINLINE size_t CBurningVideoDriver::clipToFrustumTest(const s4DVertex* v) con #else -REALINLINE size_t clipToFrustumTest(const s4DVertex* v) +REALINLINE u32 clipToFrustumTest(const s4DVertex* v) { - size_t flag = 0; + u32 flag = 0; flag |= v->Pos.z <= v->Pos.w ? (size_t)VERTEX4D_CLIP_NEAR : 0; flag |= -v->Pos.z <= v->Pos.w ? (size_t)VERTEX4D_CLIP_FAR : 0; @@ -957,26 +1289,32 @@ REALINLINE size_t clipToFrustumTest(const s4DVertex* v) flag |= -v->Pos.y <= v->Pos.w ? (size_t)VERTEX4D_CLIP_TOP : 0; - /* - for ( u32 i = 0; i <= 6; ++i ) - { - if (v->Pos.dot_xyzw(NDCPlane[i]) <= 0.f) flag |= ((size_t)1) << i; - } - */ + //verify with plane +/* + size_t flag2 = 0; + for ( u32 i = 0; i < 6; ++i ) + { + if (v->Pos.dot_xyzw(NDCPlane[i]) <= 0.f) flag2 |= ((size_t)1) << i; + } + if (flag != flag2) + { + int g = 1; + } +*/ return flag; } #endif // _MSC_VER -size_t clipToHyperPlane( +u32 clipToHyperPlane( s4DVertexPair* burning_restrict dest, const s4DVertexPair* burning_restrict source, - const size_t inCount, + const u32 inCount, const sVec4& plane ) { - size_t outCount = 0; + u32 outCount = 0; s4DVertexPair* out = dest; const s4DVertex* a; @@ -996,8 +1334,10 @@ size_t clipToHyperPlane( a = source + index; #endif */ + + // polygon scan conversion edge sharing opposite side? //Sutherland–Hodgman - for (size_t i = 0; i < inCount; ++i) + for (u32 i = 0; i < inCount; ++i) { a = source + (i == inCount - 1 ? 0 : s4DVertex_ofs(i + 1)); @@ -1008,7 +1348,9 @@ size_t clipToHyperPlane( if (ipol_greater_0(bDotPlane)) { // intersect line segment with plane - out->interpolate(*b, *a, bDotPlane / (b->Pos - a->Pos).dot_xyzw(plane)); + //out->interpolate(*b, *a, bDotPlane / (b->Pos - a->Pos).dot_xyzw(plane)); + ipoltype denom = (b->Pos - a->Pos).dot_xyzw(plane); + out->interpolate(*b, *a, bDotPlane / denom); out += sizeof_s4DVertexPairRel; outCount += 1; } @@ -1024,11 +1366,13 @@ size_t clipToHyperPlane( else { // current point outside - if (ipol_lower_equal_0(bDotPlane)) + if (ipol_lower_0(bDotPlane)) { // previous was inside // intersect line segment with plane - out->interpolate(*b, *a, bDotPlane / (b->Pos - a->Pos).dot_xyzw(plane)); + //out->interpolate(*b, *a, bDotPlane / (b->Pos - a->Pos).dot_xyzw(plane)); + ipoltype denom = (b->Pos - a->Pos).dot_xyzw(plane); + out->interpolate(*b, *a, bDotPlane / denom); out += sizeof_s4DVertexPairRel; outCount += 1; } @@ -1047,15 +1391,15 @@ size_t clipToHyperPlane( Clip on all planes. Clipper.data clipmask per face */ -size_t CBurningVideoDriver::clipToFrustum(const size_t vIn /*, const size_t clipmask_for_face*/) +u32 CBurningVideoDriver::clipToFrustum(const u32 vIn /*, const size_t clipmask_for_face*/) { s4DVertexPair* v0 = Clipper.data; - s4DVertexPair* v1 = Clipper_temp.data; - size_t vOut = vIn; + s4DVertexPair* v1 = Clipper_disjoint.data; + u32 vOut = vIn; //clear all clipping & projected flags const u32 flag = v0[0].flag & VERTEX4D_FORMAT_MASK; - for (size_t g = 0; g != Clipper.ElementSize; ++g) + for (u32 g = 0; g != Clipper.ElementSize; ++g) { v0[g].flag = flag; v1[g].flag = flag; @@ -1064,8 +1408,8 @@ size_t CBurningVideoDriver::clipToFrustum(const size_t vIn /*, const size_t clip #if 0 for (size_t i = 0; i < 6; ++i) { - v0 = i & 1 ? Clipper_temp.data : Clipper.data; - v1 = i & 1 ? Clipper.data : Clipper_temp.data; + v0 = i & 1 ? Clipper_disjoint.data : Clipper.data; + v1 = i & 1 ? Clipper.data : Clipper_disjoint.data; //clipMask checked outside - always clip all planes #if 0 @@ -1084,7 +1428,7 @@ size_t CBurningVideoDriver::clipToFrustum(const size_t vIn /*, const size_t clip #endif - vOut = clipToHyperPlane(v1, v0, vOut, NDCPlane[0]); if (vOut < vIn) return vOut; + vOut = clipToHyperPlane(v1, v0, vOut, NDCPlane[0]); if (vOut < vIn) return vOut; vOut = clipToHyperPlane(v0, v1, vOut, NDCPlane[1]); if (vOut < vIn) return vOut; vOut = clipToHyperPlane(v1, v0, vOut, NDCPlane[2]); if (vOut < vIn) return vOut; vOut = clipToHyperPlane(v0, v1, vOut, NDCPlane[3]); if (vOut < vIn) return vOut; @@ -1109,228 +1453,215 @@ size_t CBurningVideoDriver::clipToFrustum(const size_t vIn /*, const size_t clip replace w/w by 1/w */ //aliasing problems! [dest = source + 1] -inline void CBurningVideoDriver::ndc_2_dc_and_project(s4DVertexPair* dest, const s4DVertexPair* source, const size_t vIn) const -{ - const f32* dc = Transformation_ETS_CLIPSCALE[TransformationStack]; - for (size_t g = 0; g != vIn; g += sizeof_s4DVertexPairRel) +inline void ndc_2_dc_and_project(s4DVertexPair* burning_restrict v, const u32 vIn, + const f32* burning_restrict dc_matrix +) +{ +#define src v[g] +#define dst v[g+1] + + for (u32 g = 0; g < vIn; g += sizeof_s4DVertexPairRel) { //cache doesn't work anymore? - //if ( dest[g].flag & VERTEX4D_PROJECTED ) - // continue; - //dest[g].flag = source[g].flag | VERTEX4D_PROJECTED; + //if ( dst.flag & VERTEX4D_PROJECTED ) continue; + //dst.flag = src.flag | VERTEX4D_PROJECTED; - const f32 iw = reciprocal_zero(source[g].Pos.w); + const f32 iw = reciprocal_zero_pos_underflow(src.Pos.w); + + // from normalized device to window coordinates (-1,-1) viewport + + //limit sub pixel for consistent fill convention (wrong place) +#if SOFTWARE_DRIVER_2_SUBPIXEL_LIMIT > 0 && 0 + dst.Pos.x = floorf((iw * src.Pos.x * dc_matrix[0] + dc_matrix[1]) * 128.f+0.5f) * (1.f / 128.f); + dst.Pos.y = floorf((iw * src.Pos.y * dc_matrix[2] + dc_matrix[3]) * 128.f + 0.5f) * (1.f/ 128.f); +#else + dst.Pos.x = iw * src.Pos.x * dc_matrix[0] + dc_matrix[1]; + dst.Pos.y = iw * src.Pos.y * dc_matrix[2] + dc_matrix[3]; +#endif - // to device coordinates - dest[g].Pos.x = iw * source[g].Pos.x * dc[0] + dc[1]; - dest[g].Pos.y = iw * source[g].Pos.y * dc[2] + dc[3]; //burning uses direct Z. for OpenGL it should be -Z,[-1;1] and texture flip #if !defined(SOFTWARE_DRIVER_2_USE_WBUFFER) || 1 - dest[g].Pos.z = -iw * source[g].Pos.z * 0.5f + 0.5f; + dst.Pos.z = -iw * src.Pos.z * 0.5f + 0.5f; #endif - dest[g].Pos.w = iw; + dst.Pos.w = iw; + + //ortographic projection w == 1 looses stencil + //dest[g].Pos.w = 1.f - dest[g].Pos.z; // Texture Coordinates will be projected after mipmap selection // satisfy write-combiner + //todo: only set on flag #if 1 #if BURNING_MATERIAL_MAX_TEXTURES > 0 - dest[g].Tex[0] = source[g].Tex[0]; + dst.Tex[0].x = src.Tex[0].x; + dst.Tex[0].y = src.Tex[0].y; #endif #if BURNING_MATERIAL_MAX_TEXTURES > 1 - dest[g].Tex[1] = source[g].Tex[1]; + dst.Tex[1].x = src.Tex[1].x; + dst.Tex[1].y = src.Tex[1].y; #endif #if BURNING_MATERIAL_MAX_TEXTURES > 2 - dest[g].Tex[2] = source[g].Tex[2]; + dst.Tex[2].x = src.Tex[2].x; + dst.Tex[2].y = src.Tex[2].y; #endif #if BURNING_MATERIAL_MAX_TEXTURES > 3 - dest[g].Tex[3] = source[g].Tex[3]; -#endif - + dst.Tex[3].x = src.Tex[3].x; + dst.Tex[3].y = src.Tex[3].y; +#endif #endif + // alpha? #if BURNING_MATERIAL_MAX_COLORS > 0 #ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - dest[g].Color[0] = source[g].Color[0] * iw; // alpha? + dst.Color[0].r = src.Color[0].r * iw; + dst.Color[0].g = src.Color[0].g * iw; + dst.Color[0].b = src.Color[0].b * iw; + dst.Color[0].a = src.Color[0].a * iw; #else - dest[g].Color[0] = source[g].Color[0]; + dst.Color[0] = src.Color[0]; #endif #endif #if BURNING_MATERIAL_MAX_COLORS > 1 #ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - dest[g].Color[1] = source[g].Color[1] * iw; // alpha? + dst.Color[1].r = src.Color[1].r * iw; + dst.Color[1].g = src.Color[1].g * iw; + dst.Color[1].b = src.Color[1].b * iw; + dst.Color[1].a = src.Color[1].a * iw; #else - dest[g].Color[1] = source[g].Color[1]; + dst.Color[1] = src.Color[1]; #endif #endif #if BURNING_MATERIAL_MAX_COLORS > 2 #ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - dest[g].Color[2] = source[g].Color[2] * iw; // alpha? + dst.Color[2].r = src.Color[2].r * iw; + dst.Color[2].g = src.Color[2].g * iw; + dst.Color[2].b = src.Color[2].b * iw; + dst.Color[2].a = src.Color[2].a * iw; #else - dest[g].Color[2] = source[g].Color[2]; + dst.Color[2] = src.Color[2]; #endif #endif #if BURNING_MATERIAL_MAX_COLORS > 3 #ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - dest[g].Color[3] = source[g].Color[3] * iw; // alpha? + dst.Color[3].r = src.Color[3].r * iw; + dst.Color[3].g = src.Color[3].g * iw; + dst.Color[3].b = src.Color[3].b * iw; + dst.Color[3].a = src.Color[3].a * iw; #else - dest[g].Color[3] = source[g].Color[3]; + dst.Color[3] = src.Color[3]; #endif #endif #if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 - dest[g].LightTangent[0] = source[g].LightTangent[0] * iw; +#ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT + dst.LightTangent[0].x = src.LightTangent[0].x * iw; + dst.LightTangent[0].y = src.LightTangent[0].y * iw; + dst.LightTangent[0].z = src.LightTangent[0].z * iw; +#else + dst.LightTangent[0] = src.LightTangent[0]; +#endif #endif - } + +#undef src +#undef dst + } - - -#if 0 -/*! - crossproduct in projected 2D, face -*/ -REALINLINE f32 CBurningVideoDriver::screenarea_inside(const s4DVertexPair* burning_restrict const face[]) const +inline void ndc_2_dc_and_project_grid(s4DVertexPair* burning_restrict v, const u32 vIn, + const f32* burning_restrict dc_matrix +) { - return (((face[1] + 1)->Pos.x - (face[0] + 1)->Pos.x) * ((face[2] + 1)->Pos.y - (face[0] + 1)->Pos.y)) - - (((face[2] + 1)->Pos.x - (face[0] + 1)->Pos.x) * ((face[1] + 1)->Pos.y - (face[0] + 1)->Pos.y)); - /* - float signedArea = 0; - for (int k = 1; k < output->count; k++) { - signedArea += (output->vertices[k - 1].values[0] * output->vertices[k - 0].values[1]); - signedArea -= (output->vertices[k - 0].values[0] * output->vertices[k - 1].values[1]); +#define src v[g] +#define dst v[g+1] + + u32 i; + u32 size; + + for (u32 g = 0; g < vIn; g += sizeof_s4DVertexPairRel) + { + const f32 iw = reciprocal_zero_pos_underflow(src.Pos.w); + + // from normalized device to window coordinates (-1,-1) viewport + + //limit sub pixel for consistent fill convention (wrong place) + dst.Pos.x = floorf((iw * src.Pos.x * dc_matrix[0] + dc_matrix[1]) * 4096.f + 0.5f) * (1.f / 4096.f); + dst.Pos.y = floorf((iw * src.Pos.y * dc_matrix[2] + dc_matrix[3]) * 4096.f + 0.5f) * (1.f / 4096.f); + + //burning uses direct Z. for OpenGL it should be -Z,[-1;1] and texture flip +#if !defined(SOFTWARE_DRIVER_2_USE_WBUFFER) || 1 + dst.Pos.z = -iw * src.Pos.z * 0.5f + 0.5f; +#endif + dst.Pos.w = iw; + +#if BURNING_MATERIAL_MAX_TEXTURES > 0 + size = (src.flag & VERTEX4D_FORMAT_MASK_TEXTURE) >> 16; + for (i = 0; i != size; ++i) + { + dst.Tex[i].x = src.Tex[i].x; + dst.Tex[i].y = src.Tex[i].y; } - */ -} - - -static inline f32 dot(const sVec2& a, const sVec2& b) { return a.x * b.x + a.y * b.y; } -sVec2 dFdx(const sVec2& v) { return v; } -sVec2 dFdy(const sVec2& v) { return v; } - -f32 MipmapLevel(const sVec2& uv, const sVec2& textureSize) -{ - sVec2 dx = dFdx(uv * textureSize.x); - sVec2 dy = dFdy(uv * textureSize.y); - f32 d = core::max_(dot(dx, dx), dot(dy, dy)); - return log2f(sqrtf(d)); -} #endif -//#define MAT_TEXTURE(tex) ( (video::CSoftwareTexture2*) Material.org.getTexture ( (u32)tex ) ) +#if BURNING_MATERIAL_MAX_COLORS > 0 + size = (src.flag & VERTEX4D_FORMAT_MASK_COLOR) >> 20; + for (i = 0; i != size; ++i) + { + // alpha? +#ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT + dst.Color[i].r = src.Color[i].r * iw; + dst.Color[i].g = src.Color[i].g * iw; + dst.Color[i].b = src.Color[i].b * iw; + dst.Color[i].a = src.Color[i].a * iw; +#else + dst.Color[i] = src.Color[i]; +#endif + } +#endif + + +#if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 + size = (src.flag & VERTEX4D_FORMAT_MASK_LIGHT) >> 24; + for (i = 0; i != size; ++i) + { +#ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT + dst.LightTangent[i].x = src.LightTangent[i].x * iw; + dst.LightTangent[i].y = src.LightTangent[i].y * iw; + dst.LightTangent[i].z = src.LightTangent[i].z * iw; +#else + dst.LightTangent[i] = src.LightTangent[i]; +#endif + } +#endif + +} + +#undef src +#undef dst + +} + + #define MAT_TEXTURE(tex) ( (video::CSoftwareTexture2*) Material.org.TextureLayer[tex].Texture ) -/*! - calculate from unprojected. - attribute need not to follow winding rule from position. - Edge-walking problem - Texture Wrapping problem - Atlas problem -*/ -REALINLINE s32 CBurningVideoDriver::lodFactor_inside(const s4DVertexPair* burning_restrict const face[], - const size_t m, const f32 dc_area, const f32 lod_bias) const +//! clamp(value,0,1) +#if 0 +static inline float clampfuv(const float v, const float b) { - /* - sVec2 a(v[1]->Tex[tex].x - v[0]->Tex[tex].x,v[1]->Tex[tex].y - v[0]->Tex[tex].y); - sVec2 b(v[2]->Tex[tex].x - v[0]->Tex[tex].x,v[2]->Tex[tex].y - v[0]->Tex[tex].y); - f32 area = a.x * b.y - b.x * a.y; - */ - - - /* - degenerate(A, B, C, minarea) = ((B - A).cross(C - A)).lengthSquared() < (4.0f * minarea * minarea); - check for collapsed or "long thin triangles" - */ - ieee754 signedArea; - - ieee754 t[4]; - t[0].f = face[1]->Tex[m].x - face[0]->Tex[m].x; - t[1].f = face[1]->Tex[m].y - face[0]->Tex[m].y; - - t[2].f = face[2]->Tex[m].x - face[0]->Tex[m].x; - t[3].f = face[2]->Tex[m].y - face[0]->Tex[m].y; - - //crossproduct in projected 2D -> screen area triangle - signedArea.f = t[0].f * t[3].f - t[2].f * t[1].f; - - //signedArea = - // ((face[1]->Tex[m].x - face[0]->Tex[m].x) * (face[2]->Tex[m].y - face[0]->Tex[m].y)) - // - ((face[2]->Tex[m].x - face[0]->Tex[m].x) * (face[1]->Tex[m].y - face[0]->Tex[m].y)); - - //if (signedArea*signedArea <= 0.00000000001f) - if (signedArea.fields.exp == 0) - { - ieee754 _max; - _max.u = t[0].abs.frac_exp; - if (t[1].abs.frac_exp > _max.u) _max.u = t[1].abs.frac_exp; - if (t[2].abs.frac_exp > _max.u) _max.u = t[2].abs.frac_exp; - if (t[3].abs.frac_exp > _max.u) _max.u = t[3].abs.frac_exp; - - signedArea.u = _max.fields.exp ? _max.u : ieee754_one; - - /* - //dot,length - ieee754 v[2]; - v[0].f = t[0] * t[2]; - v[1].f = t[1] * t[3]; - - //signedArea.f = t[4] > t[5] ? t[4] : t[5]; - signedArea.u = v[0].fields.frac > v[1].fields.frac ? v[0].u : v[1].u; - if (signedArea.fields.exp == 0) - { - return -1; - } - */ - } - - //only guessing: take more detail (lower mipmap) in light+bump textures - //assume transparent add is ~50% transparent -> more detail - - // 2.f from dc_area, 2.f from tex triangle ( parallelogram area) - const u32* d = MAT_TEXTURE(m)->getMipMap0_Area(); - f32 texelspace = d[0] * d[1] * lod_bias; //(m ? 0.5f : 0.5f); - - ieee754 ratio; - ratio.f = (signedArea.f * texelspace) * dc_area; - ratio.fields.sign = 0; - - //log2(0)==denormal [ use high lod] [ only if dc_area == 0 checked outside ] - return (ratio.fields.exp & 0x80) ? ratio.fields.exp - 127 : 0; /*denormal very high lod*/ - + // b = 1.f - (2.f * (1/width)) + return v < b ? b : v > 1.f - b ? 1.f - b : v; + //return v < b ? b : v > 1.f-b ? 1.f-b : v; } - - -/*! - texcoo in current mipmap dimension (face, already clipped) - -> want to help fixpoint -*/ -inline void CBurningVideoDriver::select_polygon_mipmap_inside(s4DVertex* burning_restrict face[], const size_t tex, const CSoftwareTexture2_Bound& b) const -{ -#ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - (face[0] + 1)->Tex[tex].x = face[0]->Tex[tex].x * (face[0] + 1)->Pos.w * b.w + b.cx; - (face[0] + 1)->Tex[tex].y = face[0]->Tex[tex].y * (face[0] + 1)->Pos.w * b.h + b.cy; - - (face[1] + 1)->Tex[tex].x = face[1]->Tex[tex].x * (face[1] + 1)->Pos.w * b.w + b.cx; - (face[1] + 1)->Tex[tex].y = face[1]->Tex[tex].y * (face[1] + 1)->Pos.w * b.h + b.cy; - - (face[2] + 1)->Tex[tex].x = face[2]->Tex[tex].x * (face[2] + 1)->Pos.w * b.w + b.cx; - (face[2] + 1)->Tex[tex].y = face[2]->Tex[tex].y * (face[2] + 1)->Pos.w * b.h + b.cy; -#else - (face[0] + 1)->Tex[tex].x = face[0]->Tex[tex].x * b.w; - (face[0] + 1)->Tex[tex].y = face[0]->Tex[tex].y * b.h; - - (face[1] + 1)->Tex[tex].x = face[1]->Tex[tex].x * b.w; - (face[1] + 1)->Tex[tex].y = face[1]->Tex[tex].y * b.h; - - (face[2] + 1)->Tex[tex].x = face[2]->Tex[tex].x * b.w; - (face[2] + 1)->Tex[tex].y = face[2]->Tex[tex].y * b.h; #endif +static inline float clampf01(const float v) +{ + return v < 0.f ? 0.f : v > 1.f ? 1.f : v; } @@ -1339,8 +1670,8 @@ inline void CBurningVideoDriver::select_polygon_mipmap_inside(s4DVertex* burning //! setup Vertex Format void CBurningVideoDriver::VertexCache_map_source_format() { - u32 s0 = sizeof(s4DVertex); - u32 s1 = sizeof(s4DVertex_proxy); + const u32 s0 = sizeof(s4DVertex); + const u32 s1 = sizeof(s4DVertex_proxy); if (s1 <= sizeof_s4DVertex / 2) { @@ -1361,7 +1692,7 @@ void CBurningVideoDriver::VertexCache_map_source_format() IRR_DEBUG_BREAK_IF(1); } - if (((unsigned long long)Transformation&15) || ((unsigned long long)TransformationFlag & 15)) + if (((unsigned long long)Transformation & 15) || ((unsigned long long)TransformationFlag & 15)) { os::Printer::log("BurningVideo Matrix Stack not 16 byte aligned", ELL_ERROR); IRR_DEBUG_BREAK_IF(1); @@ -1369,56 +1700,71 @@ void CBurningVideoDriver::VertexCache_map_source_format() #endif - SVSize* vSize = VertexCache.vSize; - //vSize[E4VT_STANDARD].Format = VERTEX4D_FORMAT_TEXTURE_1 | VERTEX4D_FORMAT_COLOR_1 | VERTEX4D_FORMAT_LIGHT_1 | VERTEX4D_FORMAT_SPECULAR; + SVSize* vSize = VertexShader.vSize; vSize[E4VT_STANDARD].Format = VERTEX4D_FORMAT_TEXTURE_1 | VERTEX4D_FORMAT_COLOR_2_FOG; vSize[E4VT_STANDARD].Pitch = sizeof(S3DVertex); vSize[E4VT_STANDARD].TexSize = 1; vSize[E4VT_STANDARD].TexCooSize = 1; + vSize[E4VT_STANDARD].ColSize = 2; - vSize[E4VT_2TCOORDS].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_1; + vSize[E4VT_2TCOORDS].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_2_FOG; vSize[E4VT_2TCOORDS].Pitch = sizeof(S3DVertex2TCoords); vSize[E4VT_2TCOORDS].TexSize = 2; vSize[E4VT_2TCOORDS].TexCooSize = 2; + vSize[E4VT_2TCOORDS].ColSize = 2; - //vSize[E4VT_TANGENTS].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_1 | VERTEX4D_FORMAT_LIGHT_1 | VERTEX4D_FORMAT_BUMP_DOT3; - vSize[E4VT_TANGENTS].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_2_FOG | VERTEX4D_FORMAT_LIGHT_1 | VERTEX4D_FORMAT_BUMP_DOT3; + // EMT_NORMAL_MAP_SOLID,EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR,EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA + vSize[E4VT_TANGENTS].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_4 | VERTEX4D_FORMAT_BUMP_DOT3; vSize[E4VT_TANGENTS].Pitch = sizeof(S3DVertexTangents); vSize[E4VT_TANGENTS].TexSize = 2; vSize[E4VT_TANGENTS].TexCooSize = 2; + vSize[E4VT_TANGENTS].ColSize = 4; - // reflection map - vSize[E4VT_REFLECTION_MAP].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_1; + // EMT_PARALLAX_MAP_SOLID,EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR,EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA + vSize[E4VT_TANGENTS_PARALLAX].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_4 | VERTEX4D_FORMAT_PARALLAX; + vSize[E4VT_TANGENTS_PARALLAX].Pitch = sizeof(S3DVertexTangents); + vSize[E4VT_TANGENTS_PARALLAX].TexSize = 2; + vSize[E4VT_TANGENTS_PARALLAX].TexCooSize = 2; + vSize[E4VT_TANGENTS_PARALLAX].ColSize = 4; + + // EMT_TRANSPARENT_REFLECTION_2_LAYER map + vSize[E4VT_REFLECTION_MAP].Format = VERTEX4D_FORMAT_TEXTURE_2 | VERTEX4D_FORMAT_COLOR_2_FOG; vSize[E4VT_REFLECTION_MAP].Pitch = sizeof(S3DVertex); vSize[E4VT_REFLECTION_MAP].TexSize = 2; vSize[E4VT_REFLECTION_MAP].TexCooSize = 1; //TexCoo2 generated + vSize[E4VT_REFLECTION_MAP].ColSize = 2; // shadow vSize[E4VT_SHADOW].Format = 0; vSize[E4VT_SHADOW].Pitch = sizeof(f32) * 3; // core::vector3df* vSize[E4VT_SHADOW].TexSize = 0; vSize[E4VT_SHADOW].TexCooSize = 0; + vSize[E4VT_SHADOW].ColSize = 0; // color shading only (no texture) - vSize[E4VT_NO_TEXTURE].Format = VERTEX4D_FORMAT_COLOR_1 | VERTEX4D_FORMAT_LIGHT_1 | VERTEX4D_FORMAT_SPECULAR; + vSize[E4VT_NO_TEXTURE].Format = VERTEX4D_FORMAT_COLOR_2_FOG; vSize[E4VT_NO_TEXTURE].Pitch = sizeof(S3DVertex); vSize[E4VT_NO_TEXTURE].TexSize = 0; vSize[E4VT_NO_TEXTURE].TexCooSize = 0; + vSize[E4VT_NO_TEXTURE].ColSize = 2; //Line vSize[E4VT_LINE].Format = VERTEX4D_FORMAT_COLOR_1; vSize[E4VT_LINE].Pitch = sizeof(S3DVertex); vSize[E4VT_LINE].TexSize = 0; vSize[E4VT_LINE].TexCooSize = 0; + vSize[E4VT_LINE].ColSize = 1; - size_t size; + //verify with global defines + u32 size; for (size_t i = 0; i < E4VT_COUNT; ++i) { - size_t& flag = vSize[i].Format; + u32& flag = vSize[i].Format; #if !defined(SOFTWARE_DRIVER_2_USE_SEPARATE_SPECULAR_COLOR) - flag &= ~VERTEX4D_FORMAT_SPECULAR; + //flag &= ~VERTEX4D_FORMAT_SPECULAR; #endif + if (vSize[i].TexSize > BURNING_MATERIAL_MAX_TEXTURES) vSize[i].TexSize = BURNING_MATERIAL_MAX_TEXTURES; @@ -1441,18 +1787,22 @@ void CBurningVideoDriver::VertexCache_map_source_format() } } - VertexCache.mem.resize(VERTEXCACHE_ELEMENT * 2); - VertexCache.vType = E4VT_STANDARD; + VertexShader.mem.resize(VERTEXCACHE_ELEMENT * 2); + VertexShader.vType = E4VT_STANDARD; Clipper.resize(VERTEXCACHE_ELEMENT * 2); - Clipper_temp.resize(VERTEXCACHE_ELEMENT * 2); + Clipper_disjoint.resize(VERTEXCACHE_ELEMENT * 2); - TransformationStack = 0; + TransformationStack = ETF_STACK_3D; memset(TransformationFlag, 0, sizeof(TransformationFlag)); memset(Transformation_ETS_CLIPSCALE, 0, sizeof(Transformation_ETS_CLIPSCALE)); Material.resetRenderStates = true; Material.Fallback_MaterialType = EMT_SOLID; + Material.VertexShader = BVT_Fix; + + PushShader.CurrentShader = 0; + PushShader.EdgeTestPass = 0; } @@ -1463,35 +1813,317 @@ void CBurningVideoDriver::VertexCache_map_source_format() */ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 destIndex) { - u8* burning_restrict source; + const u8* burning_restrict source; s4DVertex* burning_restrict dest; - source = (u8*)VertexCache.vertices + (sourceIndex * VertexCache.vSize[VertexCache.vType].Pitch); + source = (u8*)VertexShader.vertices + (sourceIndex * VertexShader.vSize[VertexShader.vType].Pitch); // it's a look ahead so we never hit it.. // but give priority... - //VertexCache.info[ destIndex ].hit = hitCount; + //VertexShader.info[ destIndex ].hit = hitCount; // store info - VertexCache.info[destIndex].index = sourceIndex; - VertexCache.info[destIndex].hit = 0; + VertexShader.info[destIndex].index = sourceIndex; + VertexShader.info[destIndex].hit = 0; // destination Vertex - dest = VertexCache.mem.data + s4DVertex_ofs(destIndex); + dest = VertexShader.mem.data + s4DVertex_ofs(destIndex); + dest->reset_interpolate(); //Irrlicht S3DVertex,S3DVertex2TCoords,S3DVertexTangents const S3DVertex* base = ((S3DVertex*)source); - - // transform Model * World * Camera * Projection * NDCSpace matrix const core::matrix4* matrix = Transformation[TransformationStack]; - matrix[ETS_PROJ_MODEL_VIEW].transformVect(&dest->Pos.x, base->Pos); + + if (Material.VertexShader == BVT_Fix) goto fftransform; + + { + IBurningShader* shader = (u32)Material.org.MaterialType < MaterialRenderers.size() ? + (IBurningShader*)MaterialRenderers[Material.org.MaterialType].Renderer : CurrentShader; + + // Vertex program attribute inputs: + sVec4 gl_Vertex(base->Pos.X, base->Pos.Y, base->Pos.Z, 1.f); + sVec4 gl_Normal(base->Normal.X, base->Normal.Y, base->Normal.Z, 1.f); + sVec4 gl_Color; gl_Color.setA8R8G8B8(base->Color.color); + + // Irrlicht TCoords and TCoords2 must be contiguous memory. baseTCoord has no 4 byte aligned start address! + sVec4 gl_MultiTexCoord[4]; + const sVec2Pack* baseTCoord = (const sVec2Pack*)&base->TCoords.X; + for (u32 m = 0; m < array_size(gl_MultiTexCoord); ++m) + { + if (m < VertexShader.vSize[VertexShader.vType].TexCooSize) + { + gl_MultiTexCoord[m].s = baseTCoord[m].x; + gl_MultiTexCoord[m].t = baseTCoord[m].y; + } + else + { + gl_MultiTexCoord[m].s = 0.f; + gl_MultiTexCoord[m].t = 0.f; + } + + gl_MultiTexCoord[m].p = 1.f; + gl_MultiTexCoord[m].q = 1.f; + } + +#define gl_MultiTexCoord0 gl_MultiTexCoord[0] +#define gl_MultiTexCoord1 gl_MultiTexCoord[1] +#define gl_MultiTexCoord2 gl_MultiTexCoord[2] +#define gl_MultiTexCoord3 gl_MultiTexCoord[3] +#define gl_Position dest->Pos +#define gl_TexCoord dest->Tex +#define gl_FrontColor dest->Color[0] +#define gl_BackColor dest->Color[1] +#define vec2 sVec2 +#define vec3 sVec4 +#define vec4 sVec4 +#define mat4 core::matrix4 +#define gl_NormalMatrix matrix[ETS_NORMAL] +#define gl_ModelViewMatrix matrix[ETS_MODEL_VIEW] +#define gl_ModelViewProjectionMatrix matrix[ETS_MODEL_VIEW_PROJ] +#define ftransform() (matrix[ETS_MODEL_VIEW_PROJ] * gl_Vertex) + +#define uniform(var,name) const var& name = (const var&)*shader->getUniform(#name,BL_VERTEX_FLOAT) +#define varying(var,name) var& name = (var&)*shader->getUniform(#name,BL_FRAGMENT_FLOAT) + +#ifdef _MSC_VER +#pragma warning (disable: 4244) // float/double conversion +#pragma warning (disable: 4305) // truncation +#endif + //init for default pixelshader + gl_FrontColor = gl_Color; + + //gl_FrontColor.setA8R8G8B8(gl_Color); + if (Material.VertexShader == BVT_815_0x1f847599) + { + //varying(vec2,TexCoords); + gl_Position = gl_Vertex; + + // TexCoords = (gl_Vertex.xy * 0.5 + 0.5); + gl_TexCoord[0].x = gl_Vertex.x * 0.5f + 0.5f; + gl_TexCoord[0].y = gl_Vertex.y * -0.5f + 0.5f; // runtime flip + } + else if (Material.VertexShader == BVT_opengl_vsh_shaderexample) + { + uniform(mat4, mWorldViewProj); + uniform(mat4, mInvWorld); + uniform(mat4, mTransWorld); + uniform(vec3, mLightPos); // actually just camera-pos in this case + uniform(vec4, mLightColor); + + gl_Position = mWorldViewProj * gl_Vertex; + + // transform normal somehow (NOTE: for the real vertex normal you would use an inverse-transpose world matrix instead of mInvWorld) + vec4 normal = vec4(gl_Normal, 0.0); + normal = mInvWorld * normal; + normal = normalize(normal); + + // (NOTE: not sure why transposed world is used instead of world?) + vec4 worldpos = gl_Vertex * mTransWorld; + + vec4 lightVector = worldpos - vec4(mLightPos, 1.0); + lightVector = normalize(lightVector); + + float tmp2 = dot(-lightVector, normal); + + sVec4 tmp = mLightColor * tmp2; + gl_FrontColor = gl_BackColor = vec4(tmp.x, tmp.y, tmp.z, 0.0); + + gl_TexCoord[0] = gl_MultiTexCoord0; + + gl_FrontColor.clampf01(); + } + else if (Material.VertexShader == STK_1259_0xc8226e1a) + { + // Creates a bubble (wave) effect by distorting the texture depending on time + + uniform(float, time); + varying(vec2, uv); + + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = ftransform(); + + float delta_x = cos(time * 3.0) * sin(4.0 * gl_TexCoord[0].st.s * 6.28318531); + float delta_y = cos(time * 2.0) * sin(3.0 * gl_TexCoord[0].st.t * 6.28318531); + + uv = gl_TexCoord[0].st_op() + vec2(0.02 * delta_x, 0.02 * delta_y); + + //fragment + uniform(float, transparency); + gl_TexCoord[0] = uv; + gl_FrontColor.a *= transparency; + + } + else if (Material.VertexShader == STK_958_0xa048973b) + { + // motion_blur.vert + gl_TexCoord[0].st_op() = vec2(gl_MultiTexCoord0.s, gl_MultiTexCoord0.t); + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = gl_Vertex; + } + else if (Material.VertexShader == STK_1309_0x1fd689c2) + { + varying(vec3, lightVec); + varying(vec3, halfVec); + varying(vec3, eyeVec); + + uniform(vec3, lightdir); + + gl_TexCoord[0] = gl_MultiTexCoord0; + + // Building the matrix Eye Space -> Tangent Space + vec3 n = normalize(gl_NormalMatrix * gl_Normal); + vec3 t = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz()); // tangent + vec3 b = cross(n, t); + + vec3 vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex); + + // transform light and half angle vectors by tangent basis + vec3 v; + v.x = dot(lightdir, t); + v.y = dot(lightdir, b); + v.z = dot(lightdir, n); + v.w = 0; + lightVec = normalize(v); + + v.x = dot(vertexPosition, t); + v.y = dot(vertexPosition, b); + v.z = dot(vertexPosition, n); + v.w = 0; + eyeVec = normalize(v); + + vertexPosition = normalize(vertexPosition); + + // Normalize the halfVector to pass it to the fragment shader + + // No need to divide by two, the result is normalized anyway. + // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0); + vec3 halfVector = normalize(vertexPosition + lightdir); + v.x = dot(halfVector, t); + v.y = dot(halfVector, b); + v.z = dot(halfVector, n); + + // No need to normalize, t,b,n and halfVector are normal vectors. + //normalize (v); + halfVec = v; + + + gl_Position = ftransform(); + } + else if (Material.VertexShader == STK_1204_0x072a4094) + { + varying(vec3, normal); + varying(vec4, vertex_color); + varying(vec3, lightdir2); + uniform(vec3, lightdir); + + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[1] = gl_MultiTexCoord1; + gl_Position = ftransform(); + vertex_color = gl_Color; + + //normal = normalize(gl_NormalMatrix * gl_Normal); + normal = normalize(gl_Normal); + lightdir2 = normalize(lightdir); + } + else if (Material.VertexShader == STK_1303_0xd872cdb6) + { + // Shader based on work by Fabien Sanglard + // Released under the terms of CC-BY 3.0 + + varying(vec3,lightVec); + varying(vec3,halfVec); + varying(vec3,eyeVec); + + uniform(vec3,lightdir); + + //void main() + { + + gl_TexCoord[0] = gl_MultiTexCoord0; + + // Building the matrix Eye Space -> Tangent Space + vec3 n = normalize(gl_NormalMatrix * gl_Normal); + // gl_MultiTexCoord1.xyz + vec3 t = normalize(gl_NormalMatrix * vec3(1.0, 0.0, 0.0)); // tangent + vec3 b = cross(n, t); + + vec3 vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex); + + // transform light and half angle vectors by tangent basis + vec3 v; + v.x = dot(lightdir, t); + v.y = dot(lightdir, b); + v.z = dot(lightdir, n); + lightVec = normalize(v); + + vertexPosition = normalize(vertexPosition); + + eyeVec = normalize(-vertexPosition); // we are in Eye Coordinates, so EyePos is (0,0,0) + + // Normalize the halfVector to pass it to the fragment shader + + // No need to divide by two, the result is normalized anyway. + // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0); + vec3 halfVector = normalize(vertexPosition + lightdir); + v.x = dot(halfVector, t); + v.y = dot(halfVector, b); + v.z = dot(halfVector, n); + + // No need to normalize, t,b,n and halfVector are normal vectors. + //normalize (v); + halfVec = v; + + gl_Position = ftransform(); + } + } +#ifdef _MSC_VER +#pragma warning (default: 4244) // conversion +#pragma warning (default: 4305) // truncation +#endif + +#undef gl_MultiTexCoord0 +#undef gl_MultiTexCoord1 +#undef gl_MultiTexCoord2 +#undef gl_MultiTexCoord3 +#undef vec2 +#undef vec3 +#undef vec4 +#undef mat4 +#undef uniform +#undef varying +#undef gl_TexCoord +#undef gl_FrontColor +#undef gl_BackColor +#undef ftransform +#undef gl_NormalMatrix +#undef gl_ModelViewMatrix +#undef gl_ModelViewProjectionMatrix + + goto clipandproject; + } + +fftransform: + // transform Model * World * Camera * Projection * NDCSpace matrix + matrix[ETS_MODEL_VIEW_PROJ].transformVect(&dest[0].Pos.x, base->Pos); + +/* + ieee754* p = (ieee754*) &dest[0].Pos.x; + p[0].fields.frac &= 0xFFFFFFF0; + p[1].fields.frac &= 0xFFFFFFF0; + p[2].fields.frac &= 0xFFFFFFF0; + //p[3].fields.frac &= 0xFFFFFFF0; +*/ + //dest[0].Pos.x = floorf(dest[0].Pos.x * 4096.f + 0.5f) * (1.f / 4096.f); + //dest[0].Pos.y = floorf(dest[0].Pos.y * 4096.f + 0.5f) * (1.f / 4096.f); + //dest[0].Pos.z = floorf(dest[0].Pos.z * 4096.f + 0.5f) * (1.f / 4096.f); + //dest[0].Pos.w = floorf(dest[0].Pos.w * 4096.f + 0.5f) * (1.f / 4096.f); //mhm ... maybe no goto - if (VertexCache.vType == E4VT_SHADOW) + if (VertexShader.vType == E4VT_SHADOW) { //core::vector3df i = base->Pos; //i.Z -= 0.5f; - //matrix[ETS_PROJ_MODEL_VIEW].transformVect(&dest->Pos.x, i); + //matrix[ETS_MODEL_VIEW_PROJ].transformVect(&dest->Pos.x, i); //GL_DEPTH_CLAMP,EVDF_DEPTH_CLAMP //if ( dest->Pos.z < dest->Pos.w) @@ -1510,61 +2142,45 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest #if defined (SOFTWARE_DRIVER_2_LIGHTING) || defined ( SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM ) // vertex, normal in light(eye) space - if (Material.org.Lighting || (EyeSpace.TL_Flag & (TL_TEXTURE_TRANSFORM | TL_FOG))) + if (EyeSpace.TL_Flag & (TL_TEXTURE_TRANSFORM | TL_FOG | TL_LIGHT)) { sVec4 vertex4; //eye coordinate position of vertex matrix[ETS_MODEL_VIEW].transformVect(&vertex4.x, base->Pos); - const f32 iw = reciprocal_zero(vertex4.w); + f32 iw = reciprocal_zero_pos_underflow(vertex4.w); EyeSpace.vertex.x = vertex4.x * iw; EyeSpace.vertex.y = vertex4.y * iw; EyeSpace.vertex.z = vertex4.z * iw; EyeSpace.vertex.w = iw; //EyeSpace.cam_distance = EyeSpace.vertex.length_xyz(); - EyeSpace.cam_dir = EyeSpace.vertex; - EyeSpace.cam_dir.normalize_dir_xyz(); +/* + if ( GL_LIGHT_MODEL_LOCAL_VIEWER == 0 ) + { + EyeSpace.cam_dir.x = 0.f; + EyeSpace.cam_dir.y = 0.f; + EyeSpace.cam_dir.z = 1.f; + } +*/ + EyeSpace.vertexn = EyeSpace.vertex; + EyeSpace.vertexn.normalize_dir_xyz(); - matrix[ETS_NORMAL].rotateVect(&EyeSpace.normal.x, base->Normal); + //matrix[ETS_NORMAL].rotateVect(&EyeSpace.normal.x, base->Normal); + rotateMat33Vec3Vec4(matrix[ETS_NORMAL], &EyeSpace.normal.x, &base->Normal.X); if (EyeSpace.TL_Flag & TL_NORMALIZE_NORMALS) - EyeSpace.normal.normalize_dir_xyz(); + { + EyeSpace.normal.normalize_dir_xyz_zero(); + } } #endif -#if BURNING_MATERIAL_MAX_COLORS > 1 - dest->Color[1].a = 1.f; - dest->Color[1].r = 0.f; - dest->Color[1].g = 0.f; - dest->Color[1].b = 0.f; -#endif - -#if BURNING_MATERIAL_MAX_COLORS > 2 - dest->Color[2].a = 1.f; - dest->Color[2].r = 0.f; - dest->Color[2].g = 0.f; - dest->Color[2].b = 0.f; -#endif - -#if BURNING_MATERIAL_MAX_COLORS > 3 - dest->Color[3].a = 1.f; - dest->Color[3].r = 0.f; - dest->Color[3].g = 0.f; - dest->Color[3].b = 0.f; -#endif - -#if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 - dest->LightTangent[0].x = 0.f; - dest->LightTangent[0].y = 0.f; - dest->LightTangent[0].z = 0.f; -#endif - #if BURNING_MATERIAL_MAX_COLORS > 0 // apply lighting model #if defined (SOFTWARE_DRIVER_2_LIGHTING) - if (Material.org.Lighting) + if (EyeSpace.TL_Flag & TL_LIGHT) { lightVertex_eye(dest, base->Color.color); } @@ -1600,25 +2216,23 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest break; } - sVec4* a = dest->Color + ((VertexCache.vSize[VertexCache.vType].Format & VERTEX4D_FORMAT_COLOR_2_FOG) ? 1 : 0); + sVec4* a = dest->Color + (((VertexShader.vSize[VertexShader.vType].Format & VERTEX4D_FORMAT_MASK_COLOR)>=VERTEX4D_FORMAT_COLOR_2_FOG) ? 1 : 0); a->a = clampf01(fog_factor); } - // Texture Coo Transform - // Always set all internal uv (v1.9 SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM always on) - for (size_t t = 0; t < BURNING_MATERIAL_MAX_TEXTURES; ++t) + // Texture Coo Generation and Transform + for (u32 m = 0; m < VertexShader.vSize[VertexShader.vType].TexSize; ++m) { sVec4 r; f32 tx, ty; // texgen - const size_t flag = TransformationFlag[TransformationStack][ETS_TEXTURE_0 + t]; + const size_t& flag = TransformationFlag[TransformationStack][ETS_TEXTURE_0 + m]; if (flag & ETF_TEXGEN_CAMERA_SPHERE) { //reflect(u,N) u - 2.0 * dot(N, u) * N - // cam is (0,0,-1), tex flipped - const sVec4& u = EyeSpace.cam_dir; // EyeSpace.vertex.normalized + const sVec4& u = EyeSpace.vertexn; // EyeSpace.vertex.normalized const sVec4& n = EyeSpace.normal; f32 dot = -2.f * n.dot_xyz(u); @@ -1629,7 +2243,8 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest //openGL f32 m = 2.f * sqrtf(r.x * r.x + r.y * r.y + (r.z + 1.f) * (r.z + 1.f)); tx = r.x / m + 0.5f; - ty = -r.y / m + 0.5f; + ty = -(r.y / m + 0.5f); // tex flipped + /* //~d3d with spheremap scale @@ -1641,33 +2256,28 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest else if (flag & ETF_TEXGEN_CAMERA_REFLECTION) { //reflect(u,N) u - 2.0 * dot(N, u) * N - // cam is (0,0,-1), tex flipped - const sVec4& u = EyeSpace.cam_dir; // EyeSpace.vertex.normalized + const sVec4& u = EyeSpace.vertexn; // EyeSpace.vertex.normalized const sVec4& n = EyeSpace.normal; f32 dot = -2.f * n.dot_xyz(u); - r.x = u.x + dot * n.x; - r.y = u.y + dot * n.y; - r.z = u.z + dot * n.z; //openGL - tx = r.x; - ty = -r.y; - /* - //~d3d with spheremap scale - dest[0].Tex[t].x = r.x; - dest[0].Tex[t].y = r.y; - */ + tx = /*r.x =*/ u.x + dot * n.x; + ty = /*r.y =*/ u.y + dot * n.y; + //r.z = u.z + dot * n.z; + + //~d3d with spheremap transform + //tx = r.x * 0.5f + 0.5f; + //ty = r.y * -0.5f + 0.5f; } - else - if (t < VertexCache.vSize[VertexCache.vType].TexCooSize) + else if (m < VertexShader.vSize[VertexShader.vType].TexCooSize) { // Irrlicht TCoords and TCoords2 must be contiguous memory. baseTCoord has no 4 byte aligned start address! const sVec2Pack* baseTCoord = (const sVec2Pack*)&base->TCoords.X; - tx = baseTCoord[t].x; - ty = baseTCoord[t].y; + tx = baseTCoord[m].x; + ty = baseTCoord[m].y; } else { @@ -1675,8 +2285,16 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest ty = 0.f; } - //transform - if (!(flag & ETF_IDENTITY)) +#if 0 + static const CSoftwareTexture2_Bound empty_bound = { 0.f,0.f,0.f,0.f,0 }; + + const video::CSoftwareTexture2* tex = MAT_TEXTURE(t); + const CSoftwareTexture2_Bound& texb = tex ? tex->getTexBound_index()[0] : empty_bound; + const bool filter = Material.org.TextureLayer[t].BilinearFilter; +#endif + + //Texture Matrix Transform + if (flag & ETF_TEXGEN_MATRIX) // !(flag & ETF_IDENTITY) { /* Generate texture coordinates as linear functions so that: @@ -1689,7 +2307,7 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest Uw Vw 0 0 */ - const f32* M = matrix[ETS_TEXTURE_0 + t].pointer(); + const f32* M = matrix[ETS_TEXTURE_0 + m].pointer(); f32 _tx = tx; f32 _ty = ty; @@ -1697,9 +2315,12 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest ty = M[1] * _tx + M[5] * _ty + M[9]; } - switch (Material.org.TextureLayer[t].TextureWrapU) + switch (Material.org.TextureLayer[m].TextureWrapU) { case ETC_CLAMP: + tx = clampf01(tx); + break; + case ETC_CLAMP_TO_EDGE: case ETC_CLAMP_TO_BORDER: tx = clampf01(tx); @@ -1720,11 +2341,17 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest default: break; } - switch (Material.org.TextureLayer[t].TextureWrapV) + switch (Material.org.TextureLayer[m].TextureWrapV) { case ETC_CLAMP: + ty = clampf01(ty); + break; case ETC_CLAMP_TO_EDGE: case ETC_CLAMP_TO_BORDER: + //if (ty < 0.f) ty = 0.f; + //else if (ty > texb.pixelclampy) ty = texb.pixelclampy; + + //ty = clampfuv(ty, filter ? texb.pixelclampy : 0.f); ty = clampf01(ty); break; case ETC_MIRROR: @@ -1744,54 +2371,83 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest break; } - dest->Tex[t].x = tx; - dest->Tex[t].y = ty; + dest->Tex[m].x = tx; + dest->Tex[m].y = ty; } #if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 if ((EyeSpace.TL_Flag & TL_LIGHT0_IS_NORMAL_MAP) && - ((VertexCache.vSize[VertexCache.vType].Format & VERTEX4D_FORMAT_MASK_TANGENT) == VERTEX4D_FORMAT_BUMP_DOT3) + ((VertexShader.vSize[VertexShader.vType].Format & VERTEX4D_FORMAT_MASK_TANGENT) >= VERTEX4D_FORMAT_BUMP_DOT3) ) { const S3DVertexTangents* tangent = ((S3DVertexTangents*)source); sVec4 vp; + sVec4 light_accu; - light_accu.x = 0.f; - light_accu.y = 0.f; - light_accu.z = 0.f; - light_accu.w = 0.f; - for (u32 i = 0; i < 2 && i < EyeSpace.Light.size(); ++i) + light_accu.set(0.f); + + /* + * Color[0] lightcolor[0] a: vertexalpha + * Color[1] lightcolor[1] a: fogdistance + * Color[2] lightvector[0] + * Color[3] lightvector[1] + * LightVector[0] eyevector + */ + + if ((VertexShader.vSize[VertexShader.vType].Format & VERTEX4D_FORMAT_MASK_TANGENT) >= VERTEX4D_FORMAT_PARALLAX) + { + vp.x = EyeSpace.leye.x - base->Pos.X; + vp.y = EyeSpace.leye.y - base->Pos.Y; + vp.z = EyeSpace.leye.z - base->Pos.Z; + + light_accu.x = vp.dot(tangent->Tangent); + light_accu.y = -vp.dot(tangent->Binormal); + light_accu.z = -vp.dot(tangent->Normal); + light_accu.normalize_pack_xyz(dest->LightTangent[0], 1.f, 0.f); + } + + const u32 maxLight = core::min_((u32)BURNING_MATERIAL_MAX_COLORS,(u32)2, EyeSpace.Light.size()); + for (u32 i = 0; i < maxLight; ++i) { const SBurningShaderLight& light = EyeSpace.Light[i]; if (!light.LightIsOn) continue; - // lightcolor with standard model - // but shader is different. treating light and vertex in same space -#if 1 - vp.x = light.pos.x - base->Pos.X; - vp.y = light.pos.y - base->Pos.Y; - vp.z = light.pos.z - base->Pos.Z; -#else - vp.x = light.pos4.x - EyeSpace.vertex.x; - vp.y = light.pos4.y - EyeSpace.vertex.y; - vp.z = light.pos4.z - EyeSpace.vertex.z; -#endif + vp.x = light.pos_local.x - base->Pos.X; + vp.y = light.pos_local.y - base->Pos.Y; + vp.z = light.pos_local.z - base->Pos.Z; - // transform by tangent matrix + f32 attenuation = inversesqrt(vp.dot_xyz(vp) * light.nmap_linearAttenuation); + dest->Color[i].r = light.DiffuseColor.r * attenuation; + dest->Color[i].g = light.DiffuseColor.g * attenuation; + dest->Color[i].b = light.DiffuseColor.b * attenuation; + dest->Color[i].clampf01(); + + // lightvector transform by tangent matrix +#if BURNING_MATERIAL_MAX_COLORS >=4 + dest->Color[2+i].x = vp.dot(tangent->Tangent); + dest->Color[2+i].y = vp.dot(tangent->Binormal); + dest->Color[2+i].z = vp.dot(tangent->Normal); + dest->Color[2 + i].normalize_dir_xyz_zero(); +#else light_accu.x += (vp.x * tangent->Tangent.X + vp.y * tangent->Tangent.Y + vp.z * tangent->Tangent.Z); light_accu.y += (vp.x * tangent->Binormal.X + vp.y * tangent->Binormal.Y + vp.z * tangent->Binormal.Z); light_accu.z += (vp.x * tangent->Normal.X + vp.y * tangent->Normal.Y + vp.z * tangent->Normal.Z); +#endif } + +#if BURNING_MATERIAL_MAX_COLORS >=4 +#else //normalize [-1,+1] to [0,1] -> obsolete light_accu.normalize_pack_xyz(dest->LightTangent[0], 1.f, 0.f); +#endif dest->Tex[1].x = dest->Tex[0].x; dest->Tex[1].y = dest->Tex[0].y; } - else if (Material.org.Lighting) + else if (EyeSpace.TL_Flag & TL_LIGHT) { //dest->LightTangent[0].x = 0.f; //dest->LightTangent[0].y = 0.f; @@ -1799,34 +2455,182 @@ void CBurningVideoDriver::VertexCache_fill(const u32 sourceIndex, const u32 dest } #endif //if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 -//#endif // SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM + //#endif // SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM clipandproject: - // test vertex visible - dest[0].flag = (u32)(clipToFrustumTest(dest) | VertexCache.vSize[VertexCache.vType].Format); - dest[1].flag = dest[0].flag; + // test vertex visibility + const u32 flag = clipToFrustumTest(dest) | VertexShader.vSize[VertexShader.vType].Format; + + dest[s4DVertex_ofs(0)].flag = + dest[s4DVertex_pro(0)].flag = flag; // to DC Space, project homogenous vertex - if ((dest[0].flag & VERTEX4D_CLIPMASK) == VERTEX4D_INSIDE) + if ((flag & VERTEX4D_CLIPMASK) == VERTEX4D_INSIDE) { - ndc_2_dc_and_project(dest + s4DVertex_proj(0), dest + s4DVertex_ofs(0), s4DVertex_ofs(1)); + ndc_2_dc_and_project(dest, s4DVertex_ofs(1), Transformation_ETS_CLIPSCALE[TransformationStack]); } } -//todo: this should return only index -s4DVertexPair* CBurningVideoDriver::VertexCache_getVertex(const u32 sourceIndex) const +void SVertexShader::setIndices(const void* _indices, const video::E_INDEX_TYPE _iType) { - for (size_t i = 0; i < VERTEXCACHE_ELEMENT; ++i) + indices = _indices; + indicesIndex = 0; + indicesRun = 0; + + switch (_iType) { - if (VertexCache.info[i].index == sourceIndex) + case EIT_16BIT: iType = E4IT_16BIT; break; + case EIT_32BIT: iType = E4IT_32BIT; break; + default: iType = (e4DIndexType)iType; break; + } + if (!indices) + iType = E4IT_NONE; +} + +void SVertexShader::setPrimitiveType(const scene::E_PRIMITIVE_TYPE primitiveType, const u32 primitiveCount) +{ + pType = primitiveType; + primitiveHasVertex = 3; + indicesPitch = 1; + + switch (pType) + { + default: + case scene::EPT_POINTS: + case scene::EPT_POINT_SPRITES: + indexCount = primitiveCount; + indicesPitch = 1; + primitiveHasVertex = 1; + break; + + case scene::EPT_LINE_STRIP: + case scene::EPT_LINE_LOOP: + indexCount = primitiveCount + 1; + indicesPitch = 1; + primitiveHasVertex = 2; + break; + case scene::EPT_LINES: + indexCount = 2 * primitiveCount; + indicesPitch = 2; + primitiveHasVertex = 2; + break; + case scene::EPT_TRIANGLE_STRIP: + indexCount = primitiveCount + 2; + indicesPitch = 1; + primitiveHasVertex = 3; + break; + case scene::EPT_TRIANGLES: + indexCount = primitiveCount + primitiveCount + primitiveCount; + indicesPitch = 3; + primitiveHasVertex = 3; + break; + case scene::EPT_TRIANGLE_FAN: + indexCount = primitiveCount + 2; + indicesPitch = 1; + primitiveHasVertex = 3; + break; + case scene::EPT_POLYGON: + indexCount = primitiveCount; + indicesPitch = 1; + primitiveHasVertex = 3; // drawn a triangle fan + break; + + case scene::EPT_QUAD_STRIP: + indexCount = 2 * primitiveCount + 2; + indicesPitch = 2; + primitiveHasVertex = 4; + break; + case scene::EPT_QUADS: + indexCount = 4 * primitiveCount; + indicesPitch = 4; + primitiveHasVertex = 4; + //draw two triangles.. + break; + } +} + +void SVertexShader::set_info_miss() +{ + //memset(info, VERTEXCACHE_MISS, sizeof(info)); + for (size_t i = 0; i != VERTEXCACHE_ELEMENT; ++i) + { + info[i].hit = VERTEXCACHE_MISS; + info[i].index = VERTEXCACHE_MISS; + } +} + +// get the next unique index cache line +void SVertexShader::get_next_index_cacheline() +{ + u32 i; + + // cache element 0 + switch (pType) + { + case scene::EPT_POLYGON: + case scene::EPT_TRIANGLE_FAN: + fillIndex = indicesRun ? 1 : 0; + break; + default: + fillIndex = 0; + break; + } + + // set_info_temp_miss + for (i = fillIndex; i != VERTEXCACHE_ELEMENT; ++i) + { + info_temp[i].hit = VERTEXCACHE_MISS; + info_temp[i].index = VERTEXCACHE_MISS; + } + + // rewind to start of primitive + indicesIndex = indicesRun; + + while (indicesIndex < indexCount && fillIndex < VERTEXCACHE_ELEMENT) + { + u32 sourceIndex = index(indicesIndex); + indicesIndex += 1; + + // if not exist, push back + u32 exist = 0; + for (u32 dIndex = 0; dIndex < fillIndex; ++dIndex) { - return VertexCache.mem.data + s4DVertex_ofs(i); + if (info_temp[dIndex].index == sourceIndex) + { + exist = 1; + break; + } + } + + if (0 == exist) + { + info_temp[fillIndex].index = sourceIndex; + fillIndex += 1; + } + } + + // clear marks + for (i = 0; i != VERTEXCACHE_ELEMENT; ++i) + { + info[i].hit = 0; + } + + // mark all existing + for (i = 0; i != fillIndex; ++i) + { + for (u32 dIndex = 0; dIndex < VERTEXCACHE_ELEMENT; ++dIndex) + { + if (info[dIndex].index == info_temp[i].index) + { + info_temp[i].hit = dIndex; + info[dIndex].hit = 1; + break; + } } } - return VertexCache.mem.data; //error } @@ -1835,141 +2639,55 @@ s4DVertexPair* CBurningVideoDriver::VertexCache_getVertex(const u32 sourceIndex) fill blockwise on the next 16(Cache_Size) unique vertices in indexlist merge the next 16 vertices with the current */ -void CBurningVideoDriver::VertexCache_get(s4DVertexPair* face[4]) +void SVertexShader::getPrimitive(s4DVertexPair* face[4], CBurningVideoDriver* driver) { // next primitive must be complete in cache - if (VertexCache.indicesIndex - VertexCache.indicesRun < VertexCache.primitiveHasVertex && - VertexCache.indicesIndex < VertexCache.indexCount - ) + if (indicesIndex - indicesRun < primitiveHasVertex && indicesIndex < indexCount) { - - size_t i; - //memset(info, VERTEXCACHE_MISS, sizeof(info)); - for (i = 0; i != VERTEXCACHE_ELEMENT; ++i) - { - VertexCache.info_temp[i].hit = VERTEXCACHE_MISS; - VertexCache.info_temp[i].index = VERTEXCACHE_MISS; - } - - // rewind to start of primitive - VertexCache.indicesIndex = VertexCache.indicesRun; - - - // get the next unique vertices cache line - u32 fillIndex = 0; - u32 dIndex = 0; - u32 sourceIndex = 0; - - while (VertexCache.indicesIndex < VertexCache.indexCount && - fillIndex < VERTEXCACHE_ELEMENT - ) - { - switch (VertexCache.iType) - { - case E4IT_16BIT: - sourceIndex = ((u16*)VertexCache.indices)[VertexCache.indicesIndex]; - break; - case E4IT_32BIT: - sourceIndex = ((u32*)VertexCache.indices)[VertexCache.indicesIndex]; - break; - default: - case E4IT_NONE: - sourceIndex = VertexCache.indicesIndex; - break; - } - - VertexCache.indicesIndex += 1; - - // if not exist, push back - s32 exist = 0; - for (dIndex = 0; dIndex < fillIndex; ++dIndex) - { - if (VertexCache.info_temp[dIndex].index == sourceIndex) - { - exist = 1; - break; - } - } - - if (0 == exist) - { - VertexCache.info_temp[fillIndex++].index = sourceIndex; - } - } - - // clear marks - for (i = 0; i != VERTEXCACHE_ELEMENT; ++i) - { - VertexCache.info[i].hit = 0; - } - - // mark all existing - for (i = 0; i != fillIndex; ++i) - { - for (dIndex = 0; dIndex < VERTEXCACHE_ELEMENT; ++dIndex) - { - if (VertexCache.info[dIndex].index == VertexCache.info_temp[i].index) - { - VertexCache.info_temp[i].hit = dIndex; - VertexCache.info[dIndex].hit = 1; - break; - } - } - } + // get the next unique indices cache line + get_next_index_cacheline(); // fill new - for (i = 0; i != fillIndex; ++i) + for (u32 i = 0; i != fillIndex; ++i) { - if (VertexCache.info_temp[i].hit != VERTEXCACHE_MISS) + if (info_temp[i].hit != VERTEXCACHE_MISS) continue; - for (dIndex = 0; dIndex < VERTEXCACHE_ELEMENT; ++dIndex) + for (u32 dIndex = 0; dIndex < VERTEXCACHE_ELEMENT; ++dIndex) { - if (0 == VertexCache.info[dIndex].hit) + if (0 == info[dIndex].hit) { - VertexCache_fill(VertexCache.info_temp[i].index, dIndex); - VertexCache.info[dIndex].hit += 1; - VertexCache.info_temp[i].hit = dIndex; + driver->VertexCache_fill(info_temp[i].index, dIndex); + info[dIndex].hit += 1; + info_temp[i].hit = dIndex; break; } } } } - //const u32 i0 = core::if_c_a_else_0 ( VertexCache.pType != scene::EPT_TRIANGLE_FAN, VertexCache.indicesRun ); - const u32 i0 = VertexCache.pType != scene::EPT_TRIANGLE_FAN ? VertexCache.indicesRun : 0; - - switch (VertexCache.iType) + // all primitive indices are in the index cache line + switch (pType) { - case E4IT_16BIT: - { - const u16* p = (const u16*)VertexCache.indices; - face[0] = VertexCache_getVertex(p[i0]); - face[1] = VertexCache_getVertex(p[VertexCache.indicesRun + 1]); - face[2] = VertexCache_getVertex(p[VertexCache.indicesRun + 2]); - } - break; - - case E4IT_32BIT: - { - const u32* p = (const u32*)VertexCache.indices; - face[0] = VertexCache_getVertex(p[i0]); - face[1] = VertexCache_getVertex(p[VertexCache.indicesRun + 1]); - face[2] = VertexCache_getVertex(p[VertexCache.indicesRun + 2]); - } - break; - - case E4IT_NONE: - face[0] = VertexCache_getVertex(VertexCache.indicesRun + 0); - face[1] = VertexCache_getVertex(VertexCache.indicesRun + 1); - face[2] = VertexCache_getVertex(VertexCache.indicesRun + 2); + case scene::EPT_POLYGON: + case scene::EPT_TRIANGLE_FAN: + face[0] = vertex(index(0)); + face[1] = vertex(index(indicesRun + 1)); + face[2] = vertex(index(indicesRun + 2)); + break; + case scene::EPT_TRIANGLE_STRIP: + face[0] = vertex(index(indicesRun + 0)); + face[(primitiveRun & 1) ? 2 : 1] = vertex(index(indicesRun + 1)); + face[(primitiveRun & 1) ? 1 : 2] = vertex(index(indicesRun + 2)); break; default: - face[0] = face[1] = face[2] = VertexCache_getVertex(VertexCache.indicesRun + 0); + for (u32 i = 0; i < primitiveHasVertex; ++i) + { + face[i] = vertex(index(indicesRun + i)); + } break; } - face[3] = face[0]; // quad unsupported - VertexCache.indicesRun += VertexCache.indicesPitch; + indicesRun += indicesPitch; } @@ -1982,130 +2700,52 @@ int CBurningVideoDriver::VertexCache_reset(const void* vertices, u32 vertexCount E_INDEX_TYPE iType) { - // These calls would lead to crashes due to wrong index usage. - // The vertex cache needs to be rewritten for these primitives. - if (0 == CurrentShader || - pType == scene::EPT_POINTS || pType == scene::EPT_LINE_STRIP || - pType == scene::EPT_LINE_LOOP || pType == scene::EPT_LINES || - pType == scene::EPT_POLYGON || - pType == scene::EPT_POINT_SPRITES) + if (0 == CurrentShader) { return 1; } - VertexCache.vertices = vertices; - VertexCache.vertexCount = vertexCount; + VertexShader.vertices = vertices; + VertexShader.vertexCount = vertexCount; switch (Material.org.MaterialType) // (Material.Fallback_MaterialType) { + case EMT_PARALLAX_MAP_SOLID: + case EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR: + case EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA: + VertexShader.vType = vType == EVT_TANGENTS ? E4VT_TANGENTS_PARALLAX : (e4DVertexType)vType; + break; case EMT_REFLECTION_2_LAYER: case EMT_TRANSPARENT_REFLECTION_2_LAYER: - VertexCache.vType = E4VT_REFLECTION_MAP; + VertexShader.vType = vType == EVT_STANDARD ? E4VT_REFLECTION_MAP : (e4DVertexType)vType; break; default: - VertexCache.vType = (e4DVertexType)vType; + VertexShader.vType = (e4DVertexType)vType; break; } - //check material - SVSize* vSize = VertexCache.vSize; - for (int m = (int)vSize[VertexCache.vType].TexSize - 1; m >= 0; --m) + //check material material->OnRender(VertexType) + SVSize* vSize = VertexShader.vSize; + for (int m = (int)vSize[VertexShader.vType].TexSize - 1; m >= 0; --m) { - ITexture* tex = MAT_TEXTURE(m); + const ITexture* tex = MAT_TEXTURE(m); if (!tex) { - vSize[E4VT_NO_TEXTURE] = vSize[VertexCache.vType]; + //vSize[E4VT_NO_TEXTURE] = vSize[VertexShader.vType]; + vSize[E4VT_NO_TEXTURE].Format = (vSize[VertexShader.vType].Format & ~VERTEX4D_FORMAT_MASK_COLOR) | VERTEX4D_FORMAT_COLOR_1; + vSize[E4VT_NO_TEXTURE].Pitch = vSize[VertexShader.vType].Pitch; vSize[E4VT_NO_TEXTURE].TexSize = m; vSize[E4VT_NO_TEXTURE].TexCooSize = m; - VertexCache.vType = E4VT_NO_TEXTURE; + + VertexShader.vType = E4VT_NO_TEXTURE; //flags downconvert? } } - VertexCache.indices = indices; - VertexCache.indicesIndex = 0; - VertexCache.indicesRun = 0; + VertexShader.setIndices(indices, iType); + VertexShader.setPrimitiveType(pType, primitiveCount); - switch (iType) - { - case EIT_16BIT: VertexCache.iType = E4IT_16BIT; break; - case EIT_32BIT: VertexCache.iType = E4IT_32BIT; break; - default: - VertexCache.iType = (e4DIndexType)iType; break; - } - if (!VertexCache.indices) - VertexCache.iType = E4IT_NONE; - - VertexCache.pType = pType; - VertexCache.primitiveHasVertex = 3; - VertexCache.indicesPitch = 1; - switch (VertexCache.pType) - { - // most types here will not work as expected, only triangles/triangle_fan - // is known to work. - case scene::EPT_POINTS: - VertexCache.indexCount = primitiveCount; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = 1; - break; - case scene::EPT_LINE_STRIP: - VertexCache.indexCount = primitiveCount + 1; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = 2; - break; - case scene::EPT_LINE_LOOP: - VertexCache.indexCount = primitiveCount + 1; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = 2; - break; - case scene::EPT_LINES: - VertexCache.indexCount = 2 * primitiveCount; - VertexCache.indicesPitch = 2; - VertexCache.primitiveHasVertex = 2; - break; - case scene::EPT_TRIANGLE_STRIP: - VertexCache.indexCount = primitiveCount + 2; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = 3; - break; - case scene::EPT_TRIANGLES: - VertexCache.indexCount = primitiveCount + primitiveCount + primitiveCount; - VertexCache.indicesPitch = 3; - VertexCache.primitiveHasVertex = 3; - break; - case scene::EPT_TRIANGLE_FAN: - VertexCache.indexCount = primitiveCount + 2; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = 3; - break; - case scene::EPT_QUAD_STRIP: - VertexCache.indexCount = 2 * primitiveCount + 2; - VertexCache.indicesPitch = 2; - VertexCache.primitiveHasVertex = 4; - break; - case scene::EPT_QUADS: - VertexCache.indexCount = 4 * primitiveCount; - VertexCache.indicesPitch = 4; - VertexCache.primitiveHasVertex = 4; - break; - case scene::EPT_POLYGON: - VertexCache.indexCount = primitiveCount + 1; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = primitiveCount; - break; - case scene::EPT_POINT_SPRITES: - VertexCache.indexCount = primitiveCount; - VertexCache.indicesPitch = 1; - VertexCache.primitiveHasVertex = 1; - break; - } - - //memset( VertexCache.info, VERTEXCACHE_MISS, sizeof ( VertexCache.info ) ); - for (size_t i = 0; i != VERTEXCACHE_ELEMENT; ++i) - { - VertexCache.info[i].hit = VERTEXCACHE_MISS; - VertexCache.info[i].index = VERTEXCACHE_MISS; - } + VertexShader.set_info_miss(); return 0; } @@ -2124,30 +2764,63 @@ void CBurningVideoDriver::drawVertexPrimitiveList(const void* vertices, u32 vert if (VertexCache_reset(vertices, vertexCount, indexList, primitiveCount, vType, pType, iType)) return; - if ((u32)Material.org.MaterialType < MaterialRenderers.size()) - { - MaterialRenderers[Material.org.MaterialType].Renderer->OnRender(this, vType); - } + pushShader(pType, 1); //Matrices needed for this primitive - transform_calc(ETS_PROJ_MODEL_VIEW); - if (Material.org.Lighting || (EyeSpace.TL_Flag & (TL_TEXTURE_TRANSFORM | TL_FOG))) + transform_calc(ETS_MODEL_VIEW_PROJ); + if ((EyeSpace.TL_Flag & (TL_TEXTURE_TRANSFORM | TL_FOG | TL_LIGHT)) || + Material.VertexShader != BVT_Fix) { transform_calc(ETS_MODEL_VIEW); transform_calc(ETS_NORMAL); } + //objectspace + if (EyeSpace.TL_Flag & TL_LIGHT0_IS_NORMAL_MAP) + { + transform_calc(ETS_MODEL_INVERSE); + + const core::matrix4* matrix = Transformation[TransformationStack]; + if ((VertexShader.vSize[VertexShader.vType].Format & VERTEX4D_FORMAT_MASK_TANGENT) >= VERTEX4D_FORMAT_PARALLAX) + { + transform_calc(ETS_MODEL_VIEW); + mat44_inverse(EyeSpace.mvi, matrix[ETS_MODEL_VIEW]); + + sVec4 eye(0.f, 0.f, 0.f, 1.f); + transformVec3Vec3(EyeSpace.mvi, &EyeSpace.leye.x, &eye.x); + } + + const u32 maxLight = core::min_((u32)BURNING_MATERIAL_MAX_COLORS, (u32)2, EyeSpace.Light.size()); + for (u32 i = 0; i < maxLight; ++i) + { + SBurningShaderLight& light = EyeSpace.Light[i]; + if (!light.LightIsOn) + continue; + + transformVec3Vec3(matrix[ETS_MODEL_INVERSE], &light.pos_local.x, &light.pos.x); + } + + } + + if ((u32)Material.org.MaterialType < MaterialRenderers.size()) + { + MaterialRenderers[Material.org.MaterialType].Renderer->OnRender(this, (video::E_VERTEX_TYPE)VertexShader.vType); + } s4DVertexPair* face[4]; - size_t vOut; - size_t vertex_from_clipper; // from VertexCache or CurrentOut - size_t has_vertex_run; + u32 vOut; + u32 vertex_from_clipper; // from VertexShader or CurrentOut + u32 has_vertex_run; - for (size_t primitive_run = 0; primitive_run < primitiveCount; ++primitive_run) + // magnitude crossproduct (area of parallelogram * 0.5 = triangle screen size, winding) + ieee754 dc_area; + + CurrentShader->fragment_draw_count = 0; + for (VertexShader.primitiveRun = 0; VertexShader.primitiveRun < primitiveCount; ++VertexShader.primitiveRun) { //collect pointer to face vertices - VertexCache_get(face); + VertexShader.getPrimitive(face, this); size_t clipMask_i; size_t clipMask_o; @@ -2155,7 +2828,7 @@ void CBurningVideoDriver::drawVertexPrimitiveList(const void* vertices, u32 vert clipMask_i = face[0]->flag; clipMask_o = face[0]->flag; - for (has_vertex_run = 1; has_vertex_run < VertexCache.primitiveHasVertex; ++has_vertex_run) + for (has_vertex_run = 1; has_vertex_run < VertexShader.primitiveHasVertex; ++has_vertex_run) { clipMask_i |= face[has_vertex_run]->flag; // if fully outside or outside on same side clipMask_o &= face[has_vertex_run]->flag; // if fully inside @@ -2174,24 +2847,32 @@ void CBurningVideoDriver::drawVertexPrimitiveList(const void* vertices, u32 vert else if (clipMask_o == VERTEX4D_INSIDE) { // if primitive fully inside - vOut = VertexCache.primitiveHasVertex; + vOut = VertexShader.primitiveHasVertex; vertex_from_clipper = 0; } else #if defined(SOFTWARE_DRIVER_2_CLIPPING) { // else if not complete inside clipping necessary - // check: clipping should reuse vertexcache (try to minimize clipping) - for (has_vertex_run = 0; has_vertex_run < VertexCache.primitiveHasVertex; ++has_vertex_run) + + // todo: clipping should reuse vertexcache (try to minimize clipping) + for (has_vertex_run = 0; has_vertex_run < VertexShader.primitiveHasVertex; ++has_vertex_run) { memcpy_s4DVertexPair(Clipper.data + s4DVertex_ofs(has_vertex_run), face[has_vertex_run]); } - vOut = clipToFrustum(VertexCache.primitiveHasVertex); + //clipping should happen in R^3 before perspective divide, avoid flipping points + //x = A_x * (1 - da/(da - db)) + A_y * (da/(da-db)) + vOut = clipToFrustum(VertexShader.primitiveHasVertex); vertex_from_clipper = 1; + // to DC Space, project homogenous vertex - ndc_2_dc_and_project(Clipper.data + s4DVertex_proj(0), Clipper.data + s4DVertex_ofs(0), s4DVertex_ofs(vOut)); + if (vOut > VertexShader.primitiveHasVertex ) + ndc_2_dc_and_project_grid(Clipper.data, s4DVertex_ofs(vOut), Transformation_ETS_CLIPSCALE[TransformationStack]); + else + ndc_2_dc_and_project(Clipper.data, s4DVertex_ofs(vOut), Transformation_ETS_CLIPSCALE[TransformationStack]); + } #else { @@ -2200,84 +2881,194 @@ void CBurningVideoDriver::drawVertexPrimitiveList(const void* vertices, u32 vert vertex_from_clipper = 0; } #endif - // re-tesselate ( triangle-fan, 0-1-2,0-2-3.. ) - for (has_vertex_run = 0; (has_vertex_run + VertexCache.primitiveHasVertex) <= vOut; has_vertex_run += 1) + +#if BURNING_MATERIAL_MAX_TEXTURES > 0 + s32 lod_max[BURNING_MATERIAL_MAX_TEXTURES]; + for (u32 m = 0; m < VertexShader.vSize[VertexShader.vType].TexSize; ++m) { - // set from clipped geometry - if (vertex_from_clipper) - { - face[0] = Clipper.data + s4DVertex_ofs(0); - face[1] = Clipper.data + s4DVertex_ofs(has_vertex_run + 1); - face[2] = Clipper.data + s4DVertex_ofs(has_vertex_run + 2); - } - - //area of primitive in device space - // projected triangle screen area is used for culling ( sign of normal ) and mipmap selection - //f32 dc_area = screenarea_inside(face); - - // crossproduct (area of parallelogram * 0.5 = triangle screen size) - f32 dc_area; - { - const sVec4& v0 = (face[0] + s4DVertex_proj(0))->Pos; - const sVec4& v1 = (face[1] + s4DVertex_proj(0))->Pos; - const sVec4& v2 = (face[2] + s4DVertex_proj(0))->Pos; - - //dc_area = a.x * b.y - b.x * a.y; - dc_area = ((v1.x - v0.x) * (v2.y - v0.y) - (v2.x - v0.x) * (v1.y - v0.y)) * 0.5f; - } - - //geometric clipping has problem with invisible or very small Triangles - //size_t sign = dc_area < 0.001f ? CULL_BACK : dc_area > 0.001f ? CULL_FRONT : CULL_INVISIBLE; - ieee754 t; - t.f = dc_area; - size_t sign = t.fields.sign ? CULL_BACK : CULL_FRONT; - sign |= t.abs.frac_exp < 981668463 /*0.01f*/ ? CULL_INVISIBLE : 0; - if (Material.CullFlag & sign) - break; //continue; - - //select mipmap ratio between drawing space and texture space (for multiply divide here) - dc_area = reciprocal_zero(dc_area); - - // select mipmap - for (size_t m = 0; m < VertexCache.vSize[VertexCache.vType].TexSize; ++m) - { - video::CSoftwareTexture2* tex = MAT_TEXTURE(m); - - //only guessing: take more detail (lower mipmap) in light+bump textures - f32 lod_bias = 0.100f;// core::clamp(map_value((f32)ScreenSize.Width * ScreenSize.Height, 160 * 120, 640 * 480, 1.f / 8.f, 1.f / 8.f), 0.01f, 1.f); - - //assume transparent add is ~50% transparent -> more detail - switch (Material.org.MaterialType) - { - case EMT_TRANSPARENT_ADD_COLOR: - case EMT_TRANSPARENT_ALPHA_CHANNEL: - lod_bias *= 0.5f; - break; - default: - break; - } - lod_bias *= tex->get_lod_bias(); - //lod_bias += Material.org.TextureLayer[m].LODBias * 0.125f; - - s32 lodFactor = lodFactor_inside(face, m, dc_area, lod_bias); - - CurrentShader->setTextureParam(m, tex, lodFactor); - //currently shader receives texture coordinate as Pixelcoo of 1 Texture - select_polygon_mipmap_inside(face, m, tex->getTexBound()); - } - - CurrentShader->drawWireFrameTriangle(face[0] + s4DVertex_proj(0), face[1] + s4DVertex_proj(0), face[2] + s4DVertex_proj(0)); - vertex_from_clipper = 1; + lod_max[m] = 0; } +#endif + + f32 t[4]; + + +#define BURNING_MAX_MIP_CLIPPER 1 + +#if BURNING_MAX_MIP_CLIPPER == 1 + //select largest texture for clipped triangle + //very small long triangles are very undersampled here ("skybox flicker") + int use_max_mip = vertex_from_clipper && VertexShader.vSize[VertexShader.vType].TexSize && + vOut > VertexShader.primitiveHasVertex ? 1 : 0; + + for (int probe = use_max_mip; probe >= 0; probe -= 1) +#endif + { + // re-tesselate + for (has_vertex_run = 0; (has_vertex_run + VertexShader.primitiveHasVertex) <= vOut; has_vertex_run += 1) + { + // set from clipped geometry ( triangle fan 0-1-2,0-2-3.. ) + if (vertex_from_clipper) + { + face[0] = Clipper.data + s4DVertex_ofs(0); + face[1] = Clipper.data + s4DVertex_ofs(has_vertex_run + 1); + face[2] = Clipper.data + s4DVertex_ofs(has_vertex_run + 2); + face[3] = Clipper.data + s4DVertex_ofs(has_vertex_run + 3); + } + + //area of primitive in device space + // projected triangle screen area is used for culling ( sign of normal ) and mipmap selection + //f32 dc_area = screenarea_inside(face); + + // magnitude crossproduct + dc_area.f = 1.f; + if (VertexShader.primitiveHasVertex >= 3) + { + const sVec4& v0 = (face[0] + s4DVertex_pro(0))->Pos; + const sVec4& v1 = (face[1] + s4DVertex_pro(0))->Pos; + const sVec4& v2 = (face[2] + s4DVertex_pro(0))->Pos; + + //dc_area = 2d triangle normal.crossproduct (a.x * b.y - b.x * a.y).length/2; + dc_area.f = ((v1.x - v0.x) * (v2.y - v0.y) - (v2.x - v0.x) * (v1.y - v0.y)) /* * 0.5f */; + + //geometric clipping has problem with invisible or very small Triangles + //size_t sign = dc_area < 0.001f ? CULL_BACK : dc_area > 0.001f ? CULL_FRONT : CULL_INVISIBLE; + + size_t sign = dc_area.fields.sign ? CULL_BACK : CULL_FRONT; + sign |= dc_area.abs.frac_exp < CULL_EPSILON_00001 ? CULL_INVISIBLE : 0; + + if (Material.CullFlag & sign) + continue; //not break; per clipper triangle + + + // select mipmap +#if BURNING_MAX_MIP_CLIPPER == 1 + if (probe == use_max_mip) +#endif + for (u32 m = 0; m < VertexShader.vSize[VertexShader.vType].TexSize; ++m) + { + video::CSoftwareTexture2* tex = MAT_TEXTURE(m); + + const sVec2& v0 = (face[0] + s4DVertex_ofs(0))->Tex[m]; + const sVec2& v1 = (face[1] + s4DVertex_ofs(0))->Tex[m]; + const sVec2& v2 = (face[2] + s4DVertex_ofs(0))->Tex[m]; + + //todo: get triangle setup here + //bbox + t[0] = t[2] = v0.x; + t[1] = t[3] = v0.y; + if (v1.x < t[0]) t[0] = v1.x; + if (v1.y < t[1]) t[1] = v1.y; + if (v1.x > t[2]) t[2] = v1.x; + if (v1.y > t[3]) t[3] = v1.y; + + if (v2.x < t[0]) t[0] = v2.x; + if (v2.y < t[1]) t[1] = v2.y; + if (v2.x > t[2]) t[2] = v2.x; + if (v2.y > t[3]) t[3] = v2.y; + + f32 tex_area = fabsf((t[2] - t[0]) * (t[3] - t[1])); + + //tex_area = |a.x * b.y - b.x * a.y| * 0.5; // crossproduct + //f32 tex_area = fabsf((v1.x - v0.x) * (v2.y - v0.y) - (v2.x - v0.x) * (v1.y - v0.y)); + + //various over and underflow cases + if (tex_area <= 0.000001f) + tex_area = 0.000001f; + else if (tex_area > 1.01f) + tex_area = 1.f / tex_area; + + /* 2.f * tex_area * 1.6f bias. 1.6 too much for detailsmap3 */ + //not dc_area * 0.5 cancel out 2 * TexBias + const u32 dc_area_over_tex_area = (u32)floorf( /*/tex_area > 0.0000001f ? */ + fabsf(dc_area.f) * TexBias[TransformationStack] / tex_area + /*: 0.f*/ + ); + + // get a near 1:1 ratio between pixel and texel + // tex_area * b[lodFactor].w * b[lodFactor].h > dc_area_abs + + s32 lodFactor = 0; + const CSoftwareTexture2_Bound* b = tex->getTexBound_index(); + while (lodFactor < SOFTWARE_DRIVER_2_MIPMAPPING_MAX && + b[lodFactor].area > dc_area_over_tex_area + ) + { + lodFactor += 1; + } + + //clipped triangle should take single area based mipmap from unclipped face + //skybox,billboard test case + //if (vertex_from_clipper) lodFactor -= 1; + if (has_vertex_run == 0) lod_max[m] = lodFactor; + else if (lodFactor < lod_max[m]) lod_max[m] = lodFactor; + + //CurrentShader->setTextureParam(m, tex, lodFactor); + //select_polygon_mipmap_inside(face, m, tex->getTexBound()); + } + + } + //else /* if (VertexShader.primitiveHasVertex == 3) */ +#if BURNING_MAX_MIP_CLIPPER == 1 + if (probe > 0) + continue; +#endif + // set single mipmap + for (u32 m = 0; m < VertexShader.vSize[VertexShader.vType].TexSize; ++m) + { + video::CSoftwareTexture2* tex = MAT_TEXTURE(m); + CurrentShader->setTextureParam(m, tex, lod_max[m]); + + //select_polygon_mipmap_inside(face, m, tex->getTexBound()); + //currently shader receives texture coordinate as Pixelcoo of 1 Texture + const CSoftwareTexture2_Bound& b = tex->getTexBound(); + for (u32 v = 0; v < VertexShader.primitiveHasVertex; ++v) + { + const sVec2& src = (face[v] + s4DVertex_ofs(0))->Tex[m]; + sVec2& dst = (face[v] + s4DVertex_pro(0))->Tex[m]; + +#ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT + const f32 iw = (face[v] + s4DVertex_pro(0))->Pos.w; + dst.x = src.x * iw * b.mat[0] + b.mat[1]; + dst.y = src.y * iw * b.mat[2] + b.mat[3]; +#else + dst.x = src.x * b.mat[0] + b.mat[1]; + dst.y = src.y * b.mat[2] + b.mat[3]; +#endif + } + } + + switch (VertexShader.primitiveHasVertex) + { + case 1: + CurrentShader->drawPoint(face[0] + s4DVertex_pro(0)); + break; + case 2: + CurrentShader->drawLine(face[0] + s4DVertex_pro(0), face[1] + s4DVertex_pro(0)); + break; + case 3: + CurrentShader->drawWireFrameTriangle(face[0] + s4DVertex_pro(0), face[1] + s4DVertex_pro(0), face[2] + s4DVertex_pro(0)); + break; + case 4: + //todo: + CurrentShader->drawWireFrameTriangle(face[0] + s4DVertex_pro(0), face[1] + s4DVertex_pro(0), face[2] + s4DVertex_pro(0)); + CurrentShader->drawWireFrameTriangle(face[0] + s4DVertex_pro(0), face[2] + s4DVertex_pro(0), face[3] + s4DVertex_pro(0)); + break; + } + + //vertex_from_clipper = 1; + } + } // probe } + this->samples_passed += CurrentShader->fragment_draw_count; + //release texture - for (size_t m = 0; m < VertexCache.vSize[VertexCache.vType].TexSize; ++m) + for (u32 m = 0; m < VertexShader.vSize[VertexShader.vType].TexSize; ++m) { CurrentShader->setTextureParam(m, 0, 0); } - } @@ -2290,12 +3081,8 @@ void CBurningVideoDriver::setAmbientLight(const SColorf& color) } -//! adds a dynamic light -s32 CBurningVideoDriver::addDynamicLight(const SLight& dl) +void CBurningVideoDriver::assignHardwareLight(SBurningShaderLight& l, const SLight& dl) { - (void)CNullDriver::addDynamicLight(dl); - - SBurningShaderLight l; // l.org = dl; l.Type = dl.Type; l.LightIsOn = true; @@ -2311,22 +3098,21 @@ s32 CBurningVideoDriver::addDynamicLight(const SLight& dl) nDirection.z = dl.Direction.Z; nDirection.normalize_dir_xyz(); - switch (dl.Type) { case ELT_DIRECTIONAL: - l.pos.x = dl.Position.X; - l.pos.y = dl.Position.Y; - l.pos.z = dl.Position.Z; + l.pos.x = -nDirection.x; + l.pos.y = -nDirection.y; + l.pos.z = -nDirection.z; l.pos.w = 0.f; l.constantAttenuation = 1.f; l.linearAttenuation = 0.f; l.quadraticAttenuation = 0.f; - l.spotDirection.x = -nDirection.x; - l.spotDirection.y = -nDirection.y; - l.spotDirection.z = -nDirection.z; + l.spotDirection.x = 0.f; + l.spotDirection.y = 0.f; + l.spotDirection.z = -1.f; l.spotDirection.w = 0.f; l.spotCosCutoff = -1.f; l.spotCosInnerCutoff = 1.f; @@ -2343,9 +3129,9 @@ s32 CBurningVideoDriver::addDynamicLight(const SLight& dl) l.linearAttenuation = dl.Attenuation.Y; l.quadraticAttenuation = dl.Attenuation.Z; - l.spotDirection.x = -nDirection.x; - l.spotDirection.y = -nDirection.y; - l.spotDirection.z = -nDirection.z; + l.spotDirection.x = 0.f; + l.spotDirection.y = 0.f; + l.spotDirection.z = -1.f; l.spotDirection.w = 0.f; l.spotCosCutoff = -1.f; l.spotCosInnerCutoff = 1.f; @@ -2374,16 +3160,47 @@ s32 CBurningVideoDriver::addDynamicLight(const SLight& dl) break; } - //which means ETS_VIEW + //which means ETS_VIEW, irrlicht openGL setTransform(ETS_WORLD, irr::core::IdentityMatrix); transform_calc(ETS_MODEL_VIEW); + //transform_calc(ETS_NORMAL); const core::matrix4* matrix = Transformation[TransformationStack]; transformVec4Vec4(matrix[ETS_MODEL_VIEW], &l.pos4.x, &l.pos.x); - rotateVec3Vec4(matrix[ETS_MODEL_VIEW], &l.spotDirection4.x, &l.spotDirection.x); + rotateMat44Vec3Vec4(matrix[ETS_MODEL_VIEW], &l.spotDirection4.x, &l.spotDirection.x); + l.nmap_linearAttenuation = 1.f / (0.001f + dl.Radius * dl.Radius); + + /* + //case ELT_DIRECTIONAL: + if (l.pos.w == 0.f) + { + l.pos4n = l.pos4; + l.pos4n.normalize_dir_xyz(); + + //GL_LIGHT_MODEL_LOCAL_VIEWER = 0 + + l.halfVector = l.pos4n; + l.halfVector.z += 1.f; + l.halfVector.normalize_dir_xyz(); + + } +*/ +} + +//! adds a dynamic light +s32 CBurningVideoDriver::addDynamicLight(const SLight& dl) +{ + /*s32 i0 = */CNullDriver::addDynamicLight(dl); + + SBurningShaderLight l; EyeSpace.Light.push_back(l); - return EyeSpace.Light.size() - 1; + s32 i1 = EyeSpace.Light.size() - 1; + + //i0 and i1 must be in sync + assignHardwareLight(EyeSpace.Light[i1], dl); + + return i1; } @@ -2392,14 +3209,20 @@ void CBurningVideoDriver::turnLightOn(s32 lightIndex, bool turnOn) { if ((u32)lightIndex < EyeSpace.Light.size()) { - EyeSpace.Light[lightIndex].LightIsOn = turnOn; + SBurningShaderLight& l = EyeSpace.Light[lightIndex]; + // some glitches with STK, always set, currently twice. openGL forces ModelMatrix to Identity + if (!l.LightIsOn && turnOn) + { + assignHardwareLight(l, CNullDriver::getDynamicLight(lightIndex)); + } + l.LightIsOn = turnOn; } } //! deletes all dynamic lights there are void CBurningVideoDriver::deleteAllDynamicLights() { - EyeSpace.reset(); + EyeSpace.deleteAllDynamicLights(); CNullDriver::deleteAllDynamicLights(); } @@ -2411,6 +3234,16 @@ u32 CBurningVideoDriver::getMaximalDynamicLightAmount() const } +// a != b +size_t compare_3d_material(const SMaterial& a, const SMaterial& b) +{ + size_t flag = 0; + flag |= a.MaterialType == b.MaterialType ? 0 : 1; + flag |= a.TextureLayer[0].Texture == b.TextureLayer[0].Texture ? 0 : 4; + if (flag) return flag; + return a != b; +} + //! sets a material void CBurningVideoDriver::setMaterial(const SMaterial& material) { @@ -2420,21 +3253,30 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) const SMaterial& in = Material.org; - // ---------- Notify Shader + const u32 shaderid = (u32)in.MaterialType; + + //basically set always. 2d does its own compare + //if (TransformationStack == ETF_STACK_2D || Material.resetRenderStates || compare_3d_material(Material.lastMaterial,in)) + { + // ---------- Notify Shader // unset old material - u32 mi; - mi = (u32)Material.lastMaterial.MaterialType; - if (mi != material.MaterialType && mi < MaterialRenderers.size()) - MaterialRenderers[mi].Renderer->OnUnsetMaterial(); + u32 shaderid_old = (u32)Material.lastMaterial.MaterialType; - // set new material. - mi = (u32)in.MaterialType; - if (mi < MaterialRenderers.size()) - MaterialRenderers[mi].Renderer->OnSetMaterial( - in, Material.lastMaterial, Material.resetRenderStates, this); + if (shaderid != shaderid_old && shaderid_old < MaterialRenderers.size()) + { + MaterialRenderers[shaderid_old].Renderer->OnUnsetMaterial(); + } - Material.lastMaterial = in; - Material.resetRenderStates = false; + // set new material. + if (shaderid < MaterialRenderers.size()) + { + MaterialRenderers[shaderid].Renderer->OnSetMaterial( + in, Material.lastMaterial, Material.resetRenderStates, this); + } + + Material.lastMaterial = in; + Material.resetRenderStates = false; + } //CSoftware2MaterialRenderer sets Material.Fallback_MaterialType @@ -2447,30 +3289,40 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) size_t* flag = TransformationFlag[TransformationStack]; + EyeSpace.TL_Flag &= ~(TL_TEXTURE_TRANSFORM | TL_LIGHT0_IS_NORMAL_MAP); + #ifdef SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM - for (u32 m = 0; m < BURNING_MATERIAL_MAX_TEXTURES /*&& m < vSize[VertexCache.vType].TexSize*/; ++m) + //vertextype not set! + for (u32 m = 0; m < BURNING_MATERIAL_MAX_TEXTURES /*VertexShader.vSize[VertexShader.vType].TexSize*/; ++m) { - setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + m), in.getTextureMatrix(m)); flag[ETS_TEXTURE_0 + m] &= ~ETF_TEXGEN_MASK; + setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + m), in.getTextureMatrix(m)); } #endif #ifdef SOFTWARE_DRIVER_2_LIGHTING - Material.AmbientColor.setA8R8G8B8(in.AmbientColor.color); - Material.DiffuseColor.setA8R8G8B8(in.ColorMaterial ? 0xFFFFFFFF : in.DiffuseColor.color); - Material.EmissiveColor.setA8R8G8B8(in.EmissiveColor.color); - Material.SpecularColor.setA8R8G8B8(in.SpecularColor.color); - - burning_setbit(EyeSpace.TL_Flag, in.Lighting, TL_LIGHT); - burning_setbit(EyeSpace.TL_Flag, (in.Shininess != 0.f) && (in.SpecularColor.color & 0x00ffffff), TL_SPECULAR); burning_setbit(EyeSpace.TL_Flag, in.FogEnable, TL_FOG); burning_setbit(EyeSpace.TL_Flag, in.NormalizeNormals, TL_NORMALIZE_NORMALS); - //if (EyeSpace.Flags & SPECULAR ) EyeSpace.Flags |= NORMALIZE_NORMALS; + + burning_setbit(EyeSpace.TL_Flag, in.Lighting, TL_LIGHT); + if (EyeSpace.TL_Flag & TL_LIGHT) + { + burning_setbit(EyeSpace.TL_Flag, in.ColorMaterial == ECM_AMBIENT || in.ColorMaterial == ECM_DIFFUSE_AND_AMBIENT, TL_COLORMAT_AMBIENT); + burning_setbit(EyeSpace.TL_Flag, in.ColorMaterial == ECM_DIFFUSE || in.ColorMaterial == ECM_DIFFUSE_AND_AMBIENT, TL_COLORMAT_DIFFUSE); + burning_setbit(EyeSpace.TL_Flag, in.ColorMaterial == ECM_SPECULAR, TL_COLORMAT_SPECULAR); + + Material.AmbientColor.setA8R8G8B8(in.AmbientColor.color); + Material.DiffuseColor.setA8R8G8B8(in.DiffuseColor.color); + Material.EmissiveColor.setA8R8G8B8(in.EmissiveColor.color); + Material.SpecularColor.setA8R8G8B8(in.SpecularColor.color); + + burning_setbit(EyeSpace.TL_Flag, (in.Shininess != 0.f) && (in.SpecularColor.color & 0x00ffffff), TL_SPECULAR); + } #endif -//--------------- setCurrentShader + //--------------- setCurrentShader ITexture* texture0 = in.getTexture(0); ITexture* texture1 = in.getTexture(1); @@ -2484,7 +3336,6 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) //if (maxTex < 3) texture2 = 0; //if (maxTex < 4) texture3 = 0; - EyeSpace.TL_Flag &= ~(TL_TEXTURE_TRANSFORM | TL_LIGHT0_IS_NORMAL_MAP); //todo: seperate depth test from depth write Material.depth_write = getWriteZBuffer(in); @@ -2492,7 +3343,7 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) EBurningFFShader shader = Material.depth_test ? ETR_TEXTURE_GOURAUD : ETR_TEXTURE_GOURAUD_NOZ; - switch (Material.Fallback_MaterialType) //(Material.org.MaterialType) + switch (Material.Fallback_MaterialType) //(Material.org.MaterialType) // Material.Fallback_MaterialType) { case EMT_ONETEXTURE_BLEND: shader = ETR_TEXTURE_BLEND; @@ -2516,6 +3367,8 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) case EMT_TRANSPARENT_ADD_COLOR: shader = Material.depth_test ? ETR_TEXTURE_GOURAUD_ADD : ETR_TEXTURE_GOURAUD_ADD_NO_Z; + if (Material.org.BlendOperation == EBO_ADD) + shader = ETR_TEXTURE_GOURAUD_ADD_NO_Z; break; case EMT_TRANSPARENT_VERTEX_ALPHA: @@ -2574,6 +3427,7 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) { shader = ETR_NORMAL_MAP_SOLID; EyeSpace.TL_Flag |= TL_TEXTURE_TRANSFORM | TL_LIGHT0_IS_NORMAL_MAP; + EyeSpace.TL_Flag &= ~TL_LIGHT; } break; case EMT_PARALLAX_MAP_SOLID: @@ -2581,8 +3435,9 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) case EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA: if (texture1) { - shader = ETR_NORMAL_MAP_SOLID; + shader = ETR_PARALLAX_MAP_SOLID; EyeSpace.TL_Flag |= TL_TEXTURE_TRANSFORM | TL_LIGHT0_IS_NORMAL_MAP; + EyeSpace.TL_Flag &= ~TL_LIGHT; } break; @@ -2623,22 +3478,29 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material) // switchToTriangleRenderer CurrentShader = BurningShader[shader]; + if (!CurrentShader && shaderid < MaterialRenderers.size()) + { + CurrentShader = (IBurningShader *) MaterialRenderers[shaderid].Renderer; + } + if (CurrentShader) { CurrentShader->setTLFlag(EyeSpace.TL_Flag); if (EyeSpace.TL_Flag & TL_FOG) CurrentShader->setFog(FogColor); if (EyeSpace.TL_Flag & TL_SCISSOR) CurrentShader->setScissor(Scissor); CurrentShader->setRenderTarget(RenderTargetSurface, ViewPort, Interlaced); - CurrentShader->OnSetMaterial(Material); - CurrentShader->pushEdgeTest(in.Wireframe, in.PointCloud, 0); + CurrentShader->OnSetMaterialBurning(Material); + CurrentShader->setEdgeTest(in.Wireframe, in.PointCloud); } - /* - mi = (u32)Material.org.MaterialType; - if (mi < MaterialRenderers.size()) - MaterialRenderers[mi].Renderer->OnRender(this, (video::E_VERTEX_TYPE)VertexCache.vType); - */ +#if 0 + { + //u32 shaderid = (u32)Material.org.MaterialType; + if (shaderid < MaterialRenderers.size()) + MaterialRenderers[shaderid].Renderer->OnRender(this, (video::E_VERTEX_TYPE)VertexShader.vType); + } +#endif } @@ -2659,7 +3521,8 @@ void CBurningVideoDriver::setFog(SColor color, E_FOG_TYPE fogType, f32 start, /*! applies lighting model */ -void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) + +void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, const u32 vertexargb) { //gl_FrontLightModelProduct.sceneColor = gl_FrontMaterial.emission + gl_FrontMaterial.ambient * gl_LightModel.ambient @@ -2667,9 +3530,8 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) sVec3Color diffuse; sVec3Color specular; - // the universe started in darkness.. - ambient = EyeSpace.Global_AmbientLight; + ambient.set(0.f); diffuse.set(0.f); specular.set(0.f); @@ -2678,7 +3540,7 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) f32 dot; f32 distance; f32 attenuation; - sVec4 vp; // unit vector vertex to light + sVec4 vp; // vertex to light sVec4 lightHalf; // blinn-phong reflection f32 spotDot; // cos of angle between spotlight and point on surface @@ -2689,19 +3551,41 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) if (!light.LightIsOn) continue; - switch (light.Type) + switch (light.Type | (EyeSpace.TL_Flag & TL_SPECULAR)) { case ELT_DIRECTIONAL: + case ELT_DIRECTIONAL | TL_SPECULAR: + // surface to light vp = light.pos4n = light.pos4 - //angle between normal and light vector - dot = EyeSpace.normal.dot_xyz(light.spotDirection4); + // attenuation = 1 + // distance = 1 // accumulate ambient ambient.add_rgb(light.AmbientColor); - // diffuse component - if (dot > 0.f) - diffuse.mad_rgb(light.DiffuseColor, dot); + //angle between normal and light vector + dot = EyeSpace.normal.dot_xyz(light.pos4); + if (dot <= 0.f) continue; + + diffuse.mad_rgb(light.DiffuseColor, dot); + + if (!(EyeSpace.TL_Flag & TL_SPECULAR)) + continue; + + //light.halfvector + lightHalf.x = light.pos4.x - EyeSpace.vertexn.x; // + 0.f; + lightHalf.y = light.pos4.y - EyeSpace.vertexn.y; // + 0.f; + lightHalf.z = light.pos4.z - EyeSpace.vertexn.z; // + 1.f; + //lightHalf.normalize_dir_xyz(); + + dot = EyeSpace.normal.dot_xyz(lightHalf); + if (dot <= 0.f) continue; + + distance = lightHalf.length_xyz(); + distance = reciprocal_zero(distance); + + specular.mad_rgb(light.SpecularColor, powf_limit(dot * distance, Material.org.Shininess)); + break; case ELT_POINT: @@ -2711,10 +3595,9 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) vp.z = light.pos4.z - EyeSpace.vertex.z; distance = vp.length_xyz(); - attenuation = light.constantAttenuation - + light.linearAttenuation * distance - + light.quadraticAttenuation * (distance * distance); + + distance * (light.linearAttenuation + light.quadraticAttenuation * distance); + attenuation = reciprocal_one(attenuation); //att = clamp(1.0 - dist/radius, 0.0, 1.0); att *= att @@ -2725,28 +3608,60 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) // build diffuse reflection //angle between normal and light vector - vp.mul_xyz(reciprocal_zero(distance)); //normalize + //vp.mul_xyz(reciprocal_zero(distance)); //normalize dot = EyeSpace.normal.dot_xyz(vp); if (dot <= 0.f) continue; + distance = reciprocal_zero(distance); + // diffuse component - diffuse.mad_rgb(light.DiffuseColor, dot * attenuation); + diffuse.mad_rgb(light.DiffuseColor, (dot * distance) * attenuation); + break; - if (!(EyeSpace.TL_Flag & TL_SPECULAR)) - continue; + case ELT_POINT | TL_SPECULAR: + // surface to light + vp.x = light.pos4.x - EyeSpace.vertex.x; + vp.y = light.pos4.y - EyeSpace.vertex.y; + vp.z = light.pos4.z - EyeSpace.vertex.z; - lightHalf.x = vp.x + 0.f; // EyeSpace.cam_eye_pos.x; - lightHalf.y = vp.y + 0.f; // EyeSpace.cam_eye_pos.y; - lightHalf.z = vp.z - 1.f; // EyeSpace.cam_eye_pos.z; - lightHalf.normalize_dir_xyz(); + distance = vp.length_xyz(); + attenuation = light.constantAttenuation + + distance * (light.linearAttenuation + light.quadraticAttenuation * distance); + attenuation = reciprocal_one(attenuation); + + // accumulate ambient + ambient.mad_rgb(light.AmbientColor, attenuation); + + // build diffuse reflection + dot = EyeSpace.normal.dot_xyz(vp); + if (dot <= 0.f) continue; + + distance = reciprocal_zero(distance); + + // diffuse component + diffuse.mad_rgb(light.DiffuseColor, (dot * distance) * attenuation); + + //vp.mul_xyz(distance); //normalize + + //halfVector = normalize(VP + eye), GL_LIGHT_MODEL_LOCAL_VIEWER + lightHalf.x = vp.x * distance - EyeSpace.vertexn.x; // + 0.f; + lightHalf.y = vp.y * distance - EyeSpace.vertexn.y; // + 0.f; + lightHalf.z = vp.z * distance - EyeSpace.vertexn.z; // + 1.f; + + //lightHalf.normalize_dir_xyz(); + dot = EyeSpace.normal.dot_xyz(lightHalf); + if (dot <= 0.f) continue; + + distance = lightHalf.length_xyz(); + dot *= reciprocal_zero(distance); //specular += light.SpecularColor * pow(max(dot(Eyespace.normal,lighthalf),0,Material.org.Shininess)*attenuation - specular.mad_rgb(light.SpecularColor, - powf_limit(EyeSpace.normal.dot_xyz(lightHalf), Material.org.Shininess) * attenuation - ); + specular.mad_rgb(light.SpecularColor, powf_limit(dot, Material.org.Shininess) * attenuation); + break; case ELT_SPOT: + case ELT_SPOT | TL_SPECULAR: // surface to light vp.x = light.pos4.x - EyeSpace.vertex.x; vp.y = light.pos4.y - EyeSpace.vertex.y; @@ -2783,9 +3698,9 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) if (!(EyeSpace.TL_Flag & TL_SPECULAR)) continue; - lightHalf.x = vp.x + 0.f; // EyeSpace.cam_eye_pos.x; - lightHalf.y = vp.y + 0.f; // EyeSpace.cam_eye_pos.y; - lightHalf.z = vp.z - 1.f; // EyeSpace.cam_eye_pos.z; + lightHalf.x = vp.x - EyeSpace.vertexn.x; // + 0.f; + lightHalf.y = vp.y - EyeSpace.vertexn.y; // + 0.f; + lightHalf.z = vp.z - EyeSpace.vertexn.z; // + 1.f; lightHalf.normalize_dir_xyz(); //specular += light.SpecularColor * pow(max(dot(Eyespace.normal,lighthalf),0,Material.org.Shininess)*attenuation @@ -2800,76 +3715,66 @@ void CBurningVideoDriver::lightVertex_eye(s4DVertex* dest, u32 vertexargb) } + sVec3Color vertexColor; + vertexColor.setA8R8G8B8(vertexargb); + // sum up lights + //If = Ia + Id + Is sVec3Color dColor; dColor.set(0.f); + + //Ia = gl_light_model_ambient* ambient_material + ambient_light * ambient_material + const sVec4& amb_mat = (EyeSpace.TL_Flag & TL_COLORMAT_AMBIENT) ? vertexColor : Material.AmbientColor; + dColor.mad_rgbv(EyeSpace.Global_AmbientLight, amb_mat); + dColor.mad_rgbv(ambient, amb_mat); + + //Id = diffuse_light * lambertTerm dot(N,L) * diffuse_material + dColor.mad_rgbv(diffuse, (EyeSpace.TL_Flag & TL_COLORMAT_DIFFUSE) ? vertexColor : Material.DiffuseColor); +#if 0 dColor.mad_rgbv(diffuse, Material.DiffuseColor); //diffuse * vertex color. //has to move to shader (for vertex color only this will fit [except clamping]) - sVec3Color c; - c.setA8R8G8B8(vertexargb); - dColor.r *= c.r; - dColor.g *= c.g; - dColor.b *= c.b; + dColor.r *= vertexColor.r; + dColor.g *= vertexColor.g; + dColor.b *= vertexColor.b; +#endif //separate specular + const sVec4& spec_mat = (EyeSpace.TL_Flag & TL_COLORMAT_SPECULAR) ? vertexColor : Material.SpecularColor; #if defined(SOFTWARE_DRIVER_2_USE_SEPARATE_SPECULAR_COLOR) - if ((VertexCache.vSize[VertexCache.vType].Format & VERTEX4D_FORMAT_COLOR_2_FOG)) + if ((VertexShader.vSize[VertexShader.vType].Format & VERTEX4D_FORMAT_MASK_COLOR)>=VERTEX4D_FORMAT_COLOR_2_FOG) { - specular.sat_xyz(dest->Color[1], Material.SpecularColor); + specular.sat_mul_xyz(dest->Color[1], spec_mat); + } + else if (!(EyeSpace.TL_Flag & TL_LIGHT0_IS_NORMAL_MAP) && + (VertexShader.vSize[VertexShader.vType].Format & VERTEX4D_FORMAT_MASK_LIGHT) + ) + { + specular.sat_mul_xyz(dest->LightTangent[0], spec_mat); } else - if (!(EyeSpace.TL_Flag & TL_LIGHT0_IS_NORMAL_MAP) && - (VertexCache.vSize[VertexCache.vType].Format & VERTEX4D_FORMAT_MASK_LIGHT) - ) - { - specular.sat_xyz(dest->LightTangent[0], Material.SpecularColor); - } - else #endif - { - dColor.mad_rgbv(specular, Material.SpecularColor); - } + { + dColor.mad_rgbv(specular, spec_mat); + } - dColor.mad_rgbv(ambient, Material.AmbientColor); dColor.add_rgb(Material.EmissiveColor); - - dColor.sat(dest->Color[0], vertexargb); + dColor.sat_alpha_pass(dest->Color[0], vertexColor.a); } #endif -/* -CImage* getImage(const video::ITexture* texture) -{ - if (!texture) return 0; - CImage* img = 0; - switch (texture->getDriverType()) - { - case EDT_BURNINGSVIDEO: - img = ((CSoftwareTexture2*)texture)->getImage(); - break; - case EDT_SOFTWARE: - img = ((CSoftwareTexture*)texture)->getImage(); - break; - default: - os::Printer::log("Fatal Error: Tried to copy from a surface not owned by this driver.", ELL_ERROR); - break; - } - return img; -} -*/ /* draw2DImage with single color scales into destination quad & cliprect(more like viewport) draw2DImage with 4 color scales on destination and cliprect is scissor */ -static const u16 quad_triangle_indexList[6] = { 0,1,2,0,2,3 }; +static const u32 quad_triangle_indexList[6 + 2] = { 0,1,2,0,2,3, 3,3 }; #if defined(SOFTWARE_DRIVER_2_2D_AS_2D) @@ -2907,8 +3812,10 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core //! Draws a part of the texture into the rectangle. -void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core::rect& destRect, - const core::rect& sourceRect, const core::rect* clipRect, +void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, + const core::rect& destRect, + const core::rect& sourceRect, + const core::rect* clipRect, const video::SColor* const colors, bool useAlphaChannelOfTexture) { if (texture) @@ -2924,7 +3831,8 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core (argb == 0xFFFFFFFF ? BLITTER_TEXTURE_ALPHA_BLEND : BLITTER_TEXTURE_ALPHA_COLOR_BLEND) : BLITTER_TEXTURE; StretchBlit(op, RenderTargetSurface, clipRect, &destRect, - ((CSoftwareTexture2*)texture)->getImage(), &sourceRect, &texture->getOriginalSize(), argb); + ((CSoftwareTexture2*)texture)->getImage(), &sourceRect, &texture->getOriginalSize(), argb + ); } } @@ -2947,9 +3855,11 @@ void CBurningVideoDriver::draw2DRectangle(const core::rect& position, void CBurningVideoDriver::enableMaterial2D(bool enable) { CNullDriver::enableMaterial2D(enable); - burning_setbit(TransformationFlag[1][ETS_PROJECTION], 0, ETF_VALID); + //burning_setbit(TransformationFlag[1][ETS_PROJECTION], 0, ETF_VALID); } + +// a != b size_t compare_2d_material(const SMaterial& a, const SMaterial& b) { size_t flag = 0; @@ -2957,11 +3867,12 @@ size_t compare_2d_material(const SMaterial& a, const SMaterial& b) flag |= a.ZBuffer == b.ZBuffer ? 0 : 2; flag |= a.TextureLayer[0].Texture == b.TextureLayer[0].Texture ? 0 : 4; flag |= a.TextureLayer[0].BilinearFilter == b.TextureLayer[0].BilinearFilter ? 0 : 8; - flag |= a.MaterialTypeParam == b.MaterialTypeParam ? 0 : 16; + flag |= a.TextureLayer[0].TextureWrapU == b.TextureLayer[0].TextureWrapU ? 0 : 16; + flag |= a.MaterialTypeParam == b.MaterialTypeParam ? 0 : 32; if (flag) return flag; - flag |= a.TextureLayer[1].Texture == b.TextureLayer[1].Texture ? 0 : 32; - flag |= a.ZWriteEnable == b.ZWriteEnable ? 0 : 64; + flag |= a.TextureLayer[1].Texture == b.TextureLayer[1].Texture ? 0 : 64; + flag |= a.ZWriteEnable == b.ZWriteEnable ? 0 : 128; return flag; } @@ -2996,19 +3907,25 @@ void CBurningVideoDriver::setRenderStates2DMode(const video::SColor& color, cons Material.mat2D.setTexture(0, (video::ITexture*)texture); //used for text. so stay as sharp as possible (like HW Driver) - bool mip = false; + bool filter = false; const SMaterial& currentMaterial = (!OverrideMaterial2DEnabled) ? InitMaterial2D : OverrideMaterial2D; - mip = currentMaterial.TextureLayer[0].Texture && currentMaterial.TextureLayer[0].BilinearFilter; - Material.mat2D.setFlag(video::EMF_BILINEAR_FILTER, mip); + filter = texture && currentMaterial.TextureLayer[0].BilinearFilter; + Material.mat2D.setFlag(video::EMF_BILINEAR_FILTER, filter); + Material.mat2D.TextureLayer[0].TextureWrapU = currentMaterial.TextureLayer[0].TextureWrapU; + Material.mat2D.TextureLayer[0].TextureWrapV = currentMaterial.TextureLayer[0].TextureWrapV; + + //compare + size_t cmp_mat = compare_2d_material(Material.org, Material.mat2D); //switch to 2D Matrix Stack [ Material set Texture Matrix ] - TransformationStack = 1; + //if (TransformationStack != ETF_STACK_2D) cmp_mat |= 256; + TransformationStack = ETF_STACK_2D; //2D GUI Matrix - if (!(TransformationFlag[TransformationStack][ETS_PROJECTION] & ETF_VALID)) + if ((cmp_mat & 256) || !(TransformationFlag[TransformationStack][ETS_PROJECTION] & ETF_VALID)) { const core::dimension2d& renderTargetSize = getCurrentRenderTargetSize(); core::matrix4 m(core::matrix4::EM4CONST_NOTHING); @@ -3019,20 +3936,26 @@ void CBurningVideoDriver::setRenderStates2DMode(const video::SColor& color, cons m.makeIdentity(); setTransform(ETS_WORLD, m); - if (mip) - m.setTranslation(core::vector3df(IRRLICHT_2D_TEXEL_OFFSET, IRRLICHT_2D_TEXEL_OFFSET, 0.0f)); + // pixel perfect + //if(filter) + //currently done in ndc to dc -0.5f + //m.setTranslation(core::vector3df(-0.5f, -0.5f, 0.0f)); + +#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) + m.setTranslation(core::vector3df(0.375f, 0.375f, 0.0f)); +#endif setTransform(ETS_VIEW, m); + cmp_mat |= 8; - //Tweak 2D Pixel Center for openGL compatibility (guessing) - //buildNDCToDCMatrix(Transformation_ETS_CLIPSCALE[TransformationStack], ViewPort, mip ? (IRRLICHT_2D_TEXEL_OFFSET) * 0.5f : 0.f); } //compare - if (compare_2d_material(Material.org, Material.mat2D)) + if (cmp_mat) { setMaterial(Material.mat2D); } + if (CurrentShader) { CurrentShader->setPrimitiveColor(color.color); @@ -3048,7 +3971,7 @@ void CBurningVideoDriver::setRenderStates3DMode() //setMaterial(Material.save3D); //switch to 3D Matrix Stack - TransformationStack = 0; + TransformationStack = ETF_STACK_3D; } //! draws a vertex primitive list in 2d @@ -3084,6 +4007,10 @@ void CBurningVideoDriver::draw2DVertexPrimitiveList(const void* vertices, u32 ve } +//wrapper if both enabled +#if defined(SOFTWARE_DRIVER_2_2D_AS_2D) && defined(SOFTWARE_DRIVER_2_2D_AS_3D) +#endif + //setup a quad #if defined(SOFTWARE_DRIVER_2_2D_AS_3D) @@ -3116,7 +4043,7 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core // ok, we've clipped everything. // now draw it. const core::dimension2d sourceSize(targetRect.getSize()); - const core::position2d sourcePos(sourceRect.UpperLeftCorner + (targetRect.UpperLeftCorner - destPos)); + core::position2d sourcePos(sourceRect.UpperLeftCorner + (targetRect.UpperLeftCorner - destPos)); const core::dimension2d& tex_orgsize = texture->getOriginalSize(); const f32 invW = 1.f / static_cast(tex_orgsize.Width); @@ -3127,7 +4054,6 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core (sourcePos.X + sourceSize.Width) * invW, (sourcePos.Y + sourceSize.Height) * invH); - Quad2DVertices[0].Color = color; Quad2DVertices[1].Color = color; Quad2DVertices[2].Color = color; @@ -3147,7 +4073,7 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core drawVertexPrimitiveList(Quad2DVertices, 4, quad_triangle_indexList, 2, - EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT); + EVT_STANDARD, scene::EPT_TRIANGLES, EIT_32BIT); setRenderStates3DMode(); @@ -3159,6 +4085,9 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core const core::rect& sourceRect, const core::rect* clipRect, const video::SColor* const colors, bool useAlphaChannelOfTexture) { + if (!texture) + return; + const core::dimension2d& st = texture->getOriginalSize(); const f32 invW = 1.f / static_cast(st.Width); const f32 invH = 1.f / static_cast(st.Height); @@ -3209,12 +4138,11 @@ void CBurningVideoDriver::draw2DImage(const video::ITexture* texture, const core video::SColor alphaTest; alphaTest.color = useColor[0].color & useColor[0].color & useColor[0].color & useColor[0].color; - - setRenderStates2DMode(alphaTest,texture, useAlphaChannelOfTexture); + setRenderStates2DMode(alphaTest, texture, useAlphaChannelOfTexture); drawVertexPrimitiveList(Quad2DVertices, 4, quad_triangle_indexList, 2, - EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT); + EVT_STANDARD, scene::EPT_TRIANGLES, EIT_32BIT); if (clipRect) EyeSpace.TL_Flag &= ~TL_SCISSOR; @@ -3263,7 +4191,7 @@ void CBurningVideoDriver::draw2DRectangle(const core::rect& position, drawVertexPrimitiveList(Quad2DVertices, 4, quad_triangle_indexList, 2, - EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT); + EVT_STANDARD, scene::EPT_TRIANGLES, EIT_32BIT); setRenderStates3DMode(); @@ -3344,38 +4272,39 @@ void CBurningVideoDriver::draw3DLine(const core::vector3df& start, { SColor color_end = color_start; - VertexCache.primitiveHasVertex = 2; - VertexCache.vType = E4VT_LINE; + VertexShader.primitiveHasVertex = 2; + VertexShader.vType = E4VT_LINE; s4DVertex* v = Clipper.data; - transform_calc(ETS_PROJ_MODEL_VIEW); + transform_calc(ETS_MODEL_VIEW_PROJ); const core::matrix4* matrix = Transformation[TransformationStack]; - matrix[ETS_PROJ_MODEL_VIEW].transformVect(&v[s4DVertex_ofs(0)].Pos.x, start); - matrix[ETS_PROJ_MODEL_VIEW].transformVect(&v[s4DVertex_ofs(1)].Pos.x, end); + matrix[ETS_MODEL_VIEW_PROJ].transformVect(&v[s4DVertex_ofs(0)].Pos.x, start); + matrix[ETS_MODEL_VIEW_PROJ].transformVect(&v[s4DVertex_ofs(1)].Pos.x, end); + + u32 has_vertex_run; + const u32 flag = (VertexShader.vSize[VertexShader.vType].Format); + for (has_vertex_run = 0; has_vertex_run < VertexShader.primitiveHasVertex; has_vertex_run += 1) + { + v[s4DVertex_ofs(has_vertex_run)].reset_interpolate(); + v[s4DVertex_ofs(has_vertex_run)].flag = flag; + v[s4DVertex_pro(has_vertex_run)].flag = flag; + } #if BURNING_MATERIAL_MAX_COLORS > 0 v[s4DVertex_ofs(0)].Color[0].setA8R8G8B8(color_start.color); v[s4DVertex_ofs(1)].Color[0].setA8R8G8B8(color_end.color); #endif - size_t has_vertex_run; - for (has_vertex_run = 0; has_vertex_run < VertexCache.primitiveHasVertex; has_vertex_run += 1) - { - v[s4DVertex_ofs(has_vertex_run)].flag = (u32)(VertexCache.vSize[VertexCache.vType].Format); - v[s4DVertex_proj(has_vertex_run)].flag = v[s4DVertex_ofs(has_vertex_run)].flag; - } - - - size_t vOut; + u32 vOut; // vertices count per line - vOut = clipToFrustum(VertexCache.primitiveHasVertex); - if (vOut < VertexCache.primitiveHasVertex) + vOut = clipToFrustum(VertexShader.primitiveHasVertex); + if (vOut < VertexShader.primitiveHasVertex) return; // to DC Space, project homogenous vertex - ndc_2_dc_and_project(v + s4DVertex_proj(0), v+ s4DVertex_ofs(0), s4DVertex_ofs(vOut)); + ndc_2_dc_and_project(v, s4DVertex_ofs(vOut), Transformation_ETS_CLIPSCALE[TransformationStack]); // unproject vertex color #if 0 @@ -3387,45 +4316,83 @@ void CBurningVideoDriver::draw3DLine(const core::vector3df& start, #endif #endif - IBurningShader* shader = 0; - if (CurrentShader && CurrentShader->canWireFrame()) shader = CurrentShader; - else shader = BurningShader[ETR_TEXTURE_GOURAUD_WIRE]; - shader = BurningShader[ETR_TEXTURE_GOURAUD_WIRE]; - - shader->pushEdgeTest(1, 0, 1); - shader->setRenderTarget(RenderTargetSurface, ViewPort, Interlaced); - - for (has_vertex_run = 0; (has_vertex_run + VertexCache.primitiveHasVertex) <= vOut; has_vertex_run += 1) + pushShader(scene::EPT_LINES, 0); + for (has_vertex_run = 0; (has_vertex_run + VertexShader.primitiveHasVertex) <= vOut; has_vertex_run += 1) { - shader->drawLine(v + s4DVertex_proj(has_vertex_run), v + s4DVertex_proj(has_vertex_run+1)); + CurrentShader->drawLine(v + s4DVertex_pro(has_vertex_run), v + s4DVertex_pro(has_vertex_run + 1)); } - - shader->popEdgeTest(); - + PushShader.pop(); } +// set Shader Mode based on primitive type +void CBurningVideoDriver::pushShader(scene::E_PRIMITIVE_TYPE pType, int testCurrent) +{ + int wireFrame = 0; + int pointCloud = 0; + + switch (pType) + { + case scene::EPT_POINTS: + case scene::EPT_POINT_SPRITES: + pointCloud = 1; + break; + case scene::EPT_LINE_STRIP: + case scene::EPT_LINE_LOOP: + case scene::EPT_LINES: + wireFrame = 1; + break; + default: + return; + } + + IBurningShader* shader = 0; + if (wireFrame) + { + if (testCurrent && CurrentShader && CurrentShader->canWireFrame()) shader = CurrentShader; + else shader = BurningShader[ETR_TEXTURE_GOURAUD_WIRE]; + } + if (pointCloud) + { + if (testCurrent && CurrentShader && CurrentShader->canPointCloud()) shader = CurrentShader; + else shader = BurningShader[ETR_TEXTURE_GOURAUD_WIRE]; + } + + if (shader) + { + if (shader != CurrentShader) + { + PushShader.push(CurrentShader); + CurrentShader = shader; + shader->setRenderTarget(RenderTargetSurface, ViewPort, Interlaced); + shader->OnSetMaterialBurning(Material); + } + shader->setEdgeTest(wireFrame, pointCloud); + } +} //! \return Returns the name of the video driver. Example: In case of the DirectX8 //! driver, it would return "Direct3D8.1". const wchar_t* CBurningVideoDriver::getName() const { #ifdef BURNINGVIDEO_RENDERER_BEAUTIFUL - return L"Burning's Video 0.52 beautiful"; + return L"Burning's Video 0.54 beautiful"; +#elif defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) + return L"Burning's Video 0.54 STK"; #elif defined ( BURNINGVIDEO_RENDERER_ULTRA_FAST ) - return L"Burning's Video 0.52 ultra fast"; + return L"Burning's Video 0.54 ultra fast"; #elif defined ( BURNINGVIDEO_RENDERER_FAST ) - return L"Burning's Video 0.52 fast"; + return L"Burning's Video 0.54 fast"; #elif defined ( BURNINGVIDEO_RENDERER_CE ) - return L"Burning's Video 0.52 CE"; + return L"Burning's Video 0.54 CE"; #else - return L"Burning's Video 0.52"; + return L"Burning's Video 0.54"; #endif } //! Returns the graphics card vendor name. core::stringc CBurningVideoDriver::getVendorInfo() { - return "Burning's Video: Ing. Thomas Alten (c) 2006-2020"; + return "Burning's Video: Ing. Thomas Alten (c) 2006-2022"; } @@ -3451,11 +4418,14 @@ ITexture* CBurningVideoDriver::addRenderTargetTexture(const core::dimension2ddrop(); + if (img) img->drop(); addTexture(tex); tex->drop(); return tex; @@ -3555,7 +4525,7 @@ void CBurningVideoDriver::drawStencilShadowVolume(const core::arraysetRenderTarget(RenderTargetSurface, ViewPort, Interlaced); - CurrentShader->pushEdgeTest(Material.org.Wireframe, 0, 0); + CurrentShader->setEdgeTest(Material.org.Wireframe, 0); //setMaterial EyeSpace.TL_Flag &= ~(TL_TEXTURE_TRANSFORM | TL_LIGHT0_IS_NORMAL_MAP); @@ -3572,14 +4542,14 @@ void CBurningVideoDriver::drawStencilShadowVolume(const core::arraysetStencilOp(StencilOp_KEEP, StencilOp_INCR, StencilOp_KEEP); - drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE) E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE) E4IT_NONE); + drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE)E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE)E4IT_NONE); Material.org.BackfaceCulling = true; Material.org.FrontfaceCulling = false; Material.CullFlag = CULL_BACK | CULL_INVISIBLE; CurrentShader->setStencilOp(StencilOp_KEEP, StencilOp_DECR, StencilOp_KEEP); - drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE) E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE) E4IT_NONE); + drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE)E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE)E4IT_NONE); } else // zpass { @@ -3588,14 +4558,14 @@ void CBurningVideoDriver::drawStencilShadowVolume(const core::arraysetStencilOp(StencilOp_KEEP, StencilOp_KEEP, StencilOp_INCR); - drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE) E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE) E4IT_NONE); + drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE)E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE)E4IT_NONE); Material.org.BackfaceCulling = false; Material.org.FrontfaceCulling = true; Material.CullFlag = CULL_FRONT | CULL_INVISIBLE; CurrentShader->setStencilOp(StencilOp_KEEP, StencilOp_KEEP, StencilOp_DECR); - drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE) E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE) E4IT_NONE); + drawVertexPrimitiveList(triangles.const_pointer(), count, 0, count / 3, (video::E_VERTEX_TYPE)E4VT_SHADOW, scene::EPT_TRIANGLES, (video::E_INDEX_TYPE)E4IT_NONE); } //glDisable(GL_DEPTH_CLAMP); @@ -3621,7 +4591,7 @@ void CBurningVideoDriver::drawStencilShadow(bool clearStencilBuffer, video::SCol interlace_scanline_data line; for (line.y = 0; line.y < h; line.y += SOFTWARE_DRIVER_2_STEP_Y) { - interlace_scanline + if_interlace_scanline { tVideoSample * dst = (tVideoSample*)RenderTargetSurface->getData() + (line.y * w); const tStencilSample* stencil = (tStencilSample*)StencilBuffer->lock() + (line.y * w); @@ -3725,10 +4695,11 @@ s32 CBurningVideoDriver::addHighLevelShaderMaterial( } -void CBurningVideoDriver::setFallback_Material(E_MATERIAL_TYPE fallback_MaterialType) +void CBurningVideoDriver::setFallback_Material(E_MATERIAL_TYPE fallback_MaterialType, eBurningVertexShader vertexShader) { //this should be in material.... Material.Fallback_MaterialType = fallback_MaterialType; + Material.VertexShader = vertexShader; } void CBurningVideoDriver::setBasicRenderStates(const SMaterial& material, @@ -3741,26 +4712,31 @@ void CBurningVideoDriver::setBasicRenderStates(const SMaterial& material, //! Return an index constant for the vertex shader based on a name. s32 CBurningVideoDriver::getVertexShaderConstantID(const c8* name) { - return -1; + return getPixelShaderConstantID(name); } bool CBurningVideoDriver::setVertexShaderConstant(s32 index, const f32* floats, int count) { - return true; + return setPixelShaderConstant(index, floats, count); } bool CBurningVideoDriver::setVertexShaderConstant(s32 index, const s32* ints, int count) { - return true; + return setPixelShaderConstant(index, ints, count); } bool CBurningVideoDriver::setVertexShaderConstant(s32 index, const u32* ints, int count) { - return true; + return setPixelShaderConstant(index, ints, count); } void CBurningVideoDriver::setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount) { + //used? + if (CurrentShader) + { + CurrentShader->setVertexShaderConstant(data, startRegister, constantAmount); + } } //! Return an index constant for the pixel shader based on a name. @@ -3786,6 +4762,11 @@ bool CBurningVideoDriver::setPixelShaderConstant(s32 index, const u32* ints, int void CBurningVideoDriver::setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount = 1) { + //used? + if (CurrentShader) + { + CurrentShader->setPixelShaderConstant(data, startRegister, constantAmount); + } } //! Get pointer to the IVideoDriver interface @@ -3795,16 +4776,52 @@ IVideoDriver* CBurningVideoDriver::getVideoDriver() return this; } -} // end namespace video -} // end namespace irr + +//! Run occlusion query. Draws mesh stored in query. +/** If the mesh shall not be rendered visible, use +overrideMaterial to disable the color and depth buffer. */ +void CBurningVideoDriver::runOcclusionQuery(scene::ISceneNode* node, bool visible) +{ + const s32 index = OcclusionQueries.linear_search(SOccQuery(node)); + if (index != -1) + { + //extGlBeginQuery(GL_SAMPLES_PASSED_ARB, OcclusionQueries[index].UID); + samples_passed = 0; + CNullDriver::runOcclusionQuery(node, visible); + //extGlEndQuery(GL_SAMPLES_PASSED_ARB); + } +} + + +//! Update occlusion query. Retrieves results from GPU. +/** If the query shall not block, set the flag to false. +Update might not occur in this case, though */ +void CBurningVideoDriver::updateOcclusionQuery(scene::ISceneNode* node, bool block) +{ + const s32 index = OcclusionQueries.linear_search(SOccQuery(node)); + if (index < 0) return; + + OcclusionQueries[index].Result = samples_passed; + +} + + +//! Return query result. +/** Return value is the number of visible pixels/fragments. +The value is a safe approximation, i.e. can be larger than the +actual value of pixels. */ +u32 CBurningVideoDriver::getOcclusionQueryResult(scene::ISceneNode* node) const +{ + const s32 index = OcclusionQueries.linear_search(SOccQuery(node)); + return index < 0 ? ~0 : OcclusionQueries[index].Result; +} + +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ +burning_namespace_start //! creates a video driver IVideoDriver* createBurningVideoDriver(const irr::SIrrlichtCreationParameters& params, io::IFileSystem* io, video::IImagePresenter* presenter) @@ -3816,8 +4833,5 @@ IVideoDriver* createBurningVideoDriver(const irr::SIrrlichtCreationParameters& p #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ } - - -} // end namespace video -} // end namespace irr +burning_namespace_end diff --git a/source/Irrlicht/CSoftwareDriver2.h b/source/Irrlicht/CSoftwareDriver2.h index 53634b74..441ccd69 100644 --- a/source/Irrlicht/CSoftwareDriver2.h +++ b/source/Irrlicht/CSoftwareDriver2.h @@ -34,6 +34,22 @@ namespace video //! Create render target. virtual IRenderTarget* addRenderTarget() IRR_OVERRIDE; + //! Run occlusion query. Draws mesh stored in query. + /** If the mesh shall not be rendered visible, use + overrideMaterial to disable the color and depth buffer. */ + virtual void runOcclusionQuery(scene::ISceneNode* node, bool visible = false) IRR_OVERRIDE; + + //! Update occlusion query. Retrieves results from GPU. + /** If the query shall not block, set the flag to false. + Update might not occur in this case, though */ + virtual void updateOcclusionQuery(scene::ISceneNode* node, bool block = true) IRR_OVERRIDE; + + //! Return query result. + /** Return value is the number of visible pixels/fragments. + The value is a safe approximation, i.e. can be larger then the + actual value of pixels. */ + virtual u32 getOcclusionQueryResult(scene::ISceneNode* node) const IRR_OVERRIDE; + //! sets transformation virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4& mat) IRR_OVERRIDE; @@ -253,7 +269,8 @@ namespace video bool resetAllRenderstates) IRR_OVERRIDE; //pass BaseMaterialID - void setFallback_Material(E_MATERIAL_TYPE fallback_MaterialType); + void setFallback_Material(E_MATERIAL_TYPE fallback_MaterialType + , eBurningVertexShader vertexShader); //! Return an index constant for the vertex shader based on a name. virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE; @@ -328,6 +345,9 @@ namespace video IBurningShader* CurrentShader; IBurningShader* BurningShader[ETR2_COUNT]; + PushShaderData PushShader; + void pushShader(scene::E_PRIMITIVE_TYPE pType, int testCurrent); + IDepthBuffer* DepthBuffer; IStencilBuffer* StencilBuffer; @@ -341,9 +361,11 @@ namespace video enum E_TRANSFORMATION_STATE_BURNING_VIDEO { ETS_VIEW_PROJECTION = ETS_COUNT, - ETS_PROJ_MODEL_VIEW, + ETS_MODEL_VIEW_PROJ, ETS_MODEL_VIEW, - ETS_NORMAL, //3x3 ModelView Tansposed Inverse + ETS_NORMAL, //3x3 ModelView Transposed Inverse + + ETS_MODEL_INVERSE, //normal,parallax ETS_COUNT_BURNING = 16 }; @@ -354,12 +376,18 @@ namespace video { ETF_VALID = 1, ETF_IDENTITY = 2, - ETF_TEXGEN_CAMERA_SPHERE = 4, - ETF_TEXGEN_CAMERA_REFLECTION = 8, - ETF_TEXGEN_WRAP = 16, - ETF_TEXGEN_MASK = ETF_TEXGEN_CAMERA_SPHERE | ETF_TEXGEN_CAMERA_REFLECTION | ETF_TEXGEN_WRAP + ETF_TEXGEN_MATRIX = 4, // or !ETF_IDENTITY + ETF_TEXGEN_CAMERA_SPHERE = 8, + ETF_TEXGEN_CAMERA_REFLECTION = 16, + ETF_TEXGEN_MASK = ETF_TEXGEN_CAMERA_SPHERE | ETF_TEXGEN_CAMERA_REFLECTION | ETF_TEXGEN_MATRIX }; - size_t TransformationStack; // 0 .. 3D , 1 .. 2D + enum E_TRANSFORMATION_STACK + { + ETF_STACK_3D = 0, + ETF_STACK_2D = 1, + }; + + size_t TransformationStack; // 0 .. 3D , 1 .. 2D, 2.. Geometric Clipper core::matrix4 ALIGN(16) Transformation[2][ETS_COUNT_BURNING]; size_t TransformationFlag[2][ETS_COUNT_BURNING]; // E_TRANSFORMATION_FLAG @@ -375,34 +403,33 @@ namespace video AbsRectangle Scissor; // Vertex Cache - SVertexCache VertexCache; + SVertexShader VertexShader; int VertexCache_reset (const void* vertices, u32 vertexCount, const void* indices, u32 indexCount, E_VERTEX_TYPE vType,scene::E_PRIMITIVE_TYPE pType, E_INDEX_TYPE iType); - void VertexCache_get (s4DVertexPair* face[4] ); + //void VertexCache_get (s4DVertexPair* face[4] ); void VertexCache_map_source_format(); - void VertexCache_fill ( const u32 sourceIndex,const u32 destIndex ); - s4DVertexPair* VertexCache_getVertex ( const u32 sourceIndex ) const; - + //s4DVertexPair* VertexCache_getVertex ( const u32 sourceIndex ) const; // culling & clipping //size_t inline clipToHyperPlane (s4DVertexPair* burning_restrict dest, const s4DVertexPair* burning_restrict source, const size_t inCount, const sVec4 &plane ); //size_t inline clipToFrustumTest ( const s4DVertex * v ) const; public: - size_t clipToFrustum( const size_t vIn /*, const size_t clipmask_for_face*/ ); + void VertexCache_fill(const u32 sourceIndex, const u32 destIndex); + u32 clipToFrustum( const u32 vIn /*, const size_t clipmask_for_face*/ ); protected: // holds transformed, clipped vertices for a triangle. triangle expands on clipping // Buffer is in in pairs of 4DVertex (0 ... ndc, 1 .. dc and projected) SAligned4DVertex Clipper; - SAligned4DVertex Clipper_temp; + SAligned4DVertex Clipper_disjoint; // __restrict helper #ifdef SOFTWARE_DRIVER_2_LIGHTING - void lightVertex_eye ( s4DVertex *dest, u32 vertexargb ); + void lightVertex_eye ( s4DVertex *dest, const u32 vertexargb ); #endif //! Sets the fog mode. @@ -410,22 +437,29 @@ namespace video f32 end, f32 density, bool pixelFog, bool rangeFog) IRR_OVERRIDE; - void ndc_2_dc_and_project (s4DVertexPair* dest,const s4DVertexPair* source, const size_t vIn ) const; + //void ndc_2_dc_and_project (s4DVertexPair* dest,const s4DVertexPair* source, const size_t vIn ) const; //const is misleading. **v is const that true, but not *v.. - f32 screenarea_inside (const s4DVertexPair* burning_restrict const face[] ) const; - s32 lodFactor_inside ( const s4DVertexPair* burning_restrict const face[], const size_t tex, const f32 dc_area, const f32 lod_bias ) const; - void select_polygon_mipmap_inside ( s4DVertex* burning_restrict face[], const size_t tex, const CSoftwareTexture2_Bound& b ) const; + //f32 screenarea_inside (const s4DVertexPair* burning_restrict const face[] ) const; + //s32 lodFactor_inside ( const s4DVertexPair* burning_restrict const face[], const size_t tex, const f32 dc_area, const f32 lod_bias ) const; + //void select_polygon_mipmap_inside (s4DVertexPair* burning_restrict face[], const size_t tex, const CSoftwareTexture2_Bound& b ) const; - void getCameraPosWorldSpace(); + //void getCameraPosWorldSpace(); + void assignHardwareLight(SBurningShaderLight& l, const SLight& dl); SBurningShaderEyeSpace EyeSpace; SBurningShaderMaterial Material; - static const sVec4 NDCPlane[6+2]; + //static const sVec4 NDCPlane[6+2]; //! Built-in 2D quad for 2D rendering. S3DVertex Quad2DVertices[4]; interlaced_control Interlaced; + f32 TexBias[2]; +public: + const interlaced_control& getInterlace() { return Interlaced; } +protected: + + u32 samples_passed; #if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) core::array RenderTargets; diff --git a/source/Irrlicht/CSoftwareTexture2.cpp b/source/Irrlicht/CSoftwareTexture2.cpp index 1dff8c5c..3213dde1 100644 --- a/source/Irrlicht/CSoftwareTexture2.cpp +++ b/source/Irrlicht/CSoftwareTexture2.cpp @@ -12,16 +12,15 @@ #include "CBlit.h" #include "os.h" -namespace irr -{ -namespace video -{ +burning_namespace_start //! stretches srcRect src to dstRect dst, applying a sliding window box filter in linear color space (sRGB->linear->sRGB) void Resample_subSampling(eBlitter op, video::IImage* dst, const core::rect* dstRect, const video::IImage* src, const core::rect* srcRect, size_t flags); //nearest pow of 2 ( 257 will be 256 not 512 ) -static inline core::dimension2d getOptimalSize(const core::dimension2d& original, const u32 allowNonPowerOfTwo, const u32 maxSize) +static inline core::dimension2d getOptimalSize(const core::dimension2d& original, + const u32 allowNonPowerOfTwo, const u32 maxSize + , const interlaced_control& interlace) { u32 w, h; if (allowNonPowerOfTwo) @@ -29,7 +28,17 @@ static inline core::dimension2d getOptimalSize(const core::dimension2d w = original.Width; h = original.Height; } - else + /* + else + { + w = 1; + while (w < original.Width) w *= 2; + + h = 1; + while (h < original.Height) h *= 2; + } + */ + else if (interlace.bypass) { w = 1; while (w * 2 < original.Width) w *= 2; @@ -39,18 +48,33 @@ static inline core::dimension2d getOptimalSize(const core::dimension2d while (h * 2 < original.Height) h *= 2; if (h * 2 - original.Height < original.Height - h) h *= 2; } + else + { + u32 dw = original.Width / (interlace.tex_scalex + 1); + u32 dh = original.Height / (interlace.tex_scaley + 1); + + w = 1; + while (w < dw) w *= 2; + + h = 1; + while (h < dh) h *= 2; + } + if (maxSize && w > maxSize) w = maxSize; if (maxSize && h > maxSize) h = maxSize; return core::dimension2d(w, h); } +//Helper pointer (do not store per texture) +const IImage* CSoftwareTexture2::original_mip0 = 0; + //! constructor CSoftwareTexture2::CSoftwareTexture2(IImage* image, const io::path& name, u32 flags, CBurningVideoDriver* driver) - : ITexture(name -#if !defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) - , ETT_2D +#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) + : ITexture(name),Type(ETT_2D) +#else + : ITexture(name, ETT_2D) #endif - ) , MipMapLOD(0), Flags(flags), Driver(driver) { #ifdef _DEBUG @@ -65,11 +89,13 @@ CSoftwareTexture2::CSoftwareTexture2(IImage* image, const io::path& name, u32 fl ColorFormat = (Flags & IS_RENDERTARGET) ? SOFTWARE_DRIVER_2_RENDERTARGET_COLOR_FORMAT : SOFTWARE_DRIVER_2_TEXTURE_COLOR_FORMAT; IsRenderTarget = (Flags & IS_RENDERTARGET) != 0; HasMipMaps = (Flags & GEN_MIPMAP) != 0; - MipMap0_Area[0] = 1; - MipMap0_Area[1] = 1; - LodBIAS = 1.f; + for (size_t i = 0; i < array_size(MipMap); ++i) MipMap[i] = 0; - if (!image) return; + if (!image) + { + calcDerivative(); + return; + } OriginalSize = image->getDimension(); OriginalColorFormat = image->getColorFormat(); @@ -78,14 +104,21 @@ CSoftwareTexture2::CSoftwareTexture2(IImage* image, const io::path& name, u32 fl #if defined(IRRLICHT_sRGB) if (Flags & IMAGE_IS_LINEAR) image->set_sRGB(0); #else - //guessing linear image + + //compatible means all texture are linear + //Flags |= TEXTURE_IS_LINEAR | IMAGE_IS_LINEAR; + + //guessing linear image, everything else degamma if (name.find("light") >= 0 || name.find("bump") >= 0 || name.find("height") >= 0 + || name.find("detail") >= 0 // demo detailmap3.jpg. do some s-shaping on degamma for equal center? ) { Flags |= TEXTURE_IS_LINEAR | IMAGE_IS_LINEAR; } + + #endif bool isCompressed = IImage::isCompressedFormat(OriginalColorFormat); @@ -103,16 +136,12 @@ CSoftwareTexture2::CSoftwareTexture2(IImage* image, const io::path& name, u32 fl maxTexSize = 0; } #endif - /* - core::dimension2d optSize(OriginalSize.getOptimalSize( - (Flags & ALLOW_NPOT) ? 0 : 1, // requirePowerOfTwo - false, // requireSquare - (Flags & ALLOW_NPOT) ? 1 : maxTexSize == SOFTWARE_DRIVER_2_TEXTURE_MAXSIZE, // larger - (Flags & ALLOW_NPOT) ? 0 : maxTexSize // maxValue - ) - ); - */ - core::dimension2d optSize(getOptimalSize(OriginalSize, Flags & ALLOW_NPOT, maxTexSize)); + + //thread-local storage if needed + original_mip0 = 0; + + const interlaced_control& interlaced = Driver->getInterlace(); + core::dimension2d optSize(getOptimalSize(OriginalSize, Flags & ALLOW_NPOT, maxTexSize, interlaced)); if (OriginalSize == optSize) { MipMap[0] = new CImage(ColorFormat, image->getDimension()); @@ -132,17 +161,18 @@ CSoftwareTexture2::CSoftwareTexture2(IImage* image, const io::path& name, u32 fl { //image->copyToScalingBoxFilter ( MipMap[0],0, false ); Resample_subSampling(BLITTER_TEXTURE, MipMap[0], 0, image, 0, Flags); + original_mip0 = image; } // if Original Size is used for calculation ( 2D position, font) it will be wrong //OriginalSize = optSize; } // Show Information about resizing - if (OriginalSize != optSize || - ( OriginalColorFormat != ColorFormat && + if ((OriginalSize != optSize && interlaced.tex_scalex == 0) || + (OriginalColorFormat != ColorFormat && !((OriginalColorFormat == ECF_R8G8B8 || OriginalColorFormat == ECF_A1R5G5B5) && ColorFormat == ECF_A8R8G8B8) + ) ) - ) { char buf[256]; core::stringw showName(name); @@ -157,6 +187,7 @@ CSoftwareTexture2::CSoftwareTexture2(IImage* image, const io::path& name, u32 fl //select highest mipmap 0 regenerateMipMapLevels(image->getMipMapsData()); + original_mip0 = 0; } @@ -198,6 +229,8 @@ void CSoftwareTexture2::regenerateMipMapLevels(void* data) if (HasMipMaps && ((Flags & GEN_MIPMAP_AUTO) || 0 == data)) { + const IImage* mip0 = original_mip0 ? original_mip0 : MipMap[0]; + //need memory also if autogen mipmap disabled for (i = 1; i < array_size(MipMap); ++i) { @@ -214,7 +247,7 @@ void CSoftwareTexture2::regenerateMipMapLevels(void* data) #endif //MipMap[i]->fill ( 0xFFFF4040 ); //MipMap[i-1]->copyToScalingBoxFilter( MipMap[i], 0, false ); - Resample_subSampling(BLITTER_TEXTURE, MipMap[i], 0, MipMap[0], 0, Flags); + Resample_subSampling(BLITTER_TEXTURE, MipMap[i], 0, mip0, 0, Flags); } } else if (HasMipMaps && data) @@ -235,9 +268,6 @@ void CSoftwareTexture2::regenerateMipMapLevels(void* data) i += 1; } while ((origSize.Width != 1 || origSize.Height != 1) && i < array_size(MipMap)); - //TODO: this is not true - LodBIAS = i * 2.f; - origSize = OriginalSize; for (i = 1; i < array_size(MipMap) && mip_current < mip_end; ++i) { @@ -279,10 +309,11 @@ void CSoftwareTexture2::regenerateMipMapLevels(void* data) #if 0 //visualize mipmap - for (i = 1; i < 0 && i < array_size(MipMap); ++i) + //if ( Flags & ( TEXTURE_IS_LINEAR | IMAGE_IS_LINEAR)) + for (i = 1; i < array_size(MipMap); ++i) { static u32 color[] = { - 0xFFFF0000, + 0xFFFFFFFF, 0xFFFF0000,0xFF00FF00,0xFF0000FF, 0xFFFFFF00,0xFF00FFFF,0xFFFF00FF, 0xFFff6600,0xFF00ff66,0xFF6600FF, @@ -296,14 +327,16 @@ void CSoftwareTexture2::regenerateMipMapLevels(void* data) int border = 0; const core::dimension2du& d = MipMap[i]->getDimension(); core::rect p(0, 0, d.Width, d.Height); - SColor c((color[i & 15] & 0x00FFFFFF) | 0xFF000000); + SColor c((color[i & 15] & 0x00FFFFFF) | 0x7F000000); core::rect dclip(border, border, d.Width - border, d.Height - border); - + Blit(BLITTER_TEXTURE_ALPHA_COLOR_BLEND, MipMap[i], &dclip, 0, MipMap[i], &p, c.color); } } +#endif +#if 0 //save mipmap chain if (0) { @@ -318,14 +351,20 @@ void CSoftwareTexture2::regenerateMipMapLevels(void* data) //if (name[i] == '.') ext = i; i += 1; } - for (i = 0; i < array_size(MipMap); ++i) + if (original_mip0) { - if (MipMap[i]) - { - snprintf_irr(buf, sizeof(buf), "mip/%s_%02d.png", name + filename, (s32)i); - Driver->writeImageToFile(MipMap[i], buf); - } + snprintf_irr(buf, sizeof(buf), "mip/%s_org.png", name + filename); + Driver->writeImageToFile((IImage*)original_mip0, buf); } + if (array_size(MipMap) >= 1 && MipMap[1]) + for (i = 0; i < array_size(MipMap); ++i) + { + if (MipMap[i]) + { + snprintf_irr(buf, sizeof(buf), "mip/%s_%02d.png", name + filename, (s32)i); + Driver->writeImageToFile(MipMap[i], buf); + } + } } #endif calcDerivative(); @@ -337,39 +376,48 @@ void CSoftwareTexture2::calcDerivative() MipMapLOD = 0; if (MipMap[0]) { - const core::dimension2du& dim = MipMap[0]->getDimension(); - MipMap0_Area[0] = dim.Width; - MipMap0_Area[1] = dim.Height; // screensize of a triangle - - //TA: try to mimic openGL mipmap. ( don't do this!) - //if (MipMap0_Area[0] < 32) MipMap0_Area[0] = 32; - //if (MipMap0_Area[1] < 32) MipMap0_Area[1] = 32; - - Size = dim; // MipMap[MipMapLOD]->getDimension(); + Size = MipMap[MipMapLOD]->getDimension(); Pitch = MipMap[MipMapLOD]->getPitch(); } //preCalc mipmap texel center boundaries + for (size_t i = 0; i < array_size(MipMap); ++i) { CSoftwareTexture2_Bound& b = TexBound[i]; - if (MipMap[i]) - { - const core::dimension2du& dim = MipMap[i]->getDimension(); - //f32 u = 1.f / dim.Width; - //f32 v = 1.f / dim.Height; - b.w = dim.Width - 1.f; - b.h = dim.Height - 1.f; - b.cx = 0.f; //u*0.005f; - b.cy = 0.f; //v*0.005f; + core::dimension2du dim(0, 0); + if (MipMap[i] && MipMap[i]->getData()) dim = MipMap[i]->getDimension(); + + b.area = dim.Width * dim.Height; + if (b.area < 1) + { + b.mat[0] = 0.f; + b.mat[1] = 0.f; + b.mat[2] = 0.f; + b.mat[3] = 0.f; } else { - b.w = 0.f; - b.h = 0.f; - b.cx = 0.f; - b.cy = 0.f; +#if 0 + const f32 nu = 0.5f / dim.Width; + const f32 nv = 0.5f / dim.Height; + + //texture sampler! u,v repeat > 1 is wrong + // should be [0.5/width,1-0.5/width] ,but currently can't step outside last pixel... + // https://bartwronski.com/2021/02/15/bilinear-down-upsampling-pixel-grids-and-that-half-pixel-offset/ + + b.mat[0] = 1.f - 2 * nu; + b.mat[1] = nu; + b.mat[2] = 1.f - 2 * nv; + b.mat[3] = nv; +#endif + //texture sampler doesn't filter from center, sub-pixel shifts sub-texel + //wrong place here to go to pixel-dim + b.mat[0] = dim.Width - 1.f; + b.mat[1] = 0.f; + b.mat[2] = dim.Height - 1.f; + b.mat[3] = 0.f; } } @@ -378,10 +426,11 @@ void CSoftwareTexture2::calcDerivative() /* Software Render Target 2 */ -CSoftwareRenderTarget2::CSoftwareRenderTarget2(CBurningVideoDriver* driver) : Driver(driver) +CSoftwareRenderTarget2::CSoftwareRenderTarget2(CBurningVideoDriver* driver) : #if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) - , IRenderTarget(0) +IRenderTarget(0), DepthStencil(0), #endif +Driver(driver) { DriverType = EDT_BURNINGSVIDEO; @@ -393,9 +442,13 @@ CSoftwareRenderTarget2::~CSoftwareRenderTarget2() { if (Textures[0]) Textures[0]->drop(); + + if (DepthStencil) + DepthStencil->drop(); + } -void CSoftwareRenderTarget2::setTextures(ITexture* const * textures, u32 numTextures, ITexture* depthStencil, const E_CUBE_SURFACE* cubeSurfaces, u32 numCubeSurfaces) +void CSoftwareRenderTarget2::setTextures(ITexture* const* textures, u32 numTextures, ITexture* depthStencil, const E_CUBE_SURFACE* cubeSurfaces, u32 numCubeSurfaces) { if (!Textures.equals(textures, numTextures)) { @@ -421,8 +474,41 @@ void CSoftwareRenderTarget2::setTextures(ITexture* const * textures, u32 numText if (!textureDetected) Textures[0] = 0; } -} + // Set depth and stencil attachments. + if (DepthStencil != depthStencil) + { + if (DepthStencil) + { + DepthStencil->drop(); + DepthStencil = 0; + } + + CSoftwareTexture2* currentTexture = (depthStencil && depthStencil->getDriverType() == DriverType) ? static_cast(depthStencil) : 0; + + if (currentTexture) + { + if (currentTexture->getType() == ETT_2D) + { + const ECOLOR_FORMAT textureFormat = currentTexture->getOriginalColorFormat(); + if (IImage::isDepthFormat(textureFormat)) + { + DepthStencil = depthStencil; + DepthStencil->grab(); + } + else + { + os::Printer::log("Ignoring depth/stencil texture without depth color format.", ELL_WARNING); + } + } + else + { + os::Printer::log("This driver doesn't support depth/stencil to cubemaps.", ELL_WARNING); + } + } + } + +} static const float srgb_8bit_to_linear_float[1 << 8] = { 0.0f, 3.03527e-4f, 6.07054e-4f, 9.10581e-4f, @@ -490,11 +576,28 @@ static const float srgb_8bit_to_linear_float[1 << 8] = { 0.9386857f, 0.9473065f, 0.9559733f, 0.9646863f, 0.9734453f, 0.9822506f, 0.9911021f, 1.0f, }; -/* + +#if 0 +static void buildtable() +{ + //sRGB x <= 0.0031308 ? x * 12.92 : (1.055 * pow(x, 1/2.4)) - 0.055 + //Rec709 x < 0.018 ? (x * 4.5) : 1.099 * pow( x, (0.45) ) - 0.099 + + printf("static const float srgb_8bit_to_linear_float[1 << 8] = {"); + for (int i = 0; i <= 255; ++i) + { + double x = i / 255.0; + double linear = x < 0.04045 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4); + linear = pow(x, 2.2); + printf("%s%0.10lff", i & 7 ? "," : ",\n\t", linear); + } + printf("\n};"); +} + int linear_to_srgb_8bit(const float x) { if (x <= 0.f) return 0; if (x >= 1.f) return 255; - const float *table = SRGB_8BIT_TO_LINEAR_FLOAT; + const float* table = SRGB_8BIT_TO_LINEAR_FLOAT; int y = 0; for (int i = 128; i != 0; i >>= 1) { if (table[y + i] <= x) @@ -505,24 +608,28 @@ int linear_to_srgb_8bit(const float x) { else return y + 1; } -*/ - +#endif u32 linear_to_srgb_8bit(const float v) { + if (v <= 0.f) return 0; + else if (v >= 1.f) return 255; ieee754 c; c.f = v; - const size_t x = c.u; - const u32* table = (u32*)srgb_8bit_to_linear_float; + const u32 x = c.u; + const u32* table = (const u32*)srgb_8bit_to_linear_float; u32 y = 0; - y += table[y + 128] <= x ? 128 : 0; - y += table[y + 64] <= x ? 64 : 0; - y += table[y + 32] <= x ? 32 : 0; - y += table[y + 16] <= x ? 16 : 0; - y += table[y + 8] <= x ? 8 : 0; - y += table[y + 4] <= x ? 4 : 0; - y += table[y + 2] <= x ? 2 : 0; - y += table[y + 1] <= x ? 1 : 0; + y |= table[y | 128] <= x ? 128 : 0; + y |= table[y | 64] <= x ? 64 : 0; + y |= table[y | 32] <= x ? 32 : 0; + y |= table[y | 16] <= x ? 16 : 0; + y |= table[y | 8] <= x ? 8 : 0; + y |= table[y | 4] <= x ? 4 : 0; + y |= table[y | 2] <= x ? 2 : 0; + y |= table[y | 1] <= x ? 1 : 0; + + if (srgb_8bit_to_linear_float[y + 1] - x < v - srgb_8bit_to_linear_float[y]) + y += 1; return y; } @@ -579,41 +686,47 @@ void Resample_subSampling(eBlitter op, video::IImage* dst, const core::rect const int dst_sRGB = dst->get_sRGB(); const int src_sRGB = src->get_sRGB(); #else + //assuming sRGB as default const int dst_sRGB = (flags & CSoftwareTexture2::TEXTURE_IS_LINEAR) ? 0 : 1; const int src_sRGB = (flags & CSoftwareTexture2::IMAGE_IS_LINEAR) ? 0 : 1; #endif +#define ft float + ft scale[2]; + scale[0] = (ft)(sc.x1 - sc.x0) / (ft)(dc.x1 - dc.x0); + scale[1] = (ft)(sc.y1 - sc.y0) / (ft)(dc.y1 - dc.y0); + if (scale[0] < (ft)1 && scale[1] < (ft)1) + { + //magnify + } + //unweighted box filter + const ft rs = (ft)1.0 / (scale[0] * scale[1]); - float scale[2]; - scale[0] = (float)(sc.x1 - sc.x0) / (float)(dc.x1 - dc.x0); - scale[1] = (float)(sc.y1 - sc.y0) / (float)(dc.y1 - dc.y0); - const float rs = 1.f / (scale[0] * scale[1]); - - float sum[4]; + ft sum[4]; u32 sbgra = 0; - float f[4]; + ft f[4]; int fi[4]; - f[3] = (float)sc.y0; + f[3] = (ft)sc.y0; for (int dy = dc.y0; dy < dc.y1; ++dy) { f[1] = f[3]; f[3] = sc.y0 + (dy + 1 - dc.y0) * scale[1]; - if (f[3] >= sc.y1) f[3] = sc.y1 - 0.001f; //todo:1.f/dim should be enough + if (f[3] >= sc.y1) f[3] = sc.y1 - (ft)0.001; //todo:1.f/dim should be enough - f[2] = (float)sc.x0; + f[2] = (ft)sc.x0; for (int dx = dc.x0; dx < dc.x1; ++dx) { f[0] = f[2]; f[2] = sc.x0 + (dx + 1 - dc.x0) * scale[0]; - if (f[2] >= sc.x1) f[2] = sc.x1 - 0.001f; + if (f[2] >= sc.x1) f[2] = sc.x1 - (ft)0.001; //accumulate linear color - sum[0] = 0.f; - sum[1] = 0.f; - sum[2] = 0.f; - sum[3] = 0.f; + sum[0] = (ft)0; + sum[1] = (ft)0; + sum[2] = (ft)0; + sum[3] = (ft)0; //sample border fi[0] = (int)(f[0]); @@ -621,20 +734,20 @@ void Resample_subSampling(eBlitter op, video::IImage* dst, const core::rect fi[2] = (int)(f[2]); fi[3] = (int)(f[3]); - float w[2]; + ft w[2]; for (int fy = fi[1]; fy <= fi[3]; ++fy) { - w[1] = 1.f; + w[1] = (ft)1; if (fy == fi[1]) w[1] -= f[1] - fy; if (fy == fi[3]) w[1] -= fy + 1 - f[3]; for (int fx = fi[0]; fx <= fi[2]; ++fx) { - w[0] = 1.f; + w[0] = (ft)1; if (fx == fi[0]) w[0] -= f[0] - fx; if (fx == fi[2]) w[0] -= fx + 1 - f[2]; - const float ws = w[1] * w[0] * rs; + const ft ws = w[1] * w[0] * rs; switch (srcFormat) { @@ -675,17 +788,25 @@ void Resample_subSampling(eBlitter op, video::IImage* dst, const core::rect } if (dst_sRGB) { - sbgra = linear_to_srgb_8bit(sum[0]) | - linear_to_srgb_8bit(sum[1]) << 8 | - linear_to_srgb_8bit(sum[2]) << 16 | + sbgra = linear_to_srgb_8bit((float)sum[0]) | + linear_to_srgb_8bit((float)sum[1]) << 8 | + linear_to_srgb_8bit((float)sum[2]) << 16 | (u32)(sum[3]) << 24; } else { + u32 b = core::s32_clamp((int)floor(sum[0] + (ft)0.5), 0, 255); + u32 g = core::s32_clamp((int)floor(sum[1] + (ft)0.5), 0, 255); + u32 r = core::s32_clamp((int)floor(sum[2] + (ft)0.5), 0, 255); + u32 a = core::s32_clamp((int)floor(sum[3] + (ft)0.5), 0, 255); + + sbgra = b | (g << 8) | (r << 16) | (a << 24); +/* sbgra = (u32)(sum[0]) | (u32)(sum[1]) << 8 | (u32)(sum[2]) << 16 | (u32)(sum[3]) << 24; +*/ } switch (dstFormat) { @@ -704,10 +825,9 @@ void Resample_subSampling(eBlitter op, video::IImage* dst, const core::rect } } } - +#undef ft } -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ diff --git a/source/Irrlicht/CSoftwareTexture2.h b/source/Irrlicht/CSoftwareTexture2.h index d625fb10..15518f12 100644 --- a/source/Irrlicht/CSoftwareTexture2.h +++ b/source/Irrlicht/CSoftwareTexture2.h @@ -27,12 +27,25 @@ class CBurningVideoDriver; */ struct CSoftwareTexture2_Bound { - f32 w; // width - 0.5f; - f32 h; // height- 0.5f; - f32 cx; // texelcenter x 1.f/width*0.5f - f32 cy; // texelcenter y 1.f/height*0.5f + //[0.5 / width, 1 - 0.5 / width] + //int dim[2]; + f32 mat[4]; + + u32 area; // width * height }; +#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) +//! Enumeration describing the type of ITexture. +enum E_TEXTURE_TYPE +{ + //! 2D texture. + ETT_2D, + + //! Cubemap texture. + ETT_CUBEMAP +}; +#endif + class CSoftwareTexture2 : public ITexture { public: @@ -57,7 +70,8 @@ public: if ( newLevel < 0 ) newLevel = 0; else if ( newLevel >= (s32)array_size(MipMap)) newLevel = array_size(MipMap) - 1; - while ( newLevel > 0 && MipMap[newLevel] == 0 ) newLevel -= 1; + while ( newLevel > 0 && MipMap[newLevel] == 0 ) + newLevel -= 1; return newLevel; } @@ -83,20 +97,6 @@ public: virtual void unlock() IRR_OVERRIDE { } -/* - //! compare the area drawn with the area of the texture - f32 getLODFactor( const f32 texArea ) const - { - return MipMap0_Area[0]* MipMap0_Area[1] * 0.5f * texArea; - //return MipMap[0]->getImageDataSizeInPixels () * texArea; - } -*/ - - const u32* getMipMap0_Area() const - { - return MipMap0_Area; - } - f32 get_lod_bias() const { return LodBIAS; } //! returns unoptimized surface (misleading name. burning can scale down originalimage) virtual CImage* getImage() const @@ -115,6 +115,10 @@ public: { return TexBound[MipMapLOD]; } + const CSoftwareTexture2_Bound* getTexBound_index() const + { + return TexBound; + } #if !defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) virtual void regenerateMipMapLevels(void* data = 0, u32 layer = 0) IRR_OVERRIDE; @@ -124,15 +128,17 @@ public: #if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) - const core::dimension2d& getOriginalSize() const { return OriginalSize; }; - const core::dimension2d& getSize() const { return Size; }; - E_DRIVER_TYPE getDriverType() const { return DriverType; }; - ECOLOR_FORMAT getColorFormat() const { return ColorFormat; }; - ECOLOR_FORMAT getOriginalColorFormat() const { return OriginalColorFormat; }; + const core::dimension2d& getOriginalSize() const { return OriginalSize; } + const core::dimension2d& getSize() const { return Size; } + E_DRIVER_TYPE getDriverType() const { return DriverType; } + ECOLOR_FORMAT getColorFormat() const { return ColorFormat; } + ECOLOR_FORMAT getOriginalColorFormat() const { return OriginalColorFormat; } u32 getPitch() const { return Pitch; }; bool hasMipMaps() const { return HasMipMaps; } bool isRenderTarget() const { return IsRenderTarget; } + E_TEXTURE_TYPE getType() const { return Type; } + core::dimension2d OriginalSize; core::dimension2d Size; E_DRIVER_TYPE DriverType; @@ -141,6 +147,7 @@ public: u32 Pitch; bool HasMipMaps; bool IsRenderTarget; + E_TEXTURE_TYPE Type; #endif private: @@ -153,8 +160,10 @@ private: CImage* MipMap[SOFTWARE_DRIVER_2_MIPMAPPING_MAX]; CSoftwareTexture2_Bound TexBound[SOFTWARE_DRIVER_2_MIPMAPPING_MAX]; - u32 MipMap0_Area[2]; - f32 LodBIAS; // Tweak mipmap selection + + //Helper pointer for regenerateMipMapLevels (do not store per texture) + static const IImage* original_mip0; + }; /*! @@ -169,8 +178,10 @@ public: virtual void setTextures(ITexture* const * textures, u32 numTextures, ITexture* depthStencil, const E_CUBE_SURFACE* cubeSurfaces, u32 numCubeSurfaces) IRR_OVERRIDE; #if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) +public: E_DRIVER_TYPE DriverType; - core::array Texture; + core::array Textures; + ITexture* DepthStencil; #endif protected: diff --git a/source/Irrlicht/CTRGouraud2.cpp b/source/Irrlicht/CTRGouraud2.cpp index f08a9352..b83e59ec 100644 --- a/source/Irrlicht/CTRGouraud2.cpp +++ b/source/Irrlicht/CTRGouraud2.cpp @@ -93,7 +93,7 @@ protected: //! constructor CTRGouraud2::CTRGouraud2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_SOLID) { #ifdef _DEBUG setDebugName("CTRGouraud2"); @@ -274,7 +274,7 @@ void CTRGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVer temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -348,8 +348,8 @@ void CTRGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVer #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -418,7 +418,7 @@ void CTRGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVer #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); if ( EdgeTestPass & edge_test_first_line ) break; scan.x[0] += scan.slopeX[0]; @@ -509,8 +509,8 @@ void CTRGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVer #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -579,7 +579,7 @@ void CTRGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVer #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); if ( EdgeTestPass & edge_test_first_line ) break; scan.x[0] += scan.slopeX[0]; diff --git a/source/Irrlicht/CTRGouraudAlpha2.cpp b/source/Irrlicht/CTRGouraudAlpha2.cpp deleted file mode 100644 index 118859d8..00000000 --- a/source/Irrlicht/CTRGouraudAlpha2.cpp +++ /dev/null @@ -1,651 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt / Thomas Alten -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#include "IrrCompileConfig.h" -#include "IBurningShader.h" - -#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ - -// compile flag for this file -#undef USE_ZBUFFER -#undef IPOL_Z -#undef CMP_Z -#undef WRITE_Z - -#undef IPOL_W -#undef CMP_W -#undef WRITE_W - -#undef SUBTEXEL -#undef INVERSE_W - -#undef IPOL_C0 -#undef IPOL_T0 -#undef IPOL_T1 - -// define render case -#define SUBTEXEL -#define INVERSE_W - -#define USE_ZBUFFER -#define IPOL_W -#define CMP_W -#define WRITE_W - -#define IPOL_C0 -//#define IPOL_T0 -//#define IPOL_T1 - -// apply global override -#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef INVERSE_W -#endif - -#ifndef SOFTWARE_DRIVER_2_SUBTEXEL - #undef SUBTEXEL -#endif - -#if BURNING_MATERIAL_MAX_COLORS < 1 - #undef IPOL_C0 -#endif - -#if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) - #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef IPOL_W - #endif - #define IPOL_Z - - #ifdef CMP_W - #undef CMP_W - #define CMP_Z - #endif - - #ifdef WRITE_W - #undef WRITE_W - #define WRITE_Z - #endif - -#endif - - - -namespace irr -{ - -namespace video -{ - -class CTRGouraudAlpha2 : public IBurningShader -{ -public: - - //! constructor - CTRGouraudAlpha2(CBurningVideoDriver* driver); - - //! draws an indexed triangle list - virtual void drawTriangle ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ) IRR_OVERRIDE; - - -private: - void fragmentShader(); - -}; - -//! constructor -CTRGouraudAlpha2::CTRGouraudAlpha2(CBurningVideoDriver* driver) -: IBurningShader(driver) -{ - #ifdef _DEBUG - setDebugName("CTRGouraudAlpha2"); - #endif -} - - - -/*! -*/ -void CTRGouraudAlpha2::fragmentShader() -{ - tVideoSample *dst; - -#ifdef USE_ZBUFFER - fp24 *z; -#endif - - s32 xStart; - s32 xEnd; - s32 dx; - - -#ifdef SUBTEXEL - f32 subPixel; -#endif - -#ifdef IPOL_Z - f32 slopeZ; -#endif -#ifdef IPOL_W - fp24 slopeW; -#endif -#ifdef IPOL_C0 - sVec4 slopeC; -#endif -#ifdef IPOL_T0 - sVec2 slopeT[0]; -#endif -#ifdef IPOL_T1 - sVec2 slopeT[1]; -#endif - - // apply top-left fill-convention, left - xStart = fill_convention_left( line.x[0] ); - xEnd = fill_convention_right( line.x[1] ); - - dx = xEnd - xStart; - - if ( dx < 0 ) - return; - - // slopes - const f32 invDeltaX = fill_step_x( line.x[1] - line.x[0] ); - -#ifdef IPOL_Z - slopeZ = (line.z[1] - line.z[0]) * invDeltaX; -#endif -#ifdef IPOL_W - slopeW = (line.w[1] - line.w[0]) * invDeltaX; -#endif -#ifdef IPOL_C0 - slopeC = (line.c[0][1] - line.c[0][0]) * invDeltaX; -#endif -#ifdef IPOL_T0 - slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; -#endif -#ifdef IPOL_T1 - slopeT[1] = (line.t[1][1] - line.t[1][0]) * invDeltaX; -#endif - -#ifdef SUBTEXEL - subPixel = ( (f32) xStart ) - line.x[0]; -#ifdef IPOL_Z - line.z[0] += slopeZ * subPixel; -#endif -#ifdef IPOL_W - line.w[0] += slopeW * subPixel; -#endif -#ifdef IPOL_C0 - line.c[0][0] += slopeC * subPixel; -#endif -#ifdef IPOL_T0 - line.t[0][0] += slopeT[0] * subPixel; -#endif -#ifdef IPOL_T1 - line.t[1][0] += slopeT[1] * subPixel; -#endif -#endif - - SOFTWARE_DRIVER_2_CLIPCHECK; - dst = (tVideoSample*)RenderTarget->getData() + ( line.y * RenderTarget->getDimension().Width ) + xStart; - -#ifdef USE_ZBUFFER - z = (fp24*) DepthBuffer->lock() + ( line.y * RenderTarget->getDimension().Width ) + xStart; -#endif - - - -#ifdef IPOL_C0 - - f32 inversew = FIX_POINT_F32_MUL; - - tFixPoint a0; - tFixPoint r0, g0, b0; - tFixPoint r1, g1, b1; - tFixPoint r2, g2, b2; -#endif - - for ( s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) - { -#ifdef CMP_Z - if ( line.z[0] < z[i] ) -#endif -#ifdef CMP_W - if ( line.w[0] >= z[i] ) -#endif - - { -#ifdef IPOL_C0 -#ifdef INVERSE_W - inversew = reciprocal_zero_no ( line.w[0] ); -#endif - vec4_to_fix( a0, r0, g0, b0, line.c[0][0],inversew ); - - color_to_fix ( r1, g1, b1, dst[i] ); - - fix_color_norm(a0); - r2 = r1 + imulFix ( a0, r0 - r1 ); - g2 = g1 + imulFix ( a0, g0 - g1 ); - b2 = b1 + imulFix ( a0, b0 - b1 ); - - dst[i] = fix4_to_sample( a0,r2, g2, b2 ); -#else - dst[i] = PrimitiveColor; -#endif -#ifdef WRITE_Z - z[i] = line.z[0]; -#endif -#ifdef WRITE_W - z[i] = line.w[0]; -#endif - - } - -#ifdef IPOL_Z - line.z[0] += slopeZ; -#endif -#ifdef IPOL_W - line.w[0] += slopeW; -#endif -#ifdef IPOL_C0 - line.c[0][0] += slopeC; -#endif -#ifdef IPOL_T0 - line.t[0][0] += slopeT[0]; -#endif -#ifdef IPOL_T1 - line.t[1][0] += slopeT[1]; -#endif - } - -} - -void CTRGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) -{ - // sort on height, y - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - - const f32 ca = c->Pos.y - a->Pos.y; - const f32 ba = b->Pos.y - a->Pos.y; - const f32 cb = c->Pos.y - b->Pos.y; - // calculate delta y of the edges - scan.invDeltaY[0] = fill_step_y( ca ); - scan.invDeltaY[1] = fill_step_y( ba ); - scan.invDeltaY[2] = fill_step_y( cb ); - - if ( F32_LOWER_EQUAL_0 ( scan.invDeltaY[0] ) ) - return; - - // find if the major edge is left or right aligned - f32 temp[4]; - - temp[0] = a->Pos.x - c->Pos.x; - temp[1] = -ca; - temp[2] = b->Pos.x - a->Pos.x; - temp[3] = ba; - - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; - scan.right = 1 - scan.left; - - // calculate slopes for the major edge - scan.slopeX[0] = (c->Pos.x - a->Pos.x) * scan.invDeltaY[0]; - scan.x[0] = a->Pos.x; - -#ifdef IPOL_Z - scan.slopeZ[0] = (c->Pos.z - a->Pos.z) * scan.invDeltaY[0]; - scan.z[0] = a->Pos.z; -#endif - -#ifdef IPOL_W - scan.slopeW[0] = (c->Pos.w - a->Pos.w) * scan.invDeltaY[0]; - scan.w[0] = a->Pos.w; -#endif - -#ifdef IPOL_C0 - scan.slopeC[0][0] = (c->Color[0] - a->Color[0]) * scan.invDeltaY[0]; - scan.c[0][0] = a->Color[0]; -#endif - -#ifdef IPOL_T0 - scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; - scan.t[0][0] = a->Tex[0]; -#endif - -#ifdef IPOL_T1 - scan.slopeT[1][0] = (c->Tex[1] - a->Tex[1]) * scan.invDeltaY[0]; - scan.t[1][0] = a->Tex[1]; -#endif - - // top left fill convention y run - s32 yStart; - s32 yEnd; - -#ifdef SUBTEXEL - f32 subPixel; -#endif - - - // rasterize upper sub-triangle - if ( (f32) 0.0 != scan.invDeltaY[1] ) - { - // calculate slopes for top edge - scan.slopeX[1] = (b->Pos.x - a->Pos.x) * scan.invDeltaY[1]; - scan.x[1] = a->Pos.x; - -#ifdef IPOL_Z - scan.slopeZ[1] = (b->Pos.z - a->Pos.z) * scan.invDeltaY[1]; - scan.z[1] = a->Pos.z; -#endif - -#ifdef IPOL_W - scan.slopeW[1] = (b->Pos.w - a->Pos.w) * scan.invDeltaY[1]; - scan.w[1] = a->Pos.w; -#endif - -#ifdef IPOL_C0 - scan.slopeC[0][1] = (b->Color[0] - a->Color[0]) * scan.invDeltaY[1]; - scan.c[0][1] = a->Color[0]; -#endif - -#ifdef IPOL_T0 - scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; - scan.t[0][1] = a->Tex[0]; -#endif - -#ifdef IPOL_T1 - scan.slopeT[1][1] = (b->Tex[1] - a->Tex[1]) * scan.invDeltaY[1]; - scan.t[1][1] = a->Tex[1]; -#endif - - // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); - -#ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - a->Pos.y; - - // correct to pixel center - scan.x[0] += scan.slopeX[0] * subPixel; - scan.x[1] += scan.slopeX[1] * subPixel; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0] * subPixel; - scan.z[1] += scan.slopeZ[1] * subPixel; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0] * subPixel; - scan.w[1] += scan.slopeW[1] * subPixel; -#endif - -#ifdef IPOL_C0 - scan.c[0][0] += scan.slopeC[0][0] * subPixel; - scan.c[0][1] += scan.slopeC[0][1] * subPixel; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0] * subPixel; - scan.t[0][1] += scan.slopeT[0][1] * subPixel; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0] * subPixel; - scan.t[1][1] += scan.slopeT[1][1] * subPixel; -#endif - -#endif - - // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) - { - line.x[scan.left] = scan.x[0]; - line.x[scan.right] = scan.x[1]; - -#ifdef IPOL_Z - line.z[scan.left] = scan.z[0]; - line.z[scan.right] = scan.z[1]; -#endif - -#ifdef IPOL_W - line.w[scan.left] = scan.w[0]; - line.w[scan.right] = scan.w[1]; -#endif - -#ifdef IPOL_C0 - line.c[0][scan.left] = scan.c[0][0]; - line.c[0][scan.right] = scan.c[0][1]; -#endif - -#ifdef IPOL_T0 - line.t[0][scan.left] = scan.t[0][0]; - line.t[0][scan.right] = scan.t[0][1]; -#endif - -#ifdef IPOL_T1 - line.t[1][scan.left] = scan.t[1][0]; - line.t[1][scan.right] = scan.t[1][1]; -#endif - - // render a scanline - interlace_scanline fragmentShader(); - - scan.x[0] += scan.slopeX[0]; - scan.x[1] += scan.slopeX[1]; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0]; - scan.z[1] += scan.slopeZ[1]; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0]; - scan.w[1] += scan.slopeW[1]; -#endif - -#ifdef IPOL_C0 - scan.c[0][0] += scan.slopeC[0][0]; - scan.c[0][1] += scan.slopeC[0][1]; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0]; - scan.t[0][1] += scan.slopeT[0][1]; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0]; - scan.t[1][1] += scan.slopeT[1][1]; -#endif - - } - } - - // rasterize lower sub-triangle - if ( (f32) 0.0 != scan.invDeltaY[2] ) - { - // advance to middle point - if( (f32) 0.0 != scan.invDeltaY[1] ) - { - temp[0] = b->Pos.y - a->Pos.y; // dy - - scan.x[0] = a->Pos.x + scan.slopeX[0] * temp[0]; -#ifdef IPOL_Z - scan.z[0] = a->Pos.z + scan.slopeZ[0] * temp[0]; -#endif -#ifdef IPOL_W - scan.w[0] = a->Pos.w + scan.slopeW[0] * temp[0]; -#endif -#ifdef IPOL_C0 - scan.c[0][0] = a->Color[0] + scan.slopeC[0][0] * temp[0]; -#endif -#ifdef IPOL_T0 - scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; -#endif -#ifdef IPOL_T1 - scan.t[1][0] = a->Tex[1] + scan.slopeT[1][0] * temp[0]; -#endif - - } - - // calculate slopes for bottom edge - scan.slopeX[1] = (c->Pos.x - b->Pos.x) * scan.invDeltaY[2]; - scan.x[1] = b->Pos.x; - -#ifdef IPOL_Z - scan.slopeZ[1] = (c->Pos.z - b->Pos.z) * scan.invDeltaY[2]; - scan.z[1] = b->Pos.z; -#endif - -#ifdef IPOL_W - scan.slopeW[1] = (c->Pos.w - b->Pos.w) * scan.invDeltaY[2]; - scan.w[1] = b->Pos.w; -#endif - -#ifdef IPOL_C0 - scan.slopeC[0][1] = (c->Color[0] - b->Color[0]) * scan.invDeltaY[2]; - scan.c[0][1] = b->Color[0]; -#endif - -#ifdef IPOL_T0 - scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; - scan.t[0][1] = b->Tex[0]; -#endif - -#ifdef IPOL_T1 - scan.slopeT[1][1] = (c->Tex[1] - b->Tex[1]) * scan.invDeltaY[2]; - scan.t[1][1] = b->Tex[1]; -#endif - - // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); - -#ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - b->Pos.y; - - // correct to pixel center - scan.x[0] += scan.slopeX[0] * subPixel; - scan.x[1] += scan.slopeX[1] * subPixel; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0] * subPixel; - scan.z[1] += scan.slopeZ[1] * subPixel; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0] * subPixel; - scan.w[1] += scan.slopeW[1] * subPixel; -#endif - -#ifdef IPOL_C0 - scan.c[0][0] += scan.slopeC[0][0] * subPixel; - scan.c[0][1] += scan.slopeC[0][1] * subPixel; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0] * subPixel; - scan.t[0][1] += scan.slopeT[0][1] * subPixel; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0] * subPixel; - scan.t[1][1] += scan.slopeT[1][1] * subPixel; -#endif - -#endif - - // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) - { - line.x[scan.left] = scan.x[0]; - line.x[scan.right] = scan.x[1]; - -#ifdef IPOL_Z - line.z[scan.left] = scan.z[0]; - line.z[scan.right] = scan.z[1]; -#endif - -#ifdef IPOL_W - line.w[scan.left] = scan.w[0]; - line.w[scan.right] = scan.w[1]; -#endif - -#ifdef IPOL_C0 - line.c[0][scan.left] = scan.c[0][0]; - line.c[0][scan.right] = scan.c[0][1]; -#endif - -#ifdef IPOL_T0 - line.t[0][scan.left] = scan.t[0][0]; - line.t[0][scan.right] = scan.t[0][1]; -#endif - -#ifdef IPOL_T1 - line.t[1][scan.left] = scan.t[1][0]; - line.t[1][scan.right] = scan.t[1][1]; -#endif - - // render a scanline - interlace_scanline fragmentShader(); - - scan.x[0] += scan.slopeX[0]; - scan.x[1] += scan.slopeX[1]; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0]; - scan.z[1] += scan.slopeZ[1]; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0]; - scan.w[1] += scan.slopeW[1]; -#endif - -#ifdef IPOL_C0 - scan.c[0][0] += scan.slopeC[0][0]; - scan.c[0][1] += scan.slopeC[0][1]; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0]; - scan.t[0][1] += scan.slopeT[0][1]; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0]; - scan.t[1][1] += scan.slopeT[1][1]; -#endif - - } - } - -} - -} // end namespace video -} // end namespace irr - -#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ - -namespace irr -{ -namespace video -{ - -//! creates a flat triangle renderer -IBurningShader* createTriangleRendererGouraudAlpha2(CBurningVideoDriver* driver) -{ - // ETR_GOURAUD_ALPHA unused - #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ - return new CTRGouraudAlpha2(driver); - #else - return 0; - #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -} - - -} // end namespace video -} // end namespace irr - - - diff --git a/source/Irrlicht/CTRGouraudAlphaNoZ2.cpp b/source/Irrlicht/CTRGouraudAlphaNoZ2.cpp index 6a9633e5..0db0f588 100644 --- a/source/Irrlicht/CTRGouraudAlphaNoZ2.cpp +++ b/source/Irrlicht/CTRGouraudAlphaNoZ2.cpp @@ -93,7 +93,7 @@ private: //! constructor CTRGouraudAlphaNoZ2::CTRGouraudAlphaNoZ2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_TRANSPARENT_ALPHA_CHANNEL) { #ifdef _DEBUG setDebugName("CTRGouraudAlphaNoZ2"); @@ -286,7 +286,7 @@ void CTRGouraudAlphaNoZ2::drawTriangle(const s4DVertex* burning_restrict a, cons temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -359,8 +359,8 @@ void CTRGouraudAlphaNoZ2::drawTriangle(const s4DVertex* burning_restrict a, cons #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -428,7 +428,7 @@ void CTRGouraudAlphaNoZ2::drawTriangle(const s4DVertex* burning_restrict a, cons #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -518,8 +518,8 @@ void CTRGouraudAlphaNoZ2::drawTriangle(const s4DVertex* burning_restrict a, cons #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -588,7 +588,7 @@ void CTRGouraudAlphaNoZ2::drawTriangle(const s4DVertex* burning_restrict a, cons #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -636,7 +636,7 @@ namespace video //! creates a flat triangle renderer IBurningShader* createTRGouraudAlphaNoZ2(CBurningVideoDriver* driver) { - //ETR_GOURAUD_ALPHA_NOZ - draw2DRectangle Gradient + // ETR_GOURAUD_ALPHA_NOZ - draw2DRectangle Gradient #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ return new CTRGouraudAlphaNoZ2(driver); #else diff --git a/source/Irrlicht/CTRGouraudNoZ2.cpp b/source/Irrlicht/CTRGouraudNoZ2.cpp index b59a489d..c7a21877 100644 --- a/source/Irrlicht/CTRGouraudNoZ2.cpp +++ b/source/Irrlicht/CTRGouraudNoZ2.cpp @@ -92,7 +92,7 @@ protected: //! constructor CTRGouraudNoZ2::CTRGouraudNoZ2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_SOLID) { #ifdef _DEBUG setDebugName("CTRGouraudNoZ2"); @@ -272,7 +272,7 @@ void CTRGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, const s4D temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -346,8 +346,8 @@ void CTRGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, const s4D #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -417,7 +417,7 @@ void CTRGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, const s4D #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); if ( EdgeTestPass & edge_test_first_line ) break; scan.x[0] += scan.slopeX[0]; @@ -507,8 +507,8 @@ void CTRGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, const s4D #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -577,7 +577,7 @@ void CTRGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, const s4D #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); if ( EdgeTestPass & edge_test_first_line ) break; scan.x[0] += scan.slopeX[0]; diff --git a/source/Irrlicht/CTRNormalMap.cpp b/source/Irrlicht/CTRNormalMap.cpp index 284c2d7f..d4078d13 100644 --- a/source/Irrlicht/CTRNormalMap.cpp +++ b/source/Irrlicht/CTRNormalMap.cpp @@ -4,6 +4,7 @@ #include "IrrCompileConfig.h" #include "IBurningShader.h" +#include "CSoftwareDriver2.h" #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ @@ -22,6 +23,8 @@ #undef IPOL_C0 #undef IPOL_C1 +#undef IPOL_C2 +#undef IPOL_C3 #undef IPOL_T0 #undef IPOL_T1 #undef IPOL_T2 @@ -38,55 +41,62 @@ #define IPOL_C0 #define IPOL_C1 +#define IPOL_C2 +#define IPOL_C3 #define IPOL_T0 #define IPOL_T1 -#define IPOL_L0 +//#define IPOL_L0 // apply global override #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef INVERSE_W +#undef INVERSE_W #endif #ifndef SOFTWARE_DRIVER_2_SUBTEXEL - #undef SUBTEXEL +#undef SUBTEXEL #endif #if BURNING_MATERIAL_MAX_COLORS < 1 - #undef IPOL_C0 +#undef IPOL_C0 #endif #if BURNING_MATERIAL_MAX_COLORS < 2 - #undef IPOL_C1 +#undef IPOL_C1 +#endif + +#if BURNING_MATERIAL_MAX_COLORS < 3 +#define IPOL_L0 +#undef IPOL_C2 +#endif + +#if BURNING_MATERIAL_MAX_COLORS < 4 +#undef IPOL_C3 #endif #if BURNING_MATERIAL_MAX_LIGHT_TANGENT < 1 - #undef IPOL_L0 +#undef IPOL_L0 #endif #if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) - #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef IPOL_W - #endif - #define IPOL_Z +#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT +#undef IPOL_W +#endif +#define IPOL_Z - #ifdef CMP_W - #undef CMP_W - #define CMP_Z - #endif +#ifdef CMP_W +#undef CMP_W +#define CMP_Z +#endif - #ifdef WRITE_W - #undef WRITE_W - #define WRITE_Z - #endif +#ifdef WRITE_W +#undef WRITE_W +#define WRITE_Z +#endif #endif -namespace irr -{ - -namespace video -{ +burning_namespace_start class CTRNormalMap : public IBurningShader @@ -94,28 +104,37 @@ class CTRNormalMap : public IBurningShader public: //! constructor - CTRNormalMap(CBurningVideoDriver* driver); + CTRNormalMap(CBurningVideoDriver* driver,s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial); + ~CTRNormalMap(); //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; - + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) IRR_OVERRIDE; private: void fragmentShader(); }; + //! constructor -CTRNormalMap::CTRNormalMap(CBurningVideoDriver* driver) -: IBurningShader(driver) +CTRNormalMap::CTRNormalMap(CBurningVideoDriver* driver, s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial) + : IBurningShader(driver, baseMaterial) { - #ifdef _DEBUG +#ifdef _DEBUG setDebugName("CTRNormalMap"); - #endif +#endif + CallBack = this; + outMaterialTypeNr = driver->addMaterialRenderer(this); } +CTRNormalMap::~CTRNormalMap() +{ + if (CallBack == this) + CallBack = 0; +} -void CTRNormalMap::OnSetMaterial(const SBurningShaderMaterial& material) +void CTRNormalMap::OnSetMaterialBurning(const SBurningShaderMaterial& material) { } @@ -123,10 +142,10 @@ void CTRNormalMap::OnSetMaterial(const SBurningShaderMaterial& material) */ void CTRNormalMap::fragmentShader() { - tVideoSample *dst; + tVideoSample* dst; #ifdef USE_ZBUFFER - fp24 *z; + fp24* z; #endif s32 xStart; @@ -155,16 +174,16 @@ void CTRNormalMap::fragmentShader() #endif // apply top-left fill-convention, left - xStart = fill_convention_left( line.x[0] ); - xEnd = fill_convention_right( line.x[1] ); + xStart = fill_convention_left(line.x[0]); + xEnd = fill_convention_right(line.x[1]); dx = xEnd - xStart; - if ( dx < 0 ) + if (dx < 0) return; // slopes - const f32 invDeltaX = fill_step_x( line.x[1] - line.x[0] ); + const f32 invDeltaX = fill_step_x(line.x[1] - line.x[0]); #ifdef IPOL_Z slopeZ = (line.z[1] - line.z[0]) * invDeltaX; @@ -178,6 +197,12 @@ void CTRNormalMap::fragmentShader() #ifdef IPOL_C1 slopeC[1] = (line.c[1][1] - line.c[1][0]) * invDeltaX; #endif +#ifdef IPOL_C2 + slopeC[2] = (line.c[2][1] - line.c[2][0]) * invDeltaX; +#endif +#ifdef IPOL_C3 + slopeC[3] = (line.c[3][1] - line.c[3][0]) * invDeltaX; +#endif #ifdef IPOL_T0 slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; #endif @@ -192,7 +217,7 @@ void CTRNormalMap::fragmentShader() #endif #ifdef SUBTEXEL - subPixel = ( (f32) xStart ) - line.x[0]; + subPixel = ((f32)xStart) - line.x[0]; #ifdef IPOL_Z line.z[0] += slopeZ * subPixel; #endif @@ -205,6 +230,12 @@ void CTRNormalMap::fragmentShader() #ifdef IPOL_C1 line.c[1][0] += slopeC[1] * subPixel; #endif +#ifdef IPOL_C2 + line.c[2][0] += slopeC[2] * subPixel; +#endif +#ifdef IPOL_C3 + line.c[3][0] += slopeC[3] * subPixel; +#endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0] * subPixel; #endif @@ -220,10 +251,10 @@ void CTRNormalMap::fragmentShader() #endif SOFTWARE_DRIVER_2_CLIPCHECK; - dst = (tVideoSample*)RenderTarget->getData() + ( line.y * RenderTarget->getDimension().Width ) + xStart; + dst = (tVideoSample*)RenderTarget->getData() + (line.y * RenderTarget->getDimension().Width) + xStart; #ifdef USE_ZBUFFER - z = (fp24*) DepthBuffer->lock() + ( line.y * RenderTarget->getDimension().Width ) + xStart; + z = (fp24*)DepthBuffer->lock() + (line.y * RenderTarget->getDimension().Width) + xStart; #endif @@ -246,120 +277,144 @@ void CTRNormalMap::fragmentShader() #ifdef IPOL_C0 - tFixPoint a3,r3, g3, b3; + tFixPoint a3, r3, g3, b3; #endif #ifdef IPOL_C1 tFixPoint aFog = FIX_POINT_ONE; #endif +#ifdef IPOL_C2 + tFixPoint lx, ly, lz; +#endif - for ( s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) + + for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) { #ifdef CMP_Z - if ( line.z[0] < z[i] ) + if (line.z[0] < z[i]) #endif #ifdef CMP_W - if ( line.w[0] >= z[i] ) + if (line.w[0] >= z[i]) #endif - { + { #ifdef INVERSE_W - inversew = fix_inverse32 ( line.w[0] ); + inversew = fix_inverse32(line.w[0]); #endif #ifdef IPOL_C0 - //vertex alpha blend ( and omit depthwrite ,hacky..) - a3 = tofix(line.c[0][0].x, inversew); - if (a3 + 2 >= FIX_POINT_ONE) - { + //vertex alpha blend ( and omit depthwrite ,hacky..) + a3 = tofix(line.c[0][0].a, inversew); + if (a3 + 2 >= FIX_POINT_ONE) + { #ifdef WRITE_Z - z[i] = line.z[0]; + z[i] = line.z[0]; #endif #ifdef WRITE_W - z[i] = line.w[0]; + z[i] = line.w[0]; #endif - } + } #endif #ifdef IPOL_C1 - //complete inside fog - if (TL_Flag & TL_FOG) - { - aFog = tofix(line.c[1][0].a, inversew); - if (aFog <= 0) + //complete inside fog + if (TL_Flag & TL_FOG) { - dst[i] = fog_color_sample; - continue; + aFog = tofix(line.c[1][0].a, inversew); + if (aFog <= 0) + { + dst[i] = fog_color_sample; + continue; + } } - } #endif - tx0 = tofix ( line.t[0][0].x,inversew); - ty0 = tofix ( line.t[0][0].y,inversew); - tx1 = tofix ( line.t[1][0].x,inversew); - ty1 = tofix ( line.t[1][0].y,inversew); + tx0 = tofix(line.t[0][0].x, inversew); + ty0 = tofix(line.t[0][0].y, inversew); + tx1 = tofix(line.t[1][0].x, inversew); + ty1 = tofix(line.t[1][0].y, inversew); - // diffuse map - getSample_texture ( r0, g0, b0, &IT[0], tx0, ty0 ); + // diffuse map + getSample_texture(r0, g0, b0, &IT[0], tx0, ty0); - // normal map ( same texcoord0 but different mipmapping) - getSample_texture ( r1, g1, b1, &IT[1], tx1, ty1 ); + // normal map ( same texcoord0 but different mipmapping) + getSample_texture(r1, g1, b1, &IT[1], tx1, ty1); - r1 = ( r1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2-1); - g1 = ( g1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2-1); - b1 = ( b1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2-1); + // normal: xyz * 2 - 1 + r1 = (r1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + g1 = (g1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + b1 = (b1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + + //lightvector #ifdef IPOL_L0 - lx = tofix ( line.l[0][0].x, inversew ); - ly = tofix ( line.l[0][0].y, inversew ); - lz = tofix ( line.l[0][0].z, inversew ); + lx = tofix(line.l[0][0].x, inversew); + ly = tofix(line.l[0][0].y, inversew); + lz = tofix(line.l[0][0].z, inversew); - // DOT 3 Normal Map light in tangent space - //max(dot(LightVector, Normal), 0.0); - ndotl = clampfix_mincolor( (imulFix_simple(r1,lx) + imulFix_simple(g1,ly) + imulFix_simple(b1,lz) ) ); + // DOT 3 Normal Map light in tangent space + //max(dot(LightVector, Normal), 0.0); + ndotl = clampfix_mincolor((imulFix_simple(r1, lx) + imulFix_simple(g1, ly) + imulFix_simple(b1, lz))); #endif + lx = tofix(line.c[2][0].x, inversew); + ly = tofix(line.c[2][0].y, inversew); + lz = tofix(line.c[2][0].z, inversew); + //omit normalize + ndotl = clampfix_mincolor((imulFix_simple(r1, lx) + imulFix_simple(g1, ly) + imulFix_simple(b1, lz))); #ifdef IPOL_C0 - //LightColor[0] - r3 = tofix(line.c[0][0].y, inversew); - g3 = tofix(line.c[0][0].z, inversew); - b3 = tofix(line.c[0][0].w, inversew); + //LightColor[0] * lambert + r3 = imulFix_simple(tofix(line.c[0][0].r, inversew), ndotl); + g3 = imulFix_simple(tofix(line.c[0][0].g, inversew), ndotl); + b3 = imulFix_simple(tofix(line.c[0][0].b, inversew), ndotl); - // Lambert * LightColor[0] * Diffuse Texture; - r2 = imulFix (imulFix_simple( r3, ndotl ), r0 ); - g2 = imulFix (imulFix_simple( g3, ndotl ), g0 ); - b2 = imulFix (imulFix_simple( b3, ndotl ), b0 ); + //lightvector1 + lx = tofix(line.c[3][0].x, inversew); + ly = tofix(line.c[3][0].y, inversew); + lz = tofix(line.c[3][0].z, inversew); + //omit normalize + ndotl = clampfix_mincolor((imulFix_simple(r1, lx) + imulFix_simple(g1, ly) + imulFix_simple(b1, lz))); - //vertex alpha blend ( and omit depthwrite ,hacky..) - if (a3 + 2 < FIX_POINT_ONE) - { - color_to_fix(r1, g1, b1, dst[i]); - r2 = r1 + imulFix(a3, r2 - r1); - g2 = g1 + imulFix(a3, g2 - g1); - b2 = b1 + imulFix(a3, b2 - b1); - } + //LightColor[1] * lambert + r3 += imulFix_simple(tofix(line.c[1][0].r, inversew), ndotl); + g3 += imulFix_simple(tofix(line.c[1][0].g, inversew), ndotl); + b3 += imulFix_simple(tofix(line.c[1][0].b, inversew), ndotl); + + // (Lambert0 * LightColor[0] + Lambert1 * LightColor[1]) * Diffuse Texture; + r2 = clampfix_maxcolor(imulFix_simple(r3, r0)); + g2 = clampfix_maxcolor(imulFix_simple(g3, g0)); + b2 = clampfix_maxcolor(imulFix_simple(b3, b0)); + + //vertex alpha blend ( and omit depthwrite ,hacky..) + if (a3 + 2 < FIX_POINT_ONE) + { + color_to_fix(r1, g1, b1, dst[i]); + r2 = r1 + imulFix(a3, r2 - r1); + g2 = g1 + imulFix(a3, g2 - g1); + b2 = b1 + imulFix(a3, b2 - b1); + } #ifdef IPOL_C1 - //mix with distance - if (aFog < FIX_POINT_ONE) - { - r2 = fog_color[1] + imulFix(aFog, r2 - fog_color[1]); - g2 = fog_color[2] + imulFix(aFog, g2 - fog_color[2]); - b2 = fog_color[3] + imulFix(aFog, b2 - fog_color[3]); - } + //mix with distance + if (aFog < FIX_POINT_ONE) //TL_Flag & TL_FOG) + { + r2 = fog_color[1] + imulFix(aFog, r2 - fog_color[1]); + g2 = fog_color[2] + imulFix(aFog, g2 - fog_color[2]); + b2 = fog_color[3] + imulFix(aFog, b2 - fog_color[3]); + } #endif - dst[i] = fix_to_sample(r2, g2, b2); + dst[i] = fix_to_sample(r2, g2, b2); #else - r2 = imulFix_tex4 ( r0, r1 ); - g2 = imulFix_tex4 ( g0, g1 ); - b2 = imulFix_tex4 ( b0, b1 ); - dst[i] = fix_to_sample(r2, g2, b2); + r2 = imulFix_tex4(r0, r1); + g2 = imulFix_tex4(g0, g1); + b2 = imulFix_tex4(b0, b1); + dst[i] = fix_to_sample(r2, g2, b2); #endif - } + } #ifdef IPOL_Z line.z[0] += slopeZ; @@ -373,6 +428,12 @@ void CTRNormalMap::fragmentShader() #ifdef IPOL_C1 line.c[1][0] += slopeC[1]; #endif +#ifdef IPOL_C2 + line.c[2][0] += slopeC[2]; +#endif +#ifdef IPOL_C3 + line.c[3][0] += slopeC[3]; +#endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0]; #endif @@ -392,19 +453,19 @@ void CTRNormalMap::fragmentShader() void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) { // sort on height, y - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(b->Pos.y, c->Pos.y)) swapVertexPointer(&b, &c); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); const f32 ca = c->Pos.y - a->Pos.y; const f32 ba = b->Pos.y - a->Pos.y; const f32 cb = c->Pos.y - b->Pos.y; // calculate delta y of the edges - scan.invDeltaY[0] = fill_step_y( ca ); - scan.invDeltaY[1] = fill_step_y( ba ); - scan.invDeltaY[2] = fill_step_y( cb ); + scan.invDeltaY[0] = fill_step_y(ca); + scan.invDeltaY[1] = fill_step_y(ba); + scan.invDeltaY[2] = fill_step_y(cb); - if ( F32_LOWER_EQUAL_0 ( scan.invDeltaY[0] ) ) + if (F32_LOWER_EQUAL_0(scan.invDeltaY[0])) return; // find if the major edge is left or right aligned @@ -415,7 +476,7 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -442,6 +503,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][0] = a->Color[1]; #endif +#ifdef IPOL_C2 + scan.slopeC[2][0] = (c->Color[2] - a->Color[2]) * scan.invDeltaY[0]; + scan.c[2][0] = a->Color[2]; +#endif + +#ifdef IPOL_C3 + scan.slopeC[3][0] = (c->Color[3] - a->Color[3]) * scan.invDeltaY[0]; + scan.c[3][0] = a->Color[3]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; scan.t[0][0] = a->Tex[0]; @@ -472,7 +543,7 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe // rasterize upper sub-triangle - if ( F32_GREATER_0 ( scan.invDeltaY[1] ) ) + if (F32_GREATER_0(scan.invDeltaY[1])) { // calculate slopes for top edge scan.slopeX[1] = (b->Pos.x - a->Pos.x) * scan.invDeltaY[1]; @@ -498,6 +569,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][1] = a->Color[1]; #endif +#ifdef IPOL_C2 + scan.slopeC[2][1] = (b->Color[2] - a->Color[2]) * scan.invDeltaY[1]; + scan.c[2][1] = a->Color[2]; +#endif + +#ifdef IPOL_C3 + scan.slopeC[3][1] = (b->Color[3] - a->Color[3]) * scan.invDeltaY[1]; + scan.c[3][1] = a->Color[3]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; scan.t[0][1] = a->Tex[0]; @@ -519,11 +600,11 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top(a->Pos.y); + yEnd = fill_convention_down(b->Pos.y); #ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - a->Pos.y; + subPixel = ((f32)yStart) - a->Pos.y; // correct to pixel center scan.x[0] += scan.slopeX[0] * subPixel; @@ -549,6 +630,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][1] += scan.slopeC[1][1] * subPixel; #endif +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0] * subPixel; + scan.c[2][1] += scan.slopeC[2][1] * subPixel; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0] * subPixel; + scan.c[3][1] += scan.slopeC[3][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -572,7 +663,7 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; line.x[scan.right] = scan.x[1]; @@ -597,6 +688,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe line.c[1][scan.right] = scan.c[1][1]; #endif +#ifdef IPOL_C2 + line.c[2][scan.left] = scan.c[2][0]; + line.c[2][scan.right] = scan.c[2][1]; +#endif + +#ifdef IPOL_C3 + line.c[3][scan.left] = scan.c[3][0]; + line.c[3][scan.right] = scan.c[3][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -618,7 +719,7 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif // render a scanline - interlace_scanline fragmentShader (); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -643,6 +744,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][1] += scan.slopeC[1][1]; #endif +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0]; + scan.c[2][1] += scan.slopeC[2][1]; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0]; + scan.c[3][1] += scan.slopeC[3][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; @@ -667,10 +778,10 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe } // rasterize lower sub-triangle - if ( F32_GREATER_0 ( scan.invDeltaY[2] ) ) + if (F32_GREATER_0(scan.invDeltaY[2])) { // advance to middle point - if ( F32_GREATER_0 ( scan.invDeltaY[1] ) ) + if (F32_GREATER_0(scan.invDeltaY[1])) { temp[0] = b->Pos.y - a->Pos.y; // dy @@ -687,6 +798,12 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #ifdef IPOL_C1 scan.c[1][0] = a->Color[1] + scan.slopeC[1][0] * temp[0]; #endif +#ifdef IPOL_C2 + scan.c[2][0] = a->Color[2] + scan.slopeC[2][0] * temp[0]; +#endif +#ifdef IPOL_C3 + scan.c[3][0] = a->Color[3] + scan.slopeC[3][0] * temp[0]; +#endif #ifdef IPOL_T0 scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; #endif @@ -726,6 +843,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][1] = b->Color[1]; #endif +#ifdef IPOL_C2 + scan.slopeC[2][1] = (c->Color[2] - b->Color[2]) * scan.invDeltaY[2]; + scan.c[2][1] = b->Color[2]; +#endif + +#ifdef IPOL_C3 + scan.slopeC[3][1] = (c->Color[3] - b->Color[3]) * scan.invDeltaY[2]; + scan.c[3][1] = b->Color[3]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; scan.t[0][1] = b->Tex[0]; @@ -747,11 +874,11 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top(b->Pos.y); + yEnd = fill_convention_down(c->Pos.y); #ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - b->Pos.y; + subPixel = ((f32)yStart) - b->Pos.y; // correct to pixel center scan.x[0] += scan.slopeX[0] * subPixel; @@ -777,6 +904,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][1] += scan.slopeC[1][1] * subPixel; #endif +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0] * subPixel; + scan.c[2][1] += scan.slopeC[2][1] * subPixel; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0] * subPixel; + scan.c[3][1] += scan.slopeC[3][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -800,7 +937,7 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; line.x[scan.right] = scan.x[1]; @@ -825,6 +962,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe line.c[1][scan.right] = scan.c[1][1]; #endif +#ifdef IPOL_C2 + line.c[2][scan.left] = scan.c[2][0]; + line.c[2][scan.right] = scan.c[2][1]; +#endif + +#ifdef IPOL_C3 + line.c[3][scan.left] = scan.c[3][0]; + line.c[3][scan.right] = scan.c[3][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -846,7 +993,7 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -871,6 +1018,16 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe scan.c[1][1] += scan.slopeC[1][1]; #endif +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0]; + scan.c[2][1] += scan.slopeC[2][1]; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0]; + scan.c[3][1] += scan.slopeC[3][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; @@ -891,35 +1048,76 @@ void CTRNormalMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVe #endif } - } +} } +//! Called by the engine when the vertex and/or pixel shader constants for an +//! material renderer should be set. +void CTRNormalMap::OnSetConstants(IMaterialRendererServices* services, s32 userData) +{ +#if 0 + video::IVideoDriver* driver = services->getVideoDriver(); -} // end namespace video -} // end namespace irr + // set transposed world matrix + const core::matrix4& tWorld = driver->getTransform(video::ETS_WORLD).getTransposed(); + services->setVertexShaderConstant(tWorld.pointer(), 0, 4); + + // set transposed worldViewProj matrix + core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION)); + worldViewProj *= driver->getTransform(video::ETS_VIEW); + worldViewProj *= driver->getTransform(video::ETS_WORLD); + core::matrix4 tr(worldViewProj.getTransposed()); + services->setVertexShaderConstant(tr.pointer(), 8, 4); + + // here we fetch the fixed function lights from the driver + // and set them as constants + + u32 cnt = driver->getDynamicLightCount(); + + // Load the inverse world matrix. + core::matrix4 invWorldMat; + driver->getTransform(video::ETS_WORLD).getInverse(invWorldMat); + + for (u32 i = 0; i < 2; ++i) + { + video::SLight light; + + if (i < cnt) + light = driver->getDynamicLight(i); + else + { + light.DiffuseColor.set(0, 0, 0); // make light dark + light.Radius = 1.0f; + } + + light.DiffuseColor.a = 1.0f / (light.Radius * light.Radius); // set attenuation + + // Transform the light by the inverse world matrix to get it into object space. + invWorldMat.transformVect(light.Position); + + services->setVertexShaderConstant( + reinterpret_cast(&light.Position), 12 + (i * 2), 1); + + services->setVertexShaderConstant( + reinterpret_cast(&light.DiffuseColor), 13 + (i * 2), 1); + } +#endif +} +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ - +burning_namespace_start //! creates a triangle renderer -IBurningShader* createTRNormalMap(CBurningVideoDriver* driver) +IBurningShader* createTRNormalMap(CBurningVideoDriver* driver, s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial) { - #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ - return new CTRNormalMap(driver); - #else +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ + return new CTRNormalMap(driver, outMaterialTypeNr,baseMaterial); +#else return 0; - #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ } - -} // end namespace video -} // end namespace irr - - - +burning_namespace_end diff --git a/source/Irrlicht/CTRParallaxMap.cpp b/source/Irrlicht/CTRParallaxMap.cpp new file mode 100644 index 00000000..15a6a66c --- /dev/null +++ b/source/Irrlicht/CTRParallaxMap.cpp @@ -0,0 +1,1180 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt / Thomas Alten +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#include "IrrCompileConfig.h" +#include "IBurningShader.h" +#include "CSoftwareDriver2.h" + +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ + +// compile flag for this file +#undef USE_ZBUFFER +#undef IPOL_Z +#undef CMP_Z +#undef WRITE_Z + +#undef IPOL_W +#undef CMP_W +#undef WRITE_W + +#undef SUBTEXEL +#undef INVERSE_W + +#undef IPOL_C0 +#undef IPOL_C1 +#undef IPOL_C2 +#undef IPOL_C3 +#undef IPOL_T0 +#undef IPOL_T1 +#undef IPOL_T2 +#undef IPOL_L0 + +// define render case +#define SUBTEXEL +#define INVERSE_W + +#define USE_ZBUFFER +#define IPOL_W +#define CMP_W +#define WRITE_W + +#define IPOL_C0 +#define IPOL_C1 +#define IPOL_C2 +#define IPOL_C3 +#define IPOL_T0 +#define IPOL_T1 +#define IPOL_L0 + +// apply global override +#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT +#undef INVERSE_W +#endif + +#ifndef SOFTWARE_DRIVER_2_SUBTEXEL +#undef SUBTEXEL +#endif + +#if BURNING_MATERIAL_MAX_COLORS < 1 +#undef IPOL_C0 +#endif + +#if BURNING_MATERIAL_MAX_COLORS < 2 +#undef IPOL_C1 +#endif + +#if BURNING_MATERIAL_MAX_COLORS < 3 +#undef IPOL_C2 +#endif + +#if BURNING_MATERIAL_MAX_COLORS < 4 +#undef IPOL_C3 +#endif + +#if BURNING_MATERIAL_MAX_LIGHT_TANGENT < 1 +#undef IPOL_L0 +#endif + +#if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) +#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT +#undef IPOL_W +#endif +#define IPOL_Z + +#ifdef CMP_W +#undef CMP_W +#define CMP_Z +#endif + +#ifdef WRITE_W +#undef WRITE_W +#define WRITE_Z +#endif + +#endif + + +burning_namespace_start + + +class CBurningParallaxMap : public IBurningShader +{ +public: + + //! constructor + CBurningParallaxMap(CBurningVideoDriver* driver,s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial); + ~CBurningParallaxMap(); + + //! draws an indexed triangle list + virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterial(const video::SMaterial& material, + const video::SMaterial& lastMaterial, + bool resetAllRenderstates, video::IMaterialRendererServices* services) IRR_OVERRIDE; + virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) IRR_OVERRIDE; +private: + void fragmentShader(); + f32 CurrentScale; + tFixPoint CurrentScaleFix[2]; +}; + + +//! constructor +CBurningParallaxMap::CBurningParallaxMap(CBurningVideoDriver* driver, s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial) + : IBurningShader(driver, baseMaterial) +{ +#ifdef _DEBUG + setDebugName("CTRNormalMap"); +#endif + CallBack = this; + outMaterialTypeNr = driver->addMaterialRenderer(this); + CurrentScale = 0.02f; +} + +CBurningParallaxMap::~CBurningParallaxMap() +{ + if (CallBack == this) + CallBack = 0; +} + +void CBurningParallaxMap::OnSetMaterialBurning(const SBurningShaderMaterial& material) +{ + CurrentScale = material.org.MaterialTypeParam; +} + +void CBurningParallaxMap::OnSetMaterial(const video::SMaterial& material, + const video::SMaterial& lastMaterial, + bool resetAllRenderstates, video::IMaterialRendererServices* services) +{ + IBurningShader::OnSetMaterial(material, lastMaterial, + resetAllRenderstates, services); + + CurrentScale = material.MaterialTypeParam; +} + +/*! +*/ +void CBurningParallaxMap::fragmentShader() +{ + tVideoSample* dst; + +#ifdef USE_ZBUFFER + fp24* z; +#endif + + s32 xStart; + s32 xEnd; + s32 dx; + + +#ifdef SUBTEXEL + f32 subPixel; +#endif + +#ifdef IPOL_Z + f32 slopeZ; +#endif +#ifdef IPOL_W + fp24 slopeW; +#endif +#ifdef IPOL_C0 + sVec4 slopeC[BURNING_MATERIAL_MAX_COLORS]; +#endif +#ifdef IPOL_T0 + sVec2 slopeT[BURNING_MATERIAL_MAX_TEXTURES]; +#endif +#ifdef IPOL_L0 + sVec3Pack_unpack slopeL[BURNING_MATERIAL_MAX_LIGHT_TANGENT]; +#endif + + // apply top-left fill-convention, left + xStart = fill_convention_left(line.x[0]); + xEnd = fill_convention_right(line.x[1]); + + dx = xEnd - xStart; + + if (dx < 0) + return; + + // slopes + const f32 invDeltaX = fill_step_x(line.x[1] - line.x[0]); + +#ifdef IPOL_Z + slopeZ = (line.z[1] - line.z[0]) * invDeltaX; +#endif +#ifdef IPOL_W + slopeW = (line.w[1] - line.w[0]) * invDeltaX; +#endif +#ifdef IPOL_C0 + slopeC[0] = (line.c[0][1] - line.c[0][0]) * invDeltaX; +#endif +#ifdef IPOL_C1 + slopeC[1] = (line.c[1][1] - line.c[1][0]) * invDeltaX; +#endif +#ifdef IPOL_C2 + slopeC[2] = (line.c[2][1] - line.c[2][0]) * invDeltaX; +#endif +#ifdef IPOL_C3 + slopeC[3] = (line.c[3][1] - line.c[3][0]) * invDeltaX; +#endif +#ifdef IPOL_T0 + slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; +#endif +#ifdef IPOL_T1 + slopeT[1] = (line.t[1][1] - line.t[1][0]) * invDeltaX; +#endif +#ifdef IPOL_T2 + slopeT[2] = (line.t[2][1] - line.t[2][0]) * invDeltaX; +#endif +#ifdef IPOL_L0 + slopeL[0] = (line.l[0][1] - line.l[0][0]) * invDeltaX; +#endif + +#ifdef SUBTEXEL + subPixel = ((f32)xStart) - line.x[0]; +#ifdef IPOL_Z + line.z[0] += slopeZ * subPixel; +#endif +#ifdef IPOL_W + line.w[0] += slopeW * subPixel; +#endif +#ifdef IPOL_C0 + line.c[0][0] += slopeC[0] * subPixel; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1] * subPixel; +#endif +#ifdef IPOL_C2 + line.c[2][0] += slopeC[2] * subPixel; +#endif +#ifdef IPOL_C3 + line.c[3][0] += slopeC[3] * subPixel; +#endif +#ifdef IPOL_T0 + line.t[0][0] += slopeT[0] * subPixel; +#endif +#ifdef IPOL_T1 + line.t[1][0] += slopeT[1] * subPixel; +#endif +#ifdef IPOL_T2 + line.t[2][0] += slopeT[2] * subPixel; +#endif +#ifdef IPOL_L0 + line.l[0][0] += slopeL[0] * subPixel; +#endif +#endif + + SOFTWARE_DRIVER_2_CLIPCHECK; + dst = (tVideoSample*)RenderTarget->getData() + (line.y * RenderTarget->getDimension().Width) + xStart; + +#ifdef USE_ZBUFFER + z = (fp24*)DepthBuffer->lock() + (line.y * RenderTarget->getDimension().Width) + xStart; +#endif + + + f32 inversew = FIX_POINT_F32_MUL; + + tFixPoint tx0, ty0; + +#ifdef IPOL_T1 + tFixPoint tx1, ty1; +#endif + + tFixPoint r0, g0, b0; + tFixPoint r1, g1, b1,a1; + tFixPoint r2, g2, b2; + +#ifdef IPOL_L0 + tFixPoint lx, ly, lz; + sVec4 norm; +#endif + tFixPoint ndotl = FIX_POINT_ONE; + + +#ifdef IPOL_C0 + tFixPoint a3, r3, g3, b3; +#endif + +#ifdef IPOL_C1 + tFixPoint aFog = FIX_POINT_ONE; +#endif + + + for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) + { +#ifdef CMP_Z + if (line.z[0] < z[i]) +#endif +#ifdef CMP_W + if (line.w[0] >= z[i]) +#endif + { +#ifdef INVERSE_W + inversew = fix_inverse32(line.w[0]); +#endif + +#ifdef IPOL_C0 + //vertex alpha blend ( and omit depthwrite ,hacky..) + a3 = tofix(line.c[0][0].a, inversew); + if (a3 + 2 >= FIX_POINT_ONE) + { +#ifdef WRITE_Z + z[i] = line.z[0]; +#endif +#ifdef WRITE_W + z[i] = line.w[0]; +#endif + } +#endif + +#ifdef IPOL_C1 + //complete inside fog + if (TL_Flag & TL_FOG) + { + aFog = tofix(line.c[1][0].a, inversew); + if (aFog <= 0) + { + dst[i] = fog_color_sample; + continue; + } + } +#endif + + tx1 = tofix(line.t[1][0].x, inversew); + ty1 = tofix(line.t[1][0].y, inversew); + + // normal map height + getSample_texture(a1, &IT[1], tx1, ty1); + + // xyz * 2 - 1 + a1 = (a1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + tFixPoint ofs = imulFix_simple(a1,CurrentScaleFix[0]); + //eyevector +#ifdef IPOL_L0 +#if 0 + norm.x = line.l[0][0].x * inversew; + norm.y = line.l[0][0].y * inversew; + norm.z = line.l[0][0].z * inversew; + norm.normalize_dir_xyz_zero(); + + lx = tofix(norm.x, FIX_POINT_F32_MUL); + ly = tofix(norm.y, FIX_POINT_F32_MUL); +#else + lx = tofix(line.l[0][0].x, inversew); + ly = tofix(line.l[0][0].y, inversew); +#endif + //lz = tofix(line.l[0][0].z, inversew); + +#endif + // vec2 TexCoord = EyeVector.xy * TempFetch.w + vTexCoord; + tx0 = tofix(line.t[0][0].x, inversew) + imulFix_simple(lx, ofs); + ty0 = tofix(line.t[0][0].y, inversew) + imulFix_simple(ly, ofs); + + // diffuse map + getSample_texture(r0, g0, b0, &IT[0], tx0, ty0); + + ofs = imulFix_simple(a1, CurrentScaleFix[1]); + tx1 += imulFix_simple(lx, ofs); + ty1 += imulFix_simple(ly, ofs); + + // normal map ( same texcoord0 but different mipmapping) + getSample_texture(r1, g1, b1, &IT[1], tx1, ty1); + + + // normal: xyz * 2 - 1 + r1 = (r1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + g1 = (g1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + b1 = (b1 - FIX_POINT_HALF_COLOR) >> (COLOR_MAX_LOG2 - 1); + + + //lightvector + lx = tofix(line.c[2][0].x, inversew); + ly = tofix(line.c[2][0].y, inversew); + lz = tofix(line.c[2][0].z, inversew); + //omit normalize + //max(dot(LightVector, Normal), 0.0); + ndotl = clampfix_mincolor((imulFix_simple(r1, lx) + imulFix_simple(g1, ly) + imulFix_simple(b1, lz))); + +#ifdef IPOL_C0 + + //LightColor[0] * lambert + r3 = imulFix_simple(tofix(line.c[0][0].r, inversew), ndotl); + g3 = imulFix_simple(tofix(line.c[0][0].g, inversew), ndotl); + b3 = imulFix_simple(tofix(line.c[0][0].b, inversew), ndotl); + + //lightvector1 + lx = tofix(line.c[3][0].x, inversew); + ly = tofix(line.c[3][0].y, inversew); + lz = tofix(line.c[3][0].z, inversew); + //omit normalize + ndotl = clampfix_mincolor((imulFix_simple(r1, lx) + imulFix_simple(g1, ly) + imulFix_simple(b1, lz))); + + //LightColor[1] * lambert + r3 += imulFix_simple(tofix(line.c[1][0].r, inversew), ndotl); + g3 += imulFix_simple(tofix(line.c[1][0].g, inversew), ndotl); + b3 += imulFix_simple(tofix(line.c[1][0].b, inversew), ndotl); + + // (Lambert0 * LightColor[0] + Lambert1 * LightColor[1]) * Diffuse Texture; + r2 = clampfix_maxcolor(imulFix_simple(r3, r0)); + g2 = clampfix_maxcolor(imulFix_simple(g3, g0)); + b2 = clampfix_maxcolor(imulFix_simple(b3, b0)); + + //vertex alpha blend ( and omit depthwrite ,hacky..) + if (a3 + 2 < FIX_POINT_ONE) + { + color_to_fix(r1, g1, b1, dst[i]); + r2 = r1 + imulFix(a3, r2 - r1); + g2 = g1 + imulFix(a3, g2 - g1); + b2 = b1 + imulFix(a3, b2 - b1); + } + +#ifdef IPOL_C1 + //mix with distance + if (aFog < FIX_POINT_ONE) //TL_Flag & TL_FOG) + { + r2 = fog_color[1] + imulFix(aFog, r2 - fog_color[1]); + g2 = fog_color[2] + imulFix(aFog, g2 - fog_color[2]); + b2 = fog_color[3] + imulFix(aFog, b2 - fog_color[3]); + } +#endif + dst[i] = fix_to_sample(r2, g2, b2); + + +#else + r2 = imulFix_tex4(r0, r1); + g2 = imulFix_tex4(g0, g1); + b2 = imulFix_tex4(b0, b1); + dst[i] = fix_to_sample(r2, g2, b2); +#endif + + } + +#ifdef IPOL_Z + line.z[0] += slopeZ; +#endif +#ifdef IPOL_W + line.w[0] += slopeW; +#endif +#ifdef IPOL_C0 + line.c[0][0] += slopeC[0]; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1]; +#endif +#ifdef IPOL_C2 + line.c[2][0] += slopeC[2]; +#endif +#ifdef IPOL_C3 + line.c[3][0] += slopeC[3]; +#endif +#ifdef IPOL_T0 + line.t[0][0] += slopeT[0]; +#endif +#ifdef IPOL_T1 + line.t[1][0] += slopeT[1]; +#endif +#ifdef IPOL_T2 + line.t[2][0] += slopeT[2]; +#endif +#ifdef IPOL_L0 + line.l[0][0] += slopeL[0]; +#endif + } + +} + +void CBurningParallaxMap::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) +{ + // sort on height, y + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(b->Pos.y, c->Pos.y)) swapVertexPointer(&b, &c); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); + + const f32 ca = c->Pos.y - a->Pos.y; + const f32 ba = b->Pos.y - a->Pos.y; + const f32 cb = c->Pos.y - b->Pos.y; + // calculate delta y of the edges + scan.invDeltaY[0] = fill_step_y(ca); + scan.invDeltaY[1] = fill_step_y(ba); + scan.invDeltaY[2] = fill_step_y(cb); + + if (F32_LOWER_EQUAL_0(scan.invDeltaY[0])) + return; + + CurrentScaleFix[0] = tofix(CurrentScale, FIX_POINT_F32_MUL) << (IT[0].pitchlog2- SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + CurrentScaleFix[1] = tofix(CurrentScale, FIX_POINT_F32_MUL) << (IT[1].pitchlog2 - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + + // find if the major edge is left or right aligned + f32 temp[4]; + + temp[0] = a->Pos.x - c->Pos.x; + temp[1] = -ca; + temp[2] = b->Pos.x - a->Pos.x; + temp[3] = ba; + + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; + scan.right = 1 - scan.left; + + // calculate slopes for the major edge + scan.slopeX[0] = (c->Pos.x - a->Pos.x) * scan.invDeltaY[0]; + scan.x[0] = a->Pos.x; + +#ifdef IPOL_Z + scan.slopeZ[0] = (c->Pos.z - a->Pos.z) * scan.invDeltaY[0]; + scan.z[0] = a->Pos.z; +#endif + +#ifdef IPOL_W + scan.slopeW[0] = (c->Pos.w - a->Pos.w) * scan.invDeltaY[0]; + scan.w[0] = a->Pos.w; +#endif + +#ifdef IPOL_C0 + scan.slopeC[0][0] = (c->Color[0] - a->Color[0]) * scan.invDeltaY[0]; + scan.c[0][0] = a->Color[0]; +#endif + +#ifdef IPOL_C1 + scan.slopeC[1][0] = (c->Color[1] - a->Color[1]) * scan.invDeltaY[0]; + scan.c[1][0] = a->Color[1]; +#endif + +#ifdef IPOL_C2 + scan.slopeC[2][0] = (c->Color[2] - a->Color[2]) * scan.invDeltaY[0]; + scan.c[2][0] = a->Color[2]; +#endif + +#ifdef IPOL_C3 + scan.slopeC[3][0] = (c->Color[3] - a->Color[3]) * scan.invDeltaY[0]; + scan.c[3][0] = a->Color[3]; +#endif + +#ifdef IPOL_T0 + scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; + scan.t[0][0] = a->Tex[0]; +#endif + +#ifdef IPOL_T1 + scan.slopeT[1][0] = (c->Tex[1] - a->Tex[1]) * scan.invDeltaY[0]; + scan.t[1][0] = a->Tex[1]; +#endif + +#ifdef IPOL_T2 + scan.slopeT[2][0] = (c->Tex[2] - a->Tex[2]) * scan.invDeltaY[0]; + scan.t[2][0] = a->Tex[2]; +#endif + +#ifdef IPOL_L0 + scan.slopeL[0][0] = (c->LightTangent[0] - a->LightTangent[0]) * scan.invDeltaY[0]; + scan.l[0][0] = a->LightTangent[0]; +#endif + + // top left fill convention y run + s32 yStart; + s32 yEnd; + +#ifdef SUBTEXEL + f32 subPixel; +#endif + + + // rasterize upper sub-triangle + if (F32_GREATER_0(scan.invDeltaY[1])) + { + // calculate slopes for top edge + scan.slopeX[1] = (b->Pos.x - a->Pos.x) * scan.invDeltaY[1]; + scan.x[1] = a->Pos.x; + +#ifdef IPOL_Z + scan.slopeZ[1] = (b->Pos.z - a->Pos.z) * scan.invDeltaY[1]; + scan.z[1] = a->Pos.z; +#endif + +#ifdef IPOL_W + scan.slopeW[1] = (b->Pos.w - a->Pos.w) * scan.invDeltaY[1]; + scan.w[1] = a->Pos.w; +#endif + +#ifdef IPOL_C0 + scan.slopeC[0][1] = (b->Color[0] - a->Color[0]) * scan.invDeltaY[1]; + scan.c[0][1] = a->Color[0]; +#endif + +#ifdef IPOL_C1 + scan.slopeC[1][1] = (b->Color[1] - a->Color[1]) * scan.invDeltaY[1]; + scan.c[1][1] = a->Color[1]; +#endif + +#ifdef IPOL_C2 + scan.slopeC[2][1] = (b->Color[2] - a->Color[2]) * scan.invDeltaY[1]; + scan.c[2][1] = a->Color[2]; +#endif + +#ifdef IPOL_C3 + scan.slopeC[3][1] = (b->Color[3] - a->Color[3]) * scan.invDeltaY[1]; + scan.c[3][1] = a->Color[3]; +#endif + +#ifdef IPOL_T0 + scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; + scan.t[0][1] = a->Tex[0]; +#endif + +#ifdef IPOL_T1 + scan.slopeT[1][1] = (b->Tex[1] - a->Tex[1]) * scan.invDeltaY[1]; + scan.t[1][1] = a->Tex[1]; +#endif + +#ifdef IPOL_T2 + scan.slopeT[2][1] = (b->Tex[2] - a->Tex[2]) * scan.invDeltaY[1]; + scan.t[2][1] = a->Tex[2]; +#endif + +#ifdef IPOL_L0 + scan.slopeL[0][1] = (b->LightTangent[0] - a->LightTangent[0]) * scan.invDeltaY[1]; + scan.l[0][1] = a->LightTangent[0]; +#endif + + // apply top-left fill convention, top part + yStart = fill_convention_top(a->Pos.y); + yEnd = fill_convention_down(b->Pos.y); + +#ifdef SUBTEXEL + subPixel = ((f32)yStart) - a->Pos.y; + + // correct to pixel center + scan.x[0] += scan.slopeX[0] * subPixel; + scan.x[1] += scan.slopeX[1] * subPixel; + +#ifdef IPOL_Z + scan.z[0] += scan.slopeZ[0] * subPixel; + scan.z[1] += scan.slopeZ[1] * subPixel; +#endif + +#ifdef IPOL_W + scan.w[0] += scan.slopeW[0] * subPixel; + scan.w[1] += scan.slopeW[1] * subPixel; +#endif + +#ifdef IPOL_C0 + scan.c[0][0] += scan.slopeC[0][0] * subPixel; + scan.c[0][1] += scan.slopeC[0][1] * subPixel; +#endif + +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0] * subPixel; + scan.c[2][1] += scan.slopeC[2][1] * subPixel; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0] * subPixel; + scan.c[3][1] += scan.slopeC[3][1] * subPixel; +#endif + +#ifdef IPOL_T0 + scan.t[0][0] += scan.slopeT[0][0] * subPixel; + scan.t[0][1] += scan.slopeT[0][1] * subPixel; +#endif + +#ifdef IPOL_T1 + scan.t[1][0] += scan.slopeT[1][0] * subPixel; + scan.t[1][1] += scan.slopeT[1][1] * subPixel; +#endif + +#ifdef IPOL_T2 + scan.t[2][0] += scan.slopeT[2][0] * subPixel; + scan.t[2][1] += scan.slopeT[2][1] * subPixel; +#endif + +#ifdef IPOL_L0 + scan.l[0][0] += scan.slopeL[0][0] * subPixel; + scan.l[0][1] += scan.slopeL[0][1] * subPixel; +#endif + +#endif + + // rasterize the edge scanlines + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + { + line.x[scan.left] = scan.x[0]; + line.x[scan.right] = scan.x[1]; + +#ifdef IPOL_Z + line.z[scan.left] = scan.z[0]; + line.z[scan.right] = scan.z[1]; +#endif + +#ifdef IPOL_W + line.w[scan.left] = scan.w[0]; + line.w[scan.right] = scan.w[1]; +#endif + +#ifdef IPOL_C0 + line.c[0][scan.left] = scan.c[0][0]; + line.c[0][scan.right] = scan.c[0][1]; +#endif + +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + +#ifdef IPOL_C2 + line.c[2][scan.left] = scan.c[2][0]; + line.c[2][scan.right] = scan.c[2][1]; +#endif + +#ifdef IPOL_C3 + line.c[3][scan.left] = scan.c[3][0]; + line.c[3][scan.right] = scan.c[3][1]; +#endif + +#ifdef IPOL_T0 + line.t[0][scan.left] = scan.t[0][0]; + line.t[0][scan.right] = scan.t[0][1]; +#endif + +#ifdef IPOL_T1 + line.t[1][scan.left] = scan.t[1][0]; + line.t[1][scan.right] = scan.t[1][1]; +#endif + +#ifdef IPOL_T2 + line.t[2][scan.left] = scan.t[2][0]; + line.t[2][scan.right] = scan.t[2][1]; +#endif + +#ifdef IPOL_L0 + line.l[0][scan.left] = scan.l[0][0]; + line.l[0][scan.right] = scan.l[0][1]; +#endif + + // render a scanline + if_interlace_scanline fragmentShader(); + + scan.x[0] += scan.slopeX[0]; + scan.x[1] += scan.slopeX[1]; + +#ifdef IPOL_Z + scan.z[0] += scan.slopeZ[0]; + scan.z[1] += scan.slopeZ[1]; +#endif + +#ifdef IPOL_W + scan.w[0] += scan.slopeW[0]; + scan.w[1] += scan.slopeW[1]; +#endif + +#ifdef IPOL_C0 + scan.c[0][0] += scan.slopeC[0][0]; + scan.c[0][1] += scan.slopeC[0][1]; +#endif + +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0]; + scan.c[2][1] += scan.slopeC[2][1]; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0]; + scan.c[3][1] += scan.slopeC[3][1]; +#endif + +#ifdef IPOL_T0 + scan.t[0][0] += scan.slopeT[0][0]; + scan.t[0][1] += scan.slopeT[0][1]; +#endif + +#ifdef IPOL_T1 + scan.t[1][0] += scan.slopeT[1][0]; + scan.t[1][1] += scan.slopeT[1][1]; +#endif + +#ifdef IPOL_T2 + scan.t[2][0] += scan.slopeT[2][0]; + scan.t[2][1] += scan.slopeT[2][1]; +#endif + +#ifdef IPOL_L0 + scan.l[0][0] += scan.slopeL[0][0]; + scan.l[0][1] += scan.slopeL[0][1]; +#endif + + } + } + + // rasterize lower sub-triangle + if (F32_GREATER_0(scan.invDeltaY[2])) + { + // advance to middle point + if (F32_GREATER_0(scan.invDeltaY[1])) + { + temp[0] = b->Pos.y - a->Pos.y; // dy + + scan.x[0] = a->Pos.x + scan.slopeX[0] * temp[0]; +#ifdef IPOL_Z + scan.z[0] = a->Pos.z + scan.slopeZ[0] * temp[0]; +#endif +#ifdef IPOL_W + scan.w[0] = a->Pos.w + scan.slopeW[0] * temp[0]; +#endif +#ifdef IPOL_C0 + scan.c[0][0] = a->Color[0] + scan.slopeC[0][0] * temp[0]; +#endif +#ifdef IPOL_C1 + scan.c[1][0] = a->Color[1] + scan.slopeC[1][0] * temp[0]; +#endif +#ifdef IPOL_C2 + scan.c[2][0] = a->Color[2] + scan.slopeC[2][0] * temp[0]; +#endif +#ifdef IPOL_C3 + scan.c[3][0] = a->Color[3] + scan.slopeC[3][0] * temp[0]; +#endif +#ifdef IPOL_T0 + scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; +#endif +#ifdef IPOL_T1 + scan.t[1][0] = a->Tex[1] + scan.slopeT[1][0] * temp[0]; +#endif +#ifdef IPOL_T2 + scan.t[2][0] = a->Tex[2] + scan.slopeT[2][0] * temp[0]; +#endif +#ifdef IPOL_L0 + scan.l[0][0] = sVec3Pack_unpack(a->LightTangent[0]) + scan.slopeL[0][0] * temp[0]; +#endif + + } + + // calculate slopes for bottom edge + scan.slopeX[1] = (c->Pos.x - b->Pos.x) * scan.invDeltaY[2]; + scan.x[1] = b->Pos.x; + +#ifdef IPOL_Z + scan.slopeZ[1] = (c->Pos.z - b->Pos.z) * scan.invDeltaY[2]; + scan.z[1] = b->Pos.z; +#endif + +#ifdef IPOL_W + scan.slopeW[1] = (c->Pos.w - b->Pos.w) * scan.invDeltaY[2]; + scan.w[1] = b->Pos.w; +#endif + +#ifdef IPOL_C0 + scan.slopeC[0][1] = (c->Color[0] - b->Color[0]) * scan.invDeltaY[2]; + scan.c[0][1] = b->Color[0]; +#endif + +#ifdef IPOL_C1 + scan.slopeC[1][1] = (c->Color[1] - b->Color[1]) * scan.invDeltaY[2]; + scan.c[1][1] = b->Color[1]; +#endif + +#ifdef IPOL_C2 + scan.slopeC[2][1] = (c->Color[2] - b->Color[2]) * scan.invDeltaY[2]; + scan.c[2][1] = b->Color[2]; +#endif + +#ifdef IPOL_C3 + scan.slopeC[3][1] = (c->Color[3] - b->Color[3]) * scan.invDeltaY[2]; + scan.c[3][1] = b->Color[3]; +#endif + +#ifdef IPOL_T0 + scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; + scan.t[0][1] = b->Tex[0]; +#endif + +#ifdef IPOL_T1 + scan.slopeT[1][1] = (c->Tex[1] - b->Tex[1]) * scan.invDeltaY[2]; + scan.t[1][1] = b->Tex[1]; +#endif + +#ifdef IPOL_T2 + scan.slopeT[2][1] = (c->Tex[2] - b->Tex[2]) * scan.invDeltaY[2]; + scan.t[2][1] = b->Tex[2]; +#endif + +#ifdef IPOL_L0 + scan.slopeL[0][1] = (c->LightTangent[0] - b->LightTangent[0]) * scan.invDeltaY[2]; + scan.l[0][1] = b->LightTangent[0]; +#endif + + // apply top-left fill convention, top part + yStart = fill_convention_top(b->Pos.y); + yEnd = fill_convention_down(c->Pos.y); + +#ifdef SUBTEXEL + subPixel = ((f32)yStart) - b->Pos.y; + + // correct to pixel center + scan.x[0] += scan.slopeX[0] * subPixel; + scan.x[1] += scan.slopeX[1] * subPixel; + +#ifdef IPOL_Z + scan.z[0] += scan.slopeZ[0] * subPixel; + scan.z[1] += scan.slopeZ[1] * subPixel; +#endif + +#ifdef IPOL_W + scan.w[0] += scan.slopeW[0] * subPixel; + scan.w[1] += scan.slopeW[1] * subPixel; +#endif + +#ifdef IPOL_C0 + scan.c[0][0] += scan.slopeC[0][0] * subPixel; + scan.c[0][1] += scan.slopeC[0][1] * subPixel; +#endif + +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0] * subPixel; + scan.c[2][1] += scan.slopeC[2][1] * subPixel; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0] * subPixel; + scan.c[3][1] += scan.slopeC[3][1] * subPixel; +#endif + +#ifdef IPOL_T0 + scan.t[0][0] += scan.slopeT[0][0] * subPixel; + scan.t[0][1] += scan.slopeT[0][1] * subPixel; +#endif + +#ifdef IPOL_T1 + scan.t[1][0] += scan.slopeT[1][0] * subPixel; + scan.t[1][1] += scan.slopeT[1][1] * subPixel; +#endif + +#ifdef IPOL_T2 + scan.t[2][0] += scan.slopeT[2][0] * subPixel; + scan.t[2][1] += scan.slopeT[2][1] * subPixel; +#endif + +#ifdef IPOL_L0 + scan.l[0][0] += scan.slopeL[0][0] * subPixel; + scan.l[0][1] += scan.slopeL[0][1] * subPixel; +#endif + +#endif + + // rasterize the edge scanlines + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + { + line.x[scan.left] = scan.x[0]; + line.x[scan.right] = scan.x[1]; + +#ifdef IPOL_Z + line.z[scan.left] = scan.z[0]; + line.z[scan.right] = scan.z[1]; +#endif + +#ifdef IPOL_W + line.w[scan.left] = scan.w[0]; + line.w[scan.right] = scan.w[1]; +#endif + +#ifdef IPOL_C0 + line.c[0][scan.left] = scan.c[0][0]; + line.c[0][scan.right] = scan.c[0][1]; +#endif + +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + +#ifdef IPOL_C2 + line.c[2][scan.left] = scan.c[2][0]; + line.c[2][scan.right] = scan.c[2][1]; +#endif + +#ifdef IPOL_C3 + line.c[3][scan.left] = scan.c[3][0]; + line.c[3][scan.right] = scan.c[3][1]; +#endif + +#ifdef IPOL_T0 + line.t[0][scan.left] = scan.t[0][0]; + line.t[0][scan.right] = scan.t[0][1]; +#endif + +#ifdef IPOL_T1 + line.t[1][scan.left] = scan.t[1][0]; + line.t[1][scan.right] = scan.t[1][1]; +#endif + +#ifdef IPOL_T2 + line.t[2][scan.left] = scan.t[2][0]; + line.t[2][scan.right] = scan.t[2][1]; +#endif + +#ifdef IPOL_L0 + line.l[0][scan.left] = scan.l[0][0]; + line.l[0][scan.right] = scan.l[0][1]; +#endif + + // render a scanline + if_interlace_scanline fragmentShader(); + + scan.x[0] += scan.slopeX[0]; + scan.x[1] += scan.slopeX[1]; + +#ifdef IPOL_Z + scan.z[0] += scan.slopeZ[0]; + scan.z[1] += scan.slopeZ[1]; +#endif + +#ifdef IPOL_W + scan.w[0] += scan.slopeW[0]; + scan.w[1] += scan.slopeW[1]; +#endif + +#ifdef IPOL_C0 + scan.c[0][0] += scan.slopeC[0][0]; + scan.c[0][1] += scan.slopeC[0][1]; +#endif + +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + +#ifdef IPOL_C2 + scan.c[2][0] += scan.slopeC[2][0]; + scan.c[2][1] += scan.slopeC[2][1]; +#endif + +#ifdef IPOL_C3 + scan.c[3][0] += scan.slopeC[3][0]; + scan.c[3][1] += scan.slopeC[3][1]; +#endif + +#ifdef IPOL_T0 + scan.t[0][0] += scan.slopeT[0][0]; + scan.t[0][1] += scan.slopeT[0][1]; +#endif + +#ifdef IPOL_T1 + scan.t[1][0] += scan.slopeT[1][0]; + scan.t[1][1] += scan.slopeT[1][1]; +#endif +#ifdef IPOL_T2 + scan.t[2][0] += scan.slopeT[2][0]; + scan.t[2][1] += scan.slopeT[2][1]; +#endif + +#ifdef IPOL_L0 + scan.l[0][0] += scan.slopeL[0][0]; + scan.l[0][1] += scan.slopeL[0][1]; +#endif + + } + } + +} + + + +//! Called by the engine when the vertex and/or pixel shader constants for an +//! material renderer should be set. +void CBurningParallaxMap::OnSetConstants(IMaterialRendererServices* services, s32 userData) +{ +#if 0 + video::IVideoDriver* driver = services->getVideoDriver(); + + // set transposed world matrix + const core::matrix4& tWorld = driver->getTransform(video::ETS_WORLD).getTransposed(); + services->setVertexShaderConstant(tWorld.pointer(), 0, 4); + + // set transposed worldViewProj matrix + core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION)); + worldViewProj *= driver->getTransform(video::ETS_VIEW); + worldViewProj *= driver->getTransform(video::ETS_WORLD); + core::matrix4 tr(worldViewProj.getTransposed()); + services->setVertexShaderConstant(tr.pointer(), 8, 4); + + // here we fetch the fixed function lights from the driver + // and set them as constants + + u32 cnt = driver->getDynamicLightCount(); + + // Load the inverse world matrix. + core::matrix4 invWorldMat; + driver->getTransform(video::ETS_WORLD).getInverse(invWorldMat); + + for (u32 i = 0; i < 2; ++i) + { + video::SLight light; + + if (i < cnt) + light = driver->getDynamicLight(i); + else + { + light.DiffuseColor.set(0, 0, 0); // make light dark + light.Radius = 1.0f; + } + + light.DiffuseColor.a = 1.0f / (light.Radius * light.Radius); // set attenuation + + // Transform the light by the inverse world matrix to get it into object space. + invWorldMat.transformVect(light.Position); + + services->setVertexShaderConstant( + reinterpret_cast(&light.Position), 12 + (i * 2), 1); + + services->setVertexShaderConstant( + reinterpret_cast(&light.DiffuseColor), 13 + (i * 2), 1); + } + + // Obtain the view position by transforming 0,0,0 by the inverse view matrix + // and then multiply this by the inverse world matrix. + core::vector3df viewPos(0.0f, 0.0f, 0.0f); + core::matrix4 inverseView; + driver->getTransform(video::ETS_VIEW).getInverse(inverseView); + inverseView.transformVect(viewPos); + invWorldMat.transformVect(viewPos); + services->setVertexShaderConstant(reinterpret_cast(&viewPos.X), 16, 1); + + // set scale factor + f32 factor = 0.02f; // default value + if (CurrentScale != 0.0f) + factor = CurrentScale; + + f32 c6[] = { factor, factor, factor, factor }; + services->setPixelShaderConstant(c6, 0, 1); +#endif +} + +burning_namespace_end + +#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ + +burning_namespace_start + + +IBurningShader* createTRParallaxMap(CBurningVideoDriver* driver, s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial) +{ +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ + return new CBurningParallaxMap(driver, outMaterialTypeNr, baseMaterial); +#else + return 0; +#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ +} + +burning_namespace_end diff --git a/source/Irrlicht/CTRStencilShadow.cpp b/source/Irrlicht/CTRStencilShadow.cpp index 38f4ef51..b9edf1f6 100644 --- a/source/Irrlicht/CTRStencilShadow.cpp +++ b/source/Irrlicht/CTRStencilShadow.cpp @@ -93,7 +93,7 @@ private: //! constructor CTRStencilShadow::CTRStencilShadow(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_SOLID) { #ifdef _DEBUG setDebugName("CTRStencilShadow"); @@ -241,7 +241,7 @@ void CTRStencilShadow::drawTriangle(const s4DVertex* burning_restrict a, const s temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -334,8 +334,8 @@ void CTRStencilShadow::drawTriangle(const s4DVertex* burning_restrict a, const s #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -423,7 +423,7 @@ void CTRStencilShadow::drawTriangle(const s4DVertex* burning_restrict a, const s #endif // render a scanline - interlace_scanline fragmentShader (); + if_interlace_scanline fragmentShader (); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -541,8 +541,8 @@ void CTRStencilShadow::drawTriangle(const s4DVertex* burning_restrict a, const s #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -630,7 +630,7 @@ void CTRStencilShadow::drawTriangle(const s4DVertex* burning_restrict a, const s #endif // render a scanline - interlace_scanline fragmentShader (); + if_interlace_scanline fragmentShader (); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureBlend.cpp b/source/Irrlicht/CTRTextureBlend.cpp index 18492307..5d056418 100644 --- a/source/Irrlicht/CTRTextureBlend.cpp +++ b/source/Irrlicht/CTRTextureBlend.cpp @@ -85,7 +85,7 @@ namespace video //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; private: // fragment shader @@ -108,7 +108,7 @@ private: //! constructor CTRTextureBlend::CTRTextureBlend(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_ONETEXTURE_BLEND) { #ifdef _DEBUG setDebugName("CTRTextureBlend"); @@ -120,12 +120,12 @@ CTRTextureBlend::CTRTextureBlend(CBurningVideoDriver* driver) /*! */ -void CTRTextureBlend::OnSetMaterial(const SBurningShaderMaterial& material) +void CTRTextureBlend::OnSetMaterialBurning(const SBurningShaderMaterial& material) { int showname = 0; depth_func = (E_COMPARISON_FUNC)material.org.ZBuffer; - AlphaRef = 0; // tofix(material.org.MaterialTypeParam, FIXPOINT_COLOR_MAX); + AlphaRef = 0; // tofix(material.org.MaterialTypeParam, FIX_POINT_COLOR_MAX); E_BLEND_FACTOR srcFact,dstFact; E_MODULATE_FUNC modulate; @@ -2201,7 +2201,7 @@ void CTRTextureBlend::drawTriangle(const s4DVertex* burning_restrict a, const s4 temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -2274,8 +2274,8 @@ void CTRTextureBlend::drawTriangle(const s4DVertex* burning_restrict a, const s4 #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -2343,7 +2343,7 @@ void CTRTextureBlend::drawTriangle(const s4DVertex* burning_restrict a, const s4 #endif // render a scanline - interlace_scanline (this->*fragmentShader) (); + if_interlace_scanline (this->*fragmentShader) (); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -2433,8 +2433,8 @@ void CTRTextureBlend::drawTriangle(const s4DVertex* burning_restrict a, const s4 #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -2502,7 +2502,7 @@ void CTRTextureBlend::drawTriangle(const s4DVertex* burning_restrict a, const s4 #endif // render a scanline - interlace_scanline (this->*fragmentShader) (); + if_interlace_scanline (this->*fragmentShader) (); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureDetailMap2.cpp b/source/Irrlicht/CTRTextureDetailMap2.cpp index ab4f0286..51c107fb 100644 --- a/source/Irrlicht/CTRTextureDetailMap2.cpp +++ b/source/Irrlicht/CTRTextureDetailMap2.cpp @@ -85,7 +85,7 @@ public: //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual bool canWireFrame () IRR_OVERRIDE { return true; } + virtual bool canWireFrame () IRR_OVERRIDE { return false; } // not that ready protected: virtual void fragmentShader(); @@ -94,7 +94,7 @@ protected: //! constructor CTRTextureDetailMap2::CTRTextureDetailMap2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_DETAIL_MAP) { #ifdef _DEBUG setDebugName("CTRTextureDetailMap2"); @@ -284,7 +284,7 @@ void CTRTextureDetailMap2::drawTriangle(const s4DVertex* burning_restrict a, con temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -357,8 +357,8 @@ void CTRTextureDetailMap2::drawTriangle(const s4DVertex* burning_restrict a, con #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -427,7 +427,7 @@ void CTRTextureDetailMap2::drawTriangle(const s4DVertex* burning_restrict a, con #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); if (EdgeTestPass & edge_test_first_line) break; scan.x[0] += scan.slopeX[0]; @@ -461,6 +461,7 @@ void CTRTextureDetailMap2::drawTriangle(const s4DVertex* burning_restrict a, con } } + // rasterize lower sub-triangle if (F32_GREATER_0(scan.invDeltaY[2]) ) { @@ -518,8 +519,8 @@ void CTRTextureDetailMap2::drawTriangle(const s4DVertex* burning_restrict a, con #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -589,7 +590,7 @@ void CTRTextureDetailMap2::drawTriangle(const s4DVertex* burning_restrict a, con #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); if (EdgeTestPass & edge_test_first_line) break; scan.x[0] += scan.slopeX[0]; diff --git a/source/Irrlicht/CTRTextureGouraud2.cpp b/source/Irrlicht/CTRTextureGouraud2.cpp index 6d8f9e84..49b2a08d 100644 --- a/source/Irrlicht/CTRTextureGouraud2.cpp +++ b/source/Irrlicht/CTRTextureGouraud2.cpp @@ -112,7 +112,7 @@ private: //! constructor CTRTextureGouraud2::CTRTextureGouraud2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver,EMT_SOLID) { #ifdef _DEBUG setDebugName("CTRTextureGouraud2"); @@ -313,7 +313,7 @@ void CTRTextureGouraud2::fragmentShader () b0 = clampfix_maxcolor(b1 + b0); } //mix with distance - if (aFog < FIX_POINT_ONE) + if (aFog < FIX_POINT_ONE) //TL_Flag & TL_FOG) { r0 = fog_color[1] + imulFix(aFog, r0 - fog_color[1]); g0 = fog_color[2] + imulFix(aFog, g0 - fog_color[2]); @@ -397,7 +397,7 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -500,8 +500,8 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -551,9 +551,10 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const #endif #endif - line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); // rasterize the edge scanlines + line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); + for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; @@ -600,7 +601,7 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const #endif // render a scanline - interlace_scanline fragmentShader (); + if_interlace_scanline fragmentShader (); if ( EdgeTestPass & edge_test_first_line ) break; @@ -731,8 +732,8 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -782,9 +783,9 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const #endif #endif - line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); - // rasterize the edge scanlines + line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); + for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; @@ -831,7 +832,7 @@ void CTRTextureGouraud2::drawTriangle(const s4DVertex* burning_restrict a, const #endif // render a scanline - interlace_scanline fragmentShader (); + if_interlace_scanline fragmentShader (); if ( EdgeTestPass & edge_test_first_line ) break; @@ -908,5 +909,3 @@ IBurningShader* createTriangleRendererTextureGouraud2(CBurningVideoDriver* drive } // end namespace video } // end namespace irr - - diff --git a/source/Irrlicht/CTRTextureGouraudAdd2.cpp b/source/Irrlicht/CTRTextureGouraudAdd2.cpp index 4ba23cfa..66006b4e 100644 --- a/source/Irrlicht/CTRTextureGouraudAdd2.cpp +++ b/source/Irrlicht/CTRTextureGouraudAdd2.cpp @@ -93,7 +93,7 @@ private: //! constructor CTRTextureGouraudAdd2::CTRTextureGouraudAdd2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_TRANSPARENT_ADD_COLOR) { #ifdef _DEBUG setDebugName("CTRTextureGouraudAdd2"); @@ -128,7 +128,7 @@ void CTRTextureGouraudAdd2::fragmentShader() fp24 slopeW; #endif #ifdef IPOL_C0 - sVec4 slopeC; + sVec4 slopeC[BURNING_MATERIAL_MAX_COLORS]; #endif #ifdef IPOL_T0 sVec2 slopeT[BURNING_MATERIAL_MAX_TEXTURES]; @@ -153,7 +153,7 @@ void CTRTextureGouraudAdd2::fragmentShader() slopeW = (line.w[1] - line.w[0]) * invDeltaX; #endif #ifdef IPOL_C0 - slopeC = (line.c[1] - line.c[0]) * invDeltaX; + slopeC[0] = (line.c[0][1] - line.c[0][0]) * invDeltaX; #endif #ifdef IPOL_T0 slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; @@ -171,7 +171,7 @@ void CTRTextureGouraudAdd2::fragmentShader() line.w[0] += slopeW * subPixel; #endif #ifdef IPOL_C0 - line.c[0] += slopeC * subPixel; + line.c[0][0] += slopeC[0] * subPixel; #endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0] * subPixel; @@ -257,7 +257,7 @@ void CTRTextureGouraudAdd2::fragmentShader() line.w[0] += slopeW; #endif #ifdef IPOL_C0 - line.c[0] += slopeC; + line.c[0][0] += slopeC[0]; #endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0]; @@ -292,7 +292,7 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -310,8 +310,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.slopeC[0] = (c->Color[0] - a->Color[0]) * scan.invDeltaY[0]; - scan.c[0] = a->Color[0]; + scan.slopeC[0][0] = (c->Color[0] - a->Color[0]) * scan.invDeltaY[0]; + scan.c[0][0] = a->Color[0]; #endif #ifdef IPOL_T0 @@ -350,8 +350,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.slopeC[1] = (b->Color[0] - a->Color[0]) * scan.invDeltaY[1]; - scan.c[1] = a->Color[0]; + scan.slopeC[0][1] = (b->Color[0] - a->Color[0]) * scan.invDeltaY[1]; + scan.c[0][1] = a->Color[0]; #endif #ifdef IPOL_T0 @@ -365,8 +365,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -386,8 +386,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0] * subPixel; - scan.c[1] += scan.slopeC[1] * subPixel; + scan.c[0][0] += scan.slopeC[0][0] * subPixel; + scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif #ifdef IPOL_T0 @@ -419,8 +419,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - line.c[scan.left] = scan.c[0]; - line.c[scan.right] = scan.c[1]; + line.c[0][scan.left] = scan.c[0][0]; + line.c[0][scan.right] = scan.c[0][1]; #endif #ifdef IPOL_T0 @@ -434,7 +434,7 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -450,8 +450,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0]; - scan.c[1] += scan.slopeC[1]; + scan.c[0][0] += scan.slopeC[0][0]; + scan.c[0][1] += scan.slopeC[0][1]; #endif #ifdef IPOL_T0 @@ -483,7 +483,7 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co scan.w[0] = a->Pos.w + scan.slopeW[0] * temp[0]; #endif #ifdef IPOL_C0 - scan.c[0] = a->Color[0] + scan.slopeC[0] * temp[0]; + scan.c[0][0] = a->Color[0] + scan.slopeC[0][0] * temp[0]; #endif #ifdef IPOL_T0 scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; @@ -509,8 +509,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.slopeC[1] = (c->Color[0] - b->Color[0]) * scan.invDeltaY[2]; - scan.c[1] = b->Color[0]; + scan.slopeC[0][1] = (c->Color[0] - b->Color[0]) * scan.invDeltaY[2]; + scan.c[0][1] = b->Color[0]; #endif #ifdef IPOL_T0 @@ -524,8 +524,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -546,8 +546,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0] * subPixel; - scan.c[1] += scan.slopeC[1] * subPixel; + scan.c[0][0] += scan.slopeC[0][0] * subPixel; + scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif #ifdef IPOL_T0 @@ -579,8 +579,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - line.c[scan.left] = scan.c[0]; - line.c[scan.right] = scan.c[1]; + line.c[0][scan.left] = scan.c[0][0]; + line.c[0][scan.right] = scan.c[0][1]; #endif #ifdef IPOL_T0 @@ -594,7 +594,7 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -610,8 +610,8 @@ void CTRTextureGouraudAdd2::drawTriangle(const s4DVertex* burning_restrict a, co #endif #ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0]; - scan.c[1] += scan.slopeC[1]; + scan.c[0][0] += scan.slopeC[0][0]; + scan.c[0][1] += scan.slopeC[0][1]; #endif #ifdef IPOL_T0 diff --git a/source/Irrlicht/CTRTextureGouraudAddNoZ2.cpp b/source/Irrlicht/CTRTextureGouraudAddNoZ2.cpp index 475b8551..a02b1f0c 100644 --- a/source/Irrlicht/CTRTextureGouraudAddNoZ2.cpp +++ b/source/Irrlicht/CTRTextureGouraudAddNoZ2.cpp @@ -93,7 +93,7 @@ private: //! constructor CTRTextureGouraudAddNoZ2::CTRTextureGouraudAddNoZ2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_TRANSPARENT_ADD_COLOR) { #ifdef _DEBUG setDebugName("CTRTextureGouraudAddNoZ2"); @@ -228,9 +228,9 @@ void CTRTextureGouraudAddNoZ2::fragmentShader() if (r0 | g0 | b0) { color_to_fix(r1, g1, b1, dst[i]); - r1 = imulFix_tex1(r1, FIXPOINT_COLOR_MAX - r0); - g1 = imulFix_tex1(g1, FIXPOINT_COLOR_MAX - g0); - b1 = imulFix_tex1(b1, FIXPOINT_COLOR_MAX - b0); + r1 = imulFix_tex1(r1, FIX_POINT_COLOR_MAX - r0); + g1 = imulFix_tex1(g1, FIX_POINT_COLOR_MAX - g0); + b1 = imulFix_tex1(b1, FIX_POINT_COLOR_MAX - b0); dst[i] = fix_to_sample(r0+r1, g0+g1, b0+b1); } @@ -290,7 +290,7 @@ void CTRTextureGouraudAddNoZ2::drawTriangle(const s4DVertex* burning_restrict a, temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -363,8 +363,8 @@ void CTRTextureGouraudAddNoZ2::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -432,7 +432,7 @@ void CTRTextureGouraudAddNoZ2::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -522,8 +522,8 @@ void CTRTextureGouraudAddNoZ2::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -591,7 +591,7 @@ void CTRTextureGouraudAddNoZ2::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureGouraudAlpha.cpp b/source/Irrlicht/CTRTextureGouraudAlpha.cpp index eab57006..690b88d7 100644 --- a/source/Irrlicht/CTRTextureGouraudAlpha.cpp +++ b/source/Irrlicht/CTRTextureGouraudAlpha.cpp @@ -21,6 +21,7 @@ #undef INVERSE_W #undef IPOL_C0 +#undef IPOL_C1 #undef IPOL_T0 #undef IPOL_T1 @@ -34,6 +35,7 @@ #define WRITE_W #define IPOL_C0 +#define IPOL_C1 #define IPOL_T0 //#define IPOL_T1 @@ -50,6 +52,10 @@ #undef IPOL_C0 #endif +#if BURNING_MATERIAL_MAX_COLORS < 2 +#undef IPOL_C1 +#endif + #if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT #undef IPOL_W @@ -85,7 +91,7 @@ public: //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; private: void fragmentShader(); @@ -94,7 +100,7 @@ private: //! constructor CTRTextureGouraudAlpha2::CTRTextureGouraudAlpha2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_TRANSPARENT_ALPHA_CHANNEL) { #ifdef _DEBUG setDebugName("CTRTextureGouraudAlpha2"); @@ -104,12 +110,12 @@ CTRTextureGouraudAlpha2::CTRTextureGouraudAlpha2(CBurningVideoDriver* driver) /*! */ -void CTRTextureGouraudAlpha2::OnSetMaterial(const SBurningShaderMaterial& material) +void CTRTextureGouraudAlpha2::OnSetMaterialBurning(const SBurningShaderMaterial& material) { #if defined(BURNINGVIDEO_RENDERER_FAST) && COLOR_MAX==0xff AlphaRef = core::floor32(material.org.MaterialTypeParam * 256.f); #else - AlphaRef = tofix(material.org.MaterialTypeParam, FIXPOINT_COLOR_MAX); + AlphaRef = tofix(material.org.MaterialTypeParam, FIX_POINT_COLOR_MAX); #endif } @@ -166,6 +172,9 @@ void CTRTextureGouraudAlpha2::fragmentShader() #ifdef IPOL_C0 slopeC[0] = (line.c[0][1] - line.c[0][0]) * invDeltaX; #endif +#ifdef IPOL_C1 + slopeC[1] = (line.c[1][1] - line.c[1][0]) * invDeltaX; +#endif #ifdef IPOL_T0 slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; #endif @@ -184,6 +193,9 @@ void CTRTextureGouraudAlpha2::fragmentShader() #ifdef IPOL_C0 line.c[0][0] += slopeC[0] * subPixel; #endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1] * subPixel; +#endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0] * subPixel; #endif @@ -211,6 +223,11 @@ void CTRTextureGouraudAlpha2::fragmentShader() tFixPoint r1, g1, b1; tFixPoint r2, g2, b2; #endif + +#ifdef IPOL_C1 + //tFixPoint aFog = FIX_POINT_ONE; +#endif + #endif for ( s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) @@ -255,6 +272,22 @@ void CTRTextureGouraudAlpha2::fragmentShader() #ifdef INVERSE_W inversew = fix_inverse32 ( line.w[0] ); #endif + +#ifdef IPOL_C1 +#if 0 + //complete inside fog + if (TL_Flag & TL_FOG) + { + aFog = tofix(line.c[1][0].a, inversew); + if (aFog <= 0) + { + dst[i] = fog_color_sample; + continue; + } + } +#endif +#endif + getSample_texture ( a0,r0,g0,b0, &IT[0], tofix ( line.t[0][0].x,inversew), @@ -278,6 +311,26 @@ void CTRTextureGouraudAlpha2::fragmentShader() g0 = imulFix_simple( g0, g2 ); b0 = imulFix_simple( b0, b2 ); +#ifdef IPOL_C1 + + //specular highlight + if (TL_Flag & TL_SPECULAR) + { + vec4_to_fix(r1, g1, b1, line.c[1][0], inversew * COLOR_MAX); + r0 = clampfix_maxcolor(r1 + r0); + g0 = clampfix_maxcolor(g1 + g0); + b0 = clampfix_maxcolor(b1 + b0); + } +#if 0 + //mix with distance + if (aFog < FIX_POINT_ONE) //TL_Flag & TL_FOG) + { + r0 = fog_color[1] + imulFix(aFog, r0 - fog_color[1]); + g0 = fog_color[2] + imulFix(aFog, g0 - fog_color[2]); + b0 = fog_color[3] + imulFix(aFog, b0 - fog_color[3]); + } +#endif +#endif color_to_fix ( r1, g1, b1, dst[i] ); fix_color_norm(a0); @@ -285,7 +338,7 @@ void CTRTextureGouraudAlpha2::fragmentShader() r2 = r1 + imulFix ( a0, r0 - r1 ); g2 = g1 + imulFix ( a0, g0 - g1 ); b2 = b1 + imulFix ( a0, b0 - b1 ); - dst[i] = fix4_to_sample( a0, r2, g2, b2 ); + dst[i] = fix_to_sample( r2, g2, b2 ); /* getSample_color ( r2, g2, b2, line.c[0][0], inversew * COLOR_MAX ); @@ -316,6 +369,9 @@ void CTRTextureGouraudAlpha2::fragmentShader() #ifdef IPOL_C0 line.c[0][0] += slopeC[0]; #endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1]; +#endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0]; #endif @@ -352,7 +408,7 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -374,6 +430,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][0] = a->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][0] = (c->Color[1] - a->Color[1]) * scan.invDeltaY[0]; + scan.c[1][0] = a->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; scan.t[0][0] = a->Tex[0]; @@ -414,6 +475,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][1] = a->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][1] = (b->Color[1] - a->Color[1]) * scan.invDeltaY[1]; + scan.c[1][1] = a->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; scan.t[0][1] = a->Tex[0]; @@ -425,8 +491,8 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -450,6 +516,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -483,6 +554,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, line.c[0][scan.right] = scan.c[0][1]; #endif +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -494,7 +570,7 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -514,6 +590,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][1] += scan.slopeC[0][1]; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; @@ -545,6 +626,9 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, #ifdef IPOL_C0 scan.c[0][0] = a->Color[0] + scan.slopeC[0][0] * temp[0]; #endif +#ifdef IPOL_C1 + scan.c[1][0] = a->Color[1] + scan.slopeC[1][0] * temp[0]; +#endif #ifdef IPOL_T0 scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; #endif @@ -573,6 +657,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][1] = b->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][1] = (c->Color[1] - b->Color[1]) * scan.invDeltaY[2]; + scan.c[1][1] = b->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; scan.t[0][1] = b->Tex[0]; @@ -584,8 +673,8 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -609,6 +698,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -642,6 +736,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, line.c[0][scan.right] = scan.c[0][1]; #endif +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -653,7 +752,7 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -673,6 +772,11 @@ void CTRTextureGouraudAlpha2::drawTriangle(const s4DVertex* burning_restrict a, scan.c[0][1] += scan.slopeC[0][1]; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; diff --git a/source/Irrlicht/CTRTextureGouraudAlphaNoZ.cpp b/source/Irrlicht/CTRTextureGouraudAlphaNoZ.cpp index 2079c317..f96906d5 100644 --- a/source/Irrlicht/CTRTextureGouraudAlphaNoZ.cpp +++ b/source/Irrlicht/CTRTextureGouraudAlphaNoZ.cpp @@ -75,12 +75,7 @@ #endif - -namespace irr -{ - -namespace video -{ +burning_namespace_start class CTRTextureGouraudAlphaNoZ : public IBurningShader { @@ -91,14 +86,14 @@ public: //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; private: // fragment shader typedef void (CTRTextureGouraudAlphaNoZ::*tFragmentShader) (); void fragment_linear(); - void fragment_linear_test(); + void fragment_linear_alpharef(); void fragment_point_noz(); tFragmentShader fragmentShader; @@ -108,7 +103,7 @@ private: //! constructor CTRTextureGouraudAlphaNoZ::CTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_TRANSPARENT_ALPHA_CHANNEL) { #ifdef _DEBUG setDebugName("CTRTextureGouraudAlphaNoZ"); @@ -120,18 +115,18 @@ CTRTextureGouraudAlphaNoZ::CTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver /*! */ -void CTRTextureGouraudAlphaNoZ::OnSetMaterial(const SBurningShaderMaterial& material) +void CTRTextureGouraudAlphaNoZ::OnSetMaterialBurning(const SBurningShaderMaterial& material) { #if defined(BURNINGVIDEO_RENDERER_FAST) && COLOR_MAX==0xff AlphaRef = core::floor32(material.org.MaterialTypeParam * 256.f); #else - AlphaRef = tofix(material.org.MaterialTypeParam, FIXPOINT_COLOR_MAX); + AlphaRef = tofix(material.org.MaterialTypeParam, FIX_POINT_COLOR_MAX); #endif //check triangle on w = 1.f instead.. #ifdef SOFTWARE_DRIVER_2_BILINEAR - if (material.Fallback_MaterialType == EMT_TRANSPARENT_ALPHA_CHANNEL_REF) - fragmentShader = &CTRTextureGouraudAlphaNoZ::fragment_linear_test; + if (material.org.MaterialType == EMT_TRANSPARENT_ALPHA_CHANNEL_REF) + fragmentShader = &CTRTextureGouraudAlphaNoZ::fragment_linear_alpharef; else if ( material.org.TextureLayer[0].BilinearFilter ) fragmentShader = &CTRTextureGouraudAlphaNoZ::fragment_linear; @@ -262,7 +257,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_linear() #ifdef CMP_W if ( line.w[0] >= z[i] ) #endif - scissor_test_x + if_scissor_test_x { #if defined(BURNINGVIDEO_RENDERER_FAST) && COLOR_MAX==0xff @@ -326,7 +321,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_linear() r2 = r1 + imulFix ( a0, r0 - r1 ); g2 = g1 + imulFix ( a0, g0 - g1 ); b2 = b1 + imulFix ( a0, b0 - b1 ); - dst[i] = fix4_to_sample( a0, r2, g2, b2 ); + dst[i] = fix_to_sample( r2, g2, b2 ); #else dst[i] = PixelBlend32 ( dst[i], @@ -364,7 +359,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_linear() /*! */ -void CTRTextureGouraudAlphaNoZ::fragment_linear_test() +void CTRTextureGouraudAlphaNoZ::fragment_linear_alpharef() { tVideoSample *dst; @@ -482,7 +477,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_linear_test() #ifdef CMP_W if (line.w[0] >= z[i]) #endif - scissor_test_x + if_scissor_test_x { #if defined(BURNINGVIDEO_RENDERER_FAST) && COLOR_MAX==0xff @@ -546,7 +541,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_linear_test() r2 = r1 + imulFix(a0, r0 - r1); g2 = g1 + imulFix(a0, g0 - g1); b2 = b1 + imulFix(a0, b0 - b1); - dst[i] = fix4_to_sample(a0, r2, g2, b2); + dst[i] = fix_to_sample(r2, g2, b2); #else dst[i] = PixelBlend32(dst[i], @@ -702,7 +697,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_point_noz() #ifdef CMP_W // if (line.w[0] >= z[i]) #endif - scissor_test_x + if_scissor_test_x { #if defined(BURNINGVIDEO_RENDERER_FAST) && COLOR_MAX==0xff @@ -766,7 +761,7 @@ void CTRTextureGouraudAlphaNoZ::fragment_point_noz() r2 = r1 + imulFix(a0, r0 - r1); g2 = g1 + imulFix(a0, g0 - g1); b2 = b1 + imulFix(a0, b0 - b1); - dst[i] = fix4_to_sample(a0, r2, g2, b2); + dst[i] = fix_to_sample(r2, g2, b2); #else dst[i] = PixelBlend32(dst[i], @@ -911,8 +906,8 @@ void CTRTextureGouraudAlphaNoZ::drawTriangle(const s4DVertex* burning_restrict a #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -990,8 +985,8 @@ void CTRTextureGouraudAlphaNoZ::drawTriangle(const s4DVertex* burning_restrict a #endif // render a scanline - interlace_scanline - scissor_test_y + if_interlace_scanline + if_scissor_test_y (this->*fragmentShader) (); scan.x[0] += scan.slopeX[0]; @@ -1096,8 +1091,8 @@ void CTRTextureGouraudAlphaNoZ::drawTriangle(const s4DVertex* burning_restrict a #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - b->Pos.y; @@ -1175,8 +1170,8 @@ void CTRTextureGouraudAlphaNoZ::drawTriangle(const s4DVertex* burning_restrict a #endif // render a scanline - interlace_scanline - scissor_test_y + if_interlace_scanline + if_scissor_test_y (this->*fragmentShader) (); scan.x[0] += scan.slopeX[0]; @@ -1219,16 +1214,11 @@ void CTRTextureGouraudAlphaNoZ::drawTriangle(const s4DVertex* burning_restrict a } -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ - +burning_namespace_start //! creates a flat triangle renderer IBurningShader* createTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver) @@ -1241,9 +1231,6 @@ IBurningShader* createTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver) #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ } - - -} // end namespace video -} // end namespace irr +burning_namespace_end diff --git a/source/Irrlicht/CTRTextureGouraudNoZ2.cpp b/source/Irrlicht/CTRTextureGouraudNoZ2.cpp index 94b9418b..f000161e 100644 --- a/source/Irrlicht/CTRTextureGouraudNoZ2.cpp +++ b/source/Irrlicht/CTRTextureGouraudNoZ2.cpp @@ -26,11 +26,11 @@ // define render case #ifdef BURNINGVIDEO_RENDERER_FAST - #define SUBTEXEL - #define INVERSE_W +#define SUBTEXEL +#define INVERSE_W #else - #define SUBTEXEL - #define INVERSE_W +#define SUBTEXEL +#define INVERSE_W #endif //#define USE_ZBUFFER @@ -43,42 +43,37 @@ //#define IPOL_T1 #if BURNING_MATERIAL_MAX_COLORS < 1 - #undef IPOL_C0 +#undef IPOL_C0 #endif // apply global override #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef INVERSE_W - #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef IPOL_W - #endif +#undef INVERSE_W +#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT +#undef IPOL_W +#endif #endif #ifndef SOFTWARE_DRIVER_2_SUBTEXEL - #undef SUBTEXEL +#undef SUBTEXEL #endif #if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) - #define IPOL_Z +#define IPOL_Z - #ifdef CMP_W - #undef CMP_W - #define CMP_Z - #endif +#ifdef CMP_W +#undef CMP_W +#define CMP_Z +#endif - #ifdef WRITE_W - #undef WRITE_W - #define WRITE_Z - #endif +#ifdef WRITE_W +#undef WRITE_W +#define WRITE_Z +#endif #endif - -namespace irr -{ - -namespace video -{ +burning_namespace_start class CTRTextureGouraudNoZ2 : public IBurningShader { @@ -89,32 +84,34 @@ public: //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; + + virtual bool canWireFrame() IRR_OVERRIDE { return true; } private: // fragment shader typedef void (CTRTextureGouraudNoZ2::* tFragmentShader) (); - void fragment_bilinear(); - void fragment_no_filter(); + void fragment_linear(); + void fragment_nearest(); tFragmentShader fragmentShader; }; //! constructor CTRTextureGouraudNoZ2::CTRTextureGouraudNoZ2(CBurningVideoDriver* driver) -: IBurningShader(driver) + : IBurningShader(driver,EMT_SOLID) { - #ifdef _DEBUG +#ifdef _DEBUG setDebugName("CTRTextureGouraudNoZ2"); - #endif +#endif - fragmentShader = &CTRTextureGouraudNoZ2::fragment_bilinear; + fragmentShader = &CTRTextureGouraudNoZ2::fragment_linear; } /*! */ -void CTRTextureGouraudNoZ2::OnSetMaterial(const SBurningShaderMaterial& material) +void CTRTextureGouraudNoZ2::OnSetMaterialBurning(const SBurningShaderMaterial& material) { if (material.org.TextureLayer[0].BilinearFilter || @@ -122,23 +119,23 @@ void CTRTextureGouraudNoZ2::OnSetMaterial(const SBurningShaderMaterial& material material.org.TextureLayer[0].AnisotropicFilter ) { - fragmentShader = &CTRTextureGouraudNoZ2::fragment_bilinear; + fragmentShader = &CTRTextureGouraudNoZ2::fragment_linear; } else { - fragmentShader = &CTRTextureGouraudNoZ2::fragment_no_filter; + fragmentShader = &CTRTextureGouraudNoZ2::fragment_nearest; } } /*! */ -void CTRTextureGouraudNoZ2::fragment_bilinear() +void CTRTextureGouraudNoZ2::fragment_linear() { - tVideoSample *dst; + tVideoSample* dst; #ifdef USE_ZBUFFER - fp24 *z; + fp24* z; #endif s32 xStart; @@ -164,16 +161,15 @@ void CTRTextureGouraudNoZ2::fragment_bilinear() #endif // apply top-left fill-convention, left - xStart = fill_convention_left( line.x[0] ); - xEnd = fill_convention_right( line.x[1] ); + xStart = fill_convention_left(line.x[0]); + xEnd = fill_convention_right(line.x[1]); dx = xEnd - xStart; - - if ( dx < 0 ) + if (dx < 0) return; // slopes - const f32 invDeltaX = fill_step_x( line.x[1] - line.x[0] ); + const f32 invDeltaX = fill_step_x(line.x[1] - line.x[0]); #ifdef IPOL_Z slopeZ = (line.z[1] - line.z[0]) * invDeltaX; @@ -211,10 +207,10 @@ void CTRTextureGouraudNoZ2::fragment_bilinear() #endif SOFTWARE_DRIVER_2_CLIPCHECK; - dst = (tVideoSample*)RenderTarget->getData() + ( line.y * RenderTarget->getDimension().Width ) + xStart; + dst = (tVideoSample*)RenderTarget->getData() + (line.y * RenderTarget->getDimension().Width) + xStart; #ifdef USE_ZBUFFER - z = (fp24*) DepthBuffer->lock() + ( line.y * RenderTarget->getDimension().Width ) + xStart; + z = (fp24*)DepthBuffer->lock() + (line.y * RenderTarget->getDimension().Width) + xStart; #endif @@ -224,34 +220,37 @@ void CTRTextureGouraudNoZ2::fragment_bilinear() tFixPoint ty0; tFixPoint r0, g0, b0; - for ( s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) + for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) { + //if test active only first pixel + if ((0 == EdgeTestPass) & (i > line.x_edgetest)) break; + #ifdef CMP_Z - if ( line.z[0] < z[i] ) + if (line.z[0] < z[i]) #endif #ifdef CMP_W - if ( line.w[0] >= z[i] ) + if (line.w[0] >= z[i]) #endif - scissor_test_x - { -#ifdef INVERSE_W - inversew = fix_inverse32 ( line.w[0] ); -#endif - tx0 = tofix ( line.t[0][0].x,inversew); - ty0 = tofix ( line.t[0][0].y,inversew); - //skybox - //dst[i] = getTexel_plain ( &IT[0], tx0, ty0 ); + if_scissor_test_x + { + #ifdef INVERSE_W + inversew = fix_inverse32(line.w[0]); + #endif + tx0 = tofix(line.t[0][0].x,inversew); + ty0 = tofix(line.t[0][0].y,inversew); + //skybox + //dst[i] = getTexel_plain ( &IT[0], tx0, ty0 ); - getSample_texture ( r0, g0, b0, IT+0, tx0, ty0 ); - dst[i] = fix_to_sample( r0, g0, b0 ); + getSample_texture(r0, g0, b0, IT + 0, tx0, ty0); + dst[i] = fix_to_sample(r0, g0, b0); -#ifdef WRITE_Z - z[i] = line.z[0]; -#endif -#ifdef WRITE_W - z[i] = line.w[0]; -#endif - } + #ifdef WRITE_Z + z[i] = line.z[0]; + #endif + #ifdef WRITE_W + z[i] = line.w[0]; + #endif + } #ifdef IPOL_Z line.z[0] += slopeZ; @@ -274,7 +273,7 @@ void CTRTextureGouraudNoZ2::fragment_bilinear() /*! */ -void CTRTextureGouraudNoZ2::fragment_no_filter() +void CTRTextureGouraudNoZ2::fragment_nearest() { tVideoSample* dst; @@ -372,25 +371,25 @@ void CTRTextureGouraudNoZ2::fragment_no_filter() #ifdef CMP_W if (line.w[0] >= z[i]) #endif - //scissor_test_x + //scissor_test_x { - #ifdef INVERSE_W +#ifdef INVERSE_W inversew = fix_inverse32(line.w[0]); - #endif - tx0 = tofix(line.t[0][0].x,inversew); - ty0 = tofix(line.t[0][0].y,inversew); +#endif + tx0 = tofix(line.t[0][0].x, inversew); + ty0 = tofix(line.t[0][0].y, inversew); //skybox dst[i] = getTexel_plain(&IT[0], tx0, ty0); //getSample_texture ( r0, g0, b0, IT+0, tx0, ty0 ); //dst[i] = fix_to_sample( r0, g0, b0 ); - #ifdef WRITE_Z +#ifdef WRITE_Z z[i] = line.z[0]; - #endif - #ifdef WRITE_W +#endif +#ifdef WRITE_W z[i] = line.w[0]; - #endif +#endif } #ifdef IPOL_Z @@ -415,20 +414,20 @@ void CTRTextureGouraudNoZ2::fragment_no_filter() void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) { // sort on height, y - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(b->Pos.y, c->Pos.y)) swapVertexPointer(&b, &c); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); const f32 ca = c->Pos.y - a->Pos.y; const f32 ba = b->Pos.y - a->Pos.y; const f32 cb = c->Pos.y - b->Pos.y; // calculate delta y of the edges - scan.invDeltaY[0] = fill_step_y( ca ); - scan.invDeltaY[1] = fill_step_y( ba ); - scan.invDeltaY[2] = fill_step_y( cb ); + scan.invDeltaY[0] = fill_step_y(ca); + scan.invDeltaY[1] = fill_step_y(ba); + scan.invDeltaY[2] = fill_step_y(cb); - if ( F32_LOWER_EQUAL_0 ( scan.invDeltaY[0] ) ) + if (F32_LOWER_EQUAL_0(scan.invDeltaY[0])) return; // find if the major edge is left or right aligned @@ -439,7 +438,7 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -480,7 +479,7 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // rasterize upper sub-triangle - if (F32_GREATER_0(scan.invDeltaY[1]) ) + if (F32_GREATER_0(scan.invDeltaY[1])) { // calculate slopes for top edge scan.slopeX[1] = (b->Pos.x - a->Pos.x) * scan.invDeltaY[1]; @@ -512,11 +511,11 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top(a->Pos.y); + yEnd = fill_convention_down(b->Pos.y); #ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - a->Pos.y; + subPixel = ((f32)yStart) - a->Pos.y; // correct to pixel center scan.x[0] += scan.slopeX[0] * subPixel; @@ -550,7 +549,9 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); + + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; line.x[scan.right] = scan.x[1]; @@ -582,9 +583,10 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co // render a scanline - interlace_scanline - scissor_test_y + if_interlace_scanline + if_scissor_test_y (this->*fragmentShader) (); + if (EdgeTestPass & edge_test_first_line) break; scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -618,10 +620,10 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co } // rasterize lower sub-triangle - if (F32_GREATER_0(scan.invDeltaY[2]) ) + if (F32_GREATER_0(scan.invDeltaY[2])) { // advance to middle point - if(F32_GREATER_0(scan.invDeltaY[1]) ) + if (F32_GREATER_0(scan.invDeltaY[1])) { temp[0] = b->Pos.y - a->Pos.y; // dy @@ -674,12 +676,12 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top(b->Pos.y); + yEnd = fill_convention_down(c->Pos.y); #ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - b->Pos.y; + subPixel = ((f32)yStart) - b->Pos.y; // correct to pixel center scan.x[0] += scan.slopeX[0] * subPixel; @@ -713,7 +715,9 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); + + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; line.x[scan.right] = scan.x[1]; @@ -744,9 +748,10 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co #endif // render a scanline - interlace_scanline - scissor_test_y + if_interlace_scanline + if_scissor_test_y (this->*fragmentShader) (); + if (EdgeTestPass & edge_test_first_line) break; scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -782,30 +787,21 @@ void CTRTextureGouraudNoZ2::drawTriangle(const s4DVertex* burning_restrict a, co } -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ +burning_namespace_start //! creates a flat triangle renderer IBurningShader* createTRTextureGouraudNoZ2(CBurningVideoDriver* driver) { // ETR_TEXTURE_GOURAUD_NOZ - #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ - return new CTRTextureGouraudNoZ2( driver ); - #else +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ + return new CTRTextureGouraudNoZ2(driver); +#else return 0; - #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ } - -} // end namespace video -} // end namespace irr - - - +burning_namespace_end diff --git a/source/Irrlicht/CTRTextureGouraudVertexAlpha2.cpp b/source/Irrlicht/CTRTextureGouraudVertexAlpha2.cpp index d49311a1..c44d3236 100644 --- a/source/Irrlicht/CTRTextureGouraudVertexAlpha2.cpp +++ b/source/Irrlicht/CTRTextureGouraudVertexAlpha2.cpp @@ -99,7 +99,7 @@ private: //! constructor CTRTextureVertexAlpha2::CTRTextureVertexAlpha2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_TRANSPARENT_VERTEX_ALPHA) { #ifdef _DEBUG setDebugName("CTRTextureVertexAlpha2"); @@ -347,7 +347,7 @@ void CTRTextureVertexAlpha2::drawTriangle(const s4DVertex* burning_restrict a, c temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -430,8 +430,8 @@ void CTRTextureVertexAlpha2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -509,7 +509,7 @@ void CTRTextureVertexAlpha2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -612,8 +612,8 @@ void CTRTextureVertexAlpha2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -692,7 +692,7 @@ void CTRTextureVertexAlpha2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureLightMap2_Add.cpp b/source/Irrlicht/CTRTextureLightMap2_Add.cpp index 3b96c715..0c874e75 100644 --- a/source/Irrlicht/CTRTextureLightMap2_Add.cpp +++ b/source/Irrlicht/CTRTextureLightMap2_Add.cpp @@ -92,7 +92,7 @@ private: //! constructor CTRTextureLightMap2_Add::CTRTextureLightMap2_Add(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_LIGHTMAP_ADD) { #ifdef _DEBUG setDebugName("CTRTextureLightMap2_Add"); @@ -289,7 +289,7 @@ void CTRTextureLightMap2_Add::drawTriangle(const s4DVertex* burning_restrict a, temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -362,8 +362,8 @@ void CTRTextureLightMap2_Add::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -431,7 +431,7 @@ void CTRTextureLightMap2_Add::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -521,8 +521,8 @@ void CTRTextureLightMap2_Add::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -591,7 +591,7 @@ void CTRTextureLightMap2_Add::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureLightMap2_M1.cpp b/source/Irrlicht/CTRTextureLightMap2_M1.cpp index c8ebfbc5..382b5f9f 100644 --- a/source/Irrlicht/CTRTextureLightMap2_M1.cpp +++ b/source/Irrlicht/CTRTextureLightMap2_M1.cpp @@ -92,7 +92,7 @@ private: //! constructor CTRTextureLightMap2_M1::CTRTextureLightMap2_M1(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_LIGHTMAP) { #ifdef _DEBUG setDebugName("CTRTextureLightMap2_M1"); @@ -270,7 +270,7 @@ void CTRTextureLightMap2_M1::drawTriangle(const s4DVertex* burning_restrict a, c temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -343,8 +343,8 @@ void CTRTextureLightMap2_M1::drawTriangle(const s4DVertex* burning_restrict a, c #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -503,8 +503,8 @@ void CTRTextureLightMap2_M1::drawTriangle(const s4DVertex* burning_restrict a, c #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL diff --git a/source/Irrlicht/CTRTextureLightMap2_M2.cpp b/source/Irrlicht/CTRTextureLightMap2_M2.cpp index ce906f91..433e78fc 100644 --- a/source/Irrlicht/CTRTextureLightMap2_M2.cpp +++ b/source/Irrlicht/CTRTextureLightMap2_M2.cpp @@ -92,7 +92,7 @@ private: //! constructor CTRTextureLightMap2_M2::CTRTextureLightMap2_M2(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_LIGHTMAP_LIGHTING_M2) { #ifdef _DEBUG setDebugName("CTRTextureLightMap2_M2"); @@ -269,7 +269,7 @@ void CTRTextureLightMap2_M2::drawTriangle(const s4DVertex* burning_restrict a, c temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -342,8 +342,8 @@ void CTRTextureLightMap2_M2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -411,7 +411,7 @@ void CTRTextureLightMap2_M2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // render a scanline - interlace_scanline scanline_bilinear2 (); + if_interlace_scanline scanline_bilinear2 (); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -502,8 +502,8 @@ void CTRTextureLightMap2_M2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -572,7 +572,7 @@ void CTRTextureLightMap2_M2::drawTriangle(const s4DVertex* burning_restrict a, c #endif // render a scanline - interlace_scanline scanline_bilinear2 (); + if_interlace_scanline scanline_bilinear2 (); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureLightMap2_M4.cpp b/source/Irrlicht/CTRTextureLightMap2_M4.cpp index d0a7af5c..f6af7cd1 100644 --- a/source/Irrlicht/CTRTextureLightMap2_M4.cpp +++ b/source/Irrlicht/CTRTextureLightMap2_M4.cpp @@ -68,11 +68,7 @@ #endif -namespace irr -{ - -namespace video -{ +burning_namespace_start class CTRTextureLightMap2_M4 : public IBurningShader { @@ -84,34 +80,31 @@ public: //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - private: -#if defined(SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN) - void drawTriangle_Min ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ); - void drawTriangle_Mag ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ); - void scanline_bilinear2_mag (); - void scanline_bilinear2_min (); -#else - #define scanline_bilinear2_mag fragmentShader -#endif + // fragment shader + typedef void (CTRTextureLightMap2_M4::* tFragmentShader) (); + void fragment_linear_mag(); + void fragment_nearest_min(); - void fragmentShader(); + tFragmentShader fragmentShader; }; //! constructor CTRTextureLightMap2_M4::CTRTextureLightMap2_M4(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_LIGHTMAP_M4) { #ifdef _DEBUG setDebugName("CTRTextureLightMap2_M4"); #endif + fragmentShader = &CTRTextureLightMap2_M4::fragment_linear_mag; } + /*! */ -void CTRTextureLightMap2_M4::scanline_bilinear2_mag () +void CTRTextureLightMap2_M4::fragment_linear_mag() { tVideoSample *dst; fp24 *z; @@ -138,11 +131,17 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_mag () dst = (tVideoSample*)RenderTarget->getData() + i; // subTexel +#ifdef SUBTEXEL const f32 subPixel = ( (f32) xStart ) - line.x[0]; +#endif #ifdef IPOL_W const fp24 b = (line.w[1] - line.w[0]) * invDeltaX; - fp24 a = line.w[0] + ( b * subPixel ); + fp24 a = line.w[0] +#ifdef SUBTEXEL + + ( b * subPixel ) +#endif + ; i = 0; @@ -161,7 +160,11 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_mag () line.w[1] = b; #else const f32 b = (line.z[1] - line.z[0]) * invDeltaX; - f32 a = line.z[0] + ( b * subPixel ); + fp24 a = line.z[0] +#ifdef SUBTEXEL + + (b * subPixel) +#endif + ; i = 0; @@ -180,8 +183,11 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_mag () line.z[1] = b; #endif - a = (f32) i + subPixel; - + a = (f32)i +#ifdef SUBTEXEL + + subPixel +#endif + ; line.t[0][1] = (line.t[0][1] - line.t[0][0]) * invDeltaX; line.t[1][1] = (line.t[1][1] - line.t[1][0]) * invDeltaX; @@ -221,7 +227,6 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_mag () #endif - #ifdef BURNINGVIDEO_RENDERER_FAST const tFixPointu d = dithermask [ dIndex | ( i ) & 3 ]; @@ -248,8 +253,7 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_mag () } -#if defined (SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN) -void CTRTextureLightMap2_M4::scanline_bilinear2_min () +void CTRTextureLightMap2_M4::fragment_nearest_min() { tVideoSample *dst; fp24 *z; @@ -352,7 +356,6 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_min () f32 inversew = FIX_POINT_F32_MUL; #endif - getTexel_fix ( r0, g0, b0, &IT[0], tofix ( line.t[0][0].x,inversew), tofix ( line.t[0][0].y,inversew) ); getTexel_fix ( r1, g1, b1, &IT[1], tofix ( line.t[1][0].x,inversew), tofix ( line.t[1][0].y,inversew) ); @@ -370,20 +373,19 @@ void CTRTextureLightMap2_M4::scanline_bilinear2_min () } -void CTRTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) +void CTRTextureLightMap2_M4::drawTriangle ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ) { - if (IT[0].lodFactor < 4) +/* + if ( IT[0].lodFactor < 4) { - drawTriangle_Mag(a, b, c); + fragmentShader = &CTRTextureLightMap2_M4::fragment_linear_mag; } else { - drawTriangle_Min(a, b, c); + fragmentShader = &CTRTextureLightMap2_M4::fragment_nearest_min; } -} +*/ -void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ) -{ // sort on height, y if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); @@ -392,6 +394,7 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric const f32 ca = c->Pos.y - a->Pos.y; const f32 ba = b->Pos.y - a->Pos.y; const f32 cb = c->Pos.y - b->Pos.y; + // calculate delta y of the edges scan.invDeltaY[0] = fill_step_y( ca ); scan.invDeltaY[1] = fill_step_y( ba ); @@ -401,14 +404,16 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric return; // find if the major edge is left or right aligned +/* f32 temp[4]; temp[0] = a->Pos.x - c->Pos.x; - temp[1] = -ca; - temp[2] = b->Pos.x - a->Pos.x; + temp[1] = ca; + temp[2] = a->Pos.x - b->Pos.x; temp[3] = ba; - - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; +*/ + //scan.left = ((a->Pos.x - c->Pos.x) * ba - ca * (a->Pos.x - b->Pos.x)) < 0.f ? 1 : 0; + scan.left = (ca * (b->Pos.x - a->Pos.x) - ba *(c->Pos.x-a->Pos.x ) ) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -481,8 +486,8 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -518,6 +523,8 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric #endif + line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); + // rasterize the edge scanlines for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { @@ -550,7 +557,9 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric #endif // render a scanline - interlace_scanline scanline_bilinear2_min (); + if_interlace_scanline + (this->*fragmentShader) (); + if (EdgeTestPass & edge_test_first_line) break; scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -590,23 +599,23 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric // advance to middle point if ( F32_GREATER_0 ( scan.invDeltaY[1] ) ) { - temp[0] = b->Pos.y - a->Pos.y; // dy + const f32 dy = b->Pos.y - a->Pos.y; // dy - scan.x[0] = a->Pos.x + scan.slopeX[0] * temp[0]; + scan.x[0] = a->Pos.x + scan.slopeX[0] * dy; #ifdef IPOL_Z - scan.z[0] = a->Pos.z + scan.slopeZ[0] * temp[0]; + scan.z[0] = a->Pos.z + scan.slopeZ[0] * dy; #endif #ifdef IPOL_W - scan.w[0] = a->Pos.w + scan.slopeW[0] * temp[0]; + scan.w[0] = a->Pos.w + scan.slopeW[0] * dy; #endif #ifdef IPOL_C0 - scan.c[0] = a->Color[0] + scan.slopeC[0] * temp[0]; + scan.c[0] = a->Color[0] + scan.slopeC[0] * dy; #endif #ifdef IPOL_T0 - scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; + scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * dy; #endif #ifdef IPOL_T1 - scan.t[1][0] = a->Tex[1] + scan.slopeT[1][0] * temp[0]; + scan.t[1][0] = a->Tex[1] + scan.slopeT[1][0] * dy; #endif } @@ -641,8 +650,8 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -679,6 +688,8 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric #endif + line.x_edgetest = fill_convention_edge(scan.slopeX[scan.left]); + // rasterize the edge scanlines for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { @@ -711,7 +722,9 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric #endif // render a scanline - interlace_scanline scanline_bilinear2_min (); + if_interlace_scanline + (this->*fragmentShader) (); + if (EdgeTestPass & edge_test_first_line) break; scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -746,394 +759,12 @@ void CTRTextureLightMap2_M4::drawTriangle_Min ( const s4DVertex* burning_restric } -void CTRTextureLightMap2_M4::drawTriangle_Mag ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ) -#else //#if defined (SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN) - -void CTRTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) - -#endif - -{ - - // sort on height, y - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - - const f32 ca = c->Pos.y - a->Pos.y; - const f32 ba = b->Pos.y - a->Pos.y; - const f32 cb = c->Pos.y - b->Pos.y; - - if ( F32_LOWER_EQUAL_0 ( ca ) ) - return; - - // calculate delta y of the edges - scan.invDeltaY[0] = fill_step_y( ca ); - scan.invDeltaY[1] = fill_step_y( ba ); - scan.invDeltaY[2] = fill_step_y( cb ); - - //if ( F32_LOWER_EQUAL_0 ( scan.invDeltaY[0] ) ) - // return; - - // find if the major edge is left or right aligned - f32 temp[4]; - - temp[0] = a->Pos.x - c->Pos.x; - temp[1] = -ca; - temp[2] = b->Pos.x - a->Pos.x; - temp[3] = ba; - - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; - scan.right = 1 - scan.left; - - // calculate slopes for the major edge - scan.slopeX[0] = (c->Pos.x - a->Pos.x) * scan.invDeltaY[0]; - scan.x[0] = a->Pos.x; - -#ifdef IPOL_Z - scan.slopeZ[0] = (c->Pos.z - a->Pos.z) * scan.invDeltaY[0]; - scan.z[0] = a->Pos.z; -#endif - -#ifdef IPOL_W - scan.slopeW[0] = (c->Pos.w - a->Pos.w) * scan.invDeltaY[0]; - scan.w[0] = a->Pos.w; -#endif - -#ifdef IPOL_C0 - scan.slopeC[0] = (c->Color[0] - a->Color[0]) * scan.invDeltaY[0]; - scan.c[0] = a->Color[0]; -#endif - -#ifdef IPOL_T0 - scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; - scan.t[0][0] = a->Tex[0]; -#endif - -#ifdef IPOL_T1 - scan.slopeT[1][0] = (c->Tex[1] - a->Tex[1]) * scan.invDeltaY[0]; - scan.t[1][0] = a->Tex[1]; -#endif - - // top left fill convention y run - s32 yStart; - s32 yEnd; - -#ifdef SUBTEXEL - f32 subPixel; -#endif - - - // rasterize upper sub-triangle - if ( F32_GREATER_0 ( scan.invDeltaY[1] ) ) - { - // calculate slopes for top edge - scan.slopeX[1] = (b->Pos.x - a->Pos.x) * scan.invDeltaY[1]; - scan.x[1] = a->Pos.x; - -#ifdef IPOL_Z - scan.slopeZ[1] = (b->Pos.z - a->Pos.z) * scan.invDeltaY[1]; - scan.z[1] = a->Pos.z; -#endif - -#ifdef IPOL_W - scan.slopeW[1] = (b->Pos.w - a->Pos.w) * scan.invDeltaY[1]; - scan.w[1] = a->Pos.w; -#endif - -#ifdef IPOL_C0 - scan.slopeC[1] = (b->Color[0] - a->Color[0]) * scan.invDeltaY[1]; - scan.c[1] = a->Color[0]; -#endif - -#ifdef IPOL_T0 - scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; - scan.t[0][1] = a->Tex[0]; -#endif - -#ifdef IPOL_T1 - scan.slopeT[1][1] = (b->Tex[1] - a->Tex[1]) * scan.invDeltaY[1]; - scan.t[1][1] = a->Tex[1]; -#endif - - // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); - -#ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - a->Pos.y; - - // correct to pixel center - scan.x[0] += scan.slopeX[0] * subPixel; - scan.x[1] += scan.slopeX[1] * subPixel; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0] * subPixel; - scan.z[1] += scan.slopeZ[1] * subPixel; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0] * subPixel; - scan.w[1] += scan.slopeW[1] * subPixel; -#endif - -#ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0] * subPixel; - scan.c[1] += scan.slopeC[1] * subPixel; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0] * subPixel; - scan.t[0][1] += scan.slopeT[0][1] * subPixel; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0] * subPixel; - scan.t[1][1] += scan.slopeT[1][1] * subPixel; -#endif - -#endif - - // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) - { - line.x[scan.left] = scan.x[0]; - line.x[scan.right] = scan.x[1]; - -#ifdef IPOL_Z - line.z[scan.left] = scan.z[0]; - line.z[scan.right] = scan.z[1]; -#endif - -#ifdef IPOL_W - line.w[scan.left] = scan.w[0]; - line.w[scan.right] = scan.w[1]; -#endif - -#ifdef IPOL_C0 - line.c[scan.left] = scan.c[0]; - line.c[scan.right] = scan.c[1]; -#endif - -#ifdef IPOL_T0 - line.t[0][scan.left] = scan.t[0][0]; - line.t[0][scan.right] = scan.t[0][1]; -#endif - -#ifdef IPOL_T1 - line.t[1][scan.left] = scan.t[1][0]; - line.t[1][scan.right] = scan.t[1][1]; -#endif - - // render a scanline - interlace_scanline scanline_bilinear2_mag (); - - scan.x[0] += scan.slopeX[0]; - scan.x[1] += scan.slopeX[1]; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0]; - scan.z[1] += scan.slopeZ[1]; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0]; - scan.w[1] += scan.slopeW[1]; -#endif - -#ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0]; - scan.c[1] += scan.slopeC[1]; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0]; - scan.t[0][1] += scan.slopeT[0][1]; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0]; - scan.t[1][1] += scan.slopeT[1][1]; -#endif - - } - } - - // rasterize lower sub-triangle - //if ( (f32) 0.0 != scan.invDeltaY[2] ) - if ( F32_GREATER_0 ( scan.invDeltaY[2] ) ) - { - // advance to middle point - if ( F32_GREATER_0 ( scan.invDeltaY[1] ) ) - { - temp[0] = b->Pos.y - a->Pos.y; // dy - - scan.x[0] = a->Pos.x + scan.slopeX[0] * temp[0]; -#ifdef IPOL_Z - scan.z[0] = a->Pos.z + scan.slopeZ[0] * temp[0]; -#endif -#ifdef IPOL_W - scan.w[0] = a->Pos.w + scan.slopeW[0] * temp[0]; -#endif -#ifdef IPOL_C0 - scan.c[0] = a->Color[0] + scan.slopeC[0] * temp[0]; -#endif -#ifdef IPOL_T0 - scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; -#endif -#ifdef IPOL_T1 - scan.t[1][0] = a->Tex[1] + scan.slopeT[1][0] * temp[0]; -#endif - - } - - // calculate slopes for bottom edge - scan.slopeX[1] = (c->Pos.x - b->Pos.x) * scan.invDeltaY[2]; - scan.x[1] = b->Pos.x; - -#ifdef IPOL_Z - scan.slopeZ[1] = (c->Pos.z - b->Pos.z) * scan.invDeltaY[2]; - scan.z[1] = b->Pos.z; -#endif - -#ifdef IPOL_W - scan.slopeW[1] = (c->Pos.w - b->Pos.w) * scan.invDeltaY[2]; - scan.w[1] = b->Pos.w; -#endif - -#ifdef IPOL_C0 - scan.slopeC[1] = (c->Color[0] - b->Color[0]) * scan.invDeltaY[2]; - scan.c[1] = b->Color[0]; -#endif - -#ifdef IPOL_T0 - scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; - scan.t[0][1] = b->Tex[0]; -#endif - -#ifdef IPOL_T1 - scan.slopeT[1][1] = (c->Tex[1] - b->Tex[1]) * scan.invDeltaY[2]; - scan.t[1][1] = b->Tex[1]; -#endif - - // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); - -#ifdef SUBTEXEL - - subPixel = ( (f32) yStart ) - b->Pos.y; - - // correct to pixel center - scan.x[0] += scan.slopeX[0] * subPixel; - scan.x[1] += scan.slopeX[1] * subPixel; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0] * subPixel; - scan.z[1] += scan.slopeZ[1] * subPixel; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0] * subPixel; - scan.w[1] += scan.slopeW[1] * subPixel; -#endif - -#ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0] * subPixel; - scan.c[1] += scan.slopeC[1] * subPixel; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0] * subPixel; - scan.t[0][1] += scan.slopeT[0][1] * subPixel; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0] * subPixel; - scan.t[1][1] += scan.slopeT[1][1] * subPixel; -#endif - -#endif - - // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) - { - line.x[scan.left] = scan.x[0]; - line.x[scan.right] = scan.x[1]; - -#ifdef IPOL_Z - line.z[scan.left] = scan.z[0]; - line.z[scan.right] = scan.z[1]; -#endif - -#ifdef IPOL_W - line.w[scan.left] = scan.w[0]; - line.w[scan.right] = scan.w[1]; -#endif - -#ifdef IPOL_C0 - line.c[scan.left] = scan.c[0]; - line.c[scan.right] = scan.c[1]; -#endif - -#ifdef IPOL_T0 - line.t[0][scan.left] = scan.t[0][0]; - line.t[0][scan.right] = scan.t[0][1]; -#endif - -#ifdef IPOL_T1 - line.t[1][scan.left] = scan.t[1][0]; - line.t[1][scan.right] = scan.t[1][1]; -#endif - - // render a scanline - interlace_scanline scanline_bilinear2_mag (); - - scan.x[0] += scan.slopeX[0]; - scan.x[1] += scan.slopeX[1]; - -#ifdef IPOL_Z - scan.z[0] += scan.slopeZ[0]; - scan.z[1] += scan.slopeZ[1]; -#endif - -#ifdef IPOL_W - scan.w[0] += scan.slopeW[0]; - scan.w[1] += scan.slopeW[1]; -#endif - -#ifdef IPOL_C0 - scan.c[0] += scan.slopeC[0]; - scan.c[1] += scan.slopeC[1]; -#endif - -#ifdef IPOL_T0 - scan.t[0][0] += scan.slopeT[0][0]; - scan.t[0][1] += scan.slopeT[0][1]; -#endif - -#ifdef IPOL_T1 - scan.t[1][0] += scan.slopeT[1][0]; - scan.t[1][1] += scan.slopeT[1][1]; -#endif - - } - } - -} - -#undef scanline_bilinear2_mag - -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ +burning_namespace_start //! creates a flat triangle renderer @@ -1147,8 +778,4 @@ IBurningShader* createTriangleRendererTextureLightMap2_M4(CBurningVideoDriver* d } -} // end namespace video -} // end namespace irr - - - +burning_namespace_end diff --git a/source/Irrlicht/CTRTextureLightMapGouraud2_M4.cpp b/source/Irrlicht/CTRTextureLightMapGouraud2_M4.cpp index 9fd93f85..ba2010ad 100644 --- a/source/Irrlicht/CTRTextureLightMapGouraud2_M4.cpp +++ b/source/Irrlicht/CTRTextureLightMapGouraud2_M4.cpp @@ -92,7 +92,7 @@ private: //! constructor CTRGTextureLightMap2_M4::CTRGTextureLightMap2_M4(CBurningVideoDriver* driver) -: IBurningShader(driver) +: IBurningShader(driver, EMT_LIGHTMAP_LIGHTING_M4) { #ifdef _DEBUG setDebugName("CTRGTextureLightMap2_M4"); @@ -298,7 +298,7 @@ void CTRGTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -373,8 +373,8 @@ void CTRGTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top( a->Pos.y ); + yEnd = fill_convention_down( b->Pos.y ); #ifdef SUBTEXEL subPixel = ( (f32) yStart ) - a->Pos.y; @@ -442,7 +442,7 @@ void CTRGTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -534,8 +534,8 @@ void CTRGTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top( b->Pos.y ); + yEnd = fill_convention_down( c->Pos.y ); #ifdef SUBTEXEL @@ -604,7 +604,7 @@ void CTRGTextureLightMap2_M4::drawTriangle(const s4DVertex* burning_restrict a, #endif // render a scanline - interlace_scanline fragmentShader(); + if_interlace_scanline fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; diff --git a/source/Irrlicht/CTRTextureWire2.cpp b/source/Irrlicht/CTRTextureWire2.cpp index 63e590bd..1bbc0b50 100644 --- a/source/Irrlicht/CTRTextureWire2.cpp +++ b/source/Irrlicht/CTRTextureWire2.cpp @@ -28,10 +28,10 @@ #define SUBTEXEL #define INVERSE_W -//#define USE_ZBUFFER +#define USE_ZBUFFER #define IPOL_W -//#define CMP_W -//#define WRITE_W +#define CMP_W +#define WRITE_W #define IPOL_C0 @@ -40,41 +40,36 @@ // apply global override #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef INVERSE_W +#undef INVERSE_W #endif #ifndef SOFTWARE_DRIVER_2_SUBTEXEL - #undef SUBTEXEL +#undef SUBTEXEL #endif #if BURNING_MATERIAL_MAX_COLORS < 1 - #undef IPOL_C0 +#undef IPOL_C0 #endif #if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) - #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef IPOL_W - #endif - #define IPOL_Z +#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT +#undef IPOL_W +#endif +#define IPOL_Z - #ifdef CMP_W - #undef CMP_W - #define CMP_Z - #endif +#ifdef CMP_W +#undef CMP_W +#define CMP_Z +#endif - #ifdef WRITE_W - #undef WRITE_W - #define WRITE_Z - #endif +#ifdef WRITE_W +#undef WRITE_W +#define WRITE_Z +#endif #endif - -namespace irr -{ - -namespace video -{ +burning_namespace_start class CTRTextureWire2 : public IBurningShader { @@ -83,43 +78,54 @@ public: //! constructor CTRTextureWire2(CBurningVideoDriver* driver); + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; + //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void drawLine ( const s4DVertex *a,const s4DVertex *b) IRR_OVERRIDE; - virtual void drawPoint( const s4DVertex *a) IRR_OVERRIDE; - virtual bool canWireFrame () IRR_OVERRIDE { return true; } - virtual bool canPointCloud() IRR_OVERRIDE { return true; } + virtual void drawLine(const s4DVertex* a, const s4DVertex* b) IRR_OVERRIDE; + virtual void drawPoint(const s4DVertex* a) IRR_OVERRIDE; + virtual bool canWireFrame() IRR_OVERRIDE { return true; } + virtual bool canPointCloud() IRR_OVERRIDE { return true; } protected: - virtual void fragmentShader(); - void renderAlphaLine ( const s4DVertex *a,const s4DVertex *b ) const; - void renderLine ( const s4DVertex *a,const s4DVertex *b, int renderZero = 0 ) const; + void renderLine(const s4DVertex* a, const s4DVertex* b) const; + int renderZero; + int depth_pass; + int depth_write; }; //! constructor CTRTextureWire2::CTRTextureWire2(CBurningVideoDriver* driver) -: IBurningShader(driver) + : IBurningShader(driver, EMT_SOLID) { - #ifdef _DEBUG +#ifdef _DEBUG setDebugName("CTRTextureWire2"); - #endif +#endif + renderZero = 0; + depth_pass = 1; + depth_write = 0; } +void CTRTextureWire2::OnSetMaterialBurning(const SBurningShaderMaterial& material) +{ + depth_pass = material.depth_test == 0; + depth_write = material.depth_write; +} /*! 2d line */ -void CTRTextureWire2::renderLine ( const s4DVertex *a,const s4DVertex *b, int renderZero) const +void CTRTextureWire2::renderLine(const s4DVertex* a, const s4DVertex* b) const { - int pitch0 = RenderTarget->getDimension().Width << SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY; + const int pitch0 = RenderTarget->getDimension().Width << SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY; #ifdef USE_ZBUFFER - int pitch1 = RenderTarget->getDimension().Width << 2; + const int pitch1 = RenderTarget->getDimension().Width * sizeof(fp24); #endif - //todo:! + //todo: fill_convention_none! int aposx = fill_convention_none(a->Pos.x); int aposy = fill_convention_none(a->Pos.y); int bposx = fill_convention_none(b->Pos.x); @@ -133,36 +139,36 @@ void CTRTextureWire2::renderLine ( const s4DVertex *a,const s4DVertex *b, int re int d = 0; int run; - tVideoSample *dst; + tVideoSample* dst; #ifdef USE_ZBUFFER - fp24 *z; + fp24* z; #endif int xInc0 = 1 << SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY; int yInc0 = pitch0; #ifdef USE_ZBUFFER - int xInc1 = 4; + int xInc1 = sizeof(fp24); int yInc1 = pitch1; #endif - if ( dx < 0 ) + if (dx < 0) { - xInc0 = - ( 1 << SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY); + xInc0 = -xInc0; #ifdef USE_ZBUFFER xInc1 = -4; #endif dx = -dx; } - if ( dy > dx ) + if (dy > dx) { //swap s32 t; - t = dx;dx=dy;dy=t; - t = xInc0;xInc0=yInc0;yInc0=t; + t = dx; dx = dy; dy = t; + t = xInc0; xInc0 = yInc0; yInc0 = t; #ifdef USE_ZBUFFER - t = xInc1;xInc1=yInc1;yInc1=t; + t = xInc1; xInc1 = yInc1; yInc1 = t; #endif } @@ -173,16 +179,17 @@ void CTRTextureWire2::renderLine ( const s4DVertex *a,const s4DVertex *b, int re } SOFTWARE_DRIVER_2_CLIPCHECK_WIRE; - dst = (tVideoSample*) ( (u8*) RenderTarget->getData() + ( aposy * pitch0 ) + (aposx* (1<< SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY) ) ); + dst = (tVideoSample*)((u8*)RenderTarget->getData() + (aposy * pitch0) + (aposx << SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY)); + #ifdef USE_ZBUFFER - z = (fp24*) ( (u8*) (fp24*) DepthBuffer->lock() + ( aposy * pitch1 ) + (aposx << 2 ) ); + z = (fp24*)((u8*)DepthBuffer->lock() + (aposy * pitch1) + (aposx << 2)); #endif c = dx << 1; m = dy << 1; // slopes - const f32 invDeltaX = fill_step_x( (f32)dx ); + const f32 invDeltaX = fill_step_x((f32)dx); #ifdef IPOL_Z f32 slopeZ = (b->Pos.z - a->Pos.z) * invDeltaX; @@ -210,59 +217,59 @@ void CTRTextureWire2::renderLine ( const s4DVertex *a,const s4DVertex *b, int re inversew = fix_inverse32_color(dataW); #endif - vec4_to_fix( r0, g0, b0, a->Color[0], inversew); - color = fix_to_sample( r0, g0, b0 ); + vec4_to_fix(r0, g0, b0, a->Color[0], inversew); + color = fix_to_sample(r0, g0, b0); #else - color = (tVideoSample) 0xFFFFFFFF; + color = (tVideoSample)0xFFFFFFFF; #endif run = dx; - while ( run ) + while (run) { #ifdef CMP_Z - if ( *z >= dataZ ) + if (*z >= dataZ) #endif #ifdef CMP_W - if ( dataW >= *z ) + if (depth_pass || dataW >= *z) #endif { #ifdef WRITE_Z *z = dataZ; #endif #ifdef WRITE_W - *z = dataW; + if (depth_write) *z = dataW; #endif #ifdef IPOL_C0 #ifdef INVERSE_W inversew = fix_inverse32_color(dataW); #endif - vec4_to_fix(r0, g0, b0, C,inversew); - color = fix_to_sample( r0, g0, b0 ); + vec4_to_fix(r0, g0, b0, C, inversew); + color = fix_to_sample(r0, g0, b0); #endif - *dst = color; + * dst = color; } - dst = (tVideoSample*) ( (u8*) dst + xInc0 ); // x += xInc + dst = (tVideoSample*)((u8*)dst + xInc0); // x += xInc #ifdef CMP_Z - z = (fp24*) ( (u8*) z + xInc1 ); + z = (fp24*)((u8*)z + xInc1); #endif #ifdef CMP_W - z = (fp24*) ( (u8*) z + xInc1 ); + z = (fp24*)((u8*)z + xInc1); #endif d += m; - if ( d > dx ) + if (d > dx) { - dst = (tVideoSample*) ( (u8*) dst + yInc0 ); // y += yInc + dst = (tVideoSample*)((u8*)dst + yInc0); // y += yInc #ifdef CMP_Z - z = (fp24*) ( (u8*) z + yInc1 ); + z = (fp24*)((u8*)z + yInc1); #endif #ifdef CMP_W - z = (fp24*) ( (u8*) z + yInc1 ); + z = (fp24*)((u8*)z + yInc1); #endif d -= c; @@ -278,69 +285,61 @@ void CTRTextureWire2::renderLine ( const s4DVertex *a,const s4DVertex *b, int re C += slopeC; #endif - } } -void CTRTextureWire2::fragmentShader() -{ -} - void CTRTextureWire2::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) { // sort on height, y - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(b->Pos.y, c->Pos.y)) swapVertexPointer(&b, &c); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); - renderLine ( a, b ); - renderLine ( b, c ); - renderLine ( a, c ); + renderLine(a, b); + renderLine(b, c); + renderLine(a, c); } -void CTRTextureWire2::drawLine ( const s4DVertex *a,const s4DVertex *b) +void CTRTextureWire2::drawLine(const s4DVertex* a, const s4DVertex* b) { // query access to TexMaps // sort on height, y - if (F32_A_GREATER_B(a->Pos.y,b->Pos.y )) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); - renderLine ( a, b ); + renderLine(a, b); } -void CTRTextureWire2::drawPoint(const s4DVertex *a) +void CTRTextureWire2::drawPoint(const s4DVertex* a) { - if ( (a->flag & VERTEX4D_CLIPMASK ) == VERTEX4D_INSIDE ) renderLine(a, a,1); + if ((a->flag & VERTEX4D_CLIPMASK) == VERTEX4D_INSIDE) + { + renderZero = 1; + renderLine(a, a); + renderZero = 0; + } } - -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ - +burning_namespace_start //! creates a flat triangle renderer IBurningShader* createTriangleRendererTextureGouraudWire2(CBurningVideoDriver* driver) { //ETR_TEXTURE_GOURAUD_WIRE - #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ return new CTRTextureWire2(driver); - #else +#else return 0; - #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ } -} // end namespace video -} // end namespace irr - +burning_namespace_end diff --git a/source/Irrlicht/CTR_transparent_reflection_2_layer.cpp b/source/Irrlicht/CTR_transparent_reflection_2_layer.cpp index 05a1b5c1..a93d3f3d 100644 --- a/source/Irrlicht/CTR_transparent_reflection_2_layer.cpp +++ b/source/Irrlicht/CTR_transparent_reflection_2_layer.cpp @@ -21,6 +21,8 @@ #undef INVERSE_W #undef IPOL_C0 +#undef IPOL_C1 +#undef IPOL_C1_FOG #undef IPOL_T0 #undef IPOL_T1 @@ -34,45 +36,47 @@ #define WRITE_W #define IPOL_C0 +#define IPOL_C1 #define IPOL_T0 #define IPOL_T1 // apply global override #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef INVERSE_W +#undef INVERSE_W #endif #ifndef SOFTWARE_DRIVER_2_SUBTEXEL - #undef SUBTEXEL +#undef SUBTEXEL #endif #if BURNING_MATERIAL_MAX_COLORS < 1 - #undef IPOL_C0 +#undef IPOL_C0 #endif +#if BURNING_MATERIAL_MAX_COLORS < 2 +#undef IPOL_C1 +#endif + + #if !defined ( SOFTWARE_DRIVER_2_USE_WBUFFER ) && defined ( USE_ZBUFFER ) - #ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT - #undef IPOL_W - #endif - #define IPOL_Z +#ifndef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT +#undef IPOL_W +#endif +#define IPOL_Z - #ifdef CMP_W - #undef CMP_W - #define CMP_Z - #endif +#ifdef CMP_W +#undef CMP_W +#define CMP_Z +#endif - #ifdef WRITE_W - #undef WRITE_W - #define WRITE_Z - #endif +#ifdef WRITE_W +#undef WRITE_W +#define WRITE_Z +#endif #endif -namespace irr -{ - -namespace video -{ +burning_namespace_start class CTR_transparent_reflection_2_layer : public IBurningShader { @@ -83,7 +87,7 @@ public: //! draws an indexed triangle list virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; private: void fragmentShader(); @@ -94,14 +98,14 @@ private: //! constructor CTR_transparent_reflection_2_layer::CTR_transparent_reflection_2_layer(CBurningVideoDriver* driver) -: IBurningShader(driver) + : IBurningShader(driver, EMT_REFLECTION_2_LAYER) { - #ifdef _DEBUG +#ifdef _DEBUG setDebugName("CTR_transparent_reflection_2_layer"); - #endif +#endif } -void CTR_transparent_reflection_2_layer::OnSetMaterial(const SBurningShaderMaterial& material) +void CTR_transparent_reflection_2_layer::OnSetMaterialBurning(const SBurningShaderMaterial& material) { MaterialType = material.org.MaterialType; @@ -111,10 +115,10 @@ void CTR_transparent_reflection_2_layer::OnSetMaterial(const SBurningShaderMater */ void CTR_transparent_reflection_2_layer::fragmentShader() { - tVideoSample *dst; + tVideoSample* dst; #ifdef USE_ZBUFFER - fp24 *z; + fp24* z; #endif s32 xStart; @@ -133,23 +137,23 @@ void CTR_transparent_reflection_2_layer::fragmentShader() fp24 slopeW; #endif #ifdef IPOL_C0 - sVec4 slopeC; + sVec4 slopeC[BURNING_MATERIAL_MAX_COLORS]; #endif #ifdef IPOL_T0 sVec2 slopeT[BURNING_MATERIAL_MAX_TEXTURES]; #endif // apply top-left fill-convention, left - xStart = fill_convention_left( line.x[0] ); - xEnd = fill_convention_right( line.x[1] ); + xStart = fill_convention_left(line.x[0]); + xEnd = fill_convention_right(line.x[1]); dx = xEnd - xStart; - if ( dx < 0 ) + if (dx < 0) return; // slopes - const f32 invDeltaX = fill_step_x( line.x[1] - line.x[0] ); + const f32 invDeltaX = fill_step_x(line.x[1] - line.x[0]); #ifdef IPOL_Z slopeZ = (line.z[1] - line.z[0]) * invDeltaX; @@ -158,7 +162,10 @@ void CTR_transparent_reflection_2_layer::fragmentShader() slopeW = (line.w[1] - line.w[0]) * invDeltaX; #endif #ifdef IPOL_C0 - slopeC = (line.c[0][1] - line.c[0][0]) * invDeltaX; + slopeC[0] = (line.c[0][1] - line.c[0][0]) * invDeltaX; +#endif +#ifdef IPOL_C1 + slopeC[1] = (line.c[1][1] - line.c[1][0]) * invDeltaX; #endif #ifdef IPOL_T0 slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; @@ -168,7 +175,7 @@ void CTR_transparent_reflection_2_layer::fragmentShader() #endif #ifdef SUBTEXEL - subPixel = ( (f32) xStart ) - line.x[0]; + subPixel = ((f32)xStart) - line.x[0]; #ifdef IPOL_Z line.z[0] += slopeZ * subPixel; #endif @@ -176,7 +183,10 @@ void CTR_transparent_reflection_2_layer::fragmentShader() line.w[0] += slopeW * subPixel; #endif #ifdef IPOL_C0 - line.c[0][0] += slopeC * subPixel; + line.c[0][0] += slopeC[0] * subPixel; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1] * subPixel; #endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0] * subPixel; @@ -187,10 +197,10 @@ void CTR_transparent_reflection_2_layer::fragmentShader() #endif SOFTWARE_DRIVER_2_CLIPCHECK; - dst = (tVideoSample*)RenderTarget->getData() + ( line.y * RenderTarget->getDimension().Width ) + xStart; + dst = (tVideoSample*)RenderTarget->getData() + (line.y * RenderTarget->getDimension().Width) + xStart; #ifdef USE_ZBUFFER - z = (fp24*) DepthBuffer->lock() + ( line.y * RenderTarget->getDimension().Width ) + xStart; + z = (fp24*)DepthBuffer->lock() + (line.y * RenderTarget->getDimension().Width) + xStart; #endif @@ -203,152 +213,197 @@ void CTR_transparent_reflection_2_layer::fragmentShader() tFixPoint a1; #endif - switch(MaterialType) { +#ifdef IPOL_C1_FOG + tFixPoint aFog = FIX_POINT_ONE; +#endif + + switch (MaterialType) { default: case EMT_REFLECTION_2_LAYER: - for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) - { + for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) + { #ifdef CMP_Z - if (line.z[0] < z[i]) + if (line.z[0] < z[i]) #endif #ifdef CMP_W - if (line.w[0] >= z[i]) + if (line.w[0] >= z[i]) #endif - { + { #ifdef INVERSE_W - inversew = fix_inverse32(line.w[0]); + inversew = fix_inverse32(line.w[0]); #endif - getSample_texture(r0, g0, b0, &IT[0], tofix(line.t[0][0].x, inversew), tofix(line.t[0][0].y, inversew)); - getSample_texture(r1, g1, b1, &IT[1], tofix(line.t[1][0].x, inversew), tofix(line.t[1][0].y, inversew)); +#ifdef IPOL_C1_FOG + //complete inside fog + if (TL_Flag & TL_FOG) + { + aFog = tofix(line.c[1][0].a, inversew); + if (aFog <= 0) + { + dst[i] = fog_color_sample; + continue; + } + } +#endif - r0 = imulFix_tex1(r0, r1); - g0 = imulFix_tex1(g0, g1); - b0 = imulFix_tex1(b0, b1); + getSample_texture(r0, g0, b0, &IT[0], tofix(line.t[0][0].x, inversew), tofix(line.t[0][0].y, inversew)); + getSample_texture(r1, g1, b1, &IT[1], tofix(line.t[1][0].x, inversew), tofix(line.t[1][0].y, inversew)); + + r0 = imulFix_tex1(r0, r1); + g0 = imulFix_tex1(g0, g1); + b0 = imulFix_tex1(b0, b1); #ifdef IPOL_C0 - vec4_to_fix(r1, g1, b1, line.c[0][0], inversew); - r0 = imulFix_simple(r1, r0); - g0 = imulFix_simple(g1, g0); - b0 = imulFix_simple(b1, b0); + vec4_to_fix(r1, g1, b1, line.c[0][0], inversew); + r0 = imulFix_simple(r1, r0); + g0 = imulFix_simple(g1, g0); + b0 = imulFix_simple(b1, b0); #endif - dst[i] = fix_to_sample(r0, g0, b0); +#ifdef IPOL_C1 + + //specular highlight + if (TL_Flag & TL_SPECULAR) + { + vec4_to_fix(r1, g1, b1, line.c[1][0], inversew * COLOR_MAX); + r0 = clampfix_maxcolor(r1 + r0); + g0 = clampfix_maxcolor(g1 + g0); + b0 = clampfix_maxcolor(b1 + b0); + } +#endif +#ifdef IPOL_C1_FOG + //mix with distance + if (aFog < FIX_POINT_ONE) //TL_Flag & TL_FOG) + { + r0 = fog_color[1] + imulFix(aFog, r0 - fog_color[1]); + g0 = fog_color[2] + imulFix(aFog, g0 - fog_color[2]); + b0 = fog_color[3] + imulFix(aFog, b0 - fog_color[3]); + } +#endif + + + dst[i] = fix_to_sample(r0, g0, b0); #ifdef WRITE_Z - z[i] = line.z[0]; + z[i] = line.z[0]; #endif #ifdef WRITE_W - z[i] = line.w[0]; + z[i] = line.w[0]; #endif - } + } #ifdef IPOL_Z - line.z[0] += slopeZ; + line.z[0] += slopeZ; #endif #ifdef IPOL_W - line.w[0] += slopeW; + line.w[0] += slopeW; #endif #ifdef IPOL_C0 - line.c[0][0] += slopeC; + line.c[0][0] += slopeC[0]; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1]; #endif #ifdef IPOL_T0 - line.t[0][0] += slopeT[0]; + line.t[0][0] += slopeT[0]; #endif #ifdef IPOL_T1 - line.t[1][0] += slopeT[1]; + line.t[1][0] += slopeT[1]; #endif - } - break; + } + break; case EMT_TRANSPARENT_REFLECTION_2_LAYER: - for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) - { + for (s32 i = 0; i <= dx; i += SOFTWARE_DRIVER_2_STEP_X) + { #ifdef CMP_Z - if (line.z[0] < z[i]) + if (line.z[0] < z[i]) #endif #ifdef CMP_W - if (line.w[0] >= z[i]) + if (line.w[0] >= z[i]) #endif - { + { #ifdef INVERSE_W - inversew = fix_inverse32(line.w[0]); + inversew = fix_inverse32(line.w[0]); #endif - getSample_texture(r0, g0, b0, &IT[0], tofix(line.t[0][0].x, inversew), tofix(line.t[0][0].y, inversew)); - getSample_texture(r1, g1, b1, &IT[1], tofix(line.t[1][0].x, inversew), tofix(line.t[1][0].y, inversew)); + getSample_texture(r0, g0, b0, &IT[0], tofix(line.t[0][0].x, inversew), tofix(line.t[0][0].y, inversew)); + getSample_texture(r1, g1, b1, &IT[1], tofix(line.t[1][0].x, inversew), tofix(line.t[1][0].y, inversew)); - r0 = imulFix_tex1(r0, r1); - g0 = imulFix_tex1(g0, g1); - b0 = imulFix_tex1(b0, b1); + r0 = imulFix_tex1(r0, r1); + g0 = imulFix_tex1(g0, g1); + b0 = imulFix_tex1(b0, b1); #ifdef IPOL_C0 - vec4_to_fix(a1, r1, g1, b1, line.c[0][0], inversew); - r0 = imulFix_simple(r1, r0); - g0 = imulFix_simple(g1, g0); - b0 = imulFix_simple(b1, b0); + vec4_to_fix(a1, r1, g1, b1, line.c[0][0], inversew); + r0 = imulFix_simple(r1, r0); + g0 = imulFix_simple(g1, g0); + b0 = imulFix_simple(b1, b0); - //vertex alpha blend EMT_TRANSPARENT_REFLECTION_2_LAYER - if (a1 + 2 < FIX_POINT_ONE) - { - color_to_fix(r1, g1, b1, dst[i]); - r0 = r1 + imulFix(a1, r0 - r1); - g0 = g1 + imulFix(a1, g0 - g1); - b0 = b1 + imulFix(a1, b0 - b1); - } + //vertex alpha blend EMT_TRANSPARENT_REFLECTION_2_LAYER + if (a1 + 2 < FIX_POINT_ONE) + { + color_to_fix(r1, g1, b1, dst[i]); + r0 = r1 + imulFix(a1, r0 - r1); + g0 = g1 + imulFix(a1, g0 - g1); + b0 = b1 + imulFix(a1, b0 - b1); + } #endif - dst[i] = fix_to_sample(r0, g0, b0); + dst[i] = fix_to_sample(r0, g0, b0); #ifdef WRITE_Z - //z[i] = line.z[0]; + //z[i] = line.z[0]; #endif #ifdef WRITE_W //z[i] = line.w[0]; #endif - } + } #ifdef IPOL_Z - line.z[0] += slopeZ; + line.z[0] += slopeZ; #endif #ifdef IPOL_W - line.w[0] += slopeW; + line.w[0] += slopeW; #endif #ifdef IPOL_C0 - line.c[0][0] += slopeC; + line.c[0][0] += slopeC[0]; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1]; #endif #ifdef IPOL_T0 - line.t[0][0] += slopeT[0]; + line.t[0][0] += slopeT[0]; #endif #ifdef IPOL_T1 - line.t[1][0] += slopeT[1]; + line.t[1][0] += slopeT[1]; #endif - } - break; + } + break; } } -void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning_restrict a,const s4DVertex* burning_restrict b,const s4DVertex* burning_restrict c ) +void CTR_transparent_reflection_2_layer::drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) { // sort on height, y - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); - if ( F32_A_GREATER_B ( b->Pos.y , c->Pos.y ) ) swapVertexPointer(&b, &c); - if ( F32_A_GREATER_B ( a->Pos.y , b->Pos.y ) ) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); + if (F32_A_GREATER_B(b->Pos.y, c->Pos.y)) swapVertexPointer(&b, &c); + if (F32_A_GREATER_B(a->Pos.y, b->Pos.y)) swapVertexPointer(&a, &b); const f32 ca = c->Pos.y - a->Pos.y; const f32 ba = b->Pos.y - a->Pos.y; const f32 cb = c->Pos.y - b->Pos.y; // calculate delta y of the edges - scan.invDeltaY[0] = fill_step_y( ca ); - scan.invDeltaY[1] = fill_step_y( ba ); - scan.invDeltaY[2] = fill_step_y( cb ); + scan.invDeltaY[0] = fill_step_y(ca); + scan.invDeltaY[1] = fill_step_y(ba); + scan.invDeltaY[2] = fill_step_y(cb); - if ( F32_LOWER_EQUAL_0 ( scan.invDeltaY[0] ) ) + if (F32_LOWER_EQUAL_0(scan.invDeltaY[0])) return; // find if the major edge is left or right aligned @@ -359,7 +414,7 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = ( temp[0] * temp[3] - temp[1] * temp[2] ) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -381,6 +436,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][0] = a->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][0] = (c->Color[1] - a->Color[1]) * scan.invDeltaY[0]; + scan.c[1][0] = a->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; scan.t[0][0] = a->Tex[0]; @@ -400,7 +460,7 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // rasterize upper sub-triangle - if ( F32_GREATER_0(scan.invDeltaY[1]) ) + if (F32_GREATER_0(scan.invDeltaY[1])) { // calculate slopes for top edge scan.slopeX[1] = (b->Pos.x - a->Pos.x) * scan.invDeltaY[1]; @@ -421,6 +481,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][1] = a->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][1] = (b->Color[1] - a->Color[1]) * scan.invDeltaY[1]; + scan.c[1][1] = a->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; scan.t[0][1] = a->Tex[0]; @@ -432,11 +497,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // apply top-left fill convention, top part - yStart = fill_convention_left( a->Pos.y ); - yEnd = fill_convention_right( b->Pos.y ); + yStart = fill_convention_top(a->Pos.y); + yEnd = fill_convention_down(b->Pos.y); #ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - a->Pos.y; + subPixel = ((f32)yStart) - a->Pos.y; // correct to pixel center scan.x[0] += scan.slopeX[0] * subPixel; @@ -457,6 +522,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -470,7 +540,7 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; line.x[scan.right] = scan.x[1]; @@ -490,6 +560,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning line.c[0][scan.right] = scan.c[0][1]; #endif +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -501,8 +576,8 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // render a scanline - interlace_scanline - fragmentShader(); + if_interlace_scanline + fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -522,6 +597,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][1] += scan.slopeC[0][1]; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; @@ -536,10 +616,10 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning } // rasterize lower sub-triangle - if ( F32_GREATER_0(scan.invDeltaY[2]) ) + if (F32_GREATER_0(scan.invDeltaY[2])) { // advance to middle point - if( F32_GREATER_0(scan.invDeltaY[1]) ) + if (F32_GREATER_0(scan.invDeltaY[1])) { temp[0] = b->Pos.y - a->Pos.y; // dy @@ -553,6 +633,9 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #ifdef IPOL_C0 scan.c[0][0] = a->Color[0] + scan.slopeC[0][0] * temp[0]; #endif +#ifdef IPOL_C1 + scan.c[1][0] = a->Color[1] + scan.slopeC[1][0] * temp[0]; +#endif #ifdef IPOL_T0 scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; #endif @@ -581,6 +664,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][1] = b->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][1] = (c->Color[1] - b->Color[1]) * scan.invDeltaY[2]; + scan.c[1][1] = b->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; scan.t[0][1] = b->Tex[0]; @@ -592,12 +680,12 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // apply top-left fill convention, top part - yStart = fill_convention_left( b->Pos.y ); - yEnd = fill_convention_right( c->Pos.y ); + yStart = fill_convention_top(b->Pos.y); + yEnd = fill_convention_down(c->Pos.y); #ifdef SUBTEXEL - subPixel = ( (f32) yStart ) - b->Pos.y; + subPixel = ((f32)yStart) - b->Pos.y; // correct to pixel center scan.x[0] += scan.slopeX[0] * subPixel; @@ -618,6 +706,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -631,7 +724,7 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // rasterize the edge scanlines - for( line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) + for (line.y = yStart; line.y <= yEnd; line.y += SOFTWARE_DRIVER_2_STEP_Y) { line.x[scan.left] = scan.x[0]; line.x[scan.right] = scan.x[1]; @@ -651,6 +744,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning line.c[0][scan.right] = scan.c[0][1]; #endif +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -662,8 +760,8 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning #endif // render a scanline - interlace_scanline - fragmentShader(); + if_interlace_scanline + fragmentShader(); scan.x[0] += scan.slopeX[0]; scan.x[1] += scan.slopeX[1]; @@ -683,6 +781,11 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning scan.c[0][1] += scan.slopeC[0][1]; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; @@ -699,33 +802,27 @@ void CTR_transparent_reflection_2_layer::drawTriangle ( const s4DVertex* burning } -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ -namespace irr -{ -namespace video -{ +burning_namespace_start //! creates a flat triangle renderer IBurningShader* createTriangleRendererTexture_transparent_reflection_2_layer(CBurningVideoDriver* driver) { /* - ETR_TRANSPARENT_REFLECTION_2_LAYER + ETR_TRANSPARENT_REFLECTION_2_LAYER Irrlicht EMT_REFLECTION_2_LAYER,EMT_TRANSPARENT_REFLECTION_2_LAYER */ - #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ return new CTR_transparent_reflection_2_layer(driver); - #else +#else return 0; - #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ } -} // end namespace video -} // end namespace irr - +burning_namespace_end diff --git a/source/Irrlicht/CTextSceneNode.cpp b/source/Irrlicht/CTextSceneNode.cpp index 131c9184..10f47c76 100644 --- a/source/Irrlicht/CTextSceneNode.cpp +++ b/source/Irrlicht/CTextSceneNode.cpp @@ -215,8 +215,9 @@ void CBillboardTextSceneNode::setText(const wchar_t* text) u32 rectno = sprites[spriteno].Frames[0].rectNumber; u32 texno = sprites[spriteno].Frames[0].textureNumber; - dim[0] = core::reciprocal ( (f32) Font->getSpriteBank()->getTexture(texno)->getSize().Width ); - dim[1] = core::reciprocal ( (f32) Font->getSpriteBank()->getTexture(texno)->getSize().Height ); + const core::dimension2d& texSize = Font->getSpriteBank()->getTexture(texno)->getOriginalSize(); + dim[0] = core::reciprocal((f32)texSize.Width); + dim[1] = core::reciprocal((f32)texSize.Height); const core::rect& s = sourceRects[rectno]; diff --git a/source/Irrlicht/IBurningShader.cpp b/source/Irrlicht/IBurningShader.cpp index 640bf9b2..56d3359e 100644 --- a/source/Irrlicht/IBurningShader.cpp +++ b/source/Irrlicht/IBurningShader.cpp @@ -10,10 +10,7 @@ #include "CSoftwareDriver2.h" #include "IShaderConstantSetCallBack.h" -namespace irr -{ -namespace video -{ +burning_namespace_start const tFixPointu IBurningShader::dithermask[] = { @@ -23,14 +20,14 @@ const tFixPointu IBurningShader::dithermask[] = 0xf0,0x70,0xd0,0x50 }; -void IBurningShader::constructor_IBurningShader(CBurningVideoDriver* driver) +void IBurningShader::constructor_IBurningShader(CBurningVideoDriver* driver, E_MATERIAL_TYPE baseMaterial) { #ifdef _DEBUG setDebugName("IBurningShader"); #endif #if defined(ENV64BIT) - if (((unsigned long long)&scan & 15) || ((unsigned long long)&line & 15)) + if (((unsigned long long) & scan & 15) || ((unsigned long long) & line & 15)) { os::Printer::log("BurningVideo Shader not 16 byte aligned", ELL_ERROR); IRR_DEBUG_BREAK_IF(1); @@ -42,7 +39,6 @@ void IBurningShader::constructor_IBurningShader(CBurningVideoDriver* driver) Interlaced.nr = 0; EdgeTestPass = edge_test_pass; - EdgeTestPass_stack = edge_test_pass; for (u32 i = 0; i < BURNING_MATERIAL_MAX_TEXTURES; ++i) { @@ -66,14 +62,37 @@ void IBurningShader::constructor_IBurningShader(CBurningVideoDriver* driver) stencilOp[1] = StencilOp_KEEP; stencilOp[2] = StencilOp_KEEP; AlphaRef = 0; - RenderPass_ShaderIsTransparent = 0; PrimitiveColor = COLOR_BRIGHT_WHITE; TL_Flag = 0; + fragment_draw_count = 0; + VertexShaderProgram_buildin = BVT_Fix; + + //set default Transparent/Solid + BaseMaterial = baseMaterial; + switch (BaseMaterial) + { + case EMT_TRANSPARENT_ADD_COLOR: + case EMT_TRANSPARENT_ALPHA_CHANNEL: + case EMT_TRANSPARENT_ALPHA_CHANNEL_REF: + case EMT_TRANSPARENT_VERTEX_ALPHA: + case EMT_TRANSPARENT_REFLECTION_2_LAYER: + case EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR: + case EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA: + case EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR: + case EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA: + case EMT_ONETEXTURE_BLEND: + RenderPass_ShaderIsTransparent = 1; + break; + default: + RenderPass_ShaderIsTransparent = 0; + break; + } + } -IBurningShader::IBurningShader(CBurningVideoDriver* driver) +IBurningShader::IBurningShader(CBurningVideoDriver* driver,E_MATERIAL_TYPE baseMaterial) { - constructor_IBurningShader(driver); + constructor_IBurningShader(driver, baseMaterial); } //! Constructor @@ -96,15 +115,55 @@ IBurningShader::IBurningShader( E_MATERIAL_TYPE baseMaterial, s32 userData) { - constructor_IBurningShader(driver); - BaseMaterial = baseMaterial; + constructor_IBurningShader(driver, baseMaterial); UserData = userData; CallBack = callback; if (CallBack) CallBack->grab(); + + //v0.53 compile. only buildin + const c8* ip = vertexShaderProgram; + unsigned hash = 0; + unsigned len = 0; + if (ip) + { + while (ip[len]) + { + hash = ip[len] + (hash << 6) + (hash << 16) - hash; + len += 1; + } + } + + if (len == 815 && hash == 0x1f847599) VertexShaderProgram_buildin = BVT_815_0x1f847599; /* pp_opengl.vert */ + else if (len == 1100 && hash == 0x12c79d1c) VertexShaderProgram_buildin = BVT_opengl_vsh_shaderexample; /*opengl.vert */ + else if (len == 1259 && hash == 0xc8226e1a) VertexShaderProgram_buildin = STK_1259_0xc8226e1a; /* supertuxkart bubble.vert */ + else if (len == 958 && hash == 0xa048973b) VertexShaderProgram_buildin = STK_958_0xa048973b; /* supertuxkart motion_blur.vert */ + else if (len == 1309 && hash == 0x1fd689c2) VertexShaderProgram_buildin = STK_1309_0x1fd689c2; /* supertuxkart normalmap.vert */ + else if (len == 1204 && hash == 0x072a4094) VertexShaderProgram_buildin = STK_1204_0x072a4094; /* supertuxkart splatting.vert */ + else if (len == 1303 && hash == 0xd872cdb6) VertexShaderProgram_buildin = STK_1303_0xd872cdb6; /* supertuxkart water.vert */ + + + //VertexShaderProgram = vertexShaderProgram; + //PixelShaderProgram = pixelShaderProgram; + // register myself as new material outMaterialTypeNr = Driver->addMaterialRenderer(this); + + //save info +#if 0 + static int run = 0; + FILE* f = fopen("shader_id.txt", run ? "a" : "wb"); + if (f) + { + fprintf(f, "--- start outMaterialTypeNr:%d len:%d hash: 0x%08x buildIn:%d\n" + , outMaterialTypeNr, len, hash, VertexShaderProgram_buildin); + fprintf(f, "%s", vertexShaderProgram); + fprintf(f, "\n-------------- end ---------------------------\n"); + fclose(f); + } + run += 1; +#endif } @@ -139,7 +198,7 @@ void IBurningShader::setRenderTarget(video::IImage* surface, const core::rectdrop(); - RenderTarget = (video::CImage*) surface; + RenderTarget = (video::CImage*)surface; if (RenderTarget) { @@ -156,7 +215,9 @@ void IBurningShader::setTextureParam(const size_t stage, video::CSoftwareTexture sInternalTexture* it = &IT[stage]; if (it->Texture) + { it->Texture->drop(); + } it->Texture = texture; @@ -212,9 +273,12 @@ void IBurningShader::drawPoint(const s4DVertex* a) { } -void IBurningShader::drawWireFrameTriangle(const s4DVertex* a, const s4DVertex* b, const s4DVertex* c) +void IBurningShader::drawWireFrameTriangle(s4DVertex* a, s4DVertex* b, s4DVertex* c) { - if (EdgeTestPass & edge_test_pass) drawTriangle(a, b, c); + if (EdgeTestPass & edge_test_pass) + { + drawTriangle(a, b, c); + } else if (EdgeTestPass & edge_test_point) { drawPoint(a); @@ -234,7 +298,7 @@ void IBurningShader::OnSetMaterial(const SMaterial& material, const SMaterial& l bool resetAllRenderstates, IMaterialRendererServices* services) { if (Driver) - Driver->setFallback_Material(BaseMaterial); + Driver->setFallback_Material(BaseMaterial, VertexShaderProgram_buildin); services->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); if (CallBack) CallBack->OnSetMaterial(material); @@ -243,6 +307,7 @@ void IBurningShader::OnSetMaterial(const SMaterial& material, const SMaterial& l void IBurningShader::OnUnsetMaterial() { + //restore previous state } bool IBurningShader::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) @@ -273,6 +338,22 @@ void IBurningShader::setBasicRenderStates(const SMaterial& material, const SMate Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); } +static BurningUniform _empty = { "null",BL_VERTEX_FLOAT,{0.f,0.f,0.f,0.f} }; +const f32* IBurningShader::getUniform(const c8* name, EBurningUniformFlags flags) const +{ + const size_t size = UniformInfo.size(); + if (size && name && name[0]) + { + const BurningUniform* b = &UniformInfo[0]; + for (size_t i = 0; i < size; ++i) + { + if (tiny_istoken(b[i].name, name)) + return b[i].data; + } + } + return _empty.data; +} + s32 IBurningShader::getShaderConstantID(EBurningUniformFlags flags, const c8* name) { if (!name || !name[0]) @@ -315,15 +396,6 @@ bool IBurningShader::setShaderConstantID(EBurningUniformFlags flags, s32 index, { if ((u32)index >= UniformInfo.size()) return false; -#if 0 - BurningUniform add; - while ((u32)index >= UniformInfo.size()) - { - tiny_strcpy(add.name, tiny_itoa(UniformInfo.size(), 10)); - add.type = flags; - UniformInfo.push_back(add); - } -#endif BurningUniform& use = UniformInfo[index]; use.type = flags; @@ -357,7 +429,7 @@ void IBurningShader::setVertexShaderConstant(const f32* data, s32 startRegister, c8 name[BL_ACTIVE_UNIFORM_MAX_LENGTH]; tiny_strcpy(name, tiny_itoa(startRegister, 10)); - setShaderConstantID(BL_VERTEX_FLOAT, getShaderConstantID(BL_VERTEX_PROGRAM, name), data, constantAmount); + setShaderConstantID(BL_VERTEX_FLOAT, getShaderConstantID(BL_VERTEX_PROGRAM, name), data, constantAmount*4); } void IBurningShader::setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount) @@ -365,7 +437,7 @@ void IBurningShader::setPixelShaderConstant(const f32* data, s32 startRegister, c8 name[BL_ACTIVE_UNIFORM_MAX_LENGTH]; tiny_strcpy(name, tiny_itoa(startRegister, 10)); - setShaderConstantID(BL_FRAGMENT_FLOAT, getShaderConstantID(BL_FRAGMENT_PROGRAM, name), data, constantAmount); + setShaderConstantID(BL_FRAGMENT_FLOAT, getShaderConstantID(BL_FRAGMENT_PROGRAM, name), data, constantAmount*4); } bool IBurningShader::setVertexShaderConstant(s32 index, const f32* floats, int count) @@ -405,6 +477,27 @@ void IBurningShader::setStencilOp(eBurningStencilOp sfail, eBurningStencilOp dpf stencilOp[2] = dppass; } +void PushShaderData::push(IBurningShader* shader) +{ + CurrentShader = shader; + if (shader) shader->pushShader(this,1); +} +void PushShaderData::pop() +{ + if (CurrentShader) CurrentShader->pushShader(this, 0); +} + +void IBurningShader::pushShader(PushShaderData* data, int save) +{ + if (save) + { + data->EdgeTestPass = EdgeTestPass; + } + else + { + EdgeTestPass = data->EdgeTestPass; + } +} IVideoDriver* IBurningShader::getVideoDriver() { @@ -412,7 +505,6 @@ IVideoDriver* IBurningShader::getVideoDriver() } -} // end namespace video -} // end namespace irr +burning_namespace_end #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_ diff --git a/source/Irrlicht/IBurningShader.h b/source/Irrlicht/IBurningShader.h index 085df702..c19fdc7e 100644 --- a/source/Irrlicht/IBurningShader.h +++ b/source/Irrlicht/IBurningShader.h @@ -8,7 +8,6 @@ #include "SoftwareDriver2_compile_config.h" #include "IReferenceCounted.h" #include "irrMath.h" -//#include "irrMathFastCompat.h" #include "IImage.h" #include "S2DVertex.h" #include "rect.h" @@ -21,422 +20,479 @@ #include "IMaterialRenderer.h" #include "IMaterialRendererServices.h" #include "IGPUProgrammingServices.h" +#include "IShaderConstantSetCallBack.h" -namespace irr +burning_namespace_start + +struct SBurningShaderLight { + //SLight org; + //s32 HardwareLightIndex; + sVec4 pos; //light position input + sVec4 pos4; //light position Model*View (Identity*View) + //sVec4 pos4n; //Norm direction to infinite light = Normalize( Position ) + //sVec4 halfVector; //Norm( VP_inf_norm + <0,0,1> ) -namespace video + E_LIGHT_TYPE Type; + f32 linearAttenuation; + f32 constantAttenuation; + f32 quadraticAttenuation; + + sVec4 spotDirection; + sVec4 spotDirection4; + f32 spotCosCutoff; + f32 spotCosInnerCutoff; + f32 spotExponent; + bool LightIsOn; + + sVec3Color AmbientColor; + sVec3Color DiffuseColor; + sVec3Color SpecularColor; + + //normal,parallax + sVec4 pos_local; //modelinverse + f32 nmap_linearAttenuation; + + SBurningShaderLight() + { + LightIsOn = false; + } +}; + +enum eTransformLightFlags { + //ENABLED = 0x01, + TL_SCISSOR = 0x02, + TL_LIGHT = 0x04, + TL_SPECULAR = 0x08, + TL_FOG = 0x10, + TL_NORMALIZE_NORMALS = 0x20, + TL_TEXTURE_TRANSFORM = 0x40, // need eyespace matrices + TL_LIGHT_LOCAL_VIEWER = 0x80, + TL_LIGHT0_IS_NORMAL_MAP = 0x100, // sVec4 Light Vector is used as normal or specular - struct SBurningShaderLight + TL_COLORMAT_AMBIENT = 0x200, + TL_COLORMAT_DIFFUSE = 0x400, + TL_COLORMAT_SPECULAR = 0x800, + +}; + +struct SBurningShaderEyeSpace +{ + SBurningShaderEyeSpace() {} + virtual ~SBurningShaderEyeSpace() {} + void init() { - //SLight org; + Light.set_used(0); + Global_AmbientLight.set(0.2f,0.2f,0.2f,1.f); - sVec4 pos; //light position input - sVec4 pos4; //light position Model*View (Identity*View) - - E_LIGHT_TYPE Type; - f32 linearAttenuation; - f32 constantAttenuation; - f32 quadraticAttenuation; - - sVec4 spotDirection; - sVec4 spotDirection4; - f32 spotCosCutoff; - f32 spotCosInnerCutoff; - f32 spotExponent; - bool LightIsOn; - - sVec3Color AmbientColor; - sVec3Color DiffuseColor; - sVec3Color SpecularColor; - }; - - enum eTransformLightFlags + fog_scale = 0.f; + TL_Flag = TL_LIGHT_LOCAL_VIEWER; + } + void deleteAllDynamicLights() { - //ENABLED = 0x01, - TL_SCISSOR = 0x02, - TL_LIGHT = 0x04, - TL_SPECULAR = 0x08, - TL_FOG = 0x10, - TL_NORMALIZE_NORMALS = 0x20, - TL_TEXTURE_TRANSFORM = 0x40, - TL_LIGHT_LOCAL_VIEWER = 0x80, - TL_LIGHT0_IS_NORMAL_MAP = 0x100 //sVec4 Light Vector is used as normal or specular - }; + Light.set_used(0); + TL_Flag &= ~(TL_LIGHT | TL_SPECULAR); + } - struct SBurningShaderEyeSpace + core::array Light; + sVec3Color Global_AmbientLight; + + //sVec4 cam_eye_pos; //Camera Position in eye Space (0,0,-1) + //sVec4 cam_world_pos; //Camera Position in world Space + //sVec4 vertex4; //eye coordinate position of vertex + sVec4 normal; // normal in eye space,transpose(inverse(mat3(mv_matrix)); gl_NormalMatrix + sVec4 vertex; //eye coordinate position of vertex projected + + //derivative of vertex + //f32 cam_distance; // vertex.length(); + sVec4 vertexn; //vertex.normalize(); eye = -vertex.normalize() + + f32 fog_scale; // 1 / (fog.end-fog.start) + + size_t TL_Flag; // eTransformLightFlags + + // objectspace + core::matrix4 mvi; // inverse Model*View + sVec4 leye; //eye vector unprojected +}; + +enum eBurningCullFlag +{ + CULL_FRONT = 1, + CULL_BACK = 2, + CULL_INVISIBLE = 4, //primitive smaller than a pixel (AreaMinDrawSize) + CULL_FRONT_AND_BACK = 8, + + CULL_EPSILON_001 = 981668463, /*0.001f*/ + CULL_EPSILON_00001 = 925353388, /* 0.00001f*/ + CULL_EPSILON_01 = 0x3e000000 /*0.125f*/ + +}; + +enum eBurningStencilOp +{ + StencilOp_KEEP = 0x1E00, + StencilOp_INCR = 0x1E02, + StencilOp_DECR = 0x1E03 +}; + +enum eBurningVertexShader +{ + BVT_Fix = 0, + BVT_815_0x1f847599, /* example 27 pp_opengl.vert */ + BVT_opengl_vsh_shaderexample, + + STK_1259_0xc8226e1a, /* supertuxkart bubble.vert */ + STK_958_0xa048973b, /* supertuxkart motion_blur.vert */ + STK_1204_0x072a4094, /* supertuxkart splatting.vert */ + STK_1309_0x1fd689c2, /* supertuxkart normalmap.vert */ + STK_1303_0xd872cdb6, /* supertuxkart water.vert */ +}; + +struct SBurningShaderMaterial +{ + SMaterial org; + SMaterial lastMaterial; + bool resetRenderStates; + + E_MATERIAL_TYPE Fallback_MaterialType; + eBurningVertexShader VertexShader; + + SMaterial mat2D; + //SMaterial save3D; + + size_t CullFlag; //eCullFlag + u32 depth_write; + u32 depth_test; + + sVec4 AmbientColor; + sVec4 DiffuseColor; + sVec4 SpecularColor; + sVec4 EmissiveColor; + +}; + +enum EBurningFFShader +{ + ETR_FLAT = 0, + ETR_FLAT_WIRE, + ETR_GOURAUD, + ETR_GOURAUD_WIRE, + ETR_TEXTURE_FLAT, + ETR_TEXTURE_FLAT_WIRE, + ETR_TEXTURE_GOURAUD, + ETR_TEXTURE_GOURAUD_WIRE, + ETR_TEXTURE_GOURAUD_NOZ, + ETR_TEXTURE_GOURAUD_ADD, + ETR_TEXTURE_GOURAUD_ADD_NO_Z, + + ETR_TEXTURE_GOURAUD_VERTEX_ALPHA, + + ETR_TEXTURE_GOURAUD_LIGHTMAP_M1, + ETR_TEXTURE_GOURAUD_LIGHTMAP_M2, + ETR_TEXTURE_GOURAUD_LIGHTMAP_M4, + ETR_TEXTURE_LIGHTMAP_M4, + + ETR_TEXTURE_GOURAUD_DETAIL_MAP, + ETR_TEXTURE_GOURAUD_LIGHTMAP_ADD, + + ETR_GOURAUD_NOZ, + //ETR_GOURAUD_ALPHA, + ETR_GOURAUD_ALPHA_NOZ, + + ETR_TEXTURE_GOURAUD_ALPHA, + ETR_TEXTURE_GOURAUD_ALPHA_NOZ, + ETR_TEXTURE_GOURAUD_ALPHA_NOZ_NOPERSPECTIVE_CORRECT, + + ETR_NORMAL_MAP_SOLID, + ETR_PARALLAX_MAP_SOLID, + ETR_STENCIL_SHADOW, + + ETR_TEXTURE_BLEND, + ETR_TRANSPARENT_REFLECTION_2_LAYER, + + ETR_COLOR, + + //ETR_REFERENCE, + ETR_INVALID, + + ETR2_COUNT +}; + +typedef enum +{ + BL_VERTEX_PROGRAM = 1, + BL_FRAGMENT_PROGRAM = 2, + BL_TYPE_FLOAT = 4, + BL_TYPE_INT = 8, + BL_TYPE_UINT = 16, + + BL_VERTEX_FLOAT = (BL_VERTEX_PROGRAM | BL_TYPE_FLOAT), + BL_VERTEX_INT = (BL_VERTEX_PROGRAM | BL_TYPE_INT), + BL_VERTEX_UINT = (BL_VERTEX_PROGRAM | BL_TYPE_UINT), + BL_FRAGMENT_FLOAT = (BL_FRAGMENT_PROGRAM | BL_TYPE_FLOAT), + BL_FRAGMENT_INT = (BL_FRAGMENT_PROGRAM | BL_TYPE_INT), + BL_FRAGMENT_UINT = (BL_FRAGMENT_PROGRAM | BL_TYPE_UINT), + + BL_ACTIVE_UNIFORM_MAX_LENGTH = 28 +} EBurningUniformFlags; + +struct BurningUniform +{ + c8 name[BL_ACTIVE_UNIFORM_MAX_LENGTH]; + u32 type; //EBurningUniformFlags + //int location; // UniformLocation is index + f32 data[16]; // simple LocalParameter + + bool operator==(const BurningUniform& other) const { - SBurningShaderEyeSpace() {} - virtual ~SBurningShaderEyeSpace() {} - void reset () - { - Light.set_used ( 0 ); - Global_AmbientLight.set ( 0.f ); + return ((type & 3) == (other.type & 3)) && tiny_istoken(name, other.name); + } - TL_Flag = TL_LIGHT_LOCAL_VIEWER; - } - void resetFog() - { - fog_scale = 0.f; - //cam_distance = 0.f; - } +}; - core::array Light; - sVec3Color Global_AmbientLight; +class IBurningShader; +struct PushShaderData +{ + IBurningShader* CurrentShader; + size_t EdgeTestPass; /* edge_test_flag*/ + void push(IBurningShader* shader); + void pop(); +}; - //sVec4 cam_eye_pos; //Camera Position in eye Space (0,0,-1) - //sVec4 cam_world_pos; //Camera Position in world Space - //sVec4 vertex4; //eye coordinate position of vertex - sVec4 normal; //transformed normal - sVec4 vertex; //eye coordinate position of vertex projected +class CBurningVideoDriver; +class IBurningShader : public IMaterialRenderer, public IMaterialRendererServices, public IShaderConstantSetCallBack +{ +public: + //! Constructor + IBurningShader(CBurningVideoDriver* driver, E_MATERIAL_TYPE baseMaterial ); - //derivative of vertex - //f32 cam_distance; // vertex.length(); - sVec4 cam_dir; //vertex.normalize(); + //! Constructor + IBurningShader( + CBurningVideoDriver* driver, + s32& outMaterialTypeNr, + const c8* vertexShaderProgram = 0, + const c8* vertexShaderEntryPointName = 0, + E_VERTEX_SHADER_TYPE vsCompileTarget = video::EVST_VS_1_1, + const c8* pixelShaderProgram = 0, + const c8* pixelShaderEntryPointName = 0, + E_PIXEL_SHADER_TYPE psCompileTarget = video::EPST_PS_1_1, + const c8* geometryShaderProgram = 0, + const c8* geometryShaderEntryPointName = "main", + E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0, + scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, + scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, + u32 verticesOut = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = EMT_SOLID, + s32 userData = 0); - f32 fog_scale; // 1 / (fog.end-fog.start) + //! destructor + virtual ~IBurningShader(); - size_t TL_Flag; // eTransformLightFlags - }; + //! sets a render target + virtual void setRenderTarget(video::IImage* surface, const core::rect& viewPort, const interlaced_control interlaced); - enum eBurningCullFlag + //! sets the Texture + virtual void setTextureParam(const size_t stage, video::CSoftwareTexture2* texture, s32 lodFactor); + virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) {}; + virtual void drawLine(const s4DVertex* a, const s4DVertex* b); + virtual void drawPoint(const s4DVertex* a); + + void drawWireFrameTriangle(s4DVertex* a, s4DVertex* b, s4DVertex* c); + + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) {}; + + void setEdgeTest(const int wireFrame, const int pointCloud) { - CULL_FRONT = 1, - CULL_BACK = 2, - CULL_INVISIBLE = 4, //primitive smaller than a pixel (AreaMinDrawSize) - CULL_FRONT_AND_BACK = 8, - }; + EdgeTestPass = pointCloud ? edge_test_point : wireFrame ? edge_test_left : edge_test_pass; + } - enum eBurningStencilOp - { - StencilOp_KEEP = 0x1E00, - StencilOp_INCR = 0x1E02, - StencilOp_DECR = 0x1E03 - }; + void pushShader(PushShaderData* data, int save); + virtual bool canWireFrame() { return false; } + virtual bool canPointCloud() { return false; } - struct SBurningShaderMaterial - { - SMaterial org; - SMaterial lastMaterial; - bool resetRenderStates; + void setStencilOp(eBurningStencilOp sfail, eBurningStencilOp dpfail, eBurningStencilOp dppass); - E_MATERIAL_TYPE Fallback_MaterialType; + //IShaderConstantSetCallBack + virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) IRR_OVERRIDE {}; + virtual void OnSetMaterial(const SMaterial& material) IRR_OVERRIDE { } - SMaterial mat2D; - //SMaterial save3D; + //IMaterialRenderer + virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, + bool resetAllRenderstates, IMaterialRendererServices* services) IRR_OVERRIDE; - size_t CullFlag; //eCullFlag - u32 depth_write; - u32 depth_test; + virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) IRR_OVERRIDE; - sVec3Color AmbientColor; - sVec3Color DiffuseColor; - sVec3Color SpecularColor; - sVec3Color EmissiveColor; + virtual void OnUnsetMaterial() IRR_OVERRIDE; - }; + //! Returns if the material is transparent. + virtual bool isTransparent() const IRR_OVERRIDE; - enum EBurningFFShader - { - ETR_FLAT = 0, - ETR_FLAT_WIRE, - ETR_GOURAUD, - ETR_GOURAUD_WIRE, - ETR_TEXTURE_FLAT, - ETR_TEXTURE_FLAT_WIRE, - ETR_TEXTURE_GOURAUD, - ETR_TEXTURE_GOURAUD_WIRE, - ETR_TEXTURE_GOURAUD_NOZ, - ETR_TEXTURE_GOURAUD_ADD, - ETR_TEXTURE_GOURAUD_ADD_NO_Z, + //! Access the callback provided by the users when creating shader materials + virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const IRR_OVERRIDE; - ETR_TEXTURE_GOURAUD_VERTEX_ALPHA, - - ETR_TEXTURE_GOURAUD_LIGHTMAP_M1, - ETR_TEXTURE_GOURAUD_LIGHTMAP_M2, - ETR_TEXTURE_GOURAUD_LIGHTMAP_M4, - ETR_TEXTURE_LIGHTMAP_M4, - - ETR_TEXTURE_GOURAUD_DETAIL_MAP, - ETR_TEXTURE_GOURAUD_LIGHTMAP_ADD, - - ETR_GOURAUD_NOZ, - //ETR_GOURAUD_ALPHA, - ETR_GOURAUD_ALPHA_NOZ, - - ETR_TEXTURE_GOURAUD_ALPHA, - ETR_TEXTURE_GOURAUD_ALPHA_NOZ, - ETR_TEXTURE_GOURAUD_ALPHA_NOZ_NOPERSPECTIVE_CORRECT, - - ETR_NORMAL_MAP_SOLID, - ETR_STENCIL_SHADOW, - - ETR_TEXTURE_BLEND, - ETR_TRANSPARENT_REFLECTION_2_LAYER, - - ETR_COLOR, - - //ETR_REFERENCE, - ETR_INVALID, - - ETR2_COUNT - }; - - typedef enum - { - BL_VERTEX_PROGRAM = 1, - BL_FRAGMENT_PROGRAM = 2, - BL_TYPE_FLOAT = 4, - BL_TYPE_INT = 8, - BL_TYPE_UINT = 16, - - BL_VERTEX_FLOAT = (BL_VERTEX_PROGRAM | BL_TYPE_FLOAT), - BL_VERTEX_INT = (BL_VERTEX_PROGRAM | BL_TYPE_INT), - BL_VERTEX_UINT = (BL_VERTEX_PROGRAM | BL_TYPE_UINT), - BL_FRAGMENT_FLOAT = (BL_FRAGMENT_PROGRAM | BL_TYPE_FLOAT), - BL_FRAGMENT_INT = (BL_FRAGMENT_PROGRAM | BL_TYPE_INT), - BL_FRAGMENT_UINT = (BL_FRAGMENT_PROGRAM | BL_TYPE_UINT), - - BL_ACTIVE_UNIFORM_MAX_LENGTH = 28 - } EBurningUniformFlags; - - struct BurningUniform - { - c8 name[BL_ACTIVE_UNIFORM_MAX_LENGTH]; - u32 type; //EBurningUniformFlags - //int location; // UniformLocation is index - f32 data[16]; // simple LocalParameter - - bool operator==(const BurningUniform& other) const - { - return tiny_istoken(name, other.name); - } - - }; - - class CBurningVideoDriver; - class IBurningShader : public IMaterialRenderer, public IMaterialRendererServices - { - public: - //! Constructor - IBurningShader(CBurningVideoDriver* driver); - - //! Constructor - IBurningShader( - CBurningVideoDriver* driver, - s32& outMaterialTypeNr, - const c8* vertexShaderProgram = 0, - const c8* vertexShaderEntryPointName = 0, - E_VERTEX_SHADER_TYPE vsCompileTarget = video::EVST_VS_1_1, - const c8* pixelShaderProgram = 0, - const c8* pixelShaderEntryPointName = 0, - E_PIXEL_SHADER_TYPE psCompileTarget = video::EPST_PS_1_1, - const c8* geometryShaderProgram = 0, - const c8* geometryShaderEntryPointName = "main", - E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0, - scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, - scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, - u32 verticesOut = 0, - IShaderConstantSetCallBack* callback = 0, - E_MATERIAL_TYPE baseMaterial = EMT_SOLID, - s32 userData = 0); - - //! destructor - virtual ~IBurningShader(); - - //! sets a render target - virtual void setRenderTarget(video::IImage* surface, const core::rect& viewPort, const interlaced_control interlaced); - - //! sets the Texture - virtual void setTextureParam( const size_t stage, video::CSoftwareTexture2* texture, s32 lodFactor); - virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) {}; - virtual void drawLine ( const s4DVertex *a,const s4DVertex *b); - virtual void drawPoint(const s4DVertex *a); - - void drawWireFrameTriangle ( const s4DVertex *a,const s4DVertex *b,const s4DVertex *c ); - - virtual void OnSetMaterial( const SBurningShaderMaterial& material ) {}; - - void pushEdgeTest(const int wireFrame,const int point,int save) - { - if ( save ) EdgeTestPass_stack = EdgeTestPass; - EdgeTestPass = point ? edge_test_point : wireFrame ? edge_test_left : edge_test_pass; - } - void popEdgeTest() { EdgeTestPass = EdgeTestPass_stack; } - virtual bool canWireFrame () { return false; } - virtual bool canPointCloud() { return false; } - - void setStencilOp(eBurningStencilOp sfail, eBurningStencilOp dpfail, eBurningStencilOp dppass); - - //IMaterialRenderer - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) IRR_OVERRIDE; - - virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) IRR_OVERRIDE; - - virtual void OnUnsetMaterial() IRR_OVERRIDE; - - //! Returns if the material is transparent. - virtual bool isTransparent() const IRR_OVERRIDE; - - //! Access the callback provided by the users when creating shader materials - virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const IRR_OVERRIDE; - - // implementations for the render services - virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates) IRR_OVERRIDE; - virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE; - virtual s32 getPixelShaderConstantID(const c8* name) IRR_OVERRIDE; - virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount = 1) IRR_OVERRIDE; - virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount = 1) IRR_OVERRIDE; - virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) IRR_OVERRIDE; - virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) IRR_OVERRIDE; - virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) IRR_OVERRIDE; - virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) IRR_OVERRIDE; - virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) IRR_OVERRIDE; - virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) IRR_OVERRIDE; - virtual IVideoDriver* getVideoDriver() IRR_OVERRIDE; + // implementations for the render services + virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates) IRR_OVERRIDE; + virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE; + virtual s32 getPixelShaderConstantID(const c8* name) IRR_OVERRIDE; + virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount = 1) IRR_OVERRIDE; + virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount = 1) IRR_OVERRIDE; + virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) IRR_OVERRIDE; + virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) IRR_OVERRIDE; + virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) IRR_OVERRIDE; + virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) IRR_OVERRIDE; + virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) IRR_OVERRIDE; + virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) IRR_OVERRIDE; + virtual IVideoDriver* getVideoDriver() IRR_OVERRIDE; #if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) - virtual bool setVertexShaderConstant(const c8* name, const f32* floats, int count) - { - return setVertexShaderConstant(getVertexShaderConstantID(name), floats, count); - } - virtual bool setVertexShaderConstant(const c8* name, const bool* bools, int count) - { - return setVertexShaderConstant(getVertexShaderConstantID(name), (const s32*)bools, count); - } - virtual bool setVertexShaderConstant(const c8* name, const s32* ints, int count) - { - return setVertexShaderConstant(getVertexShaderConstantID(name), ints, count); - } + virtual bool setVertexShaderConstant(const c8* name, const f32* floats, int count) + { + return setVertexShaderConstant(getVertexShaderConstantID(name), floats, count); + } + virtual bool setVertexShaderConstant(const c8* name, const bool* bools, int count) + { + return setVertexShaderConstant(getVertexShaderConstantID(name), (const s32*)bools, count); + } + virtual bool setVertexShaderConstant(const c8* name, const s32* ints, int count) + { + return setVertexShaderConstant(getVertexShaderConstantID(name), ints, count); + } - virtual bool setPixelShaderConstant(const c8* name, const f32* floats, int count) - { - return setPixelShaderConstant(getPixelShaderConstantID(name), floats, count); - } - virtual bool setPixelShaderConstant(const c8* name, const bool* bools, int count) - { - return setPixelShaderConstant(getPixelShaderConstantID(name), (const s32*)bools, count); - } - virtual bool setPixelShaderConstant(const c8* name, const s32* ints, int count) - { - return setPixelShaderConstant(getPixelShaderConstantID(name), ints, count); - } + virtual bool setPixelShaderConstant(const c8* name, const f32* floats, int count) + { + return setPixelShaderConstant(getPixelShaderConstantID(name), floats, count); + } + virtual bool setPixelShaderConstant(const c8* name, const bool* bools, int count) + { + return setPixelShaderConstant(getPixelShaderConstantID(name), (const s32*)bools, count); + } + virtual bool setPixelShaderConstant(const c8* name, const s32* ints, int count) + { + return setPixelShaderConstant(getPixelShaderConstantID(name), ints, count); + } #endif - //used if no color interpolation is defined - void setPrimitiveColor(const video::SColor& color) - { - PrimitiveColor = color_to_sample(color); - } - void setTLFlag(size_t in /*eTransformLightFlags*/) - { - TL_Flag = in; - } - void setFog(SColor color_fog) - { - fog_color_sample = color_to_sample(color_fog); - color_to_fix(fog_color, fog_color_sample); - } - void setScissor(const AbsRectangle& scissor) - { - Scissor = scissor; - } + //used if no color interpolation is defined + void setPrimitiveColor(const video::SColor& color) + { + PrimitiveColor = color_to_sample(color); + } + void setTLFlag(size_t in /*eTransformLightFlags*/) + { + TL_Flag = in; + } + void setFog(SColor color_fog) + { + fog_color_sample = color_to_sample(color_fog); + color_to_fix(fog_color, fog_color_sample); + } + void setScissor(const AbsRectangle& scissor) + { + Scissor = scissor; + } - protected: + u32 fragment_draw_count; - void constructor_IBurningShader(CBurningVideoDriver* driver); + const f32* getUniform(const c8* name, EBurningUniformFlags flags) const; - CBurningVideoDriver *Driver; - IShaderConstantSetCallBack* CallBack; - E_MATERIAL_TYPE BaseMaterial; - s32 UserData; +protected: + //friend class CBurningVideoDriver; - core::array UniformInfo; - s32 getShaderConstantID(EBurningUniformFlags program, const c8* name); - bool setShaderConstantID(EBurningUniformFlags flags, s32 index, const void* data, size_t u32_count); + void constructor_IBurningShader(CBurningVideoDriver* driver, E_MATERIAL_TYPE baseMaterial); - video::CImage* RenderTarget; - CDepthBuffer* DepthBuffer; - CStencilBuffer* Stencil; - tVideoSample ColorMask; + CBurningVideoDriver* Driver; + IShaderConstantSetCallBack* CallBack; + E_MATERIAL_TYPE BaseMaterial; + s32 UserData; - sInternalTexture IT[ BURNING_MATERIAL_MAX_TEXTURES ]; + core::array UniformInfo; + s32 getShaderConstantID(EBurningUniformFlags program, const c8* name); + bool setShaderConstantID(EBurningUniformFlags flags, s32 index, const void* data, size_t u32_count); - static const tFixPointu dithermask[ 4 * 4]; + video::CImage* RenderTarget; + CDepthBuffer* DepthBuffer; + CStencilBuffer* Stencil; + tVideoSample ColorMask; - //draw degenerate triangle as line (left edge) drawTriangle -> holes,drawLine dda/bresenham - size_t EdgeTestPass; //edge_test_flag - size_t EdgeTestPass_stack; - interlaced_control Interlaced; // passed from driver + sInternalTexture IT[BURNING_MATERIAL_MAX_TEXTURES]; - eBurningStencilOp stencilOp[4]; - tFixPoint AlphaRef; - int RenderPass_ShaderIsTransparent; + static const tFixPointu dithermask[4 * 4]; - sScanConvertData ALIGN(16) scan; - sScanLineData line; - tVideoSample PrimitiveColor; //used if no color interpolation is defined + //draw degenerate triangle as line (left edge) drawTriangle -> holes,drawLine dda/bresenham + size_t EdgeTestPass; //edge_test_flag + interlaced_control Interlaced; // passed from driver - size_t /*eTransformLightFlags*/ TL_Flag; - tFixPoint fog_color[4]; - tVideoSample fog_color_sample; + eBurningStencilOp stencilOp[4]; + tFixPoint AlphaRef; + int RenderPass_ShaderIsTransparent; - AbsRectangle Scissor; + sScanConvertData ALIGN(16) scan; + sScanLineData line; + tVideoSample PrimitiveColor; //used if no color interpolation is defined - inline tVideoSample color_to_sample(const video::SColor& color) const - { - //RenderTarget->getColorFormat() + size_t /*eTransformLightFlags*/ TL_Flag; + tFixPoint fog_color[4]; + tVideoSample fog_color_sample; + + AbsRectangle Scissor; + + //core::stringc VertexShaderProgram; + //core::stringc PixelShaderProgram; + eBurningVertexShader VertexShaderProgram_buildin; + + inline tVideoSample color_to_sample(const video::SColor& color) const + { + //RenderTarget->getColorFormat() #if SOFTWARE_DRIVER_2_RENDERTARGET_COLOR_FORMAT == ECF_A8R8G8B8 - return color.color; + return color.color; #else - return color.toA1R5G5B5(); + return color.toA1R5G5B5(); #endif - } + } - }; +}; - IBurningShader* createTriangleRendererTextureGouraud2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureLightMap2_M1(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureLightMap2_M2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureLightMap2_M4(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererGTextureLightMap2_M4(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureLightMap2_Add(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureDetailMap2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureVertexAlpha2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureGouraud2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureLightMap2_M1(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureLightMap2_M2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureLightMap2_M4(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererGTextureLightMap2_M4(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureLightMap2_Add(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureDetailMap2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureVertexAlpha2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureGouraudWire2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererGouraud2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererGouraudNoZ2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererGouraudAlpha2(CBurningVideoDriver* driver); - IBurningShader* createTRGouraudAlphaNoZ2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererGouraudWire2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureFlat2(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTextureFlatWire2(CBurningVideoDriver* driver); - IBurningShader* createTRFlat2(CBurningVideoDriver* driver); - IBurningShader* createTRFlatWire2(CBurningVideoDriver* driver); - IBurningShader* createTRTextureGouraudNoZ2(CBurningVideoDriver* driver); - IBurningShader* createTRTextureGouraudAdd2(CBurningVideoDriver* driver); - IBurningShader* createTRTextureGouraudAddNoZ2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureGouraudWire2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererGouraud2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererGouraudNoZ2(CBurningVideoDriver* driver); +IBurningShader* createTRGouraudAlphaNoZ2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererGouraudWire2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureFlat2(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTextureFlatWire2(CBurningVideoDriver* driver); +IBurningShader* createTRFlat2(CBurningVideoDriver* driver); +IBurningShader* createTRFlatWire2(CBurningVideoDriver* driver); +IBurningShader* createTRTextureGouraudNoZ2(CBurningVideoDriver* driver); +IBurningShader* createTRTextureGouraudAdd2(CBurningVideoDriver* driver); +IBurningShader* createTRTextureGouraudAddNoZ2(CBurningVideoDriver* driver); - IBurningShader* createTRTextureGouraudAlpha(CBurningVideoDriver* driver); - IBurningShader* createTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver); - IBurningShader* createTRTextureBlend(CBurningVideoDriver* driver); - IBurningShader* createTRTextureInverseAlphaBlend(CBurningVideoDriver* driver); +IBurningShader* createTRTextureGouraudAlpha(CBurningVideoDriver* driver); +IBurningShader* createTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver); +IBurningShader* createTRTextureBlend(CBurningVideoDriver* driver); +IBurningShader* createTRTextureInverseAlphaBlend(CBurningVideoDriver* driver); - IBurningShader* createTRNormalMap(CBurningVideoDriver* driver); - IBurningShader* createTRStencilShadow(CBurningVideoDriver* driver); +IBurningShader* createTRNormalMap(CBurningVideoDriver* driver, s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial); +IBurningShader* createTRParallaxMap(CBurningVideoDriver* driver, s32& outMaterialTypeNr, E_MATERIAL_TYPE baseMaterial); +IBurningShader* createTRStencilShadow(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererReference(CBurningVideoDriver* driver); - IBurningShader* createTriangleRendererTexture_transparent_reflection_2_layer(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererReference(CBurningVideoDriver* driver); +IBurningShader* createTriangleRendererTexture_transparent_reflection_2_layer(CBurningVideoDriver* driver); - IBurningShader* create_burning_shader_color(CBurningVideoDriver* driver); +IBurningShader* create_burning_shader_color(CBurningVideoDriver* driver); -} // end namespace video -} // end namespace irr +burning_namespace_end #endif diff --git a/source/Irrlicht/Irrlicht.xcodeproj/project.pbxproj b/source/Irrlicht/Irrlicht.xcodeproj/project.pbxproj index f6bef7ea..15ef0252 100644 --- a/source/Irrlicht/Irrlicht.xcodeproj/project.pbxproj +++ b/source/Irrlicht/Irrlicht.xcodeproj/project.pbxproj @@ -229,7 +229,6 @@ 5E34CB931B7F6EC500F212E8 /* CSoftwareDriver2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9641B7F6A7600F212E8 /* CSoftwareDriver2.cpp */; }; 5E34CB951B7F6EC500F212E8 /* CSoftwareTexture2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9661B7F6A7600F212E8 /* CSoftwareTexture2.cpp */; }; 5E34CB971B7F6EC500F212E8 /* CTRGouraud2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9681B7F6A7600F212E8 /* CTRGouraud2.cpp */; }; - 5E34CB981B7F6EC500F212E8 /* CTRGouraudAlpha2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9691B7F6A7600F212E8 /* CTRGouraudAlpha2.cpp */; }; 5E34CB991B7F6EC500F212E8 /* CTRGouraudAlphaNoZ2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C96A1B7F6A7600F212E8 /* CTRGouraudAlphaNoZ2.cpp */; }; 5E34CB9A1B7F6EC500F212E8 /* CTRNormalMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C96B1B7F6A7600F212E8 /* CTRNormalMap.cpp */; }; 5E34CB9B1B7F6EC500F212E8 /* CTRStencilShadow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C96C1B7F6A7600F212E8 /* CTRStencilShadow.cpp */; }; @@ -515,7 +514,6 @@ 5E57339A1C18E212003F664E /* CSoftwareDriver2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9641B7F6A7600F212E8 /* CSoftwareDriver2.cpp */; }; 5E57339B1C18E212003F664E /* CSoftwareTexture2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9661B7F6A7600F212E8 /* CSoftwareTexture2.cpp */; }; 5E57339C1C18E212003F664E /* CTRGouraud2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9681B7F6A7600F212E8 /* CTRGouraud2.cpp */; }; - 5E57339D1C18E212003F664E /* CTRGouraudAlpha2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C9691B7F6A7600F212E8 /* CTRGouraudAlpha2.cpp */; }; 5E57339E1C18E212003F664E /* CTRGouraudAlphaNoZ2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C96A1B7F6A7600F212E8 /* CTRGouraudAlphaNoZ2.cpp */; }; 5E57339F1C18E212003F664E /* CTRNormalMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C96B1B7F6A7600F212E8 /* CTRNormalMap.cpp */; }; 5E5733A01C18E212003F664E /* CTRStencilShadow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34C96C1B7F6A7600F212E8 /* CTRStencilShadow.cpp */; }; @@ -593,6 +591,11 @@ 5E79089B1C10FEF900DFE7FE /* CB3DMeshWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7908981C10FE4A00DFE7FE /* CB3DMeshWriter.cpp */; }; 5E8570BC1B7F9AC400B267D2 /* CIrrDeviceConsole.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E8570BA1B7F9AC400B267D2 /* CIrrDeviceConsole.cpp */; }; 5E9573D71C18E9E600C27989 /* CEAGLManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E9573D61C18E9E600C27989 /* CEAGLManager.mm */; }; + 65E74BB3282193B50004CA1D /* CTRParallaxMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65E74BB2282193B40004CA1D /* CTRParallaxMap.cpp */; }; + 842F5F8F2827D4AB00F4106F /* burning_shader_color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A219B6249F82E800E189FC /* burning_shader_color.cpp */; }; + 842F5F902827D4AB00F4106F /* CTR_transparent_reflection_2_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A219BA249F835B00E189FC /* CTR_transparent_reflection_2_layer.cpp */; }; + 842F5F912827D4AB00F4106F /* CTRGouraudNoZ2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A219B8249F834000E189FC /* CTRGouraudNoZ2.cpp */; }; + 843D28262828FA210096D7D0 /* CTRParallaxMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65E74BB2282193B40004CA1D /* CTRParallaxMap.cpp */; }; 84A219B7249F82E800E189FC /* burning_shader_color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A219B6249F82E800E189FC /* burning_shader_color.cpp */; }; 84A219B9249F834000E189FC /* CTRGouraudNoZ2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A219B8249F834000E189FC /* CTRGouraudNoZ2.cpp */; }; 84A219BB249F835B00E189FC /* CTR_transparent_reflection_2_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A219BA249F835B00E189FC /* CTR_transparent_reflection_2_layer.cpp */; }; @@ -1181,7 +1184,6 @@ 5E34C9661B7F6A7600F212E8 /* CSoftwareTexture2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CSoftwareTexture2.cpp; sourceTree = ""; }; 5E34C9671B7F6A7600F212E8 /* CSoftwareTexture2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSoftwareTexture2.h; sourceTree = ""; }; 5E34C9681B7F6A7600F212E8 /* CTRGouraud2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CTRGouraud2.cpp; sourceTree = ""; }; - 5E34C9691B7F6A7600F212E8 /* CTRGouraudAlpha2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CTRGouraudAlpha2.cpp; sourceTree = ""; }; 5E34C96A1B7F6A7600F212E8 /* CTRGouraudAlphaNoZ2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CTRGouraudAlphaNoZ2.cpp; sourceTree = ""; }; 5E34C96B1B7F6A7600F212E8 /* CTRNormalMap.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CTRNormalMap.cpp; sourceTree = ""; }; 5E34C96C1B7F6A7600F212E8 /* CTRStencilShadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CTRStencilShadow.cpp; sourceTree = ""; }; @@ -1329,6 +1331,7 @@ 5E9573D31C18E9B300C27989 /* CEAGLManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CEAGLManager.h; sourceTree = ""; }; 5E9573D61C18E9E600C27989 /* CEAGLManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CEAGLManager.mm; sourceTree = ""; }; 5EC24F5E1B8B861200DCA615 /* exampleHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = exampleHelper.h; path = ../../include/exampleHelper.h; sourceTree = ""; }; + 65E74BB2282193B40004CA1D /* CTRParallaxMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTRParallaxMap.cpp; sourceTree = ""; }; 84662D06281F2A1700E342E7 /* EMeshBufferTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EMeshBufferTypes.h; path = ../../include/EMeshBufferTypes.h; sourceTree = ""; }; 8493BC01249DEBB20092813E /* IOctreeSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IOctreeSceneNode.h; path = ../../include/IOctreeSceneNode.h; sourceTree = ""; }; 8493BC03249DED3F0092813E /* IMemoryReadFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMemoryReadFile.h; path = ../../include/IMemoryReadFile.h; sourceTree = ""; }; @@ -2179,10 +2182,10 @@ 5E34C9661B7F6A7600F212E8 /* CSoftwareTexture2.cpp */, 5E34C9671B7F6A7600F212E8 /* CSoftwareTexture2.h */, 5E34C9681B7F6A7600F212E8 /* CTRGouraud2.cpp */, - 5E34C9691B7F6A7600F212E8 /* CTRGouraudAlpha2.cpp */, 5E34C96A1B7F6A7600F212E8 /* CTRGouraudAlphaNoZ2.cpp */, 84A219B8249F834000E189FC /* CTRGouraudNoZ2.cpp */, 5E34C96B1B7F6A7600F212E8 /* CTRNormalMap.cpp */, + 65E74BB2282193B40004CA1D /* CTRParallaxMap.cpp */, 5E34C96C1B7F6A7600F212E8 /* CTRStencilShadow.cpp */, 5E34C96D1B7F6A7600F212E8 /* CTRTextureBlend.cpp */, 5E34C96E1B7F6A7600F212E8 /* CTRTextureDetailMap2.cpp */, @@ -2702,7 +2705,6 @@ 5E34CB931B7F6EC500F212E8 /* CSoftwareDriver2.cpp in Sources */, 5E34CB951B7F6EC500F212E8 /* CSoftwareTexture2.cpp in Sources */, 5E34CB971B7F6EC500F212E8 /* CTRGouraud2.cpp in Sources */, - 5E34CB981B7F6EC500F212E8 /* CTRGouraudAlpha2.cpp in Sources */, 5E34CB991B7F6EC500F212E8 /* CTRGouraudAlphaNoZ2.cpp in Sources */, 5E34CB9A1B7F6EC500F212E8 /* CTRNormalMap.cpp in Sources */, 5E34CB9B1B7F6EC500F212E8 /* CTRStencilShadow.cpp in Sources */, @@ -2710,6 +2712,7 @@ 5E34CB9D1B7F6EC500F212E8 /* CTRTextureDetailMap2.cpp in Sources */, 5E34CB9E1B7F6EC500F212E8 /* CTRTextureGouraud2.cpp in Sources */, 5E34CB9F1B7F6EC500F212E8 /* CTRTextureGouraudAdd2.cpp in Sources */, + 65E74BB3282193B50004CA1D /* CTRParallaxMap.cpp in Sources */, 5E34CBA01B7F6EC500F212E8 /* CTRTextureGouraudAddNoZ2.cpp in Sources */, 5E34CBA11B7F6EC500F212E8 /* CTRTextureGouraudAlpha.cpp in Sources */, 5E34CBA21B7F6EC500F212E8 /* CTRTextureGouraudAlphaNoZ.cpp in Sources */, @@ -2864,6 +2867,7 @@ 5E5733091C18E212003F664E /* jdcolor.c in Sources */, 5E57330A1C18E212003F664E /* jddctmgr.c in Sources */, 5E57330B1C18E212003F664E /* jdhuff.c in Sources */, + 842F5F8F2827D4AB00F4106F /* burning_shader_color.cpp in Sources */, 5E57340C1C18E2E2003F664E /* COGLES2FixedPipelineRenderer.cpp in Sources */, 5E57330C1C18E212003F664E /* jdinput.c in Sources */, 5E57330D1C18E212003F664E /* jdmainct.c in Sources */, @@ -2921,6 +2925,7 @@ 5E57334A1C18E212003F664E /* CSceneNodeAnimatorTexture.cpp in Sources */, 5E57334B1C18E212003F664E /* CMetaTriangleSelector.cpp in Sources */, 5E57334C1C18E212003F664E /* COctreeTriangleSelector.cpp in Sources */, + 842F5F902827D4AB00F4106F /* CTR_transparent_reflection_2_layer.cpp in Sources */, 5E57334D1C18E212003F664E /* CSceneCollisionManager.cpp in Sources */, 5E57334E1C18E212003F664E /* CTerrainTriangleSelector.cpp in Sources */, 5E57334F1C18E212003F664E /* CTriangleBBSelector.cpp in Sources */, @@ -2991,6 +2996,7 @@ 5E57338D1C18E212003F664E /* CColladaMeshWriter.cpp in Sources */, 5E57338E1C18E212003F664E /* CIrrMeshWriter.cpp in Sources */, 5E57338F1C18E212003F664E /* COBJMeshWriter.cpp in Sources */, + 842F5F912827D4AB00F4106F /* CTRGouraudNoZ2.cpp in Sources */, 5E5733901C18E212003F664E /* CPLYMeshWriter.cpp in Sources */, 5E57340A1C18E2E2003F664E /* COGLES2ExtensionHandler.cpp in Sources */, 5E5733911C18E212003F664E /* CSTLMeshWriter.cpp in Sources */, @@ -3006,7 +3012,6 @@ 5E57339A1C18E212003F664E /* CSoftwareDriver2.cpp in Sources */, 5E57339B1C18E212003F664E /* CSoftwareTexture2.cpp in Sources */, 5E57339C1C18E212003F664E /* CTRGouraud2.cpp in Sources */, - 5E57339D1C18E212003F664E /* CTRGouraudAlpha2.cpp in Sources */, 5E57339E1C18E212003F664E /* CTRGouraudAlphaNoZ2.cpp in Sources */, 5E57339F1C18E212003F664E /* CTRNormalMap.cpp in Sources */, 5E5733A01C18E212003F664E /* CTRStencilShadow.cpp in Sources */, @@ -3015,6 +3020,7 @@ 5E5733A31C18E212003F664E /* CTRTextureGouraud2.cpp in Sources */, 5E5733A41C18E212003F664E /* CTRTextureGouraudAdd2.cpp in Sources */, 5E5733A51C18E212003F664E /* CTRTextureGouraudAddNoZ2.cpp in Sources */, + 843D28262828FA210096D7D0 /* CTRParallaxMap.cpp in Sources */, 5E5733A61C18E212003F664E /* CTRTextureGouraudAlpha.cpp in Sources */, 5E5733A71C18E212003F664E /* CTRTextureGouraudAlphaNoZ.cpp in Sources */, 5E5733A81C18E212003F664E /* CTRTextureGouraudNoZ2.cpp in Sources */, @@ -3087,20 +3093,12 @@ CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; DEAD_CODE_STRIPPING = YES; @@ -3115,9 +3113,7 @@ "PNG_ARM_NEON_OPT=0", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INSTALL_PATH = /; @@ -3141,19 +3137,12 @@ CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -3171,9 +3160,9 @@ GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_UNROLL_LOOPS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INSTALL_PATH = /; @@ -3207,13 +3196,14 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = Irrlicht; SDKROOT = macosx; }; @@ -3264,17 +3254,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; DSTROOT = "$(SRCROOT)/../../lib/iOS"; ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_FAST_MATH = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "${SRCROOT}/../../include"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_CFLAGS = ( @@ -3311,11 +3297,6 @@ EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_FAST_MATH = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "${SRCROOT}/../../include"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = ( diff --git a/source/Irrlicht/Irrlicht14.0.vcxproj b/source/Irrlicht/Irrlicht14.0.vcxproj index 1545697e..4917da08 100644 --- a/source/Irrlicht/Irrlicht14.0.vcxproj +++ b/source/Irrlicht/Irrlicht14.0.vcxproj @@ -849,30 +849,30 @@ - + - + - + - - - + + + - - + + - + - + @@ -882,9 +882,9 @@ - + - + @@ -926,7 +926,7 @@ - + @@ -1081,7 +1081,7 @@ - + @@ -1365,6 +1365,7 @@ + @@ -1468,7 +1469,6 @@ - diff --git a/source/Irrlicht/Irrlicht14.0.vcxproj.filters b/source/Irrlicht/Irrlicht14.0.vcxproj.filters index af0084f3..5c328bca 100644 --- a/source/Irrlicht/Irrlicht14.0.vcxproj.filters +++ b/source/Irrlicht/Irrlicht14.0.vcxproj.filters @@ -1288,7 +1288,7 @@ include\video - + include\scene @@ -1417,7 +1417,7 @@ Irrlicht\video\Null - + include\core @@ -1482,7 +1482,7 @@ include - + @@ -1883,9 +1883,6 @@ Irrlicht\video\Burning Video - - Irrlicht\video\Burning Video - Irrlicht\video\Burning Video @@ -2459,6 +2456,9 @@ Irrlicht\video\Burning Video + + Irrlicht\video\Burning Video + diff --git a/source/Irrlicht/Irrlicht15.0.vcxproj b/source/Irrlicht/Irrlicht15.0.vcxproj index a35d2acc..72cd3011 100644 --- a/source/Irrlicht/Irrlicht15.0.vcxproj +++ b/source/Irrlicht/Irrlicht15.0.vcxproj @@ -1343,6 +1343,7 @@ + @@ -1446,7 +1447,6 @@ - diff --git a/source/Irrlicht/Irrlicht16.0.sln b/source/Irrlicht/Irrlicht16.0.sln new file mode 100644 index 00000000..2dc26658 --- /dev/null +++ b/source/Irrlicht/Irrlicht16.0.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32413.511 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "Irrlicht16.0.vcxproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + SDL-Debug|Win32 = SDL-Debug|Win32 + SDL-Debug|x64 = SDL-Debug|x64 + Static lib - Debug|Win32 = Static lib - Debug|Win32 + Static lib - Debug|x64 = Static lib - Debug|x64 + Static lib - Release|Win32 = Static lib - Release|Win32 + Static lib - Release|x64 = Static lib - Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|Win32.ActiveCfg = Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|Win32.Build.0 = Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x64.ActiveCfg = Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x64.Build.0 = Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.ActiveCfg = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.Build.0 = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.ActiveCfg = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.Build.0 = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|Win32.ActiveCfg = SDL-Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|Win32.Build.0 = SDL-Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.ActiveCfg = SDL-Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.Build.0 = SDL-Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|Win32.ActiveCfg = Static lib - Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|Win32.Build.0 = Static lib - Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.ActiveCfg = Static lib - Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.Build.0 = Static lib - Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|Win32.ActiveCfg = Static lib - Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|Win32.Build.0 = Static lib - Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.ActiveCfg = Static lib - Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.Build.0 = Static lib - Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CA4D3DBA-854D-443E-9C2B-700DA84286D9} + EndGlobalSection +EndGlobal diff --git a/source/Irrlicht/Irrlicht16.0.vcxproj b/source/Irrlicht/Irrlicht16.0.vcxproj new file mode 100644 index 00000000..300ee8ec --- /dev/null +++ b/source/Irrlicht/Irrlicht16.0.vcxproj @@ -0,0 +1,1348 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + SDL-Debug + Win32 + + + SDL-Debug + x64 + + + Static lib - Debug + Win32 + + + Static lib - Debug + x64 + + + Static lib - Release + Win32 + + + Static lib - Release + x64 + + + + Irrlicht + {E08E042A-6C45-411B-92BE-3CC31331019F} + Irrlicht + 10.0 + + + + DynamicLibrary + NotSet + v142 + + + DynamicLibrary + NotSet + v142 + + + StaticLibrary + MultiByte + true + v142 + + + StaticLibrary + MultiByte + true + v142 + + + StaticLibrary + NotSet + v142 + + + StaticLibrary + NotSet + v142 + + + DynamicLibrary + MultiByte + true + v142 + + + DynamicLibrary + MultiByte + true + v142 + + + DynamicLibrary + NotSet + v142 + + + DynamicLibrary + NotSet + v142 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + obj\$(Configuration)\ + obj\$(Configuration)64\ + false + false + ..\..\lib\Win32-VisualStudio\ + ..\..\lib\Win64-VisualStudio\ + obj\$(Configuration)\ + obj\$(Configuration)64\ + ..\..\lib\Win32-VisualStudio\ + ..\..\lib\Win64-VisualStudio\ + obj\$(Configuration)\ + obj\$(Configuration)64\ + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + obj\$(Configuration)\ + obj\$(Configuration)64\ + true + true + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + obj\$(Configuration)\ + obj\$(Configuration)64\ + true + true + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)include;$(IncludePath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Lib\x64;$(LibraryPath);$(VSInstallDir);$(VSInstallDir)lib\amd64 + $(DXSDK_DIR)Lib\x64;$(LibraryPath);$(VSInstallDir);$(VSInstallDir)lib\amd64 + $(DXSDK_DIR)Lib\x64;$(LibraryPath);$(VSInstallDir);$(VSInstallDir)lib\amd64 + $(DXSDK_DIR)Lib\x64;$(LibraryPath);$(VSInstallDir);$(VSInstallDir)lib\amd64 + $(DXSDK_DIR)Lib\x64;$(LibraryPath);$(VSInstallDir);$(VSInstallDir)lib\amd64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\..\Debug/Irrlicht.tlb + + + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;IRRLICHT_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions); _ITERATOR_DEBUG_LEVEL=0 + EnableFastChecks + MultiThreadedDebug + false + false + Level3 + Disabled + 4577 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + true + + + /MACHINE:I386 %(AdditionalOptions) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;opengl32.lib;%(AdditionalDependencies) + ..\..\bin\Win32-visualstudio\Irrlicht.dll + %(AdditionalLibraryDirectories) + libci.lib;%(IgnoreSpecificDefaultLibraries) + true + + + ..\..\lib\Win32-visualstudio\Irrlicht.lib + 1.9 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\..\Debug/Irrlicht.tlb + + + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;_USRDLL;IRRLICHT_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions); _ITERATOR_DEBUG_LEVEL=0 + false + EnableFastChecks + false + Level3 + Disabled + + + MultiThreadedDebugDLL + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + true + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;opengl32.lib;winmm.lib;%(AdditionalDependencies) + ..\..\bin\Win64-Visualstudio\Irrlicht.dll + %(AdditionalLibraryDirectories) + true + + + ..\..\lib\Win64-visualstudio\Irrlicht.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\..\Release/Irrlicht.tlb + + + MaxSpeed + OnlyExplicitInline + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;IRRLICHT_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + false + MultiThreaded + false + true + Level3 + + + Default + false + 4577 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + kernel32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies) + ..\..\bin\Win32-Visualstudio\Irrlicht.dll + + + false + + + ..\..\lib\Win32-visualstudio\Irrlicht.lib + 1.9 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\..\Release/Irrlicht.tlb + + + MaxSpeed + AnySuitable + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;_USRDLL;IRRLICHT_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + false + MultiThreadedDLL + false + true + Level3 + + + + + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + kernel32.lib;user32.lib;gdi32.lib;winmm.lib;%(AdditionalDependencies) + ..\..\bin\Win64-Visualstudio\Irrlicht.dll + false + + + ..\..\lib\Win64-Visualstudio\Irrlicht.lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\..\Debug/Irrlicht.tlb + + + Disabled + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;_IRR_STATIC_LIB_;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions); _ITERATOR_DEBUG_LEVEL=0 + false + EnableFastChecks + MultiThreadedDebug + false + false + Level3 + 4577 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + winmm.lib;%(AdditionalDependencies) + ..\..\lib\Win32-visualstudio\Irrlicht.lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\..\Debug/Irrlicht.tlb + + + Disabled + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;_USRDLL;_IRR_STATIC_LIB_;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions); _ITERATOR_DEBUG_LEVEL=0 + false + EnableFastChecks + MultiThreadedDebug + false + false + Level3 + 4577 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + winmm.lib;%(AdditionalDependencies) + ..\..\lib\Win64-visualstudio\Irrlicht.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\..\Release/Irrlicht.tlb + + + MaxSpeed + OnlyExplicitInline + false + false + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;_IRR_STATIC_LIB_;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + false + MultiThreaded + false + true + Level3 + + + false + 4577 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + winmm.lib;%(AdditionalDependencies) + ..\..\lib\Win32-visualstudio\Irrlicht.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\..\Release/Irrlicht.tlb + + + MaxSpeed + OnlyExplicitInline + false + false + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;_USRDLL;_IRR_STATIC_LIB_;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + false + MultiThreaded + false + true + Level3 + + + false + 4577 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + winmm.lib;%(AdditionalDependencies) + ..\..\lib\Win64-visualstudio\Irrlicht.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\..\Debug/Irrlicht.tlb + + + Disabled + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;IRRLICHT_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_IRR_USE_SDL_DEVICE_=1;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebug + false + false + Level3 + 4577 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + true + + + /MACHINE:I386 %(AdditionalOptions) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;opengl32.lib;%(AdditionalDependencies) + ..\..\bin\Win32-visualstudio\Irrlicht.dll + %(AdditionalLibraryDirectories) + libci.lib;%(IgnoreSpecificDefaultLibraries) + true + + + ..\..\lib\Win32-visualstudio\Irrlicht.lib + 1.9 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\..\Debug/Irrlicht.tlb + + + Disabled + ..\..\include;zlib;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;_USRDLL;IRRLICHT_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_IRR_USE_SDL_DEVICE_=1;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebug + false + false + Level3 + 4577 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + true + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;opengl32.lib;winmm.lib;%(AdditionalDependencies) + ..\..\bin\Win64-visualstudio\Irrlicht.dll + %(AdditionalLibraryDirectories) + libci.lib;%(IgnoreSpecificDefaultLibraries) + true + + + ..\..\lib\Win64-visualstudio\Irrlicht.lib + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Irrlicht/Irrlicht16.0.vcxproj.filters b/source/Irrlicht/Irrlicht16.0.vcxproj.filters new file mode 100644 index 00000000..330b0260 --- /dev/null +++ b/source/Irrlicht/Irrlicht16.0.vcxproj.filters @@ -0,0 +1,2391 @@ + + + + + {b5bde5d3-f9e4-4036-8c28-2f4e8cd03846} + + + {0b0937fb-2270-4e3e-a94f-f92bc0fa74ae} + + + {67300400-93d5-4a7e-8b59-7c0d7b1f6d75} + + + {feb206b9-81b6-45c0-b4e5-9e637fe060e7} + + + {af459bf5-2849-4a0e-9a21-91acbbf1c6b5} + + + {aa649d49-922d-4118-8574-f05c13d67706} + + + {a72cb2e5-a5c3-41bc-9c86-fdbdae8f7866} + + + {72c30315-bbc0-4109-9ccd-fb7107ba316a} + + + {1fcdc900-911d-4b7a-9328-afce5bbe44fa} + + + {41e16cbf-c3cb-4d74-8aef-c0416b6b9d7f} + + + {b84f01e5-ae3c-457b-8d96-b3e271800162} + + + {eca36d94-d8fb-477d-a0dc-b5498c9686d7} + + + {67826246-df05-4523-9191-5286f9157963} + + + {659a61d5-7ab3-4aa3-95ca-879780810b4e} + + + {f65e8d89-c715-4794-8c2d-22f2b57cffb0} + + + {3cb7865d-a5e9-4b22-8f54-dde759b88c51} + + + {919fcfa4-4277-4c88-8bfc-4bfcfcbb1b65} + + + {834213c7-9515-49de-aa27-8d3ed9c0c87a} + + + {a9ca9d4d-7678-4687-b78b-15236c0dcf53} + + + {d694e7b0-0fb0-4685-ace7-56d9ec65a3d0} + + + {e2571a61-945c-4509-b47c-daea464916ab} + + + {1354e9fa-cea6-461e-af7f-9940bb5f0a2f} + + + {ac7af7ba-0e6b-4da4-a695-a0070a4da974} + + + {1173499e-79e8-4c34-8046-abc325e2f2a9} + + + {ca095ff3-25e4-4852-ab55-af28c602cd8a} + + + {1c8bd90a-8361-4478-8942-a062450ef209} + + + {128cac28-b6f8-49e7-87f5-ee15951d0396} + + + {6f10ce97-ed8b-47bc-a189-f2262eb467e4} + + + {5d58bc55-284e-4880-9226-85083e65d660} + + + {064ee182-9f07-4026-ac22-c141ae2c7281} + + + {6e842906-e193-451d-8716-12eaafabd0d8} + + + {799f220e-3a58-4788-876b-88c175b69871} + + + {da421793-4674-481c-be46-f7a44e78aee5} + + + {628de03e-6872-4682-b1f6-d3cc453c9d55} + + + {2512a519-e6c0-4b48-aae4-ded2d2500b95} + + + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\video + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\core + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\io + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + include\gui + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\video + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr\extern + + + Irrlicht\irr\extern + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + include\scene + + + + Irrlicht\scene\loaders + + + include\scene + + + Irrlicht\scene\loaders + + + include\video + + + include + + + include\video + + + include\scene + + + include\video + + + Irrlicht\video\Direct3D9 + + + Irrlicht\scene\writers + + + Irrlicht\scene + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL Core + + + Irrlicht\video\OpenGL Core + + + Irrlicht\video\OpenGL Core + + + Irrlicht\video\OpenGL Core + + + Irrlicht\video\OpenGL Context + + + Irrlicht\video\OpenGL Context + + + include\video + + + include\scene + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Null + + + include\core + + + include\scene + + + include\scene + + + include\scene + + + include\scene + + + include\gui + + + Irrlicht\scene\animators + + + include\video + + + include\scene + + + include\scene + + + include\io + + + include\scene + + + include\video + + + include\gui + + + include\io + + + include\scene + + + include\scene + + + include\video + + + include\io + + + include\video + + + include\scene + + + include + + + + + doc + + + doc + + + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\sceneNodes + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\particleSystem + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\collision + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\animators + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\scene\writers + + + Irrlicht\video + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Software + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Writer + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Null\Loader + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Direct3D9 + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr + + + Irrlicht\irr\extern + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\zlib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\jpeglib + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\libpng + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\aesGladman + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\extern\bzip2 + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\irr\device + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\io + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\gui + + + Irrlicht\scene\loaders + + + Irrlicht\scene\loaders + + + Irrlicht\video\Direct3D9 + + + Irrlicht\scene\writers + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL + + + Irrlicht\video\OpenGL Context + + + Irrlicht\video\OpenGL Context + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + Irrlicht\video\Burning Video + + + + + + \ No newline at end of file diff --git a/source/Irrlicht/Makefile b/source/Irrlicht/Makefile index 30939944..dbc8bd6a 100644 --- a/source/Irrlicht/Makefile +++ b/source/Irrlicht/Makefile @@ -51,13 +51,15 @@ IRRDRVROBJ = CNullDriver.o COpenGLCacheHandler.o COpenGLDriver.o COpenGLNormalMa IRRIMAGEOBJ = CColorConverter.o CImage.o CImageLoaderBMP.o CImageLoaderDDS.o CImageLoaderJPG.o CImageLoaderPCX.o CImageLoaderPNG.o CImageLoaderPSD.o CImageLoaderPVR.o CImageLoaderTGA.o CImageLoaderPPM.o CImageLoaderWAL.o CImageLoaderRGB.o \ CImageWriterBMP.o CImageWriterJPG.o CImageWriterPCX.o CImageWriterPNG.o CImageWriterPPM.o CImageWriterPSD.o CImageWriterTGA.o IRRVIDEOOBJ = CVideoModeList.o CFPSCounter.o $(IRRDRVROBJ) $(IRRIMAGEOBJ) -IRRSWRENDEROBJ = CSoftwareDriver.o CSoftwareTexture.o CTRFlat.o CTRFlatWire.o CTRGouraud.o CTRGouraudWire.o CTRNormalMap.o \ - CTRStencilShadow.o CTRTextureFlat.o CTRTextureFlatWire.o CTRTextureGouraud.o CTRTextureGouraudAdd.o CTRTextureGouraudNoZ.o \ - CTRTextureGouraudWire.o CZBuffer.o CTRTextureGouraudVertexAlpha2.o CTRTextureGouraudNoZ2.o CTRTextureLightMap2_M2.o \ - CTRTextureLightMap2_M4.o CTRTextureLightMap2_M1.o CSoftwareDriver2.o CSoftwareTexture2.o CTRTextureGouraud2.o CTRGouraud2.o \ - CTRGouraudAlpha2.o CTRGouraudAlphaNoZ2.o CTRTextureDetailMap2.o CTRTextureGouraudAdd2.o CTRTextureGouraudAddNoZ2.o CTRTextureWire2.o \ - CTRTextureLightMap2_Add.o CTRTextureLightMapGouraud2_M4.o IBurningShader.o CTRTextureBlend.o CTRTextureGouraudAlpha.o \ - CTRTextureGouraudAlphaNoZ.o CDepthBuffer.o CBurningShader_Raster_Reference.o CTR_transparent_reflection_2_layer.o CTRGouraudNoZ2.o burning_shader_color.o +IRRSWRENDEROBJ = CSoftwareDriver.o CSoftwareTexture.o CTRFlat.o CTRFlatWire.o CTRGouraud.o CTRGouraudWire.o \ + CTRTextureFlat.o CTRTextureFlatWire.o CTRTextureGouraud.o CTRTextureGouraudAdd.o CTRTextureGouraudNoZ.o \ + CTRTextureGouraudWire.o CZBuffer.o +IRRBURNINGOBJ = CSoftwareDriver2.o CSoftwareTexture2.o CDepthBuffer.o IBurningShader.o CTRNormalMap.o CTRParallaxMap.o \ + CTRStencilShadow.o CTRTextureGouraudVertexAlpha2.o CTRTextureGouraudNoZ2.o CTRTextureLightMap2_M2.o \ + CTRTextureLightMap2_M1.o CTRTextureLightMapGouraud2_M4.o CTRTextureLightMap2_M4.o CTRTextureGouraud2.o CTRGouraud2.o \ + CTRGouraudAlphaNoZ2.o CTRTextureDetailMap2.o CTRTextureGouraudAdd2.o CTRTextureGouraudAddNoZ2.o CTRTextureWire2.o \ + CTRTextureLightMap2_Add.o CTRTextureBlend.o CTRTextureGouraudAlpha.o burning_shader_color.o \ + CTRTextureGouraudAlphaNoZ.o CBurningShader_Raster_Reference.o CTR_transparent_reflection_2_layer.o CTRGouraudNoZ2.o IRRIOOBJ = CFileList.o CFileSystem.o CLimitReadFile.o CMemoryFile.o CReadFile.o CWriteFile.o CXMLReader.o CXMLWriter.o CWADReader.o CZipReader.o CPakReader.o CNPKReader.o CTarReader.o CMountPointReader.o irrXML.o CAttributes.o lzma/LzmaDec.o IRROTHEROBJ = CIrrDeviceSDL.o CIrrDeviceLinux.o CIrrDeviceConsole.o CIrrDeviceStub.o CIrrDeviceWin32.o CIrrDeviceFB.o CLogger.o COSOperator.o Irrlicht.o os.o leakHunter.o CProfiler.o utf8.o IRRGUIOBJ = CGUIButton.o CGUICheckBox.o CGUIComboBox.o CGUIContextMenu.o CGUIEditBox.o CGUIEnvironment.o CGUIFileOpenDialog.o CGUIFont.o CGUIImage.o CGUIInOutFader.o CGUIListBox.o CGUIMenu.o CGUIMeshViewer.o CGUIMessageBox.o CGUIModalScreen.o CGUIScrollBar.o CGUISpinBox.o CGUISkin.o CGUIStaticText.o CGUITabControl.o CGUITable.o CGUIToolBar.o CGUIWindow.o CGUIColorSelectDialog.o CDefaultGUIElementFactory.o CGUISpriteBank.o CGUIImageList.o CGUITreeView.o CGUIProfiler.o @@ -70,7 +72,7 @@ BZIP2OBJ = bzip2/blocksort.o bzip2/huffman.o bzip2/crctable.o bzip2/randtable.o # Next variable is for additional scene nodes etc. of customized Irrlicht versions EXTRAOBJ = LINKOBJ = $(IRRMESHOBJ) $(IRROBJ) $(IRRPARTICLEOBJ) $(IRRANIMOBJ) \ - $(IRRVIDEOOBJ) $(IRRSWRENDEROBJ) $(IRRIOOBJ) $(IRROTHEROBJ) \ + $(IRRVIDEOOBJ) $(IRRSWRENDEROBJ) $(IRRBURNINGOBJ) $(IRRIOOBJ) $(IRROTHEROBJ) \ $(IRRGUIOBJ) $(ZLIBOBJ) $(JPEGLIBOBJ) $(LIBPNGOBJ) $(LIBAESGM) \ $(BZIP2OBJ) $(EXTRAOBJ) diff --git a/source/Irrlicht/S4DVertex.h b/source/Irrlicht/S4DVertex.h index 2057a893..2498e0f4 100644 --- a/source/Irrlicht/S4DVertex.h +++ b/source/Irrlicht/S4DVertex.h @@ -9,26 +9,28 @@ #include "SoftwareDriver2_helper.h" #include "irrAllocator.h" #include "EPrimitiveTypes.h" +#include "SVertexIndex.h" -namespace irr -{ +burning_namespace_start -namespace video -{ +struct sVec4; //! sVec2 used in BurningShader texture coordinates struct sVec2 { - f32 x; - f32 y; + union + { + struct { f32 x, y; }; + struct { f32 s, t; } st; + }; - sVec2 () {} + sVec2() {} - sVec2 ( f32 s) : x ( s ), y ( s ) {} - sVec2 ( f32 _x, f32 _y ) - : x ( _x ), y ( _y ) {} + sVec2(f32 s) : x(s), y(s) {} + sVec2(f32 _x, f32 _y) + : x(_x), y(_y) {} - void set ( f32 _x, f32 _y ) + void set(f32 _x, f32 _y) { x = _x; y = _y; @@ -37,8 +39,8 @@ struct sVec2 // f = a * t + b * ( 1 - t ) void interpolate(const sVec2& burning_restrict a, const sVec2& burning_restrict b, const ipoltype t) { - x = (f32)(b.x + ( ( a.x - b.x ) * t )); - y = (f32)(b.y + ( ( a.y - b.y ) * t )); + x = (f32)(b.x + ((a.x - b.x) * t)); + y = (f32)(b.y + ((a.y - b.y) * t)); } sVec2 operator-(const sVec2& other) const @@ -59,10 +61,10 @@ struct sVec2 sVec2 operator*(const f32 s) const { - return sVec2(x * s , y * s); + return sVec2(x * s, y * s); } - void operator*=( const f32 s) + void operator*=(const f32 s) { x *= s; y *= s; @@ -74,11 +76,29 @@ struct sVec2 y = other.y; } + // shader +/* + void operator=(const core::vector2df& other) + { + x = other.X; + y = other.Y; + } +*/ + sVec2 st_op() const + { + return sVec2(x,y); + } + sVec2& st_op() + { + return *this; + } + void operator=(const sVec4& other); + }; #include "irrpack.h" -//! sVec2Pack is Irrlicht S3DVertex,S3DVertex2TCoords,S3DVertexTangents Texutre Coordinates. +//! sVec2Pack is Irrlicht S3DVertex,S3DVertex2TCoords,S3DVertexTangents Texture Coordinates. // Start address is not 4 byte aligned struct sVec2Pack { @@ -137,35 +157,42 @@ struct sVec3Pack #include "irrunpack.h" //! sVec4 used in Driver,BurningShader, direction/color -struct sVec4 +struct ALIGN(16) sVec4 { union { struct { f32 x, y, z, w; }; - struct { f32 a, r, g, b; }; + struct { f32 r, g, b, a; }; + struct { f32 s, t, p, q; }; }; - sVec4 () {} - sVec4 ( f32 _x, f32 _y, f32 _z, f32 _w ) - : x ( _x ), y ( _y ), z( _z ), w ( _w ){} +#if __GNUC__ + //have one warning i can't find + sVec4(f32 _x = 0.f, f32 _y = 0.f, f32 _z = 0.f, f32 _w = 0.f) + : x(_x), y(_y), z(_z), w(_w) {} +#else + sVec4() {} + sVec4(f32 _x, f32 _y, f32 _z, f32 _w=0.f) + : x(_x), y(_y), z(_z), w(_w) {} +#endif // f = a * t + b * ( 1 - t ) - void interpolate(const sVec4& burning_restrict a, const sVec4& burning_restrict b, const ipoltype t) + REALINLINE void interpolate(const sVec4& burning_restrict a, const sVec4& burning_restrict b, const ipoltype t) { - x = (f32)(b.x + ( ( a.x - b.x ) * t )); - y = (f32)(b.y + ( ( a.y - b.y ) * t )); - z = (f32)(b.z + ( ( a.z - b.z ) * t )); - w = (f32)(b.w + ( ( a.w - b.w ) * t )); + x = (f32)(b.x + ((a.x - b.x) * t)); + y = (f32)(b.y + ((a.y - b.y) * t)); + z = (f32)(b.z + ((a.z - b.z) * t)); + w = (f32)(b.w + ((a.w - b.w) * t)); } sVec4 operator-(const sVec4& other) const { - return sVec4(x - other.x, y - other.y, z - other.z,w - other.w); + return sVec4(x - other.x, y - other.y, z - other.z, w - other.w); } sVec4 operator+(const sVec4& other) const { - return sVec4(x + other.x, y + other.y, z + other.z,w + other.w); + return sVec4(x + other.x, y + other.y, z + other.z, w + other.w); } void operator+=(const sVec4& other) @@ -178,15 +205,15 @@ struct sVec4 sVec4 operator*(const f32 s) const { - return sVec4(x * s , y * s, z * s,w * s); + return sVec4(x * s, y * s, z * s, w * s); } - sVec4 operator*(const sVec4 &other) const + sVec4 operator*(const sVec4& other) const { - return sVec4(x * other.x , y * other.y, z * other.z,w * other.w); + return sVec4(x * other.x, y * other.y, z * other.z, w * other.w); } - void operator*=(const sVec4 &other) + void operator*=(const sVec4& other) { x *= other.x; y *= other.y; @@ -194,12 +221,13 @@ struct sVec4 w *= other.w; } - void operator=(const sVec4& other) + sVec4& operator=(const sVec4& other) { x = other.x; y = other.y; z = other.z; w = other.w; + return *this; } //outside shader @@ -210,13 +238,7 @@ struct sVec4 z = _z; w = _w; } - void setA8R8G8B8(const u32 argb) - { - a = ((argb & 0xFF000000) >> 24) * (1.f / 255.f); - r = ((argb & 0x00FF0000) >> 16) * (1.f / 255.f); - g = ((argb & 0x0000FF00) >> 8 ) * (1.f / 255.f); - b = ((argb & 0x000000FF) ) * (1.f / 255.f); - } + REALINLINE ipoltype dot_xyzw(const sVec4& other) const { @@ -228,9 +250,14 @@ struct sVec4 return x * other.x + y * other.y + z * other.z; } + REALINLINE f32 dot(const irr::core::vector3df& other) const + { + return x * other.X + y * other.Y + z * other.Z; + } + REALINLINE f32 dot_minus_xyz(const sVec4& other) const { - return -x * other.x + -y * other.y + -z * other.z; + return x * -other.x + y * -other.y + z * -other.z; } void mul_xyz(const f32 s) @@ -249,12 +276,41 @@ struct sVec4 { //const f32 l = core::reciprocal_squareroot(x * x + y * y + z * z); f32 l = x * x + y * y + z * z; - l = l > 0.0000001f ? 1.f / sqrtf(l) : 1.f; - x *= l; - y *= l; - z *= l; + if (l > 0.00000001f) + { + l = 1.f / sqrtf(l); + x *= l; + y *= l; + z *= l; + } + else + { + x = 0.f; + y = -1.f; + z = 0.f; + } } + void normalize_dir_xyz_zero() + { + //const f32 l = core::reciprocal_squareroot(x * x + y * y + z * z); + f32 l = x * x + y * y + z * z; + if (l > 0.00000001f) + { + l = 1.f / sqrtf(l); + x *= l; + y *= l; + z *= l; + } + else + { + x = 0.f; + y = 0.f; + z = 0.f; + } + } + + //unpack sVec3 to aligned during runtime sVec4(const sVec3Pack& other) @@ -270,21 +326,37 @@ struct sVec4 //const f32 l = len * core::reciprocal_squareroot ( r * r + g * g + b * b ); f32 l = x * x + y * y + z * z; - l = l > 0.0000001f ? len / sqrtf(l) : 0.f; - out.x = (x*l) + ofs; - out.y = (y*l) + ofs; - out.z = (z*l) + ofs; + l = l > 0.00000001f ? len / sqrtf(l) : 0.f; + out.x = (x * l) + ofs; + out.y = (y * l) + ofs; + out.z = (z * l) + ofs; } -}; + //shader suppport + sVec4(const sVec4& a, double _w) + { + x = a.x; + y = a.y; + z = a.z; + w = (float)_w; + } + sVec4 xyz() const + { + return sVec4(x, y, z, 0.f); + } -//!during runtime sVec3Pack -typedef sVec4 sVec3Pack_unpack; + //operator f32* () { return &x; } -//!sVec4 is argb. sVec3Color is rgba -struct sVec3Color -{ - f32 r, g, b,a; + void clampf01() + { + if (x < 0.f) x = 0.f; else if (x > 1.f) x = 1.f; + if (y < 0.f) y = 0.f; else if (y > 1.f) y = 1.f; + if (z < 0.f) z = 0.f; else if (z > 1.f) z = 1.f; + if (w < 0.f) w = 0.f; else if (w > 1.f) w = 1.f; + } + + //Color + void setA8R8G8B8(const u32 argb); void set(const f32 s) { @@ -294,15 +366,7 @@ struct sVec3Color a = s; } - void setA8R8G8B8(const u32 argb) - { - r = ((argb & 0x00FF0000) >> 16) * (1.f / 255.f); - g = ((argb & 0x0000FF00) >> 8 ) * (1.f / 255.f); - b = ((argb & 0x000000FF) ) * (1.f / 255.f); - a = ((argb & 0xFF000000) >> 24) * (1.f / 255.f); - } - - void setColorf(const video::SColorf & color) + void setColorf(const video::SColorf& color) { r = color.r; g = color.g; @@ -310,21 +374,21 @@ struct sVec3Color a = color.a; } - void add_rgb(const sVec3Color& other) + void add_rgb(const sVec4& other) { r += other.r; g += other.g; b += other.b; } - void mad_rgb(const sVec3Color& other, const f32 v) + void mad_rgb(const sVec4& other, const f32 v) { r += other.r * v; g += other.g * v; b += other.b * v; } - void mad_rgbv(const sVec3Color& v0, const sVec3Color& v1) + void mad_rgbv(const sVec4& v0, const sVec4& v1) { r += v0.r * v1.r; g += v0.g * v1.g; @@ -332,23 +396,25 @@ struct sVec3Color } //sVec4 is a,r,g,b, alpha pass - void sat(sVec4 &dest, const u32 argb) const +#if 0 + void sat_alpha_pass(sVec4& dest, const u32 argb) const { dest.a = ((argb & 0xFF000000) >> 24) * (1.f / 255.f); dest.r = r <= 1.f ? r : 1.f; dest.g = g <= 1.f ? g : 1.f; dest.b = b <= 1.f ? b : 1.f; } - - void sat_xyz(sVec3Pack &dest, const sVec3Color& v1) const +#endif + void sat_alpha_pass(sVec4& dest, const f32 vertex_alpha) const { - f32 v; - v = r * v1.r; dest.x = v < 1.f ? v : 1.f; - v = g * v1.g; dest.y = v < 1.f ? v : 1.f; - v = b * v1.b; dest.z = v < 1.f ? v : 1.f; + dest.a = vertex_alpha; + dest.r = r <= 1.f ? r : 1.f; + dest.g = g <= 1.f ? g : 1.f; + dest.b = b <= 1.f ? b : 1.f; } - void sat_xyz(sVec4 &dest, const sVec3Color& v1) const + + void sat_mul_xyz(sVec4& dest, const sVec4& v1) const { f32 v; dest.a = 1.f; @@ -357,26 +423,45 @@ struct sVec3Color v = b * v1.b; dest.b = v < 1.f ? v : 1.f; } + void sat_mul_xyz(sVec3Pack& dest, const sVec4& v1) const + { + f32 v; + v = r * v1.r; dest.x = v < 1.f ? v : 1.f; + v = g * v1.g; dest.y = v < 1.f ? v : 1.f; + v = b * v1.b; dest.z = v < 1.f ? v : 1.f; + } }; -//internal BurningShaderFlag for a Vertex +//shader +inline void irr::video::sVec2::operator=(const sVec4& b) +{ + x = b.x; + y = b.y; +} + +//!during runtime sVec3Pack +typedef sVec4 sVec3Pack_unpack; + +typedef sVec4 sVec3Color; + +//internal BurningShaderFlag for a Vertex (Attributes) enum e4DVertexFlag { - VERTEX4D_CLIPMASK = 0x0000003F, - VERTEX4D_CLIP_NEAR = 0x00000001, - VERTEX4D_CLIP_FAR = 0x00000002, - VERTEX4D_CLIP_LEFT = 0x00000004, - VERTEX4D_CLIP_RIGHT = 0x00000008, - VERTEX4D_CLIP_BOTTOM = 0x00000010, - VERTEX4D_CLIP_TOP = 0x00000020, - VERTEX4D_INSIDE = 0x0000003F, + VERTEX4D_CLIPMASK = 0x0000003F, + VERTEX4D_CLIP_NEAR = 0x00000001, + VERTEX4D_CLIP_FAR = 0x00000002, + VERTEX4D_CLIP_LEFT = 0x00000004, + VERTEX4D_CLIP_RIGHT = 0x00000008, + VERTEX4D_CLIP_BOTTOM = 0x00000010, + VERTEX4D_CLIP_TOP = 0x00000020, + VERTEX4D_INSIDE = 0x0000003F, - VERTEX4D_PROJECTED = 0x00000100, - VERTEX4D_VAL_ZERO = 0x00000200, - VERTEX4D_VAL_ONE = 0x00000400, + VERTEX4D_PROJECTED = 0x00000100, + //VERTEX4D_VAL_ZERO = 0x00000200, + //VERTEX4D_VAL_ONE = 0x00000400, - VERTEX4D_FORMAT_MASK = 0xFFFF0000, + VERTEX4D_FORMAT_MASK = 0xFFFF0000, VERTEX4D_FORMAT_MASK_TEXTURE = 0x000F0000, VERTEX4D_FORMAT_TEXTURE_1 = 0x00010000, @@ -384,19 +469,20 @@ enum e4DVertexFlag VERTEX4D_FORMAT_TEXTURE_3 = 0x00030000, VERTEX4D_FORMAT_TEXTURE_4 = 0x00040000, - VERTEX4D_FORMAT_MASK_COLOR = 0x00F00000, - VERTEX4D_FORMAT_COLOR_1 = 0x00100000, - VERTEX4D_FORMAT_COLOR_2_FOG = 0x00200000, - VERTEX4D_FORMAT_COLOR_3 = 0x00300000, - VERTEX4D_FORMAT_COLOR_4 = 0x00400000, + VERTEX4D_FORMAT_MASK_COLOR = 0x00F00000, + VERTEX4D_FORMAT_COLOR_1 = 0x00100000, + VERTEX4D_FORMAT_COLOR_2_FOG = 0x00200000, + VERTEX4D_FORMAT_COLOR_3 = 0x00300000, + VERTEX4D_FORMAT_COLOR_4 = 0x00400000, - VERTEX4D_FORMAT_MASK_LIGHT = 0x0F000000, - VERTEX4D_FORMAT_LIGHT_1 = 0x01000000, - VERTEX4D_FORMAT_LIGHT_2 = 0x02000000, + VERTEX4D_FORMAT_MASK_LIGHT = 0x0F000000, + VERTEX4D_FORMAT_LIGHT_1 = 0x01000000, + //VERTEX4D_FORMAT_LIGHT_2 = 0x02000000, VERTEX4D_FORMAT_MASK_TANGENT = 0xF0000000, VERTEX4D_FORMAT_BUMP_DOT3 = 0x10000000, - VERTEX4D_FORMAT_SPECULAR = 0x20000000, + VERTEX4D_FORMAT_PARALLAX = 0x20000000, + //VERTEX4D_FORMAT_SPECULAR = 0x20000000, }; @@ -406,10 +492,13 @@ enum e4DVertexType E4VT_STANDARD = 0, // EVT_STANDARD, video::S3DVertex. E4VT_2TCOORDS = 1, // EVT_2TCOORDS, video::S3DVertex2TCoords. E4VT_TANGENTS = 2, // EVT_TANGENTS, video::S3DVertexTangents - E4VT_REFLECTION_MAP = 3, - E4VT_SHADOW = 4, // float * 3 - E4VT_NO_TEXTURE = 5, // runtime if texture missing - E4VT_LINE = 6, + + //encode attributes + E4VT_TANGENTS_PARALLAX = 4, + E4VT_REFLECTION_MAP = 5, + E4VT_SHADOW = 6, // float * 3 + E4VT_NO_TEXTURE = 7, // runtime if texture missing + E4VT_LINE = 8, E4VT_COUNT }; @@ -418,28 +507,28 @@ enum e4DIndexType { E4IT_16BIT = 1, // EIT_16BIT, E4IT_32BIT = 2, // EIT_32BIT, - E4IT_NONE = 4, // + E4IT_NONE = 4, // }; -#ifdef BURNINGVIDEO_RENDERER_BEAUTIFUL - #define BURNING_MATERIAL_MAX_TEXTURES 4 - #define BURNING_MATERIAL_MAX_COLORS 4 - #define BURNING_MATERIAL_MAX_LIGHT_TANGENT 1 +#if defined(BURNINGVIDEO_RENDERER_BEAUTIFUL) || defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) +#define BURNING_MATERIAL_MAX_TEXTURES 4 +#define BURNING_MATERIAL_MAX_COLORS 4 +#define BURNING_MATERIAL_MAX_LIGHT_TANGENT 1 - //ensure handcrafted sizeof(s4DVertex) - #define sizeof_s4DVertex 128 +//ensure handcrafted sizeof(s4DVertex) +#define sizeof_s4DVertex 128 #else - #define BURNING_MATERIAL_MAX_TEXTURES 2 - #ifdef SOFTWARE_DRIVER_2_USE_VERTEX_COLOR - #define BURNING_MATERIAL_MAX_COLORS 1 - #else - #define BURNING_MATERIAL_MAX_COLORS 0 - #endif - #define BURNING_MATERIAL_MAX_LIGHT_TANGENT 1 +#define BURNING_MATERIAL_MAX_TEXTURES 2 +#ifdef SOFTWARE_DRIVER_2_USE_VERTEX_COLOR +#define BURNING_MATERIAL_MAX_COLORS 1 +#else +#define BURNING_MATERIAL_MAX_COLORS 0 +#endif +#define BURNING_MATERIAL_MAX_LIGHT_TANGENT 1 - //ensure handcrafted sizeof(s4DVertex) - #define sizeof_s4DVertex 64 +//ensure handcrafted sizeof(s4DVertex) +#define sizeof_s4DVertex 64 #endif // dummy Vertex. used for calculation vertex memory size @@ -467,10 +556,10 @@ struct s4DVertex { sVec4 Pos; #if BURNING_MATERIAL_MAX_TEXTURES > 0 - sVec2 Tex[ BURNING_MATERIAL_MAX_TEXTURES ]; + sVec2 Tex[BURNING_MATERIAL_MAX_TEXTURES]; #endif #if BURNING_MATERIAL_MAX_COLORS > 0 - sVec4 Color[ BURNING_MATERIAL_MAX_COLORS ]; + sVec4 Color[BURNING_MATERIAL_MAX_COLORS]; #endif #if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 sVec3Pack LightTangent[BURNING_MATERIAL_MAX_LIGHT_TANGENT]; @@ -480,13 +569,13 @@ struct s4DVertex #if BURNING_MATERIAL_MAX_COLORS < 1 || BURNING_MATERIAL_MAX_LIGHT_TANGENT < 1 - u8 __align [sizeof_s4DVertex - sizeof (s4DVertex_proxy) ]; + u8 __align[sizeof_s4DVertex - sizeof(s4DVertex_proxy)]; #endif // f = a * t + b * ( 1 - t ) - void interpolate(const s4DVertex& burning_restrict b, const s4DVertex& burning_restrict a, const ipoltype t) + REALINLINE void interpolate(const s4DVertex& burning_restrict b, const s4DVertex& burning_restrict a, const ipoltype t) { - Pos.interpolate ( a.Pos, b.Pos, t ); + Pos.interpolate(a.Pos, b.Pos, t); #if 0 Tex[0].interpolate(a.Tex[0], b.Tex[0], t); Tex[1].interpolate(a.Tex[1], b.Tex[1], t); @@ -499,45 +588,103 @@ struct s4DVertex #if BURNING_MATERIAL_MAX_TEXTURES > 0 size = (flag & VERTEX4D_FORMAT_MASK_TEXTURE) >> 16; - for ( i = 0; i!= size; ++i ) + for (i = 0; i != size; ++i) { - Tex[i].interpolate ( a.Tex[i], b.Tex[i], t ); + Tex[i].interpolate(a.Tex[i], b.Tex[i], t); } #endif #if BURNING_MATERIAL_MAX_COLORS > 0 size = (flag & VERTEX4D_FORMAT_MASK_COLOR) >> 20; - for ( i = 0; i!= size; ++i ) + for (i = 0; i != size; ++i) { - Color[i].interpolate ( a.Color[i], b.Color[i], t ); + Color[i].interpolate(a.Color[i], b.Color[i], t); } #endif #if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 size = (flag & VERTEX4D_FORMAT_MASK_LIGHT) >> 24; - for ( i = 0; i!= size; ++i ) + for (i = 0; i != size; ++i) { - LightTangent[i].interpolate ( a.LightTangent[i], b.LightTangent[i], t ); + LightTangent[i].interpolate(a.LightTangent[i], b.LightTangent[i], t); } #endif } + + REALINLINE void reset_interpolate() + { +#if 1 +#if BURNING_MATERIAL_MAX_TEXTURES > 0 + Tex[0].x = 0.f; + Tex[0].y = 0.f; +#endif +#if BURNING_MATERIAL_MAX_TEXTURES > 1 + Tex[1].x = 0.f; + Tex[1].y = 0.f; +#endif +#if BURNING_MATERIAL_MAX_TEXTURES > 2 + Tex[2].x = 0.f; + Tex[2].y = 0.f; +#endif +#if BURNING_MATERIAL_MAX_TEXTURES > 3 + Tex[3].x = 0.f; + Tex[3].y = 0.f; +#endif +#endif + +#if BURNING_MATERIAL_MAX_COLORS > 0 + Color[0].r = 0.f; + Color[0].g = 0.f; + Color[0].b = 0.f; + Color[0].a = 1.f; +#endif + +#if BURNING_MATERIAL_MAX_COLORS > 1 + //specular + Color[1].r = 0.f; + Color[1].g = 0.f; + Color[1].b = 0.f; + Color[1].a = 1.f; +#endif + +#if BURNING_MATERIAL_MAX_COLORS > 2 + Color[2].r = 0.f; + Color[2].g = 0.f; + Color[2].b = 0.f; + Color[2].a = 1.f; +#endif + +#if BURNING_MATERIAL_MAX_COLORS > 3 + Color[3].r = 0.f; + Color[3].g = 0.f; + Color[3].b = 0.f; + Color[3].a = 1.f; +#endif + +#if BURNING_MATERIAL_MAX_LIGHT_TANGENT > 0 + LightTangent[0].x = 0.f; + LightTangent[0].y = 0.f; + LightTangent[0].z = 0.f; +#endif + } + }; // ----------------- Vertex Cache --------------------------- -// Buffer is used as pairs of S4DVertex (0 ... ndc, 1 .. dc and projected) +// Buffer is used as interleaved pairs of S4DVertex (0 ... ndc, 1 .. dc and projected) typedef s4DVertex s4DVertexPair; #define sizeof_s4DVertexPairRel 2 -#define s4DVertex_ofs(index) ((index)*sizeof_s4DVertexPairRel) -#define s4DVertex_proj(index) ((index)*sizeof_s4DVertexPairRel) + 1 +#define s4DVertex_ofs(index) ((index)*sizeof_s4DVertexPairRel) +#define s4DVertex_pro(index) (((index)*sizeof_s4DVertexPairRel) + 1) struct SAligned4DVertex { SAligned4DVertex() - :data(0),ElementSize(0),mem(0) {} + :data(0), ElementSize(0), mem(0) {} - virtual ~SAligned4DVertex () + virtual ~SAligned4DVertex() { if (mem) { @@ -581,17 +728,17 @@ static REALINLINE void memcpy_s4DVertexPair(void* burning_restrict dst, const vo u64* burning_restrict dst64 = (u64*)dst; const u64* burning_restrict src64 = (const u64*)src; - dst64[0] = src64[0]; - dst64[1] = src64[1]; - dst64[2] = src64[2]; - dst64[3] = src64[3]; - dst64[4] = src64[4]; - dst64[5] = src64[5]; - dst64[6] = src64[6]; - dst64[7] = src64[7]; + dst64[0] = src64[0]; + dst64[1] = src64[1]; + dst64[2] = src64[2]; + dst64[3] = src64[3]; + dst64[4] = src64[4]; + dst64[5] = src64[5]; + dst64[6] = src64[6]; + dst64[7] = src64[7]; - dst64[8] = src64[8]; - dst64[9] = src64[9]; + dst64[8] = src64[8]; + dst64[9] = src64[9]; dst64[10] = src64[10]; dst64[11] = src64[11]; dst64[12] = src64[12]; @@ -603,17 +750,17 @@ static REALINLINE void memcpy_s4DVertexPair(void* burning_restrict dst, const vo u64* burning_restrict dst64 = (u64*)dst; const u64* burning_restrict src64 = (const u64*)src; - dst64[0] = src64[0]; - dst64[1] = src64[1]; - dst64[2] = src64[2]; - dst64[3] = src64[3]; - dst64[4] = src64[4]; - dst64[5] = src64[5]; - dst64[6] = src64[6]; - dst64[7] = src64[7]; + dst64[0] = src64[0]; + dst64[1] = src64[1]; + dst64[2] = src64[2]; + dst64[3] = src64[3]; + dst64[4] = src64[4]; + dst64[5] = src64[5]; + dst64[6] = src64[6]; + dst64[7] = src64[7]; - dst64[8] = src64[8]; - dst64[9] = src64[9]; + dst64[8] = src64[8]; + dst64[9] = src64[9]; dst64[10] = src64[10]; dst64[11] = src64[11]; dst64[12] = src64[12]; @@ -656,28 +803,29 @@ static REALINLINE void memcpy_s4DVertexPair(void* burning_restrict dst, const vo *dst32++ = *src32++; len -= 32; } -/* - while (len >= 4) - { - *dst32++ = *src32++; - len -= 4; - } -*/ + /* + while (len >= 4) + { + *dst32++ = *src32++; + len -= 4; + } + */ #endif } -//! hold info for different Vertex Types +//! hold info for different Vertex Types (Attribute mapping) struct SVSize { - size_t Format; // e4DVertexFlag VERTEX4D_FORMAT_MASK_TEXTURE - size_t Pitch; // sizeof Vertex - size_t TexSize; // amount Textures - size_t TexCooSize; // sizeof TextureCoordinates + u32 Format; // e4DVertexFlag VERTEX4D_FORMAT_MASK_TEXTURE + u32 Pitch; // sizeof Vertex + u32 TexSize; // amount Textures + u32 TexCooSize; // amount TextureCoordinates + u32 ColSize; // amount Color Interpolators }; -// a cache info +// index cache info struct SCacheInfo { u32 index; @@ -687,17 +835,10 @@ struct SCacheInfo //must at least hold all possible (clipped) vertices of primitive. #define VERTEXCACHE_ELEMENT 16 #define VERTEXCACHE_MISS 0xFFFFFFFF -struct SVertexCache +struct SVertexShader { - SVertexCache () {} - ~SVertexCache() {} - - //VertexType - SVSize vSize[E4VT_COUNT]; - - SCacheInfo info[VERTEXCACHE_ELEMENT]; - SCacheInfo info_temp[VERTEXCACHE_ELEMENT]; - + SVertexShader() {} + ~SVertexShader() {} // Transformed and lite, clipping state // + Clipped, Projected @@ -714,12 +855,53 @@ struct SVertexCache u32 indicesPitch; // primitives consist of x vertices - size_t primitiveHasVertex; + u32 primitiveHasVertex; + u32 primitiveRun; + + //VertexType + SVSize vSize[E4VT_COUNT]; e4DVertexType vType; //E_VERTEX_TYPE scene::E_PRIMITIVE_TYPE pType; //scene::E_PRIMITIVE_TYPE e4DIndexType iType; //E_INDEX_TYPE iType + REALINLINE u32 index(u32 i) const + { + u32 o; + if (i >= indexCount) + i = 0; + switch (iType) + { + case E4IT_16BIT: o = ((u16*)indices)[i]; break; + case E4IT_32BIT: o = ((u32*)indices)[i]; break; + default: case E4IT_NONE: o = i; break; + } + return o; + } + + REALINLINE s4DVertexPair* vertex(const u32 sourceIndex) const + { + for (size_t i = 0; i < VERTEXCACHE_ELEMENT; ++i) + { + if (info[i].index == sourceIndex) + { + return mem.data + s4DVertex_ofs(i); + } + } + return mem.data; //error + } + + void setPrimitiveType(const scene::E_PRIMITIVE_TYPE pType, const u32 primitiveCount); + void setIndices(const void* indices, const video::E_INDEX_TYPE iType); + + SCacheInfo info[VERTEXCACHE_ELEMENT]; + SCacheInfo info_temp[VERTEXCACHE_ELEMENT]; + + void set_info_miss(); + + u32 fillIndex; + void get_next_index_cacheline(); + void getPrimitive(s4DVertexPair* face[4],CBurningVideoDriver* driver); }; @@ -804,8 +986,8 @@ struct sScanLineData // passed to pixel Shader struct sPixelShaderData { - tVideoSample *dst; - fp24 *z; + tVideoSample* dst; + fp24* z; s32 xStart; s32 xEnd; @@ -816,7 +998,7 @@ struct sPixelShaderData /* load a color value */ -REALINLINE void getTexel_plain2 ( tFixPoint &r, tFixPoint &g, tFixPoint &b,const sVec4 &v ) +REALINLINE void getTexel_plain2(tFixPoint& r, tFixPoint& g, tFixPoint& b, const sVec4& v) { r = tofix(v.r, FIX_POINT_F32_MUL); g = tofix(v.g, FIX_POINT_F32_MUL); @@ -827,22 +1009,22 @@ REALINLINE void getTexel_plain2 ( tFixPoint &r, tFixPoint &g, tFixPoint &b,const /* load a color value */ -REALINLINE void getSample_color ( tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, const sVec4 &v ) +REALINLINE void getSample_color(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, const sVec4& v) { - a = tofix ( v.a, FIX_POINT_F32_MUL); - r = tofix ( v.r, COLOR_MAX * FIX_POINT_F32_MUL); - g = tofix ( v.g, COLOR_MAX * FIX_POINT_F32_MUL); - b = tofix ( v.b, COLOR_MAX * FIX_POINT_F32_MUL); + a = tofix(v.a, FIX_POINT_F32_MUL); + r = tofix(v.r, COLOR_MAX * FIX_POINT_F32_MUL); + g = tofix(v.g, COLOR_MAX * FIX_POINT_F32_MUL); + b = tofix(v.b, COLOR_MAX * FIX_POINT_F32_MUL); } /* load a color value */ -REALINLINE void getSample_color ( tFixPoint &r, tFixPoint &g, tFixPoint &b,const sVec4 &v ) +REALINLINE void getSample_color(tFixPoint& r, tFixPoint& g, tFixPoint& b, const sVec4& v) { - r = tofix ( v.r, COLOR_MAX * FIX_POINT_F32_MUL); - g = tofix ( v.g, COLOR_MAX * FIX_POINT_F32_MUL); - b = tofix ( v.b, COLOR_MAX * FIX_POINT_F32_MUL); + r = tofix(v.r, COLOR_MAX * FIX_POINT_F32_MUL); + g = tofix(v.g, COLOR_MAX * FIX_POINT_F32_MUL); + b = tofix(v.b, COLOR_MAX * FIX_POINT_F32_MUL); } #endif @@ -850,14 +1032,15 @@ REALINLINE void getSample_color ( tFixPoint &r, tFixPoint &g, tFixPoint &b,const load a color value. mulby controls [0;1] or [0;ColorMax] aka getSample_color */ -REALINLINE void vec4_to_fix(tFixPoint &r, tFixPoint &g, tFixPoint &b,const sVec4 &v, const f32 mulby ) +REALINLINE void vec4_to_fix(tFixPoint& r, tFixPoint& g, tFixPoint& b, const sVec4& v, const f32 mulby) { r = tofix(v.r, mulby); g = tofix(v.g, mulby); b = tofix(v.b, mulby); } -REALINLINE void vec4_to_fix(tFixPoint &a,tFixPoint &r, tFixPoint &g, tFixPoint &b,const sVec4 &v, const f32 mulby) + +REALINLINE void vec4_to_fix(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, const sVec4& v, const f32 mulby) { a = tofix(v.a, mulby); r = tofix(v.r, mulby); @@ -865,9 +1048,5 @@ REALINLINE void vec4_to_fix(tFixPoint &a,tFixPoint &r, tFixPoint &g, tFixPoint & b = tofix(v.b, mulby); } - -} - -} - +burning_namespace_end #endif diff --git a/source/Irrlicht/SoftwareDriver2_compile_config.h b/source/Irrlicht/SoftwareDriver2_compile_config.h index 968a2d50..3b4d1f8b 100644 --- a/source/Irrlicht/SoftwareDriver2_compile_config.h +++ b/source/Irrlicht/SoftwareDriver2_compile_config.h @@ -10,7 +10,7 @@ // Generic Render Flags for burning's video rasterizer // defined now in irrlicht compile config -#if 1 && defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) +#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) #undef BURNINGVIDEO_RENDERER_BEAUTIFUL #define SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT @@ -18,19 +18,19 @@ #define SOFTWARE_DRIVER_2_BILINEAR #define SOFTWARE_DRIVER_2_LIGHTING #define SOFTWARE_DRIVER_2_USE_VERTEX_COLOR -//#define SOFTWARE_DRIVER_2_USE_SEPARATE_SPECULAR_COLOR +#define SOFTWARE_DRIVER_2_USE_SEPARATE_SPECULAR_COLOR #define SOFTWARE_DRIVER_2_USE_WBUFFER #define SOFTWARE_DRIVER_2_32BIT #define SOFTWARE_DRIVER_2_TEXTURE_COLOR_FORMAT ECF_A8R8G8B8 #define SOFTWARE_DRIVER_2_RENDERTARGET_COLOR_FORMAT ECF_A8R8G8B8 -#define SOFTWARE_DRIVER_2_TEXTURE_MAXSIZE 256 +#define SOFTWARE_DRIVER_2_TEXTURE_MAXSIZE 0x100000 #define SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM -#define SOFTWARE_DRIVER_2_MIPMAPPING_MAX 8 +#define SOFTWARE_DRIVER_2_MIPMAPPING_MAX 16 #define SOFTWARE_DRIVER_2_MIPMAPPING_MIN_SIZE 1 -#define SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN #define SOFTWARE_DRIVER_2_CLIPPING #define SOFTWARE_DRIVER_2_2D_AS_3D #define SOFTWARE_DRIVER_2_INTERLACED +#define SOFTWARE_DRIVER_2_RENDERTARGET_SCALE #endif @@ -49,10 +49,10 @@ #define SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM #define SOFTWARE_DRIVER_2_MIPMAPPING_MAX 16 #define SOFTWARE_DRIVER_2_MIPMAPPING_MIN_SIZE 1 -#define SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN #define SOFTWARE_DRIVER_2_CLIPPING #define SOFTWARE_DRIVER_2_2D_AS_3D #define SOFTWARE_DRIVER_2_INTERLACED +#define SOFTWARE_DRIVER_2_RENDERTARGET_SCALE #endif //! Set Flags for Windows Mobile @@ -70,7 +70,6 @@ //#define SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM #define SOFTWARE_DRIVER_2_MIPMAPPING_MAX 4 #define SOFTWARE_DRIVER_2_MIPMAPPING_MIN_SIZE 8 -#define SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN //#define SOFTWARE_DRIVER_2_CLIPPING #define SOFTWARE_DRIVER_2_2D_AS_2D #endif @@ -88,7 +87,6 @@ #define SOFTWARE_DRIVER_2_RENDERTARGET_COLOR_FORMAT ECF_A1R5G5B5 #define SOFTWARE_DRIVER_2_MIPMAPPING_MAX 4 #define SOFTWARE_DRIVER_2_MIPMAPPING_MIN_SIZE 8 -#define SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN #define SOFTWARE_DRIVER_2_CLIPPING #define SOFTWARE_DRIVER_2_2D_AS_2D #define SOFTWARE_DRIVER_2_INTERLACED @@ -104,13 +102,12 @@ #define SOFTWARE_DRIVER_2_USE_VERTEX_COLOR //#define SOFTWARE_DRIVER_2_USE_WBUFFER #define SOFTWARE_DRIVER_2_16BIT -#define SOFTWARE_DRIVER_2_TEXTURE_MAXSIZE 128 +#define SOFTWARE_DRIVER_2_TEXTURE_MAXSIZE 256 #define SOFTWARE_DRIVER_2_TEXTURE_COLOR_FORMAT ECF_A1R5G5B5 #define SOFTWARE_DRIVER_2_RENDERTARGET_COLOR_FORMAT ECF_A1R5G5B5 //#define SOFTWARE_DRIVER_2_TEXTURE_TRANSFORM #define SOFTWARE_DRIVER_2_MIPMAPPING_MAX 1 #define SOFTWARE_DRIVER_2_MIPMAPPING_MIN_SIZE 1 -#define SOFTWARE_DRIVER_2_SCANLINE_MAG_MIN //#define SOFTWARE_DRIVER_2_CLIPPING #define SOFTWARE_DRIVER_2_2D_AS_2D #define SOFTWARE_DRIVER_2_INTERLACED @@ -126,6 +123,7 @@ #endif #define reciprocal_zero(x) ((x) != 0.f ? 1.f / (x):0.f) +#define reciprocal_zero_pos_underflow(x) ((x) != 0.f ? 1.f / (x):0.f) #define reciprocal_one(x) ((x) != 0.f ? 1.f / (x):1.f) //Control Scanline output @@ -138,44 +136,72 @@ static inline float fill_step_x(float x) { return x != 0.f ? (float)SOFTWARE_DRI #define interlace_control_bit 1 #define interlace_control_mask ((1<> (interlace_control_bit-1) ) & 1) == (Interlaced.nr & 1)) ) -//#define interlace_scanline +#define interlace_scanline_active ((line.y & interlace_control_mask) == Interlaced.nr) +#define if_interlace_scanline_active if (interlace_scanline_active) +#define if_interlace_scanline if ( Interlaced.bypass || interlace_scanline_active ) #else -#define interlace_scanline -#define interlace_scanline_enabled +#define if_interlace_scanline_active +#define if_interlace_scanline #endif -#define scissor_test_y if ((~TL_Flag & TL_SCISSOR) || ((line.y >= Scissor.y0) & (line.y <= Scissor.y1))) -#define scissor_test_x if ((~TL_Flag & TL_SCISSOR) || ((i+xStart >= Scissor.x0) & (i+xStart <= Scissor.x1))) +#define if_scissor_test_y if ((~TL_Flag & TL_SCISSOR) || ((line.y >= Scissor.y0) & (line.y <= Scissor.y1))) +#define if_scissor_test_x if ((~TL_Flag & TL_SCISSOR) || ((i+xStart >= Scissor.x0) & (i+xStart <= Scissor.x1))) +// https://inst.eecs.berkeley.edu/~cs184/sp04/as/as2/assgn-02_faqs.html +//#define fill_convention_top_left(x) (s32) ceilf(x) +//#define fill_convention_right(x) (s32) floorf(x) +//#define fill_convention_right(x) (((s32) ceilf(x))-1) + +// http://www.chrishecker.com/images/9/97/Gdmtex2.pdf +#define fill_convention_top(y) (s32) ceilf(y) +#define fill_convention_down(y) (((s32) ceilf(y))-1) #define fill_convention_left(x) (s32) ceilf(x) -#define fill_convention_right(x) ((s32) ceilf(x))-1 +#define fill_convention_right(x) (((s32) ceilf(x))-1) + + #define fill_convention_none(x) (s32) (x) -#define fill_convention_edge(x) (s32) floorf(fabsf(x)+0.f) -//#define fill_convention_left(x) 65536 - int(65536.0f - x) +#define fill_convention_edge(x) (s32) floorf(fabsf(x)) + +//fixpoint +//#define fill_convention_top_left(x) 65536 - int(65536.0f - x) //#define fill_convention_right(x) 65535 - int(65536.0f - x) -//Check coordinates are in render target/window space +//Check that coordinates are in render target/window space //#define SOFTWARE_DRIVER_2_DO_CLIPCHECK #if defined (SOFTWARE_DRIVER_2_DO_CLIPCHECK) && defined(_WIN32) #define SOFTWARE_DRIVER_2_CLIPCHECK if( xStart < 0 || xStart + dx >= (s32)RenderTarget->getDimension().Width || line.y < 0 || line.y >= (s32) RenderTarget->getDimension().Height ) __debugbreak() @@ -241,6 +267,7 @@ typedef float ipoltype; #endif #define ipol_lower_equal_0(n) ((n) <= (ipoltype)0.0) +#define ipol_lower_0(n) ((n) < (ipoltype)0.0) #define ipol_greater_0(n) ((n) > (ipoltype)0.0) #if (_MSC_VER > 1700 ) @@ -249,33 +276,34 @@ typedef float ipoltype; #define burning_restrict #endif -/* - if (condition) state |= mask; else state &= ~mask; -*/ -static inline void burning_setbit(size_t& state, int condition, size_t mask) -{ - if (condition) state |= mask; - else state &= ~mask; -} +#if 0 && defined(_MSC_VER) && (_MSC_VER > 1500) && !defined(_DEBUG) +#pragma auto_inline(on) +#pragma inline_depth(255) +#pragma inline_recursion(on) +#endif -/* - if (condition) state |= m; else state &= ~m; -*/ -REALINLINE void burning_setbit32(unsigned int& state, int condition, const unsigned int mask) -{ - // 0, or any positive to mask - //s32 conmask = -condition >> 31; - state ^= ((-condition >> 31) ^ state) & mask; -} #define burning_stringify(s) #s #define burning_create_indirect(s) create_##s #define burning_create(s) burning_create_indirect(s) +// don't want intend on namespaces (autoformat) +#define burning_namespace_start namespace irr { namespace video { +#define burning_namespace_end } /* end namespace video*/ } /* end namespace irr */ #if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0) + +#if defined(_MSC_VER) && _MSC_VER > 1310 && !defined (_WIN32_WCE) #define snprintf_irr sprintf_s -#define EVDF_DEPTH_CLAMP 43 +#elif defined(__APPLE__) +#define snprintf_irr snprintf +#elif !defined(__CYGWIN__) +#define swprintf_irr _snwprintf +#define snprintf_irr _snprintf +#endif + + +//#define EVDF_DEPTH_CLAMP (video::E_VIDEO_DRIVER_FEATURE) 43 #define E_CUBE_SURFACE int #define ECFN_DISABLED 0 diff --git a/source/Irrlicht/SoftwareDriver2_helper.h b/source/Irrlicht/SoftwareDriver2_helper.h index 973413a8..d45b3d75 100644 --- a/source/Irrlicht/SoftwareDriver2_helper.h +++ b/source/Irrlicht/SoftwareDriver2_helper.h @@ -3,16 +3,14 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h /* - History: - - changed behavior for log2 textures ( replaced multiplies by shift ) +History: +- changed behavior for log2 textures ( replaced multiplies by shift ) */ #ifndef S_VIDEO_2_SOFTWARE_HELPER_H_INCLUDED #define S_VIDEO_2_SOFTWARE_HELPER_H_INCLUDED #include "SoftwareDriver2_compile_config.h" -#include "irrMath.h" -//#include "irrMathFastCompat.h" #include "CSoftwareTexture2.h" #include "SMaterial.h" @@ -23,44 +21,44 @@ namespace irr // supporting different packed pixel needs many defines... #if defined(SOFTWARE_DRIVER_2_32BIT) - typedef u32 tVideoSample; - typedef u32 tStencilSample; +typedef u32 tVideoSample; +typedef u32 tStencilSample; - #define MASK_A 0xFF000000 - #define MASK_R 0x00FF0000 - #define MASK_G 0x0000FF00 - #define MASK_B 0x000000FF +#define MASK_A 0xFF000000 +#define MASK_R 0x00FF0000 +#define MASK_G 0x0000FF00 +#define MASK_B 0x000000FF - #define SHIFT_A (unsigned)24 - #define SHIFT_R (unsigned)16 - #define SHIFT_G (unsigned)8 - #define SHIFT_B (unsigned)0 +#define SHIFT_A (unsigned)24 +#define SHIFT_R (unsigned)16 +#define SHIFT_G (unsigned)8 +#define SHIFT_B (unsigned)0 - #define COLOR_MAX 0xFF - #define COLOR_MAX_LOG2 8 - #define COLOR_BRIGHT_WHITE 0xFFFFFFFF +#define COLOR_MAX 0xFF +#define COLOR_MAX_LOG2 8 +#define COLOR_BRIGHT_WHITE 0xFFFFFFFF - #define SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY (unsigned)2 - #define SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY (unsigned)2 +#define SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY (unsigned)2 +#define SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY (unsigned)2 #else - typedef u16 tVideoSample; - typedef u8 tStencilSample; +typedef u16 tVideoSample; +typedef u8 tStencilSample; - #define MASK_A 0x8000 - #define MASK_R 0x7C00 - #define MASK_G 0x03E0 - #define MASK_B 0x001F +#define MASK_A 0x8000 +#define MASK_R 0x7C00 +#define MASK_G 0x03E0 +#define MASK_B 0x001F - #define SHIFT_A (unsigned)15 - #define SHIFT_R (unsigned)10 - #define SHIFT_G (unsigned)5 - #define SHIFT_B (unsigned)0 +#define SHIFT_A (unsigned)15 +#define SHIFT_R (unsigned)10 +#define SHIFT_G (unsigned)5 +#define SHIFT_B (unsigned)0 - #define COLOR_MAX 0x1F - #define COLOR_MAX_LOG2 5 - #define COLOR_BRIGHT_WHITE 0xFFFF - #define SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY (unsigned)1 - #define SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY (unsigned)1 +#define COLOR_MAX 0x1F +#define COLOR_MAX_LOG2 5 +#define COLOR_BRIGHT_WHITE 0xFFFF +#define SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY (unsigned)1 +#define SOFTWARE_DRIVER_2_RENDERTARGET_GRANULARITY (unsigned)1 #endif @@ -73,9 +71,9 @@ namespace irr //! a more useful memset for pixel. dest must be aligned at least to 4 byte // (standard memset only works with 8-bit values) -inline void memset32(void * dest, const u32 value, size_t bytesize) +static inline void memset32(void* dest, const u32 value, size_t bytesize) { - u32 * d = (u32*) dest; + u32* d = (u32*)dest; size_t i; @@ -97,7 +95,7 @@ inline void memset32(void * dest, const u32 value, size_t bytesize) i -= 1; } - i = (bytesize >> 2 ) & 7; + i = (bytesize >> 2) & 7; while (i) { d[0] = value; @@ -108,9 +106,9 @@ inline void memset32(void * dest, const u32 value, size_t bytesize) //! a more useful memset for pixel. dest must be aligned at least to 2 byte // (standard memset only works with 8-bit values) -inline void memset16(void * dest, const u16 value, size_t bytesize) +static inline void memset16(void* dest, const u16 value, size_t bytesize) { - u16 * d = (u16*) dest; + u16* d = (u16*)dest; size_t i; @@ -132,7 +130,7 @@ inline void memset16(void * dest, const u16 value, size_t bytesize) --i; } - i = (bytesize >> 1 ) & 7; + i = (bytesize >> 1) & 7; while (i) { d[0] = value; @@ -142,7 +140,7 @@ inline void memset16(void * dest, const u16 value, size_t bytesize) } //! memset interleaved -inline void memset32_interlaced(void* dest, const u32 value, size_t pitch,u32 height,const interlaced_control Interlaced) +static inline void memset32_interlaced(void* dest, const u32 value, size_t pitch, u32 height, const interlaced_control Interlaced) { if (Interlaced.bypass) return memset32(dest, value, pitch * height); @@ -150,7 +148,7 @@ inline void memset32_interlaced(void* dest, const u32 value, size_t pitch,u32 he interlace_scanline_data line; for (line.y = 0; line.y < height; line.y += SOFTWARE_DRIVER_2_STEP_Y) { - interlace_scanline_enabled memset32(dst, value, pitch); + if_interlace_scanline_active memset32(dst, value, pitch); dst += pitch; } } @@ -162,8 +160,8 @@ inline void memset32_interlaced(void* dest, const u32 value, size_t pitch,u32 he typedef union { float f; unsigned int u; - struct { unsigned int frac:23; unsigned exp:8; unsigned int sign:1; } fields; - struct { unsigned int frac_exp:31; } abs; + struct { unsigned int frac : 23; unsigned exp : 8; unsigned int sign : 1; } fields; + struct { unsigned int frac_exp : 31; } abs; } PACK_STRUCT ieee754; // Default alignment @@ -176,7 +174,7 @@ typedef union { #if 0 // integer log2 of a float ieee 754. [not used anymore] -static inline s32 s32_log2_f32( f32 f) +static inline s32 s32_log2_f32(f32 f) { //u32 x = IR ( f ); return ((x & 0x7F800000) >> 23) - 127; ieee754 _log2; @@ -203,14 +201,14 @@ static inline s32 s32_log2_s32(u32 in) static inline s32 s32_abs(s32 x) { s32 b = x >> 31; - return (x ^ b ) - b; + return (x ^ b) - b; } //! conditional set based on mask and arithmetic shift -REALINLINE u32 if_mask_a_else_b ( const u32 mask, const u32 a, const u32 b ) +REALINLINE u32 if_mask_a_else_b(const u32 mask, const u32 a, const u32 b) { - return ( mask & ( a ^ b ) ) ^ b; + return (mask & (a ^ b)) ^ b; } #endif @@ -219,7 +217,7 @@ REALINLINE u32 if_mask_a_else_b ( const u32 mask, const u32 a, const u32 b ) Pixel = dest * ( 1 - alpha ) + source * alpha alpha [0;256] */ -REALINLINE u32 PixelBlend32 ( const u32 c2, const u32 c1, const u32 alpha ) +REALINLINE u32 PixelBlend32(const u32 c2, const u32 c1, const u32 alpha) { u32 srcRB = c1 & 0x00FF00FF; u32 srcXG = c1 & 0x0000FF00; @@ -249,7 +247,7 @@ REALINLINE u32 PixelBlend32 ( const u32 c2, const u32 c1, const u32 alpha ) Pixel = dest * ( 1 - alpha ) + source * alpha alpha [0;32] */ -inline u16 PixelBlend16 ( const u16 c2, const u16 c1, const u16 alpha ) +inline u16 PixelBlend16(const u16 c2, const u16 c1, const u16 alpha) { const u16 srcRB = c1 & 0x7C1F; const u16 srcXG = c1 & 0x03E0; @@ -277,103 +275,103 @@ inline u16 PixelBlend16 ( const u16 c2, const u16 c1, const u16 alpha ) /* Pixel = c0 * (c1/31). c0 Alpha retain */ -inline u16 PixelMul16 ( const u16 c0, const u16 c1) +inline u16 PixelMul16(const u16 c0, const u16 c1) { - return (u16)((( ( (c0 & 0x7C00) * (c1 & 0x7C00) ) & 0x3E000000 ) >> 15 ) | - (( ( (c0 & 0x03E0) * (c1 & 0x03E0) ) & 0x000F8000 ) >> 10 ) | - (( ( (c0 & 0x001F) * (c1 & 0x001F) ) & 0x000003E0 ) >> 5 ) | - (c0 & 0x8000)); + return (u16)(((((c0 & 0x7C00) * (c1 & 0x7C00)) & 0x3E000000) >> 15) | + ((((c0 & 0x03E0) * (c1 & 0x03E0)) & 0x000F8000) >> 10) | + ((((c0 & 0x001F) * (c1 & 0x001F)) & 0x000003E0) >> 5) | + (c0 & 0x8000)); } /* Pixel = c0 * (c1/31). */ -inline u16 PixelMul16_2 ( u16 c0, u16 c1) +inline u16 PixelMul16_2(u16 c0, u16 c1) { - return (u16)(( ( (c0 & 0x7C00) * (c1 & 0x7C00) ) & 0x3E000000 ) >> 15 | - ( ( (c0 & 0x03E0) * (c1 & 0x03E0) ) & 0x000F8000 ) >> 10 | - ( ( (c0 & 0x001F) * (c1 & 0x001F) ) & 0x000003E0 ) >> 5 | - ( c0 & c1 & 0x8000)); + return (u16)((((c0 & 0x7C00) * (c1 & 0x7C00)) & 0x3E000000) >> 15 | + (((c0 & 0x03E0) * (c1 & 0x03E0)) & 0x000F8000) >> 10 | + (((c0 & 0x001F) * (c1 & 0x001F)) & 0x000003E0) >> 5 | + (c0 & c1 & 0x8000)); } /* Pixel = c0 * (c1/255). c0 Alpha Retain */ -REALINLINE u32 PixelMul32 ( const u32 c0, const u32 c1) +REALINLINE u32 PixelMul32(const u32 c0, const u32 c1) { return (c0 & 0xFF000000) | - (( ( (c0 & 0x00FF0000) >> 12 ) * ( (c1 & 0x00FF0000) >> 12 ) ) & 0x00FF0000 ) | - (( ( (c0 & 0x0000FF00) * (c1 & 0x0000FF00) ) >> 16 ) & 0x0000FF00 ) | - (( ( (c0 & 0x000000FF) * (c1 & 0x000000FF) ) >> 8 ) & 0x000000FF); + ((((c0 & 0x00FF0000) >> 12) * ((c1 & 0x00FF0000) >> 12)) & 0x00FF0000) | + ((((c0 & 0x0000FF00) * (c1 & 0x0000FF00)) >> 16) & 0x0000FF00) | + ((((c0 & 0x000000FF) * (c1 & 0x000000FF)) >> 8) & 0x000000FF); } /* Pixel = c0 * (c1/255). */ -REALINLINE u32 PixelMul32_2 ( const u32 c0, const u32 c1) +REALINLINE u32 PixelMul32_2(const u32 c0, const u32 c1) { - return (( ( (c0 & 0xFF000000) >> 16 ) * ( (c1 & 0xFF000000) >> 16 ) ) & 0xFF000000 ) | - (( ( (c0 & 0x00FF0000) >> 12 ) * ( (c1 & 0x00FF0000) >> 12 ) ) & 0x00FF0000 ) | - (( ( (c0 & 0x0000FF00) * (c1 & 0x0000FF00) ) >> 16 ) & 0x0000FF00 ) | - (( ( (c0 & 0x000000FF) * (c1 & 0x000000FF) ) >> 8 ) & 0x000000FF); + return ((((c0 & 0xFF000000) >> 16) * ((c1 & 0xFF000000) >> 16)) & 0xFF000000) | + ((((c0 & 0x00FF0000) >> 12) * ((c1 & 0x00FF0000) >> 12)) & 0x00FF0000) | + ((((c0 & 0x0000FF00) * (c1 & 0x0000FF00)) >> 16) & 0x0000FF00) | + ((((c0 & 0x000000FF) * (c1 & 0x000000FF)) >> 8) & 0x000000FF); } /* Pixel = clamp ( c0 + c1, 0, 255 ) */ -REALINLINE u32 PixelAdd32 ( const u32 c2, const u32 c1) +REALINLINE u32 PixelAdd32(const u32 c2, const u32 c1) { - u32 sum = ( c2 & 0x00FFFFFF ) + ( c1 & 0x00FFFFFF ); - u32 low_bits = ( c2 ^ c1 ) & 0x00010101; - s32 carries = ( sum - low_bits ) & 0x01010100; + u32 sum = (c2 & 0x00FFFFFF) + (c1 & 0x00FFFFFF); + u32 low_bits = (c2 ^ c1) & 0x00010101; + s32 carries = (sum - low_bits) & 0x01010100; u32 modulo = sum - carries; - u32 clamp = carries - ( carries >> 8 ); + u32 clamp = carries - (carries >> 8); return modulo | clamp; } #if 0 // 1 - Bit Alpha Blending -inline u16 PixelBlend16 ( const u16 destination, const u16 source ) +inline u16 PixelBlend16(const u16 destination, const u16 source) { - if((source & 0x8000) == 0x8000) + if ((source & 0x8000) == 0x8000) return source; // The source is visible, so use it. else return destination; // The source is transparent, so use the destination. } // 1 - Bit Alpha Blending 16Bit SIMD -inline u32 PixelBlend16_simd ( const u32 destination, const u32 source ) +inline u32 PixelBlend16_simd(const u32 destination, const u32 source) { - switch(source & 0x80008000) + switch (source & 0x80008000) { - case 0x80008000: // Both source pixels are visible - return source; + case 0x80008000: // Both source pixels are visible + return source; - case 0x80000000: // Only the first source pixel is visible - return (source & 0xFFFF0000) | (destination & 0x0000FFFF); + case 0x80000000: // Only the first source pixel is visible + return (source & 0xFFFF0000) | (destination & 0x0000FFFF); - case 0x00008000: // Only the second source pixel is visible. - return (destination & 0xFFFF0000) | (source & 0x0000FFFF); + case 0x00008000: // Only the second source pixel is visible. + return (destination & 0xFFFF0000) | (source & 0x0000FFFF); - default: // Neither source pixel is visible. - return destination; + default: // Neither source pixel is visible. + return destination; } } #else // 1 - Bit Alpha Blending -inline u16 PixelBlend16 ( const u16 c2, const u16 c1 ) +inline u16 PixelBlend16(const u16 c2, const u16 c1) { - u16 mask = ((c1 & 0x8000) >> 15 ) + 0x7fff; - return (c2 & mask ) | ( c1 & ~mask ); + u16 mask = ((c1 & 0x8000) >> 15) + 0x7fff; + return (c2 & mask) | (c1 & ~mask); } // 1 - Bit Alpha Blending 16Bit SIMD -inline u32 PixelBlend16_simd ( const u32 c2, const u32 c1 ) +inline u32 PixelBlend16_simd(const u32 c2, const u32 c1) { - u32 mask = ((c1 & 0x80008000) >> 15 ) + 0x7fff7fff; - return (c2 & mask ) | ( c1 & ~mask ); + u32 mask = ((c1 & 0x80008000) >> 15) + 0x7fff7fff; + return (c2 & mask) | (c1 & ~mask); } #endif @@ -381,14 +379,14 @@ inline u32 PixelBlend16_simd ( const u32 c2, const u32 c1 ) /*! Pixel = dest * ( 1 - SourceAlpha ) + source * SourceAlpha (OpenGL blending) */ -inline u32 PixelBlend32 ( const u32 c2, const u32 c1 ) +inline u32 PixelBlend32(const u32 c2, const u32 c1) { // alpha test u32 alpha = c1 & 0xFF000000; - if ( 0 == alpha ) + if (0 == alpha) return c2; - if ( 0xFF000000 == alpha ) + if (0xFF000000 == alpha) { return c1; } @@ -396,7 +394,7 @@ inline u32 PixelBlend32 ( const u32 c2, const u32 c1 ) alpha >>= 24; // add highbit alpha, if ( alpha > 127 ) alpha += 1; - alpha += ( alpha >> 7); + alpha += (alpha >> 7); u32 srcRB = c1 & 0x00FF00FF; u32 srcXG = c1 & 0x0000FF00; @@ -436,87 +434,93 @@ typedef u32 tFixPointu; // Fix Point 12 (overflow on s32) #if 0 - #define FIX_POINT_PRE 12 - #define FIX_POINT_FRACT_MASK 0xFFF - #define FIX_POINT_UNSIGNED_MASK 0x7FFFF000 - #define FIX_POINT_ONE 0x1000 - #define FIX_POINT_ZERO_DOT_FIVE 0x0800 - #define FIX_POINT_F32_MUL 4096.f +#define FIX_POINT_PRE 12 +#define FIX_POINT_FRACT_MASK 0xFFF +#define FIX_POINT_UNSIGNED_MASK 0x7FFFF000 +#define FIX_POINT_ONE 0x1000 +#define FIX_POINT_ZERO_DOT_FIVE 0x0800 +#define FIX_POINT_F32_MUL 4096.f #endif // Fix Point 11 (overflow on s32) #if 0 - #define FIX_POINT_PRE 11 - #define FIX_POINT_FRACT_MASK 0x7FF - #define FIX_POINT_UNSIGNED_MASK 0xFFFFF800 - #define FIX_POINT_ONE 0x800 - #define FIX_POINT_ZERO_DOT_FIVE 0x400 - #define FIX_POINT_F32_MUL 2048.f +#define FIX_POINT_PRE 11 +#define FIX_POINT_FRACT_MASK 0x7FF +#define FIX_POINT_UNSIGNED_MASK 0xFFFFF800 +#define FIX_POINT_ONE 0x800 +#define FIX_POINT_ZERO_DOT_FIVE 0x400 +#define FIX_POINT_F32_MUL 2048.f #endif // Fix Point 10 #if 1 - #define FIX_POINT_PRE 10 - #define FIX_POINT_FRACT_MASK 0x000003FF - #define FIX_POINT_UNSIGNED_MASK 0x7FFFFE00 - #define FIX_POINT_ONE 0x00000400 - #define FIX_POINT_ZERO_DOT_FIVE 0x00000200 - #define FIX_POINT_F32_MUL 1024.f +#define FIX_POINT_PRE 10 +#define FIX_POINT_FRACT_MASK 0x000003FF +#define FIX_POINT_UNSIGNED_MASK 0x7FFFFC00 +#define FIX_POINT_ONE 0x00000400 +#define FIX_POINT_ZERO_DOT_FIVE 0x00000200 +#define FIX_POINT_F32_MUL 1024.f #endif // Fix Point 9 #if 0 - #define FIX_POINT_PRE 9 - #define FIX_POINT_FRACT_MASK 0x1FF - #define FIX_POINT_UNSIGNED_MASK 0x7FFFFE00 - #define FIX_POINT_ONE 0x200 - #define FIX_POINT_ZERO_DOT_FIVE 0x100 - #define FIX_POINT_F32_MUL 512.f +#define FIX_POINT_PRE 9 +#define FIX_POINT_FRACT_MASK 0x1FF +#define FIX_POINT_UNSIGNED_MASK 0x7FFFFE00 +#define FIX_POINT_ONE 0x200 +#define FIX_POINT_ZERO_DOT_FIVE 0x100 +#define FIX_POINT_F32_MUL 512.f #endif // Fix Point 7 #if 0 - #define FIX_POINT_PRE 7 - #define FIX_POINT_FRACT_MASK 0x7F - #define FIX_POINT_UNSIGNED_MASK 0x7FFFFF80 - #define FIX_POINT_ONE 0x80 - #define FIX_POINT_ZERO_DOT_FIVE 0x40 - #define FIX_POINT_F32_MUL 128.f +#define FIX_POINT_PRE 7 +#define FIX_POINT_FRACT_MASK 0x7F +#define FIX_POINT_UNSIGNED_MASK 0x7FFFFF80 +#define FIX_POINT_ONE 0x80 +#define FIX_POINT_ZERO_DOT_FIVE 0x40 +#define FIX_POINT_F32_MUL 128.f #endif -#define FIXPOINT_COLOR_MAX ( COLOR_MAX << FIX_POINT_PRE ) +#define FIX_POINT_COLOR_MAX ( COLOR_MAX << FIX_POINT_PRE ) +#define FIX_POINT_EPSILON 1 + +#define FIX_POINT_COLOR_FLOAT_MIN -0.5f +//#define FIX_POINT_COLOR_FLOAT_MAX (FIX_POINT_F32_MUL- ((FIX_POINT_F32_MUL-0.5.f)/(f32) COLOR_MAX)) +#define FIX_POINT_COLOR_MAX_CENTER (COLOR_MAX * FIX_POINT_F32_MUL) #if FIX_POINT_PRE == 10 && COLOR_MAX == 255 - #define FIX_POINT_HALF_COLOR 0x1FE00 - #define FIX_POINT_COLOR_ERROR 4 +#define FIX_POINT_HALF_COLOR 0x1FE00 +#define FIX_POINT_COLOR_ERROR 4 + #elif FIX_POINT_PRE == 12 && COLOR_MAX == 255 - #define FIX_POINT_HALF_COLOR 0x7F800 - #define FIX_POINT_COLOR_ERROR 16 +#define FIX_POINT_HALF_COLOR 0x7F800 +#define FIX_POINT_COLOR_ERROR 16 #elif FIX_POINT_PRE == 10 && COLOR_MAX == 31 - #define FIX_POINT_HALF_COLOR 0x3E00 - #define FIX_POINT_COLOR_ERROR 32 +#define FIX_POINT_HALF_COLOR 0x3E00 +#define FIX_POINT_COLOR_ERROR 32 #else - #define FIX_POINT_HALF_COLOR ( (tFixPoint) ( ((f32) COLOR_MAX / 2.f * FIX_POINT_F32_MUL ) ) ) - #define FIX_POINT_COLOR_ERROR (1<<(FIX_POINT_PRE-COLOR_MAX_LOG2)) +#define FIX_POINT_HALF_COLOR ( (tFixPoint) ( ((f32) COLOR_MAX / 2.f * FIX_POINT_F32_MUL ) ) ) +#define FIX_POINT_COLOR_ERROR (1<<(FIX_POINT_PRE-COLOR_MAX_LOG2)) #endif /* - convert signed integer to fixpoint +convert signed integer to fixpoint */ -inline tFixPoint s32_to_fixPoint (const s32 x) +inline tFixPoint s32_to_fixPoint(const s32 x) { return x << FIX_POINT_PRE; } #if 0 -inline tFixPointu u32_to_fixPoint (const u32 x) +inline tFixPointu u32_to_fixPoint(const u32 x) { return x << FIX_POINT_PRE; } #endif -inline u32 fixPointu_to_u32 (const tFixPointu x) +inline u32 fixPointu_to_u32(const tFixPointu x) { return (u32)(x >> FIX_POINT_PRE); } @@ -528,15 +532,15 @@ inline u32 fixPointu_to_u32 (const tFixPointu x) /* - convert float to fixpoint - fast convert (fistp on x86) HAS to be used.. - hints: compileflag /QIfist for msvc7. msvc 8.0 has smth different - others should use their favourite assembler.. +convert float to fixpoint +fast convert (fistp on x86) HAS to be used.. +hints: compileflag /QIfist for msvc7. msvc 8.0 has smth different +others should use their favourite assembler.. */ #if 0 static inline int f_round2(f32 f) { - f += (3<<22); + f += (3 << 22); return IR(f) - 0x4b400000; } #endif @@ -582,19 +586,19 @@ REALINLINE tFixPoint imulFix(const tFixPoint x, const tFixPoint y) */ REALINLINE tFixPoint imulFix2(const tFixPoint x, const tFixPoint y) { - return ( x * y) >> ( FIX_POINT_PRE -1 ); + return (x * y) >> (FIX_POINT_PRE - 1); } #endif /* - Multiply x * y * 1 FIXPOINT_COLOR_MAX + Multiply x * y * 1 FIX_POINT_COLOR_MAX */ REALINLINE tFixPoint imulFix_tex1(const tFixPoint x, const tFixPoint y) { #if SOFTWARE_DRIVER_2_TEXTURE_COLOR_FORMAT == ECF_A8R8G8B8 - return (((tFixPointu)x >> 2)*(((tFixPointu)y + FIX_POINT_ONE) >> 2)) >> (tFixPointu) (FIX_POINT_PRE + 4); + return (((tFixPointu)x >> 2) * (((tFixPointu)y + FIX_POINT_ONE) >> 2)) >> (tFixPointu)(FIX_POINT_PRE + 4); #else - return (x * (y+ FIX_POINT_ONE)) >> (FIX_POINT_PRE + 5); + return (x * (y + FIX_POINT_ONE)) >> (FIX_POINT_PRE + 5); #endif } @@ -603,7 +607,7 @@ REALINLINE tFixPoint imulFix_tex1(const tFixPoint x, const tFixPoint y) */ REALINLINE tFixPoint imulFix_tex2(const tFixPoint x, const tFixPoint y) { - return ( ( (tFixPointu) x >> 2 ) * ( (tFixPointu) y >> 2 ) ) >> (tFixPointu) ( FIX_POINT_PRE + 3 ); + return (((tFixPointu)x >> 2) * ((tFixPointu)y >> 2)) >> (tFixPointu)(FIX_POINT_PRE + 3); } /* @@ -613,44 +617,44 @@ REALINLINE tFixPoint imulFix_tex2(const tFixPoint x, const tFixPoint y) REALINLINE tFixPoint imulFix_tex4(const tFixPoint x, const tFixPoint y) { #if SOFTWARE_DRIVER_2_TEXTURE_COLOR_FORMAT == ECF_A8R8G8B8 - tFixPoint a = (((tFixPointu)x >> 2)*(((tFixPointu)y + FIX_POINT_ONE) >> 2)) >> (tFixPointu)(FIX_POINT_PRE + 2); + tFixPoint a = (((tFixPointu)x >> 2) * (((tFixPointu)y + FIX_POINT_ONE) >> 2)) >> (tFixPointu)(FIX_POINT_PRE + 2); #else tFixPoint a = (x * (y + FIX_POINT_ONE)) >> (FIX_POINT_PRE + 3); #endif - tFixPoint mask = (a - FIXPOINT_COLOR_MAX) >> 31; - return (a & mask) | (FIXPOINT_COLOR_MAX & ~mask); + tFixPoint mask = (a - FIX_POINT_COLOR_MAX) >> 31; + return (a & mask) | (FIX_POINT_COLOR_MAX & ~mask); } /*! clamp FixPoint to maxcolor in FixPoint, min(a,COLOR_MAX) */ -REALINLINE tFixPoint clampfix_maxcolor ( const tFixPoint a) +REALINLINE tFixPoint clampfix_maxcolor(const tFixPoint a) { - tFixPoint c = (a - FIXPOINT_COLOR_MAX) >> 31; - return (a & c) | ( FIXPOINT_COLOR_MAX & ~c); + tFixPoint c = (a - FIX_POINT_COLOR_MAX) >> 31; + return (a & c) | (FIX_POINT_COLOR_MAX & ~c); } /*! clamp FixPoint to 0 in FixPoint, max(a,0) */ -REALINLINE tFixPoint clampfix_mincolor ( const tFixPoint a) +REALINLINE tFixPoint clampfix_mincolor(const tFixPoint a) { - return a - ( a & ( a >> 31 ) ); + return a - (a & (a >> 31)); } -REALINLINE tFixPoint saturateFix ( const tFixPoint a) +REALINLINE tFixPoint saturateFix(const tFixPoint a) { - return clampfix_mincolor ( clampfix_maxcolor ( a ) ); + return clampfix_mincolor(clampfix_maxcolor(a)); } #if 0 // rount fixpoint to int -inline s32 roundFix ( const tFixPoint x ) +inline s32 roundFix(const tFixPoint x) { - return (s32)(( x + FIX_POINT_ZERO_DOT_FIVE ) >> FIX_POINT_PRE); + return (s32)((x + FIX_POINT_ZERO_DOT_FIVE) >> FIX_POINT_PRE); } #endif @@ -666,12 +670,21 @@ inline s32 f32_to_23Bits(const f32 x) /*! fixpoint in [0..Fixpoint_color] to VideoSample xrgb */ -REALINLINE tVideoSample fix_to_sample ( const tFixPoint r, const tFixPoint g, const tFixPoint b ) +REALINLINE tVideoSample fix_to_sample(const tFixPoint r, const tFixPoint g, const tFixPoint b) { - return ( FIXPOINT_COLOR_MAX & FIXPOINT_COLOR_MAX) << ( SHIFT_A - FIX_POINT_PRE ) | - ( r & FIXPOINT_COLOR_MAX) << ( SHIFT_R - FIX_POINT_PRE ) | - ( g & FIXPOINT_COLOR_MAX) >> ( FIX_POINT_PRE - SHIFT_G ) | - ( b & FIXPOINT_COLOR_MAX) >> ( FIX_POINT_PRE - SHIFT_B ); + return (FIX_POINT_COLOR_MAX & FIX_POINT_COLOR_MAX) << (SHIFT_A - FIX_POINT_PRE) | + (r & FIX_POINT_COLOR_MAX) << (SHIFT_R - FIX_POINT_PRE) | + (g & FIX_POINT_COLOR_MAX) >> (FIX_POINT_PRE - SHIFT_G) | + (b & FIX_POINT_COLOR_MAX) >> (FIX_POINT_PRE - SHIFT_B); +} + +REALINLINE tVideoSample fix_to_sample_nearest(const tFixPoint a, const tFixPoint r, const tFixPoint g, const tFixPoint b) +{ + return + ((a + FIX_POINT_ZERO_DOT_FIVE) & FIX_POINT_COLOR_MAX) << (SHIFT_A - FIX_POINT_PRE) | + ((r + FIX_POINT_ZERO_DOT_FIVE) & FIX_POINT_COLOR_MAX) << (SHIFT_R - FIX_POINT_PRE) | + ((g + FIX_POINT_ZERO_DOT_FIVE) & FIX_POINT_COLOR_MAX) >> (FIX_POINT_PRE - SHIFT_G) | + ((b + FIX_POINT_ZERO_DOT_FIVE) & FIX_POINT_COLOR_MAX) >> (FIX_POINT_PRE - SHIFT_B); } @@ -680,43 +693,43 @@ REALINLINE tVideoSample fix_to_sample ( const tFixPoint r, const tFixPoint g, co a in [0;1] rgb in [0;255] colormax */ -REALINLINE tVideoSample fix4_to_sample ( const tFixPoint a, const tFixPoint r, const tFixPoint g, const tFixPoint b ) +REALINLINE tVideoSample fix4_to_sample(const tFixPoint a, const tFixPoint r, const tFixPoint g, const tFixPoint b) { - return ( a & (FIX_POINT_FRACT_MASK - 1 )) << ( SHIFT_A - 1 ) | - ( r & FIXPOINT_COLOR_MAX) << ( SHIFT_R - FIX_POINT_PRE ) | - ( g & FIXPOINT_COLOR_MAX) >> ( FIX_POINT_PRE - SHIFT_G ) | - ( b & FIXPOINT_COLOR_MAX) >> ( FIX_POINT_PRE - SHIFT_B ); + return (a & (FIX_POINT_FRACT_MASK - 1)) << (SHIFT_A - 1) | + (r & FIX_POINT_COLOR_MAX) << (SHIFT_R - FIX_POINT_PRE) | + (g & FIX_POINT_COLOR_MAX) >> (FIX_POINT_PRE - SHIFT_G) | + (b & FIX_POINT_COLOR_MAX) >> (FIX_POINT_PRE - SHIFT_B); } /*! - return fixpoint from VideoSample granularity FIXPOINT_COLOR_MAX + return fixpoint from VideoSample granularity FIX_POINT_COLOR_MAX */ -inline void color_to_fix ( tFixPoint &r, tFixPoint &g, tFixPoint &b, const tVideoSample t00 ) +inline void color_to_fix(tFixPoint& r, tFixPoint& g, tFixPoint& b, const tVideoSample t00) { - (tFixPointu&) r = (t00 & MASK_R) >> ( SHIFT_R - FIX_POINT_PRE ); - (tFixPointu&) g = (t00 & MASK_G) << ( FIX_POINT_PRE - SHIFT_G ); - (tFixPointu&) b = (t00 & MASK_B) << ( FIX_POINT_PRE - SHIFT_B ); + (tFixPointu&)r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); + (tFixPointu&)g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); + (tFixPointu&)b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); } /*! - return fixpoint from VideoSample granularity FIXPOINT_COLOR_MAX + return fixpoint from VideoSample granularity FIX_POINT_COLOR_MAX */ -inline void color_to_fix ( tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, const tVideoSample t00 ) +inline void color_to_fix(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, const tVideoSample t00) { - (tFixPointu&) a = (t00 & MASK_A) >> ( SHIFT_A - FIX_POINT_PRE ); - (tFixPointu&) r = (t00 & MASK_R) >> ( SHIFT_R - FIX_POINT_PRE ); - (tFixPointu&) g = (t00 & MASK_G) << ( FIX_POINT_PRE - SHIFT_G ); - (tFixPointu&) b = (t00 & MASK_B) << ( FIX_POINT_PRE - SHIFT_B ); + (tFixPointu&)a = (t00 & MASK_A) >> (SHIFT_A - FIX_POINT_PRE); + (tFixPointu&)r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); + (tFixPointu&)g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); + (tFixPointu&)b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); } /*! return fixpoint from VideoSample granularity 0..FIX_POINT_ONE */ -inline void color_to_fix1 ( tFixPoint &r, tFixPoint &g, tFixPoint &b, const tVideoSample t00 ) +inline void color_to_fix1(tFixPoint& r, tFixPoint& g, tFixPoint& b, const tVideoSample t00) { - (tFixPointu&) r = (t00 & MASK_R) >> ( SHIFT_R + COLOR_MAX_LOG2 - FIX_POINT_PRE ); - (tFixPointu&) g = (t00 & MASK_G) >> ( SHIFT_G + COLOR_MAX_LOG2 - FIX_POINT_PRE ); - (tFixPointu&) b = (t00 & MASK_B) << ( FIX_POINT_PRE - COLOR_MAX_LOG2 ); + (tFixPointu&)r = (t00 & MASK_R) >> (SHIFT_R + COLOR_MAX_LOG2 - FIX_POINT_PRE); + (tFixPointu&)g = (t00 & MASK_G) >> (SHIFT_G + COLOR_MAX_LOG2 - FIX_POINT_PRE); + (tFixPointu&)b = (t00 & MASK_B) << (FIX_POINT_PRE - COLOR_MAX_LOG2); //0..255 -> 0..256 | c += c >= 0.5 ? 1 : 0 r += (r & FIX_POINT_ZERO_DOT_FIVE) ? FIX_POINT_COLOR_ERROR : 0; @@ -727,12 +740,12 @@ inline void color_to_fix1 ( tFixPoint &r, tFixPoint &g, tFixPoint &b, const tVid /*! return fixpoint from VideoSample granularity 0..FIX_POINT_ONE */ -inline void color_to_fix1 ( tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, const tVideoSample t00 ) +inline void color_to_fix1(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, const tVideoSample t00) { - (tFixPointu&) a = (t00 & MASK_A) >> ( SHIFT_A + COLOR_MAX_LOG2 - FIX_POINT_PRE ); - (tFixPointu&) r = (t00 & MASK_R) >> ( SHIFT_R + COLOR_MAX_LOG2 - FIX_POINT_PRE ); - (tFixPointu&) g = (t00 & MASK_G) >> ( SHIFT_G + COLOR_MAX_LOG2 - FIX_POINT_PRE ); - (tFixPointu&) b = (t00 & MASK_B) << ( FIX_POINT_PRE - COLOR_MAX_LOG2 ); + (tFixPointu&)a = (t00 & MASK_A) >> (SHIFT_A + COLOR_MAX_LOG2 - FIX_POINT_PRE); + (tFixPointu&)r = (t00 & MASK_R) >> (SHIFT_R + COLOR_MAX_LOG2 - FIX_POINT_PRE); + (tFixPointu&)g = (t00 & MASK_G) >> (SHIFT_G + COLOR_MAX_LOG2 - FIX_POINT_PRE); + (tFixPointu&)b = (t00 & MASK_B) << (FIX_POINT_PRE - COLOR_MAX_LOG2); //0..255 -> 0..256 | c += c >= 0.5 ? 1 : 0 a += (a & FIX_POINT_ZERO_DOT_FIVE) ? FIX_POINT_COLOR_ERROR : 0; @@ -743,7 +756,7 @@ inline void color_to_fix1 ( tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint } /*! - return fixpoint from VideoSample granularity FIXPOINT_COLOR_MAX + return fixpoint from VideoSample granularity FIX_POINT_COLOR_MAX */ inline void color_to_fix(tFixPoint c[4], const tVideoSample t00) { @@ -784,26 +797,26 @@ struct fp24 fp24() {} - fp24 ( const f32 f ) + fp24(const f32 f) { f32 y = f + 1.f; v = ((u32&)y) & 0x7FFFFF; // last 23 bits } - void operator=(const f32 f ) + void operator=(const f32 f) { - f32 y = f + 1.f; + f32 y = f + 1.f; v = ((u32&)y) & 0x7FFFFF; // last 23 bits - } + } - void operator+=(const fp24 &other ) + void operator+=(const fp24& other) { v += other.v; } operator f32 () const { - f32 r = FR ( v ); + f32 r = FR(v); return r + 1.f; } @@ -822,53 +835,53 @@ struct sInternalTexture size_t pitchlog2; - video::CSoftwareTexture2 *Texture; + video::CSoftwareTexture2* Texture; s32 lodFactor; // magnify/minify }; // get video sample plain -static inline tVideoSample getTexel_plain ( const sInternalTexture* t, const tFixPointu tx, const tFixPointu ty ) +static inline tVideoSample getTexel_plain(const sInternalTexture* t, const tFixPointu tx, const tFixPointu ty) { size_t ofs; - ofs = ( ( ty & t->textureYMask ) >> FIX_POINT_PRE ) << t->pitchlog2; - ofs |= ( tx & t->textureXMask ) >> ( FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY ); + ofs = ((ty & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; + ofs |= (tx & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); // texel - return *((tVideoSample*)( (u8*) t->data + ofs )); + return *((tVideoSample*)((u8*)t->data + ofs)); } // get video sample to fix -inline void getTexel_fix ( tFixPoint &r, tFixPoint &g, tFixPoint &b, - const sInternalTexture* t, const tFixPointu tx, const tFixPointu ty - ) -{ - size_t ofs; - - ofs = ( ((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask ) >> FIX_POINT_PRE ) << t->pitchlog2; - ofs |= ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask ) >> ( FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY ); - - // texel - tVideoSample t00; - t00 = *((tVideoSample*)( (u8*) t->data + ofs )); - - r = (t00 & MASK_R) >> ( SHIFT_R - FIX_POINT_PRE); - g = (t00 & MASK_G) << ( FIX_POINT_PRE - SHIFT_G ); - b = (t00 & MASK_B) << ( FIX_POINT_PRE - SHIFT_B ); - -} - -// get video sample to fixpoint colormax -inline void getTexel_fix(tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, +inline void getTexel_fix(tFixPoint& r, tFixPoint& g, tFixPoint& b, const sInternalTexture* t, const tFixPointu tx, const tFixPointu ty ) { size_t ofs; - ofs = (((ty+ FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; - ofs |= ((tx+ FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; + ofs |= ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + + // texel + tVideoSample t00; + t00 = *((tVideoSample*)((u8*)t->data + ofs)); + + r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); + g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); + b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); + +} + +// get video sample to fixpoint colormax +inline void getTexel_fix(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, + const sInternalTexture* t, const tFixPointu tx, const tFixPointu ty +) +{ + size_t ofs; + + ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; + ofs |= ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); // texel tVideoSample t00; @@ -883,19 +896,19 @@ inline void getTexel_fix(tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, #if 0 // get video sample to fixpoint -static REALINLINE void getTexel_fix ( tFixPoint &a, - const sInternalTexture * t, const tFixPointu tx, const tFixPointu ty) +static REALINLINE void getTexel_fix(tFixPoint& a, + const sInternalTexture* t, const tFixPointu tx, const tFixPointu ty) { size_t ofs; - ofs = ( ((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask ) >> FIX_POINT_PRE ) << t->pitchlog2; - ofs |= ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask ) >> ( FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY ); + ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; + ofs |= ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); // texel tVideoSample t00; - t00 = *((tVideoSample*)( (u8*) t->data + ofs )); + t00 = *((tVideoSample*)((u8*)t->data + ofs)); - a = (t00 & MASK_A) >> ( SHIFT_A - FIX_POINT_PRE); + a = (t00 & MASK_A) >> (SHIFT_A - FIX_POINT_PRE); } #endif @@ -906,7 +919,7 @@ static REALINLINE void getTexel_fix ( tFixPoint &a, #if 0 // texture2D in fixpoint color range bilinear -static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint &b, +static REALINLINE void getSample_texture(tFixPoint& r, tFixPoint& g, tFixPoint& b, const sInternalTexture* burning_restrict t, const tFixPointu tx, const tFixPointu ty ) { @@ -938,9 +951,9 @@ static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint & tVideoSample t00; //wraps positive (ignoring negative) - o0 = (((ty)& t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; + o0 = (((ty)&t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; o1 = (((ty + FIX_POINT_ONE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; - o2 = ((tx)& t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + o2 = ((tx)&t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); o3 = ((tx + FIX_POINT_ONE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); t00 = *((tVideoSample*)((u8*)t->data + (o0 + o2))); @@ -994,7 +1007,7 @@ static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint & #else // texture2D in fixpoint color range bilinear -static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint &b, +static REALINLINE void getSample_texture(tFixPoint& r, tFixPoint& g, tFixPoint& b, const sInternalTexture* burning_restrict tex, const tFixPointu tx, const tFixPointu ty ) { @@ -1015,6 +1028,7 @@ static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint & return; } #endif + //w00 w01 w10 w11 tFixPointu w[4]; { @@ -1030,9 +1044,12 @@ static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint & tVideoSample t[4]; { size_t o0, o1, o2, o3; - o0 = (((ty) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + + // #if FIX_POINT_PRE > SOFTWARE_DRIVER_2_TEXTURE_MAXSIZE_LOG2 >> FIX_POINT_PRE - tex->pitchlog2 + + o0 = (((ty)&tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; o1 = (((ty + FIX_POINT_ONE) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; - o2 = ((tx)& tex->textureXMask) >> (unsigned)(FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + o2 = ((tx)&tex->textureXMask) >> (unsigned)(FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); o3 = ((tx + FIX_POINT_ONE) & tex->textureXMask) >> (unsigned)(FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); t[0] = *((tVideoSample*)((u8*)tex->data + (o0 + o2))); @@ -1060,7 +1077,7 @@ static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint & #endif // get Sample bilinear -static REALINLINE void getSample_texture(tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, +static REALINLINE void getSample_texture(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, const sInternalTexture* burning_restrict tex, const tFixPointu tx, const tFixPointu ty ) { @@ -1073,9 +1090,9 @@ static REALINLINE void getSample_texture(tFixPoint &a, tFixPoint &r, tFixPoint & size_t o0, o1, o2, o3; tVideoSample t00; - o0 = (((ty)& tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + o0 = (((ty)&tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; o1 = (((ty + FIX_POINT_ONE) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; - o2 = ((tx)& tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + o2 = ((tx)&tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); o3 = ((tx + FIX_POINT_ONE) & tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); t00 = *((tVideoSample*)((u8*)tex->data + (o0 + o2))); @@ -1137,45 +1154,112 @@ static REALINLINE void getSample_texture(tFixPoint &a, tFixPoint &r, tFixPoint & } +// get Sample bilinear +static REALINLINE void getSample_texture(tFixPoint& a, + const sInternalTexture* burning_restrict tex, const tFixPointu tx, const tFixPointu ty +) +{ + + tFixPointu a00; + tFixPointu a01; + tFixPointu a10; + tFixPointu a11; + + size_t o0, o1, o2, o3; + tVideoSample t00; + + o0 = (((ty)&tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + o1 = (((ty + FIX_POINT_ONE) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + o2 = ((tx)&tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + o3 = ((tx + FIX_POINT_ONE) & tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + + t00 = *((tVideoSample*)((u8*)tex->data + (o0 + o2))); + a00 = (t00 & MASK_A) >> SHIFT_A; + + t00 = *((tVideoSample*)((u8*)tex->data + (o0 + o3))); + a10 = (t00 & MASK_A) >> SHIFT_A; + + t00 = *((tVideoSample*)((u8*)tex->data + (o1 + o2))); + a01 = (t00 & MASK_A) >> SHIFT_A; + + t00 = *((tVideoSample*)((u8*)tex->data + (o1 + o3))); + a11 = (t00 & MASK_A) >> SHIFT_A; + + const tFixPointu txFract = tx & FIX_POINT_FRACT_MASK; + const tFixPointu txFractInv = FIX_POINT_ONE - txFract; + + const tFixPointu tyFract = ty & FIX_POINT_FRACT_MASK; + const tFixPointu tyFractInv = FIX_POINT_ONE - tyFract; + + const tFixPointu w00 = imulFixu(txFractInv, tyFractInv); + const tFixPointu w10 = imulFixu(txFract, tyFractInv); + const tFixPointu w01 = imulFixu(txFractInv, tyFract); + const tFixPointu w11 = imulFixu(txFract, tyFract); + + a = (a00 * w00) + + (a01 * w01) + + (a10 * w10) + + (a11 * w11); + + fix_alpha_color_max(a); + +} + #else // SOFTWARE_DRIVER_2_BILINEAR // get Sample linear == getSample_fixpoint -static REALINLINE void getSample_texture(tFixPoint &r, tFixPoint &g, tFixPoint &b, - const sInternalTexture* burning_restrict t, const tFixPointu tx, const tFixPointu ty +static REALINLINE void getSample_texture(tFixPoint& r, tFixPoint& g, tFixPoint& b, + const sInternalTexture* burning_restrict tex, const tFixPointu tx, const tFixPointu ty ) { size_t ofs; - ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; - ofs += ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + ofs += ((tx + FIX_POINT_ZERO_DOT_FIVE) & tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); // texel - const tVideoSample t00 = *((tVideoSample*)((u8*)t->data + ofs)); + const tVideoSample t00 = *((tVideoSample*)((u8*)tex->data + ofs)); - (tFixPointu &)r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); - (tFixPointu &)g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); - (tFixPointu &)b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); + (tFixPointu&)r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); + (tFixPointu&)g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); + (tFixPointu&)b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); } -static REALINLINE void getSample_texture(tFixPoint &a, tFixPoint &r, tFixPoint &g, tFixPoint &b, - const sInternalTexture* burning_restrict t, const tFixPointu tx, const tFixPointu ty +static REALINLINE void getSample_texture(tFixPoint& a, tFixPoint& r, tFixPoint& g, tFixPoint& b, + const sInternalTexture* burning_restrict tex, const tFixPointu tx, const tFixPointu ty ) { size_t ofs; - ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & t->textureYMask) >> FIX_POINT_PRE) << t->pitchlog2; - ofs += ((tx + FIX_POINT_ZERO_DOT_FIVE) & t->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + ofs += ((tx + FIX_POINT_ZERO_DOT_FIVE) & tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); // texel - const tVideoSample t00 = *((tVideoSample*)((u8*)t->data + ofs)); + const tVideoSample t00 = *((tVideoSample*)((u8*)tex->data + ofs)); - (tFixPointu &)a = (t00 & MASK_A) >> (SHIFT_A - FIX_POINT_PRE); + (tFixPointu&)a = (t00 & MASK_A) >> (SHIFT_A - FIX_POINT_PRE); fix_alpha_color_max(a); - (tFixPointu &)r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); - (tFixPointu &)g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); - (tFixPointu &)b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); + (tFixPointu&)r = (t00 & MASK_R) >> (SHIFT_R - FIX_POINT_PRE); + (tFixPointu&)g = (t00 & MASK_G) << (FIX_POINT_PRE - SHIFT_G); + (tFixPointu&)b = (t00 & MASK_B) << (FIX_POINT_PRE - SHIFT_B); } +// get Sample bilinear +static REALINLINE void getSample_texture(tFixPoint& a, + const sInternalTexture* burning_restrict tex, const tFixPointu tx, const tFixPointu ty +) +{ + size_t ofs; + ofs = (((ty + FIX_POINT_ZERO_DOT_FIVE) & tex->textureYMask) >> FIX_POINT_PRE) << tex->pitchlog2; + ofs += ((tx + FIX_POINT_ZERO_DOT_FIVE) & tex->textureXMask) >> (FIX_POINT_PRE - SOFTWARE_DRIVER_2_TEXTURE_GRANULARITY); + + // texel + const tVideoSample t00 = *((tVideoSample*)((u8*)tex->data + ofs)); + + (tFixPointu&)a = (t00 & MASK_A) >> (SHIFT_A - FIX_POINT_PRE); + fix_alpha_color_max(a); +} + #endif // SOFTWARE_DRIVER_2_BILINEAR @@ -1189,13 +1273,13 @@ struct AbsRectangle }; //! 2D Intersection test -inline bool intersect ( AbsRectangle &dest, const AbsRectangle& a, const AbsRectangle& b) +inline bool intersect(AbsRectangle& dest, const AbsRectangle& a, const AbsRectangle& b) { - dest.x0 = core::s32_max( a.x0, b.x0 ); - dest.y0 = core::s32_max( a.y0, b.y0 ); - dest.x1 = core::s32_min( a.x1, b.x1 ); - dest.y1 = core::s32_min( a.y1, b.y1 ); - return dest.x0 < dest.x1 && dest.y0 < dest.y1; + dest.x0 = core::s32_max(a.x0, b.x0); + dest.y0 = core::s32_max(a.y0, b.y0); + dest.x1 = core::s32_min(a.x1, b.x1); + dest.y1 = core::s32_min(a.y1, b.y1); + return dest.x0 < dest.x1&& dest.y0 < dest.y1; } #if 0 @@ -1207,9 +1291,9 @@ struct sIntervall }; // returning intersection width -inline s32 intervall_intersect_test( const sIntervall& a, const sIntervall& b) +inline s32 intervall_intersect_test(const sIntervall& a, const sIntervall& b) { - return core::s32_min( a.end, b.end ) - core::s32_max( a.start, b.start ); + return core::s32_min(a.end, b.end) - core::s32_max(a.start, b.start); } #endif @@ -1225,7 +1309,7 @@ static inline void tiny_strncpy(char* to, const char* from, const size_t count) // tiny_isequal = !strncmp(a,b,sizeof(a)-1) -static inline int tiny_isequal(const char *s1, const char *s2, size_t n) +static inline int tiny_isequal(const char* s1, const char* s2, size_t n) { do { if (*s1 != *s2++) return 0; diff --git a/source/Irrlicht/burning_shader_color.cpp b/source/Irrlicht/burning_shader_color.cpp index 3af52abc..873af003 100644 --- a/source/Irrlicht/burning_shader_color.cpp +++ b/source/Irrlicht/burning_shader_color.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt / Thomas Alten +// Copyright (C) 2022 Thomas Alten // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h @@ -20,7 +20,7 @@ namespace video /*! */ -void burning_shader_class::OnSetMaterial(const SBurningShaderMaterial& material) +void burning_shader_class::OnSetMaterialBurning(const SBurningShaderMaterial& material) { switch (material.org.MaterialType) { @@ -41,7 +41,7 @@ void burning_shader_class::OnSetMaterial(const SBurningShaderMaterial& material) case EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA: case EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA: RenderPass_ShaderIsTransparent = 1; - AlphaRef = tofix(material.org.MaterialTypeParam, FIXPOINT_COLOR_MAX); + AlphaRef = tofix(material.org.MaterialTypeParam, FIX_POINT_COLOR_MAX); break; default: RenderPass_ShaderIsTransparent = 0; @@ -53,7 +53,9 @@ void burning_shader_class::OnSetMaterial(const SBurningShaderMaterial& material) { if (material.org.ZBuffer == ECFN_LESSEQUAL) { - if (material.depth_write) fragmentShader = &burning_shader_class::fragment_depth_less_equal_depth_write_blend_one_zero; + if (material.org.ColorMask == ECP_NONE) + fragmentShader = &burning_shader_class::fragment_depth_less_equal_no_depth_write_colormask_none; + else if (material.depth_write) fragmentShader = &burning_shader_class::fragment_depth_less_equal_depth_write_blend_one_zero; else fragmentShader = &burning_shader_class::fragment_depth_less_equal_no_depth_write_blend_one_zero; } else /*if (material.org.ZBuffer == ECFN_DISABLED)*/ diff --git a/source/Irrlicht/burning_shader_color_fraq.h b/source/Irrlicht/burning_shader_color_fraq.h index f9efae2d..ad0c1971 100644 --- a/source/Irrlicht/burning_shader_color_fraq.h +++ b/source/Irrlicht/burning_shader_color_fraq.h @@ -1,8 +1,8 @@ // pixelshader #ifdef IPOL_C0 -#ifdef IPOL_A0 vec4_to_fix(a0, r0, g0, b0, line.c[0][0], inversew); +#ifdef IPOL_A0 if (a0 > AlphaRef) { color_to_fix(r1, g1, b1, dst[i]); @@ -11,14 +11,20 @@ if (a0 > AlphaRef) r0 = r1 + imulFix(a0, r0 - r1); g0 = g1 + imulFix(a0, g0 - g1); b0 = b1 + imulFix(a0, b0 - b1); - dst[i] = fix_to_sample(r0, g0, b0); + dst[i] = fix_to_sample_nearest(FIX_POINT_COLOR_MAX,r0, g0, b0); } -#else -vec4_to_fix(r0, g0, b0, line.c[0][0], inversew); -dst[i] = fix_to_sample(r0, g0, b0); -#endif +#else // IPOL_A0 +#ifdef IPOL_C1 +vec4_to_fix(r1, g1, b1, line.c[1][0], inversew); +#endif // IPOL_C1 +dst[i] = fix_to_sample_nearest(a0,r0, g0, b0); +#endif // IPOL_A0 +#else // IPOL_C0 +#ifdef burning_shader_colormask +fragment_draw_count += 1; #else dst[i] = PrimitiveColor; #endif +#endif diff --git a/source/Irrlicht/burning_shader_compile_fragment_default.h b/source/Irrlicht/burning_shader_compile_fragment_default.h index c6d06ca6..47963067 100644 --- a/source/Irrlicht/burning_shader_compile_fragment_default.h +++ b/source/Irrlicht/burning_shader_compile_fragment_default.h @@ -11,7 +11,7 @@ public: virtual void drawTriangle(const s4DVertex* burning_restrict a, const s4DVertex* burning_restrict b, const s4DVertex* burning_restrict c) IRR_OVERRIDE; virtual bool canWireFrame() IRR_OVERRIDE { return true; } - virtual void OnSetMaterial(const SBurningShaderMaterial& material) IRR_OVERRIDE; + virtual void OnSetMaterialBurning(const SBurningShaderMaterial& material) IRR_OVERRIDE; private: @@ -27,6 +27,7 @@ private: void fragment_nodepth_perspective_blend_src_alpha_one_minus_src_alpha(); void fragment_nodepth_noperspective_blend_src_alpha_one_minus_src_alpha(); + void fragment_depth_less_equal_no_depth_write_colormask_none(); tFragmentShader fragmentShader; @@ -35,7 +36,7 @@ private: //! constructor burning_shader_class::burning_shader_class(CBurningVideoDriver* driver) - : IBurningShader(driver) + : IBurningShader(driver,EMT_SOLID) { #ifdef _DEBUG setDebugName(burning_stringify(burning_shader_class) ); @@ -67,7 +68,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define burning_shader_fragment fragment_nodepth_noperspective_blend_one_zero #define SUBTEXEL #define IPOL_C0 -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -78,7 +79,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define INVERSE_W #define IPOL_W #define IPOL_C0 -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -91,7 +92,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define IPOL_C0 #define USE_ZBUFFER #define CMP_W -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -105,7 +106,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define USE_ZBUFFER #define CMP_W #define WRITE_W -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -117,7 +118,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define SUBTEXEL #define IPOL_C0 #define IPOL_A0 -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -129,7 +130,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define IPOL_W #define IPOL_C0 #define IPOL_A0 -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -143,7 +144,7 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define IPOL_A0 #define USE_ZBUFFER #define CMP_W -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" @@ -158,7 +159,18 @@ IBurningShader* burning_create(burning_shader_class)(CBurningVideoDriver* driver #define USE_ZBUFFER #define CMP_W #define WRITE_W -#define INVERSE_W_RANGE FIX_POINT_F32_MUL*COLOR_MAX +#define INVERSE_W_RANGE FIX_POINT_COLOR_MAX_CENTER +#include "burning_shader_compile_fragment_start.h" +#include burning_shader_frag +#include "burning_shader_compile_fragment_end.h" + +//occlusion query +#include "burning_shader_compile_start.h" +#define burning_shader_fragment fragment_depth_less_equal_no_depth_write_colormask_none +#define IPOL_W +#define USE_ZBUFFER +#define CMP_W +#define burning_shader_colormask #include "burning_shader_compile_fragment_start.h" #include burning_shader_frag #include "burning_shader_compile_fragment_end.h" diff --git a/source/Irrlicht/burning_shader_compile_fragment_end.h b/source/Irrlicht/burning_shader_compile_fragment_end.h index 8e4719e7..c6311009 100644 --- a/source/Irrlicht/burning_shader_compile_fragment_end.h +++ b/source/Irrlicht/burning_shader_compile_fragment_end.h @@ -7,7 +7,10 @@ line.w[0] += slopeW; #endif #ifdef IPOL_C0 - line.c[0][0] += slopeC; + line.c[0][0] += slopeC[0]; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1]; #endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0]; diff --git a/source/Irrlicht/burning_shader_compile_fragment_start.h b/source/Irrlicht/burning_shader_compile_fragment_start.h index 15306449..40ede2af 100644 --- a/source/Irrlicht/burning_shader_compile_fragment_start.h +++ b/source/Irrlicht/burning_shader_compile_fragment_start.h @@ -4,7 +4,10 @@ */ void burning_shader_class::burning_shader_fragment() { +#ifdef burning_shader_colormask +#else tVideoSample *dst; +#endif #ifdef USE_ZBUFFER fp24 *z; @@ -25,7 +28,7 @@ void burning_shader_class::burning_shader_fragment() fp24 slopeW; #endif #ifdef IPOL_C0 - sVec4 slopeC; + sVec4 slopeC[BURNING_MATERIAL_MAX_COLORS]; #endif #ifdef IPOL_T0 sVec2 slopeT[BURNING_MATERIAL_MAX_TEXTURES]; @@ -49,7 +52,10 @@ void burning_shader_class::burning_shader_fragment() slopeW = (line.w[1] - line.w[0]) * invDeltaX; #endif #ifdef IPOL_C0 - slopeC = (line.c[0][1] - line.c[0][0]) * invDeltaX; + slopeC[0] = (line.c[0][1] - line.c[0][0]) * invDeltaX; +#endif +#ifdef IPOL_C1 + slopeC[1] = (line.c[1][1] - line.c[1][0]) * invDeltaX; #endif #ifdef IPOL_T0 slopeT[0] = (line.t[0][1] - line.t[0][0]) * invDeltaX; @@ -67,7 +73,10 @@ void burning_shader_class::burning_shader_fragment() line.w[0] += slopeW * subPixel; #endif #ifdef IPOL_C0 - line.c[0][0] += slopeC * subPixel; + line.c[0][0] += slopeC[0] * subPixel; +#endif +#ifdef IPOL_C1 + line.c[1][0] += slopeC[1] * subPixel; #endif #ifdef IPOL_T0 line.t[0][0] += slopeT[0] * subPixel; @@ -78,21 +87,29 @@ void burning_shader_class::burning_shader_fragment() #endif SOFTWARE_DRIVER_2_CLIPCHECK; +#ifdef burning_shader_colormask +#else dst = (tVideoSample*)RenderTarget->getData() + (line.y * RenderTarget->getDimension().Width) + xStart; +#endif #ifdef USE_ZBUFFER z = (fp24*)DepthBuffer->lock() + (line.y * RenderTarget->getDimension().Width) + xStart; #endif - +#ifdef burning_shader_colormask +#else f32 inversew = INVERSE_W_RANGE; +#endif #ifdef IPOL_C0 - tFixPoint r0, g0, b0; + tFixPoint a0,r0, g0, b0; +#endif + +#ifdef IPOL_C1 + tFixPoint r2, g2, b2; #endif #ifdef IPOL_A0 - tFixPoint a0; tFixPoint r1, g1, b1; #endif diff --git a/source/Irrlicht/burning_shader_compile_start.h b/source/Irrlicht/burning_shader_compile_start.h index 0d8a5f77..d11b5dd9 100644 --- a/source/Irrlicht/burning_shader_compile_start.h +++ b/source/Irrlicht/burning_shader_compile_start.h @@ -13,6 +13,7 @@ #undef IPOL_C0 #undef IPOL_A0 +#undef IPOL_C1 #undef IPOL_T0 #undef IPOL_T1 #undef IPOL_T2 @@ -22,3 +23,4 @@ #undef ipol_test #undef INVERSE_W_RANGE +#undef burning_shader_colormask \ No newline at end of file diff --git a/source/Irrlicht/burning_shader_compile_triangle.h b/source/Irrlicht/burning_shader_compile_triangle.h index 5594b989..02940f3b 100644 --- a/source/Irrlicht/burning_shader_compile_triangle.h +++ b/source/Irrlicht/burning_shader_compile_triangle.h @@ -28,7 +28,7 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con temp[2] = b->Pos.x - a->Pos.x; temp[3] = ba; - scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) > 0.f ? 0 : 1; + scan.left = (temp[0] * temp[3] - temp[1] * temp[2]) < 0.f ? 1 : 0; scan.right = 1 - scan.left; // calculate slopes for the major edge @@ -50,6 +50,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.c[0][0] = a->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][0] = (c->Color[1] - a->Color[1]) * scan.invDeltaY[0]; + scan.c[1][0] = a->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][0] = (c->Tex[0] - a->Tex[0]) * scan.invDeltaY[0]; scan.t[0][0] = a->Tex[0]; @@ -91,6 +96,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.c[0][1] = a->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][1] = (b->Color[1] - a->Color[1]) * scan.invDeltaY[1]; + scan.c[1][1] = a->Color[1]; +#endif + #ifdef IPOL_T0 scan.slopeT[0][1] = (b->Tex[0] - a->Tex[0]) * scan.invDeltaY[1]; scan.t[0][1] = a->Tex[0]; @@ -102,8 +112,8 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con #endif // apply top-left fill convention, top part - yStart = fill_convention_left(a->Pos.y); - yEnd = fill_convention_right(b->Pos.y); + yStart = fill_convention_top(a->Pos.y); + yEnd = fill_convention_down(b->Pos.y); #ifdef SUBTEXEL subPixel = ((f32)yStart) - a->Pos.y; @@ -127,6 +137,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -162,6 +177,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con line.c[0][scan.right] = scan.c[0][1]; #endif +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -173,7 +193,7 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con #endif // render a scanline - interlace_scanline + if_interlace_scanline (this->*fragmentShader) (); if (EdgeTestPass & edge_test_first_line) break; @@ -195,6 +215,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.c[0][1] += scan.slopeC[0][1]; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; @@ -225,6 +250,9 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con #ifdef IPOL_C0 scan.c[0][0] = a->Color[0] + scan.slopeC[0][0] * temp[0]; #endif +#ifdef IPOL_C1 + scan.c[1][0] = a->Color[1] + scan.slopeC[1][0] * temp[0]; +#endif #ifdef IPOL_T0 scan.t[0][0] = a->Tex[0] + scan.slopeT[0][0] * temp[0]; #endif @@ -252,6 +280,10 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.slopeC[0][1] = (c->Color[0] - b->Color[0]) * scan.invDeltaY[2]; scan.c[0][1] = b->Color[0]; #endif +#ifdef IPOL_C1 + scan.slopeC[1][1] = (c->Color[1] - b->Color[1]) * scan.invDeltaY[2]; + scan.c[1][1] = b->Color[1]; +#endif #ifdef IPOL_T0 scan.slopeT[0][1] = (c->Tex[0] - b->Tex[0]) * scan.invDeltaY[2]; @@ -264,8 +296,8 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con #endif // apply top-left fill convention, top part - yStart = fill_convention_left(b->Pos.y); - yEnd = fill_convention_right(c->Pos.y); + yStart = fill_convention_top(b->Pos.y); + yEnd = fill_convention_down(c->Pos.y); #ifdef SUBTEXEL subPixel = ((f32)yStart) - b->Pos.y; @@ -289,6 +321,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.c[0][1] += scan.slopeC[0][1] * subPixel; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0] * subPixel; + scan.c[1][1] += scan.slopeC[1][1] * subPixel; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0] * subPixel; scan.t[0][1] += scan.slopeT[0][1] * subPixel; @@ -324,6 +361,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con line.c[0][scan.right] = scan.c[0][1]; #endif +#ifdef IPOL_C1 + line.c[1][scan.left] = scan.c[1][0]; + line.c[1][scan.right] = scan.c[1][1]; +#endif + #ifdef IPOL_T0 line.t[0][scan.left] = scan.t[0][0]; line.t[0][scan.right] = scan.t[0][1]; @@ -335,7 +377,7 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con #endif // render a scanline - interlace_scanline + if_interlace_scanline (this->*fragmentShader) (); if (EdgeTestPass & edge_test_first_line) break; @@ -357,6 +399,11 @@ void burning_shader_class::drawTriangle(const s4DVertex* burning_restrict a, con scan.c[0][1] += scan.slopeC[0][1]; #endif +#ifdef IPOL_C1 + scan.c[1][0] += scan.slopeC[1][0]; + scan.c[1][1] += scan.slopeC[1][1]; +#endif + #ifdef IPOL_T0 scan.t[0][0] += scan.slopeT[0][0]; scan.t[0][1] += scan.slopeT[0][1]; diff --git a/source/Irrlicht/bzip2/bzcompress.c b/source/Irrlicht/bzip2/bzcompress.c index 5dfa0023..d9ec6be2 100644 --- a/source/Irrlicht/bzip2/bzcompress.c +++ b/source/Irrlicht/bzip2/bzcompress.c @@ -239,7 +239,7 @@ static void sendMTFValues ( EState* s ) { Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; - Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; + Int32 nSelectors = 0, alphaSize, minLen, maxLen, selCtr; Int32 nGroups, nBytes; /*-- diff --git a/tests/draw2DImage.cpp b/tests/draw2DImage.cpp index 1d80c041..7983e3ea 100644 --- a/tests/draw2DImage.cpp +++ b/tests/draw2DImage.cpp @@ -173,7 +173,8 @@ bool testExactPlacement(video::E_DRIVER_TYPE driverType) video::IImage* img = driver->createImage(renderTargetTex, core::vector2di(), renderTargetTex->getSize()); driver->writeImageToFile(img, "results/fireball.png"); img->drop(); - bool result = fuzzyCompareImages(driver, "media/fireball.png", "results/fireball.png")>98.25f; + bool result = fuzzyCompareImages(driver, + driverType == video::EDT_BURNINGSVIDEO ? "media/Burning's Video-fireball.png":"media/fireball.png", "results/fireball.png")>98.25f; device->closeDevice(); device->run(); diff --git a/tests/drawVertexPrimitive.cpp b/tests/drawVertexPrimitive.cpp index 825e6134..78d40042 100644 --- a/tests/drawVertexPrimitive.cpp +++ b/tests/drawVertexPrimitive.cpp @@ -72,8 +72,11 @@ bool testWithDriver(video::E_DRIVER_TYPE driverType) } // TODO: mode is buggy, but required for skybox. So driver supports it, but would core dump here. + //burning v0.53 works +#if 0 if (driverType==video::EDT_BURNINGSVIDEO && Type==scene::EPT_TRIANGLE_FAN) continue; +#endif driver->setMaterial(Buffer.Material); driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); driver->drawVertexPrimitiveList(Buffer.getVertices(), diff --git a/tests/media/Burning's Video-2dmatFilter.png b/tests/media/Burning's Video-2dmatFilter.png index 09891c8e60424c3edf228e2f1fa2c1ea3e741e2d..cba9be3d42c21c359b40f72fcd9be4787f5db947 100644 GIT binary patch literal 19982 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 diff --git a/tests/media/Burning's Video-addBlend2D.png b/tests/media/Burning's Video-addBlend2D.png index 2122aa3566ffe149ce3d56fd34c4594086706af5..c3cc5207813fda7fa012ca70c96acb2352d8a740 100644 GIT binary patch literal 6849 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 diff --git a/tests/media/Burning's Video-b3dAnimation.png b/tests/media/Burning's Video-b3dAnimation.png index d16e689a8de39f43e4c490df7b4707bf28d58566..1a59710eea449d45bd3e1c9babfd3a74d60e02a7 100644 GIT binary patch literal 5884 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 V)8vGF?!nat)K#=Vl}gqT{{t1rek%X~ literal 5879 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 literal 4577 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 diff --git a/tests/media/Burning's Video-draw2DImage4cFilter.png b/tests/media/Burning's Video-draw2DImage4cFilter.png index b0629d89d4d2430d2377dc348769765b3cd07ea9..c62028f61ba97af33fdb0208558f6e8a1d6cf93d 100644 GIT binary patch literal 35379 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 literal 23716 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

JyV^mi-hP`+=h3#bwUV5Cusd6w?uHE)& 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%0AT)KDGdONNQ`lw z=bUrjci#Ks@pyfGEg~_-Z3_Uf-*;tCT;_dqMwXnlhQLsnubMMC>#R{#Kmx>!Aj0KD z+8ATe7$gGBEGb1IG`2$`?;IIGMDIIPQ-4lKPTSMD2l(3Am+LbkmPNPxdtKM^lk#m@ zjGc3xGXPMgdy)`ijLA9Y%CWOZjxolKLkQcp#Td^zx(2LhR#gQ>L)My?4bQL}Uk)H& z+FNTiqlhHkgc(3pK@1wCjaLBR!1FwZ5OdBT#^iR;ab`c?AtR!5uAFI<`z#S*=6~|F z98i~YN8b&INS20SFoujVWO-4mtL9~bfpa|s#O;zvi?#6NS)+w{e z+B?@-3;x{Wd-d$q)s?jtB!>_TpmQ!MY}+OT^E?X+0Ca$584e+ob1p?BB7Zbg)?H@4 zzP>&lkE8F`bzSF$%EqZZO*%JwIz2n*jHrn0oF97M0~nH1oG~RvC87vy-+z00dYYe3(=??uh)9m9z0q-Y_N({5 zS5?nIL_MN0#yR7hV~f)?J?WNGnwB}n7%UMHZBdvxOAO(8n#wzSDW&Ck-nLD)2ml=! zL?lGpw?+8O?04UN_vX!;o86_gb~g++H#Zj-I{^5+&5w_dA3uGZrfq3j=9Chvh{&)Z zGe=J42(0XnbIyAvrKmM+gpGe{H!B@rV+s${M8HXF=2hZJ+poO6_zF{?M3C}}&YJTv=~fd(mm z5uq`N7*$mD>guXot6$E%hGE$6_Wef1Sv$~n(rEe{@lQcBNmzQ4c!_|vCpnv!N?3^+qXuJ?#|I-Nd! z`V=_r_xoKxw7_R)pW>s4K;)b=l~>q_j4=t-IcK{;6$dvMV<5@8LOLEC2N!0CnM72T zvv8IUz!2^F;c|a5pC;TAfbE?-_W)lz`|Y>iGP6^();gsaV~8>5eEH`3;^Ja|I2@dF z-gSt$P4m;!)A!roA08g=9v_&w>$<-0{m^^w%g59%cKi45-|vU=#_U+qz{j2i&Rrz$n zx~|hSrIdDVaL#E+F-Ao#XOk~4)xNyRH4H;IJ%9iG_y7C1zrTC;Zr`^}@cFfe0hPml z_K#5ibN}yud2I%g30w!+_VLTQwHcF92|$xy2{Myk2{Myk2?iGKAAL0ih_d>AI{*Lx M07*qoM6N<$f+m<=p8x;= delta 2207 zcmV;Q2w?ZE6Q>i9B!6y6L_t(|obB7qZY4K%z;T|#!(vt4tE+2iT5gSd+A{+L$j0jc zd8F*}9NFhZlI^U#ouwB63@PBj0;ozErga9LKAy>&`vE*N#BVJUxGYc$}wa zj)~CD)AP2hl7HA*tE$_!Ez6QpQdLz2YXHC*LPVQUL?j9`FU#Vbvz_g_Zgl>Oi%Y-n z0pQ#NeC_CTI>i_tA0NH<`~4mOa?Z}VySqCg5|MRXQ%Z+9=fS**2v-=~z;byd|8 z+ZdB`PASD0nYk>|Z{A#Q+g29c-g_cSA(rWzbB3JDU&-NcxOw~L_V)Hq=N{oJM;Qi&zH6kJ!W`E{qRg+XzGh{+L`m3wo+}_^)?*03> zZ{MDKfUh0B?0<-;>|BY+7!yJO07NV|#$^-C%+oY=T{jNHIF8oBJkRUAl=XNRhG91n z(LB!|K72S$)5nh=jrrFz5Ak&)YpsZs6*uQBBIQhD+qQBG{jx%r%XJ9Gn+zRcW@jyU zH-CI_VR|YzXx36<-cr=KCD2XUHtEc09LI82rK&H>Ei*gkj4}5AmD0wTMI^>J&vVYX z?>q1P@p!zxz7~-f~H3OwgQj zw<-YmsN1%&Sr9RUQB_9coa^_yzVFpS=e*yIL%$Cpgb)&m8{6Z;GozH!vMgxqFbr8W z#%LUkCmHadSqr z2NyIe3*=RG6%n-rU598?1krXxIFNLJ&XUv91{Qz-j4=wP+@PuI-QC?dj-H${+pN8F z9g*?p9^b1+S65d=WF&_WtO4g-QnPKFpqb}cSd1~9fwByT5Xw210w5w-EPv}RGhbg{ zACJe;_v^Z@^MYmL)Sf1t8=X$i&N(Y8B0J}Y-uK2>lvA7`B?d*r4YC+fudKAK!ptl} zM7wd^9rk_STWjBadE0eej_LmXUgm9EHj$-WqR)=@`+W#OM9P~O%d!}N@&oF}PYw}h~j~_pMoTh17=6{qDtBA<30W(KV z5nb;A;B-2D`t&Jq+VA(ferSQuj-KM9h?vMZXDqLF0?zdbxW+&w-pbJul!-}|BW-j|Q5UF`Pn z-@o4v71?dX5zzlg}-`s4n1F^tSGFPaknBmA^?Yi~~0+6%w4)`sVK zTBaXQcTdyPX_;b-0N}m9y0|5Li+W>7}JR7M56~J6w=h8kCflj$M%MZb<>@ln&|cZjjIC z{SV*8nYlZ2&dk-EFby?%d>kqqG&D4PMFknizn=LI9xu`V)w`c?Av83ydqtV|+8(IG z^#14#J6Oo~hc3!nu)Q-XOt@e-KL*A*=`j2Gm*G$HD${;3r{{m3uVE62)R)G>-oT_X zGbVvB{B(ZTq;#zZV_~2g`P0fWLWZD#hdsW~gF;g+wBYN^v7m@ujDa-Tn8mG{g8QVw zceBN?wL8Z0BR@_$;vs3{p9Dx*#0*VO9E_#?v_p-bt2v}LogCctr> zUjOMxuV}`>XFcr9{;dfX0%ytVPaq*}yNDBNU)y_TBI=U8TAX3|*({sK{wEF$V>)n! z_q7}rSm#Q}%BXCf1|F3j&;WEl>1Zf21$TgBZ8dgEpSA}KOBZ+y)vl;Y5G?BkW(6yp zy)>kvYKpxhkm{Rj6g#-BEO#>VI`QuJRwkFALw0>Z)BlLed`=Dvgdm4o)mLRp9r4iM zQgOpklJ;$je)*99v|VdP(6)+=!DA2NmgQV>J{!pW_0WxN1O2n=Tnas*v8tHk6-y;?iPPUJc8Ln+InUtop>u_=nER;|M-pOM z&Iknm=MD#B+0BnpmWqkc?spNw_k&omQOS>I66DJ9SFU!|1EQex$I8m+HNmRXpV@M@O2!j*Hq&azQc9Srx+u^fjE9+S)(e_YYu79l~A3j%vy zPgSlG;=u?cUpAujxq7s!*Ei>inGVRm{YK9z*n#Bd`5TmqOl3NP^*oqvSXC|tI_oYh zn;2Y=9lwR%^Y}&??4>Q(eBM7!QC%^p$L-zkE&JPnh2X#?*0Gy$6yEzAGqX%%ZinU7 zYE_|-`=XO>RQ%s{(GxY%#F@<%K2`%CdsJAb9Kqt9{JDOW zN`KPj5%6{2^yVnT7Y*Zia%y!YwMf)x*)@sBv3G9_V<}KZRBZP-zgjHsHG3g~4&g(L z6RZ&&xY6&WUnjcs*kv+Erm`lV!v%WnC~0~O4XL_Vsf;$q$5P>}U#|f4dp$IRkXCmD zFTADs_NL3u+dh%7^zkKe^(6Ms?I2z4$BRDKT}C(izIb(}<9EF4wrQ$}t~;=IU}sYG z7>b6>pa96CQEz%6$yy*jRd>walqHySh)TU6p|pHcO)ugwO`(;CzdL(3`&wIfdzy?( z={+7I!{QC^w6_6bG%PjzFOK*BJ~*edxGUr>;<}w#R9J+%jpp`T&%6+d10Y8%?}YpT zpiSEq(v&LGdoq|xr2k!-vuI<+uql#kNGP1Z{~pC@+7$XTyU$4;e+bt`%7wkBe*W5*reT7A3Ff&RPk^U8Q3~XH& zB>Y>mgA34za6_`;9B7 z5#9PS0fU%oE*tqlG2 zXH9QQK^`9pXhN~s{#>@ITs5i5?K5m^Hy??=9S@s}m1q+Xr!)$|n;`|Sfs=qZ@7MYl z?K5(#`YqYDm0m-zd8Z(n*gC@3)%6;4;uWh&&THjy>P1ag5x(j^q&OoaB`NdUq9L#o zNXm~rTNM*?D&;3Ql*|Jghc}PZlTG`xhEx{p*`8tJx=^U|m<#5li1SIo{0o7#KpG3f z!q!(}t3rn(O_w8^(PF2n#sflniGC+2++c-Xxcilbr-z24Pb&ph@Y_Ts)&wOP$uS;1 z(K_ucKO$S5zC}Yle~ON!5_95!XQBOm)n17qCG+>Un1 zzBUoV=>+XrKWeZ3+^yRUmpCGE_q!P?_ngTRB%+8^6VGr`k74bn6Yo=eC}-&{V+#>k z?)iOf}6iaqD6&m2&U`92Y zX{KPyXHgW7kT{m6xs}N4LUN6#=|4r5bXF8z#8}81#H>g2sU4xuWg4b}?w1CvJ@f0_ zIp1{-n39i3#(G&%xP(?NEX+E+#Q&|SnEY$YwTFUubsy4BtYM|0WFrSkv{AjD1=MSG z%w!I_26uKtmI8xH--KqHV7`={WfaCLFf1u_C42Khnm1?=J$z_m5JK!wIkg-VWsd(V z`MrRmOOl;!`m$T&F55da#k=}yyY))|4bS5e2){aF0mxUzk*5oP-J}>6su)#ct{c=z z#vXhjB2_g~2~*N|&rUi3tZEffVzbK5vs3VNVI{dm%&rCImC{(yO4-ip5ai!eNCN&f~-?HLX=gzYeTU8OQ; z+_hR5ZaI-iEs1Dt)N%EUpUDt)r{3MzOFFEpIAJ-_X_Gv_j#5X2%Tp5o89 z+)2VB7UYpuu5f-q=B)bTh@C2s1GhVhX$kf&+pT@J*g785HE-B3Ok7C*m%LszeALJy z`Fi%yrfrM4ZZU-6C~2VXm^7|v_#rTL=TqU2BXEc|k^{BT;GfX9IBeg;|1dU*FA+>$ zraW)15LkdLAG_j`zC4`6!leY*oSI`tnb8Nb zwS2KXdq!=O8G^|b8hThR;JfA4xn%7v%nv+z2JmRjZCmrX_D6HX>!P=(Dn;N%nUmtZ zR5A5m6Exs@x2oer-SEg5&3f(Vd;GcG!`9EE5-TBD_sMJeuaDn%BL$tuxz;6Thfa2k zKxZu;<4qhWRL`lx_8XasD+YsYx4s-#!_(i#9LCw7d|xk3q;Lm8xU+$e*jjx&`5l%G zV|aJ&pI}S^p8)gzC(~ zCZ(DuAJ*XJzvng_@1#Az*llp)9zP}Nig7;gzy5wc+V+`l<9UIl$pFfAY z>a!2y60`HDfi3vg0z|LC*^2rE+Xh;l)e&FK~MFtPc zG9EJtkB7h}Z&w6c>V$(dTxh68xxAxZd!XvIW1;EqfGpcFr@r0s!EM1u^z?9(&b| z1m`-Qp7+zm&ZMT>-BRqcc*)8yMep%KPl`@9pN;YoNUn^joDB&zFV-eB-5B=RZ!)a| zxw7CX)~Fw|!i>DL-QQLkI3>he?@raDpDvF768ABCKV8+t`}~Ea{`EfT*_m4SjGp z+r}hwc!h-m2k=@^8q=w@u}rArsoyg<*%mU1jBnZapO$a>D9$@U_kxf5hE|Mo= zuO^#Sc++WR6f9DJ<5ici$FEoH-bGMP{S{hx=NtSi78#joYLb2KOMtJ=lR?=wyWKo- z5JNB=!IIjJp%R(3V12%|$#=hMikLrZvh_C|uvS4Cs-^C&`74ei$wZJ0 zhDVBWR`H-6Q!SK_(d&2<0)q<4#ojZQou~3<4M^Mmq~UHfYA2el6GIv#!a`yUqNH}B z2%KeHH7{rZT@#T7A<0^P##jE_{BMm^JTqR01mXp%2dAagAf9S7rVjDis)t#G)6?ct zHdjH3S*5n71ggzPEz~kfWfwE|{9mk|aH)et<)s{G+*8;XwCC%>6hy5_%L$5P>#7r+ za$6v(E?I<9_Mv!sk|A%IRab&n&wbk@hTA-nPA5-(XaG;l!YwkYnzD-7-hxYt79KsX z0zGT2`&7*J0Mhu0W_WHci$4Uh4&D4iXc&?IUa7hSO`${d@&N?a0Ev-<&<9d@f_Ed> z2y~F7gpr3|FJZJAq6{Q3>Jaz*_$;4$@J6jC!=i;qeDpSO+vkeZbIm<%M%%hYY@0ZI;3*{?pz0{=9axU|(^cbFJ`oq+T)*118|{iK zW{dlSHi*)V95j)!#fhfQ(u<{(E!+Wpj>+QZJw0WpQ_3eBm1)eYf=-v!_zI6JXyr$I z^%x;hNj%OE0z=eF)nTb7u%!AdxGjuU`=_+bGH}t!R+{9cu|sv=&}AGjmcdYM{Z6X< zJs**Y$@R-<_Og|i(E+N{8v+XZ)W~vEumw8hOHqlHFjIle^GF6pH=6 zO7F}<#R7EI8b^dGqJQdqm})qxG>RGG2V|%S@sU!>_MD?AdJd42e(LmH8*Qz%GjZ5G z-+ufl!r->(Y25O#O0h`63a`W*)0lFW6O0)>>-p1vN7on+ggy|J-u%%U@LOikq3SBJ zX9punh}5A2nvf0^&$@onUjExtU(*GvYDgq6sPme-{Zm%WFWDVDHa(V2C1T1aiFNR- zNgj>A{2r%E!D8XcPmWc%@~gdJ3Srdq468Qd1WSM(l?#UV#~oZFEz%>FPo(~#9x?hrdlCuOgK|0#t~ zXN*)xwdnL%-!tY2liFYG?&iS>Qr9zWi|}!_@u6MEX;;m4o{$Ec!7yj9p4)fv*u!AS z92AWvjf+pGr}SdumL@LwUXtvfrSc+y{cpm6K39v$3Vhn>N0{MjV39vVKdktVWseNP zd$hf9>+jbknC|O$2+c&7Ca8(Kid{=(6h|Y1%k|5bV&>2%ejh8Y_MtPnNlxhSDQdZm zaqz}xWI_)UR{9PC%Y}pY|;yf%< zGGskj+?77>!tn5q#UQw33-$R@F}+lv;=LIW-?PnVGiyv&cO z4M1b3c_#?3Be~oCu40{enClfHEt~I`a!hV^DmE?(mteo4pzX#nS|r|GRBB>8VUk3jFilfloni zxmk|pK+16kR$by%e7k7`X|sot)VFfLD#tH_YaCIZjs#ElwMAVv6c(Znu zn=$4LquO$si@Hm;Yd@_f>3q6?JSJ+=o|~LiF|uqGQK=}Rr<0hC9p+3Kt`iev2%!T; z+0_JrC^ty#q;rONt9wQd(EvOtfbvW@*b!`N1KaDR5MBQItk*D0&s)|Uc|-&c=ooFd zU#6$YlOv>)6?t=tXRBw>4An9&W*`#9h%B+GcF;%>oCV>(5x>D|l>f!*HDvFFl?#Zd zgLR)i&!&)lD?Q+fegCav?v>U=3imTd`l02z^0eRMKh16%rHZd*<^cdL(Ec*j(`^T{ z;IwJC{|sep*J}lj3s!N{t)AtD%o~BQ-#sKinSX4nuD0s^dyMx00Kk29HD&#Ov+!T}f`R|~RfoF-06S2n|Ej_>wh5iT6U};98Tz{U#>gqn6dV4rL)AU&lj>1uB5XwynCN3?`u9h>VRax zqb|D;Py33q6K4<%=;&Nq-hdGnT;w&k%f8}Jbxf8!edtPNkr2@--A^NS znZ}&)THEg_u){v7`HBnBVV^vL;BX~lv`+fp0tqX6V%%zw@N~4^$NupGHt@fqe^rihZWooZ@sv@0 zxDWi#Dp1#%`Ei}TMY>7cMC_T>%+a*zdI7@tS6ff#8ft^KW#_x=kmakZHcbg}i6!B= z4GxYVNm9Zi=3J6?+rw$Xv8O-HH2FyZS;J?Iz4;E4lkP2B&%*`#|1*~fBgF0kSB|D> zk2311CsPQiCShA*?lpr%0-gVKyQt1t>}t(iT+kz*`j@Q278{m5)Ma^k)T;OP|CdV6 zIl_cjt-IEt{ygN#qp`k}BpG+K)uaJ~R^doE%UsugH{x6-;$F(_%kxcLExgG{hMmpj z@@bi0G!i$94e1ljAccIlKP?b0&Y2+Fy{CLfKd2nm*3BfxbN6q&_|zF{eLOVB4Hzr= zt`Spv=Qq;RxKZGBaEFZfJo<&0FkUjn*jG4k#+_OF2+N}s^J?cjs3zx0Q*!!RZEw6y zdfOjLC8V$09r@Fz3!SeHGY_B~aV$g5=teuiCDzw%owBWH)USn8{zmjg4wqz2q*rlb<$h z6-p7lg9`aD>Bw_TjScr47IdOxHUX*p>}_RF)g^b!LZ1|~V0Q^>EjqKk5z?$Nzh8WU zclcE%wb2f5I|rqw%w(S1t-CNkDk#Q0i+HVOSlxaJ9 zrQA(fe+9>UWR-uJjf^Vwwj)GI4&~J}Iv@`hH0{P810}xt3|z27)rR4RiOxpa`jJyD zMk=)?XI9Bo2a{#j6Vgt{mF(3MnEn>eq)mU-uZV20Ldk?*RQ%J^MIF8kccC}s7ah}9 zzi09-v*a>@uPXBEEitL;pDBgyS~{~1nxZem3(*(FL#vVk;%V->AfAc50by-C=N`8x zkyg7i&&JEY1ib!iriuE__Qs`EoV3jnp1js3TIH|Od8yLQ*}74b>n+lc+R>N$$~&DNjKkYJ1!?3+g$LA8ruK!!fuT0s=LwKn`^r}@3W2{&<^wfh|dzxQ3Am~xGoeiK&W zcr3};Q6|Ik`on;3R6%v|SQT+@{Ll5c1;b#cZm(xbv*Y{-c|YXqdp-`r+wJHH-Uopd zf9K61Ys@mo-0PxB?gox;SjzF&pepv9HhGTb&0+`*GK~qmIHDDWnPZNy4$dsi+FX~| zqwJ9d$%y)rd99|s=aM$O_23mV$Fr9BMbxw#g{QWs4aAm(c9WQ*({n8s&;tVTe7Uq2 z9&d13q9V)CHup9;S&@SQ$PHT4i?+q0_Z@~X{WD+BGp)U7G)wr7_cZ4NHhW_FK?-X_ z3~%g&sVEf@!lvKi-XJpxp!R8H3Sj;5=~tzmBVj+D44`^(=7ft=X{a1Xd4~R;VeKHI zln?kZRs$gbf>qc)0|N*s6`>MpE;rm=I$a7GDYJN;-+UNK8Wg86CpK)yD7)Q7OvKWh z;O^MV6{PkL5<7~;Nh>3=^fo^4JKn6EyMD zG9NiB7)X}A0aI$a`h%V5O=95RDjd4l>UqDF{gTumMHC|;(b$QNbXuqvG6g04sb=Qu z4P?n!5Uj&zRZq-yb1@^U3~n!YZ$dBAlt2u1m8E%=@M7YbY4ir_-MaXN{88>HA-lb`w7e*0*m!GpS?jDFd376^81zzFNRJ)(*x3)E>xprhE=N z_)Gx^>-}2y_2}f=%+Z+Vm-Kb+th1WAvUMT z8DLuX#&P3woAHDg-RHm5^JZ@~y+ZBmcAghI$5_DIsm}XsOp%ONX4{Y>tx0VecTt2C+{<5BTtQ5m{F1Y>I9EPnBdn_wwK=8G| zJ^4CMS^i=6YZ3P(m5w@ZU28?BG}n>%ZkYiVv7h32cVgei1X(*)oo>g5O$5}#nZiqR zOo(=QiLy6L>ntl#9MEw7BRPc+{2Lkw!caA3PWsLUi{=P0r2&^$K-HqWPx8vwG|>x< z=P0&8TU*`;SMq`ShTC^^H`~Nkw`XK`7aL#hLT;01%}3Xy77vVtXfU)MZ;(~WQi8xs zd+iC5`q6mh9)Q*xNjJzlN^*+wp`YZs86BCqoyWrX!|8;}q-~_Ez9+u49Xh^$d~i3sA@{{YTBR0Ell0S}icqPy*aFH}{^?uY4C_=d z?*bU$HH1AfbjDDVDU+xTggmq_l_mKwxf(C(+>Rrj5kb7`AiEyM@#Ci09=)~LD-p`y zsGOLox8k^cy@G&#>tqD=LoO^-+EN; z54DmKlB+%b*mSSdz97ZC#*p&2ZEC~AFF9!YTby)6m5j?baR@6amc_M35d;N_kUt~o zFD7Kq`n3C(Xe|W4D|wRb&fg#ZcAw@H!}j92$DcNAA*CV^wniBq!SxP|rx%aW8cU}5 z4$&A5Xpt!;wx$A}T96JqnxMl|;wG$&G7 z^z)xWHE~fXaY8~UyH3SuRJ#xAOR?T~4zunDIY}+vjpwSz9Dnlc9UYI=v*;KYVmPZM z%`|ZVIvaLJODaL!MYuT0J3@Soa*p0+ESFX!81{_4$X#W9UB0=PfPo4qM8!4H2QPRq zLx7=s3h)`DdWs5lM^u574E7#n z)8FG>w50GQ>z$gVe@fqXaLh~aGO9It&`ff4%R}0$!CdVcZH>b@PjVg$e6+<==-Ri9 zzJXh*ah^nmig>`!tzq&y6qsTSuIz}o6ey|Q8SQ=~w@g8{lbC_JX1Y-WN*gPOJZaTd zfN}`Y(OAjyG+j@~;l+oZQuAv@6#%k9I^n7@Tm`+=f8h$$!z!u-I50W=P`EDM*2j#W zv~Gi`e(B8Y#aDACkE@JxvQ1Ws`B4qT+~&LaZvnVe`xAwD=Li(!{^C(mjMS6>Rm+Ve zo=*5SWCfoTRIK{;7_V&I42~hSKy^+&DUp;5?dzKMl}0RL<|s zbKwezs8Q9zGs<4pWIB-xJTHO>@|iYf7i{*84AmzCO(dVa$2`#QVk4r26Nb5iy`uxQ zL8%oz)U^_>MecvGlny#GdbP{ueHc2+AkF2TBw>g;CtSP5E-w{kJ8a#^zV4%x?v?KB z{)pB%B)5~;aqB)G54%)i!t>H9wUVLCp#`ao4%5%PqOG-RKGS9=`QEeZc#c+FHZzCs z*M4l0RXPJ76Adt_Y2n4%C?xn2gZoB>78^SrJiFfHZRL1OVxVV@MEIh6dz7`NDKuSO z7520z_E^gf(1^d$iTG~KOZa5xVma|B(NcbUN{ThZ<|*=8PXDb?wc(=CIfJfP&93Py zI%_Z!w@uKMvl@jYyCtSVX0HKHR)P#*cHk(c|uE3beu&EnonVW6+~uJ&-}L zP8uMEYt00cP0n?mG%fB2k5AG^J56%_awY+3&3z}04iVo%Lao&A6$0kc*z{qrBPF-UwTAjvMdU;6i z_FU9k_pg{u) z5=x{9NG~Ey2~~OvQY3U`(9TLwtf@%8ob z5d>yAKJV6Jl>q<-+(Ox#bIoxjDJ8W)3!#~}YBh^Nl}d|!l$5#Q8@m#5`Z zBVN3C(K8UTT0WFB&U~@jq5ZYW>@Ei(Z>M{8o7|Kc(cY;Tz1{QM+FAYc}{}i)GCsv|xST zPh@4O9WTt7q>Uc->Wi?8Hv~;5w^XGDhnrPk6lh<+uK)ck%oqz^sKh!rSI`kJiL&2b zmV}j`esM>~cLS{N;=BAx%oCZEicMO!mf2ps0+bu1AwZWNp zrF?TN!<8H`oSR!Q$QZ5p8h(Fuw5~d2uG{w?V##jN+}bAnCa^HyY3nJ9+_*FFMwrpD zCbPN~8h@Z(L0;K%+vo?Azbv%1yb9W1qYESY`}p0XP^vwp%GCC zBW&5(nM+CG0zB#Bm92$gc*fq20~gS1!homn$&mJeb$7Gxyx> z60X<&Rmbza$zrdkTu`bviOm_W1Sxt*&O(b-RUw={m;qL{RHLg>C__9e492U&78E36 z2$Y-q1thwULEltaLeqzb%{_xBzh^K;wYdJNiO~Fx#^T;4mX)1L?&2qa+ss*k6JoCu zBMrcxikH+^(*tTkmjWqiV9#r+)yJ>Ktxx`QYxQaAQsG3u?8oEjt}4>{aFm~den9|T zdUZ4o04~P|k8wu$B*Ts0)7MA*++JO)E(u;A(t`8U9u}_#&)Rv1s~&Bv+s`bH89C4g z1_nmeuJiU*UmTnvG}Yj=2>@D>1o=b#2fhSk=%=ZI2001dx>5ro)3O8t~ zJp@g(*&l&{*2{;mHwO!^p6tHx4*e}?Gp;oFVsNGsYqQGAVu-2XfjUWcl(K6lvk-9C zc}VFyq?Ehxr6|e8qBnC~{yb9hCTxIT2yn8g5 z%ege1*o2RA_lA1chG0#q%1{WKSE%dkU{TTaj?&@}v@+Y3S$DgDEVM(hZo^8@CL)S9 za~|i%rY@Y=$p(Qs76A^0I}+OB)lew3PafoO*eWFJb!iLu5yA<;d7;3sl|U%)Df4&f zMe3NY_{hjL`)ngb`B*uRE`Su*Vg5(jtc8M*UP~wsRxr|bP+>e6PZRN=U;_h=Qi#Ws z*hSzUQ15C5)SK*4F?5f&G};9*J-i8}8p{?q_x-HQA32uo-`9h>`0Cb@Z|`?s1}P)L zn77qW1LHd)PtIrRE>8N`cj1jhLbI$TXMB{GnIQpRt5tRIL_P$RsVVb>t|)hnL{-#} zAPVzv0`=CuiPdV*s%TmUikCX#(%EF&$pOGvfGjJ<#E8Jnv?Oy*fcLY(3+;hO0!3k# z*Aak3kof)nYsk7A#HG`Z7zxcP#Mp>BX-G#%ksjl@18~XBTtF@610mB&=W0V0mar&z zvnx}wVaNh>#{vXS^7;?LmrssTn>OUKTp^^%;Meu1#x!#2n??He0jqyy--Idv`_lg5 z_7Ni5dyH2>yJpT_kEL|e11v5$#~&PyM1r0uZ&9+dh@T0B%024op}W>+py}-z$qBpUJ`CMf&`K@dUw>^3|X&1_X{Dep(R<8+(CzKB&>PK1r?*DP3 zD>C1g0}hfO-(EK8lmAx>MMS*6lKh$<7Epnq!(c$N`%-oSH`L%iIO$7gX7inVAKYvN z;fk$|!Ukpuoj}m`O3>zq!gatkYT8I;Q5dokOTXudp^ViA+niK_=4Zq)j=M_j)u#Tw zuKj-6t3O2hZCu^DTiE`B)*&-&yd`HPVb)QY5%C|&8UQA$u^t?NIGmKpEf)t)f7re@S) zb)dzH&G^a|DK$6`~FG#!V4~h(2|Y12pDufSpD3;*Z|ZYZtUsi@U_7(4d1c`ZmiC@8EShzG|D(r2;I zJD#rTUKTIPcjX6lfs^yKHyPe5hQ#1h8zBeJa6fO4$40Sv zfL~mI7l(GaB98Mv5ulm$?ATW2L<&Gp$gXnPW(m>eF&_) zpgq05STkPv2%%RO9*~4$_I;tRYO%}r)NBnz{+0X@Y6V`1!-Lb$W0_Z>t=xCdWL|Tl=q22dM$<^@EpiasvcH1ZF9s2{lB?ux8TA z)W0g>#2=P}9D*{rdBHfq>5Za-_%PKJ@4V@AlMPx`t;!}9sT{S!RD+*)hBd4O*`|ND z2pNa#7)BD*4Gp0}H3Qa0xz=i0bqEtTV2XK@xyB5?@^IsEFhUprjyoY z+xhh*EUwCHDNy}l6t|L4O(LRn9cwAYE-6M0 zR|on@1>7rlwUSlo5odg9Ak2+E37gWpRzBFQ^FP5hHM`=Tl}Tn|?1o(J_5?dhM`$=E zV^po>!yY6oAV9{#%t8nq3oT*=2yBrt9oPy_3NHfAQID;7Rd}$|rQeOMTXg*KJfrHF z7IcbvSaF-RzT)6{-#x}Glc$BkF>L4j{ztU`TNtL3pz2JWB(s@7Ze3&oXjyoOf1Z4RqN+&4RP(wjESV1QJ|y z&xTHws$qe3a%jsK)$$|KQP4MoS9DZAGT&&&x|;24{LnlBT<06@5uD)sQM;=DDy)&7 z2a2#>Qa6DjqTqM`103`wG&$tlk|7Kj|KwyuN&%lsHw$D)fm<1nD>FbspfH)2oK@Tb zXB`1N_*f(0wb>%>XAF#H-a=+tWzJUR%8H>cjjZ<2znYmv%-b+OfiLHeg{)>LI5L`^ zHWhOKJbzA?xkv~=%gu3?X6pu}>_8_4=Zu#8-ia(god#E^rxC0Ot$MeEx-{V66M&fT zJ{-W?BFeiA1k9<>3}%UMhk9jR_+nej_)%{UxTFV$4FB^lszPI7kec(AtHL;Kr{4y9wv!eufV6xBxRvBXOmB3@Ic)~9k<#~hcc=U>cT!45&C!Tl? z3OxaMWDm;^40~WGRQIfR!RaVKvd3uS7qu2^GZ+MU9sCrSwJQ4hbvB8ubW!AsgG?59!vY_ z{~yq=V=#{ffj~{uXtZXt1GIbdvT5{Zn%iVtQ1uGFU=j=g!P!}olGH~|gMUOOfhIu0 zJMf_qu=w*o*gkpPhmxd0vOx?1kjDvWz>_NbQ|hPnTOCqPJUJZi%-q>EN=03LLnKN9 zTo!WScV;PcbRjw_qDZxw09KGw0FqD;8J6wpKo}e+hSv6VFr!mV4BL#ajn{A7)&NDk zVz1_5_i@_y-Y55jcVySinrLlj003epHQDNf97_Z!sFJ)8KqVD{U}mRq>Bbb%h8WYM zmM5BUxP;NaM{9u42`C)q?)bVdxTJG=5(;I_JayM4KZ@WSKYFMR+r0yi0eF5@KW2l8 z@=Cmi5|7-zr7xsa@#$2CD8oJ*tlFJCb=J}FFUyUB%-@2equ1hQI4A_+gckU zNA)5*G<*I@@WVn>LHQ-P0Y2g_a|tC5xh*dXNAvq{97nN!IGi>M8=K3lIati+>QjO!-iV+1b-&r3@-~HjJ zcpndKJT2Nub_t^kLU?DuQEOTzmubS_(l?S_tT9(Z>-H%Ad)_(%W&;|cmYolQR*h$rB9 ztHzNu0~9*O2i^83ftNd%HFy~Hm~E^0!>bTKcjyy%Ml78W`> zaHP0^9#=fVKmIw9DA8jrKC%)>XuHA#$dtQh5hU2(le_!`X!OD&+78EHmK0syq^6`X z6+#BHY~{IevPM*Mu$9SJ0<9X>o?T)FNZ=2sg&6&`sP=FFoW@%C!K>SvYsipA9u4v1 zw#eL^pYQPffgsHH)GqWK;a2zCN_NIp;q?JFUj73h5Z+<3X_?V7qX~a-yxH3JTZ>&} zHQ|K4kZ<`CX!r$&+F1&{nTlCjdW>x7Y%#-~f4ejfd_#%Vo9;*H;|&m}IJ=r^sUAf| z=`;agFu-xvJ*jm=X>|8eo7pBi8F7(QSx1VUr5FE{i(!*SRzut|n1qRc%jW!*&bOKN^mbYrO$o%OtL)|`tL-aXF^ zXDMV^Gi0sna-mvF%WP?>T0pW153tosfnFB{`GNpB*R|2T)~DH{nLqSaLs?y%G7E*| zIN1<<+N&CE{RnR2ZviM;@dEUYA$=tf{@vE(_{%KrUxBd$JsMttw2iL3wmo?YXTj;O z#O9B?l%PDYOG>rA0wr4s)D!bRR1rpkSIiiP!#qc(8d}#$MO(E(_Kp$ukJomlO1+i_ zD>U`aCcAot|M^h&^u$r`_~Fd;9cC?DB)vnf&klOdc^ZpGL+_P$M#`19eG!LyVBqwy zaBjfBnSSpQwj2b&^df>Gh!~h$Ch^=|MlfHYvMvZ$HZ^(YT?}c^T>y?eU(|LD0_7zx zwDmcYR|+~f4JFH|iY9=0EWU+`nT@S?bDI-*tqPM@H-xgt^jRCSRfdqyfK2oOmxFYo zc{*p&$xgD^=cck_`j9-n4?xpwDr~YxLN^~BEzXd?)gAr&1bClEYx=+E#%WxJe$!2zkS{nXzU&;}|m@S64+cXpzN6H-{kHo@ZlenK}3V7=ss8xZL} zdDn035pYs^ltB>(RPrIq9pHU%5WlpuS5h5sWM%520WTm0Hx8wvB->N8jGmc4e+g2j zJ?zognVu2}(lU{Q5eQji?&16G>q&wdQuTl`)nac^5q7b`Ja?h#eAw@y@ByuzneYhE z(e6;F>)@?&1+*r#_p+nNT<{jyu`S06`B(%U8vnrK8foO1UrZpMO*gOm=r|>SgCZZN+09E?2Z=wgOP+y`JI6#>Vp z5f#KWU@16}c(~;~TC2WL|kxQn$`ixBcM=gBCyww8>Z) zdQvoC{_9rINod<;B28P0UOK+oEVxt+bK4AwAWfeG4H?_x|&Ue5nM((CboQCI{fzIzGF;^aCL z>2n6%)87_9ze)9^kX{o}xg8-`{)rlV!8{T4BGl zxN|rw_J)aQ2EugO=gH(!-TteC^`jiGz3SqFf?wK52lT~MO>XIOiIsk=771`D14S{l~K%CsDbk`0XDednMeXyv;mB8?^vSyI^E20Rp<+Obrig3e`F#@ zr&7G>)y20y*$Z*EG(NIY^jqo}xcO(}liK$1>+?Kb-U}IO-wVx$VLB^`p#w{Y6?I2- zK)uL;TuH|=IzFtlQWkLvrptDt+9d}PGvO0ZX8=up*ShuN@6$UqSS5=h*!S%MZ@8oA+S1^Bfj|BEhLBmksNAubSx#0Cpw@XSZ4EXaC zEG$z^(Q>EQDnAtIBFO=EgM1%60_QdkVWKsQM~A0x_9N~$4Ln8`f)^HYe2SmHJ76$o zuAcn6v$Inw-S&MBdJcNCC8kvL>1`j`qvVoZS@`bR@KwvB`Bw)o-#tm;C_C1b@vhf& zJt#$uqo6y{QJk<0)ip_>s~(G!lVMJYof9r1U@mPI@L9>uoV$@RF<=NWuA1*|_N>n- z0;+(S=YcMb!q?*`8EE6wPG#sID!FYmxt$5z=aL{X#lzaC~0B8|( ze|XN>Htf(-WT&1JN*04TSzp9gF-02~++dRVz{h40#U@R8i>hoK&Cc^U)H2(hdVufq zK;nUqsv}YW7%_7A*D`dWZkw}iSJ$4o>T-dg>{DO;@n#4GvuTQ~xlHteI;4ly#)5?- zqdL79=aav1J8!#3om=mlgW7cqgNWxP_ z&P~#fTy%c1D$7U`2sBB2r^^P3IkCx~-lfrLYq2*EX8|$o_lD^r`xx!^D_U?!TlMMo z^tkly^Z*sv2vo$E4V?`Z_|9SzA|qXMJ3+G?i>}*B<LK{D_n3D?y$2yVX{m zs>5dR?K#N+)wh5(y-L*e3N>57yGv_3iE|*I*1tRpsQkb-epK{^y34_ zqv6%zei*#dKxX{GYy_H{(e`1;x~$U85q(k)U%97JA~2g>w__s^ISDqkmHoF^^A4N4 zZ}RhBM=4Ae@^8}P)9J6aT2*daGxo=Nyx*mQo(AuXZ-P%cI=dLUTM;Ws6|#^RqCwLr zb8fDD5Mu^AR2pBuR&3AL;*QjhWaIi(vY%m8Qlod__{^DthN0H_*6x5rIzb86^)%|_Oj{}Jsh${ILEtZC3N@( zhV@!gNTz0^U3~R72W}m=M6kyD15Ffpru#|kt)Ii7q1i%C3*Xgy^wdigBX&htVani8 z%}(}VuiDr~N$uo6r1{d9;t$m%)|XbMhwA!h7OnvwKe=4op6xAdbHfWYt4z1EO5P{S zf@O>-X;tyP&}YQvKrhO#U+Gg8y8)$dWkz-%cRm|6>5>PI0Rf?kTSyya^J1xVuYUy| z6cCX17|L5s0Y2OJ3rotL+;2)L|py5n(Hm#Ih7hpiCF8LzsK z>Dd?Ug3h7GYW)0!=7@$mfk^PUc9T=*JvZ|8OVlh+brVDq<^dJTeaPW*Nva$lQW?H* zp>A?$Y%dP@>*~FOj+W{Bt6h)EPtBhV^8E`jmmhjMFxr?yq(4E4>#q`|P_2EkO8szk z!r%S<<-FpSMp9AiC!+L{wdZl8QGtE^BR31?=a&Ydp9!BJ04oY32jeqL8C$5Gw>ewP zcwl&1h8Z-u*7A6@LUW&PHP3e!gRxP1D$}>z*~%p?F*!z~9lI$Az4MWc6ao-MWEPjm z)Gt*p3L^g_NwvI9cvIu1!UDWysuP8OIVJrNf*>|vUu0I?iwqanjq3I;5O*xY7rkp4 zA+_uc7My&Tjz5!xCT(OZJOY$e{WQ~K{P8%|+Vk2=pYLXh-|1AW&1G)KgufXNc8`0c zcZmPvNXg8m4`Ep^(v!9Niz22b1nKFQ8z@{^yi_VhGN|4$k|au)n3*XEtu;6&j_yxz zQgEEe0`*K$0Gi?!=D?oFcgv?;=^x0Xkd+8I#>&Oz_u5xOmh8v=eX{zJkem{>euI?f z<$D=^OZi})hrteXZ{%2uB3;DU0PRhKE3Y669kqMehi$hHyQGAhsZ~5Hxez2iv%%!P zHN9)Y>Kdh7adoRtp4L)bZ1BFQa$75?L^FK(YaQ_~1hTl~C) zdQ2)RC9=ID_1}AsZhY%!VGLc53A%fE?q^LLW)T`I4Jl*P^uWV97N5dn)x9?-CZ zG+k7g=D2G*d=bJY`T$oFw0mkUcx-jf`l^m^v^m}r(`g(}*p~1<91h=A3Ukkzy?1PN z?v)*c)p=78V%i3hdu4H>*l=ZAcagn=;&Rl7{(J9&tA!zu*=~GaDy1gL-BdWXd~oEp z^Fy}xjjH}jQgBs)aB=8$xGa=yzv^i7+EJsN7CT^nWUpc8c}7z5rXjhh zK`P=+Q9Mi=qN%5kw>}9i?s)obqu;gyp(vCk{jAd&q+I|u6M05Zf1Rot#h48>Wf$Gx_6itttTdDXBodW{kw!tWh0Cv&k&P-n7?x`rX+9| zzBN|h`94M?r&~kGCVlEA&haHX*T<;zm2d{UhnpLn^&X&}EG$|+sQluRFwl%@@d0uFQiLC}YrSS&6t zXy4-c*n)F>Z;a{3oGKRO2z{i;sIk#C9f>#zp!Kb&#Yg3?H-9%-;>VzChm%QfNYvq3 zp|jHKG`hZ4-_o1!C*R~)rv|2P)`L%NlMgPjS}x|3x|-J45M00{_2O9^I{~40iReDe zi-yJkPB#j~FC87!Z9S{oX4S$IAns3+gY!<@$TY8bV)SmyCm*%pQBDo6xDMY?cO903 zpTOM9FH&rlF%$nt$+Ne0*$Y;jn4Z>PONC>yq+dO8I-H13=ok?61f-V`OjpclAbsi) zU9m5D-1soqDjm^WUA%DBg!8tl`|Z$X#zM<8`6CWkQ}MtkqmOHTdlS%@-eA(mv9P<> zbVF7_#`kSH&R~ihzjcO<`e*x{U6haHgva;xg{A9HQ3IgF!gQB^>OG|XgTv+K7d8Z+ zM~@f`@8A~u9dgA1jN{2_NO)!9jm`~uGR@{AeYhokzpRL)HD)Z9FH>QoWOAkfc+J#| z%9HwyCn{!t|4N$=l@n6JjsSqRvT(-7<yqLqY`M9`LyA;K zei6x(cCZup^`w$`;gYEAE$rnDE`TU9jYw9bm$c})N*-fpzu@QOcFamS0Ya+3T>g7L z;`4YHy;^t=)&RVx%xqt2Uuo05f}smAkV(_r@WEs4SCE%$FEiDZt)#n%%`^Y!Q^^7# zbA~q$wD!azw#CM`sCC+U)4Ewx}sl>+Ge&I zL(c^doAhDp&NeqjnyN{{a|I`*Np>}}3a|W*JT@Ph_q~x~Piht{AE*@u%^$kr)p&_E zQQY9V5T-PAaF{##CP(}}|2fg0kCOgv9^+7^_zlnGh9(`02k!Y(v){w=-i`hi)`e98 z1#~6v7@4!8j?w`Y<3p&-vbeLJ?pU-yldX+e`NfDoSSvf3z8~BK#(htksuXJYaQ`CI z>@y@iI4gW&b$^p5ypai$Jt6k=2JnV>8#A`rU8s2MAD|DVE(TZ6?by-rO+fFk`l|PG zH#V)>IbA!sG<$aR7;2%Y7@3aWzrRl^yxPcWd^6CFH0A|4dxffW(xSkm{@^^1Yvlq^ z?!H>e5;ZI2v3qopzKkEX&s={!Drh=~6xkXm!U>&4NAerWcEn7B2saHlY9G%Mg|H3=QDC*;ljn$4_aTk*K{$m zsE{#!bV}})8nn?u5Pe?CyT^GOuKD@*M~Vm-1~#{(K&$@fHF=lIENI(G^&c#!hv8M`BS{ z!rI`gyvU?X6u%)cmYX^BJu!!glN?lk>Fpo;;>P7Y=7!#|Hy65^71J%C{f-Wqh&9y)WcZp7%c?cbsnk z&YqJLQa=tzJjzquJxB%#Vy7>VT#TZRsa5JvPz1zC(yb(jkauOZaADsoJRsmmlNXl9 zb;c*F?yiS~Q^U(p)hhdVbHNybp*tfhR5FQ@-DKq;$IJKpT-mhwNAPNB5b)ZqgfsW? ziIuL^u-RPiu=Bv!HbbNxMS~#T5`PQAWmmWGrFClt*>369p48p6W&8Ohs#IK+2v0Pv z!uvX2Npm+Ri{oh(XrlUJ(yyq(0byv>z4+Ei6JxX8FN7o#za&8v?%c_Eq%QpK9^kGb zOs&<6&yh~pcBln5F&hB9lj>j1h!1%VDlQ+i_DFWmDjelXMSjj0Y#t=F{z%?9sp3{P zD_bXg)zHBF{%Kv=1$K1X;l#4it@B=4vv0(DiXyzAw+_K69VQ2B*R=K;34ga%_YYUY z#>3yfHKG)Kmgc-*XP7$|n$6tU=^8{kU1?DHpgS-aP!k^fd#|vl=hcdL*mmQ9m&R1I1Io=X_p7h=%giTFLZSPmET47DM928eL=t0#LH4KVJ zcwB>uleYQ<`NmeZfQ4U==ezOIPr@pR*1k8+U6>2D_q>UeOw%n*V+FH5B^IQ&hLyDP z5KpBUQKU$zid}MX1(a)Xu_%wR8ynLM*4wLU=GWXJ2Zsv=RZYa#N455b#@8rE$=O-M zla<&dJ!Ie4>_T@erQh14jeO`q{kU}O{MXQMiP2N@Q_sr|ewXzStFky{Qy^z}d=ev+ zPaC=#KH`h{d0+pstkj3RPEeOvW`|&-f4zJ2Gg&jwmE#FhH$G%77e%UD{_`ileCOD^ zJzld63RU;62(Lf>#r_o8Bp+40^jKY33}&wDGOCzdYR6OBTDmGPdjh7mTz#%)Y=aakohtW-YV8WJOz!(Adm$dEd~tBfQA3z9QVmRJUw`uPgPtI-oLp(p_OTs%zp~(G3onH6fRyFV z){lZbiZ?G8g7ncpaEk|2Xqg=ZMWdozHC{}rfO5<%XM^VoH~bmFNi*YDf-09BL8fn~ zCw&5fgBJ=t-c%1*H`-yeBWPkSb%6zK{Kak}qA8IemP~s~C>Cvd_0??BB-vhZ?jDPE zj$VmM1Ptovp#vme_TS<$BzuRA%VDy@_UU!2Hsd??QJor>EKe3-?p7{3e}t=3F*b?l zt%jY$woD~w+IV)9F84@xepPrpzjhkn5y^*6>@Ry|orkil3%2Vv z3;y2dGYix;R@47uICNG!^8>A!9GXgGlk0(zNwT@NndJ(Sx`xRpkc6+glQMMfWBpPt z$XG|a^G|*B_p#$7qQl=x2X3yoxJ6^}-`Zst6D@J8BcTh=XMzMnX?|17pFg}!ZNC+s z(I5`R7EKOU3^Znv`md1EWKUS?Orww|5uZPCCiH@C7*a5BIP=FQziN)%NY<=Md8<_F z&~Xgr!t0xrqo&u;Begd=Voj}h)^fGxnazg{b(4*R_cAtAzpBtD5H-8GNFMnnsYufo zEMdNi67~2eS>b^irLl3D3;mZA0Hs2izJg6u3S=_pS(b$%<|VNkgNnnjafLL7ge`kN zq2qx1?C^!rgr6C%D#FKM&}8lfx6-VNJzTtZ*tnC(n$CN(Wi1GacU6J+s;^ROUm&bKi#!-o-@E#szApo_;6p6C zVE!6n%W2*Dpn46kJ3R#h{g!N`|DVL@5mvLA(^_e{HS$e0saFf$+TeQ}08Y)!)>W-0}V6T~4dPxMS@> zEh^^3c4!|4n59Wl?vE; z9bos^K9uXPf%h`?IMwPRcl5rTbVqfTnznY+!H2OkRzWz$)$3T8nCQU{^Ps6Gyd}I+ z`c#=zqSm90vC!o9rcjOd7&yzM%A_pdOF15M754v{Ug!&(HDc)9-GSxlaFXe1gN9K0 zpgbPNp_9oyklZ-BM}1EFFjgI)7V%ylnKfs({&w%+5Hx2NThNqR)cA{<$~{_BZdpzH zdpI!Z%w*Wx31u`wN7Bbmkol!4lom13!NH%Op57o4e!FwI;(Piucii&(fc7hA25DcZec1f}ma1h^wz|HAPto#r zswxiuV+mWLjm>VTz{^L4X%5=m7T@YAA2`RtrjrAH^9T)dzIH+ey${JngB={fB6Pz} z<1XL+P)V$q+IZJBSZDLhjD|RexTA1rDjc3-*IzZYH~%QYJq!HJ>p024WTR9%fXtL$ zwHJD@fH1VQjC-Y;P<&<_fppQ3W|%hd`06?$w5lu$6}7fEECB7!uoafGj>s#hpLc|y zSmz4|)t>*!vWMPrf+jC6@RZBE`M?ewYOU0Ge!_TK4>4`WIt2Z?%eOS={FVG)7U&qC zfTuit_fD)cVlPdy8L-Gpv^mN(mm_ zdpZ)SP(r5i_w$QE>PXDmA+yd~GpG3%)09X3HK*DI>A`)#MWKF zu6)pVX71}LW_&f`j_0V-Z^>S5-0d8vpc8;GITgv)XMUXR8XqK|W*yh%r~L`qD`eER zr<0#b=D2u$q6Mp3uh6e`eLEtA?uV}z`gX1jB`e34E{b<3>}>5+nJ5#Kn%B7UJ~j9B zAg$7!%qO}sFl#P}ZCCJvZ{bxmt?b04aI-Mv$*^=C8NR z+S_J836h=UPQ5Eq`@cPn8R`b)^wh~XTn`>mm@Q#g-sfSIy7}Gy{qkhHrm01Fe z&=WMIbPV{f;NBf zk~6js4FQ4nu;g!Kpp{CwlH!|8CGk&F9Zc_kee~G-vr$03rud`Sv%dqZ|Gw_Id9+6< z_u+5w`;%bBC6AK+#Qf5P=Wk|fvQr|XXEQcjt3EE3KIan#fj%)_pqV-{529`KFPCtuF>hadEEC?-ym_QU%1>U~Khv1u>?UPx# zl9_{{NVeS3eQser_MHKbneW2CiR`Q%a^&Zkath^YgW{7@zslq!w7dgC<56WX3B^_X zrk83yoVse9HC zrL9&7u7gr=QmoJ}XAbTPlK2AxDuVL@cP+o18-lPS`w>YGJztn{=#Q~VoiOZ@U}bsw zEat`7U>ewH_FapscQJWmc*x6S>7R^A;JZdxD*H{>pLs+9Z$sb~1B*b{y}QO{Xr=yr-$9)bxT99JHF zpe&InM%`q}*`~_sr>h_WKklC&{U?>uNluF;z|Vj0iqo2K9ev7|Zn!|dx9DG86}r3W z-mX?&%fz()lK3`c@T1al%3emv&v}G?bik=7I*XwXS2qi38zL{(aEfNWe-jrQKZyo! zY8tjM4_WSbP-xAMdrA7Qxl1zkew;pS#p;no*bNNCAhlC7w`GQcr4=SUwGMBV&t5;O z96x9Y-=>?BaJTTzt!w@tpATMAInx+4y4l;3fc}};k;0`^Hsf0-odLd@ipc!dUtGz$ zadlG$TN0cX^DxW9X^fig%K<~!JgD3;7Hem_)gM{O6S_W4eBZBn1Akb}a|ZXcCioxZ zcbe>XhOsMa6QWsAgXC4{!RvQb=~PY2{51*1rWB)93g!d3h}!}LbF#&H|J2&wVd%|7 zG!gmSF3noMvrcKf12t3`@(teoLh)=5{yRHd(7Q0Z6{K8Ae>jH;UXNPz)qK|(zCU*~ zY`;I|o_Y7jV4<827O`aNN~-o0Xe!_Ouwg(9P4y`XWv8{UUXn>n|^t&~B{?6@NqCHS-y^ zaM^ew=o~-xv>Ub9)Ol0YcByzSAs6HCWJolTAe{0Vrhb<%$bMW~m5YjewR7&&-{*v? zzj%eT9Ut)~gLbaP-afb6#Na%)h4^k)g5R2g@^z$QLTa=PUsv%Tix<>$WjEoI>$MObACcG3a)&2u|_P4 zO}S)=*YjI&9#3@RTF{e&e?w3!QlyRPro-y*MxIQwt`VD?a0RAlN3}8lA0%%LhAho? zOKt?jvqyC77$e_2;fScEG{s~#W}m71JAWGRy!O`ntpb}fTInvI5Qd&r)L^5vzS(>M zDNZo`&3YC)!R>4ytYQ3LegZfG<;N>09?vCwiGN^YMiY~f;%D4zLx=R9PT!~j?H79= zrr6G{?&NE&eGgwM!F{GGSjgf2q{dCv4|KQmIWN$wM50ssMu2cCVv+O;VUI@>i zxg9l!@3tJaUk*35@9A?ij4_f13y3zUoJmt`PDd%0jSW(zv9ai4Ry!lKsej1cf5L;U zPfl$7oRkr3nDhynNwXBz3cI+sZXKJQVQoZSd2SXco#98YZ}bVRvgO`bYom_juF5^y z<}|w^xvEosAGtXOeU0&yJ`>|B?NJDa7_nDqB+1={`x}#%g-7m`U=oE-C%5$E-Iavr zJGmAa=NMU-A%QPr6*7^a*HsxPYa86P-g$+~7B`y46w|mrxj8`JWlH?3WxrRJh~@B; zuG_Pz+aC>|Pki0zcJxE(wx3=4o1$T*G(Bb3h^zT+j%p7;=|4Idy&F&^GW7!*Yq8uYq2-RK63m zXLrO9IXDMpH>uh5F5Zm^)iM4@S#CPAkZr?Im|dPrV?I1m(H&3g_oyZLLM-`p9FWe2;QxRR_rF?pHSCg>JW`^0LgPc#;FMmY#rb zoi=M%dD}SSt2nA}U_)=H$oYyY+O*BaA{IcDnx}UZEpqGrMn`| zD6NK0r+69;nT$Nx1TEh%hKfI(XDg+=HTC<-4@PV=lKX_ zH8LzO`LbO`ce{EltxJyYE{2Tn-9BW5@7wPWdhh3?%08WGQdv1I%G&Fk0sz8S|My=2 zCz&fOI{dAU1}Y!)#³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 A#{d8T literal 27966 zcmXt_L)=o+JQa)bFPcm1Gd#s5UpS^h_FTDp zgyXVHg7RE7cAefeW5;bDD`E9Nj{T@|D?2RYCBkQW^?RGJdF*ReR#vwLjjv#_Vp^s~v4lGx>a zU0XbUt(@G(yZ&ln`P2;X}XV<=PyrhzYJ$>ERgoM zdmJAWNWLs=x_leF^U}Eo_Y61wdpJ~)zC3WYeL>0-usYSX!3thy*~`yzZz?UD2#(Z7 zZz_BZTQ}YOY=3@}&Nhu)?eFVb`1cPof16S)JUqED*VnUKSQ2+sJQvb?s^@N4ky#e6 zA|xnz*&u$&W3nxR+c$gJ{@D3cqewK3HKuJU{2?&XoFq42!uA*0=1CE>YSBM2Pl1p8 zOA`AnXD7U(%dK>36ApnNNa~=q{qi;#MGS+G;vC4R9U3WR_Ng_aVVyy_!H?wE+CRT* zbGCE!&F0!e#>UWpPgl71H!pOq6(YaV;o5R+D@I028dWJY-5PJfNw=nBxiV�M{m- zKA~~E_TDc3Xz3`Ob_+n#JZo>=pC0H=4so04+>b^WWz1eg7dx=tCddPcxaU7J-gNx? zG7l_Wa~z5NzMQ7C*(FAm+wuC;PJv+fKtR;L)sgX8=Nb~HnSYD{BZ1AYmJ>#mJ!^)H z?r{xzJU8!tDh)JMl<{shLM@E@o49HAFwUUmgwfD9k*1kX0ft<|ouj&nlUm(LX_9GH z>1mMT4~m{UmxCVwpb~H}$hV2LK+HjEWIKd1{g(i6=yk-k)LYU$T6jtIj&aP*xSt5g z%EjcK`M30gNd|ORMzD+3Cg9JjVKhl$lg1Ew_qRFi~;Z&`PrXZ$u`k~cqF)gS~0h!K-+=)6u z!>k{k&bzSFU+jx$9g>_K{sg;E3nQl1Gp7GOx)sA+SR)6wbw>Z%RBCB&2at?Ti47Kj zb^;n#223#eMFd3Gkz7?dG&$hn6R+s7knm;VMUw7_$yvlqOPBJC$eYPtz?sMrv9}v6 zIVrEokOHh20Mf`(D7yyr+69110MJK4Iii{bPuDBom)AaiC)cOX2uiw@4kb}}IWLC7 z*(*J>mmfQ%4%FY{x0VNdKK??jxLeUY9fqb9G_Z1AYjogE1pKpgulGq}uLDOJ1h7TA z`1ggO8;_5f9!pkXd}_=P?@Iy&6#7|~Kl&bRXliN=y^n7QZy0aHq~S03_SQzOPraLO zRJ2n%Z@gCiU+nx^#d15ptTwJPe&clKFV588N8WdIgTspi0>SS6$I6Kg{fNr4vNB>B zjLf6=C?c~r<&ak%NP%YaOH3lo;T2qNQCvRxTSo*-f9k<&xTBN~7m0wXGH$0AkoN%K zQlO!++mth^I(cL$Lk<80!8J&KVohxiU@yW!x0&wj9BuK}^%}5C06c6t{2a*&`p)f` zY1E&&zS&55i*)Atue-a%Nw*=tZJni3fUcfK>G)4gjT+X_PM+0)M^>q?v=nA86STtobAltn*zkY zM>!xa!mlo9oiRG>d#pD^PT%O1myAj|!Caa%1j2ePt;I zz!M}5{n&cSRm27u3w3}+13Li(x}Zt|l6kFVP7(BRNTC=1>?-J2OpC<3(zSr#n0xA_ za*aa9>P#A0Hm=Pa=sx`!A%_S z0SI0aprr#+Q3ruu$0R+ay525i$jy$7Tx0KRy*t)4YX~KEV0rYreSohWrQCP&v&1&z zfoo9h!a+LK=r9QknkOU(?tR)zAeg5g0RSs`Z8&${*#!dN%QydK4K!1g@m@nZb!Ux$ z1Wx+YG-NW22byaoBh$<42w#cbb}YJ=+%7hqK`beics#9~Xuxro*2#l(1IjbbB<(%ym##+!zhXg2 z`K|nQAJ-@UxfWqr>)$0nSwtNOnE*e*kYiawJr|lVv=F1i3&_(o1V~n;*goaidjQ9Q zcDLpIW4aXH3)<4gbAGh9txKM~(4GCUOV(V?GF?<{j$e`S3lr`J!%f1m6+K4|b5@F>B? zi&nFzFH?~3jf9K8hcNSfZeFRz?L(o_M9W0!*NevkNIlVfrF!)78h>f<)nle<>+0rz?%I#zgHo3p2D$vkA1+>UIOGIogL z%NWjEU<=sR5%DO*^3UKCtP>*5sxJvICjs`=L|vP1hUa5p3@WexY6JiJI*m2&M(C!Z z9o(>L@F;gbuPe~##{i)DRYcMgxE2Xjcb6I2b}o}QYMAz3x(XA^(G}=wTX33Gi%`4E z3FLrFB=Dl#(~vlwA1oY>d1gQwz%(G?Uqv0eyrf8YL13z`IC1Y_nNu7fJG3Cb0Xwv~ zSddWFcSkN6=T2h{#)}euFdh%RP9rC3t;ksG>CfK-MD_VsS}k%0qD%28>|^hmt}RJA{xs=_4ri zGKqjZeH^0AaH$saRP0@UWg#gp>rnMhUMHmvA`W2+Oopw`RDiRQjtEzFP5~|CWti;` zs4B@Z$%F*n8&QNA#9PI(7rNmn=v9R6n2FthNiFHUb}g)@?!2qHv7!uOMC%WvhG6ap zsmU-hHtxi6OD_3PE)x_Cf-%jPF&y!)y0&AwM;Rfm-S6IwKRsn{XK&xTSz_gW^Cm;i zGBHU^0&q(jg@){Xh93-X`!&U?d5Aw{5VRbAxwkpUbYVkZY;HU6jOowj zssFp@gSW=3rvvqM?YWgdA3mOPe!2eKzO~W4nOY49?HjyWYFC-F3kq~ft)VI3Y8*)% zsCU!=g}CP;Q=PyLPA}mJ*BW6{2D2v61i2k%v1b;D-szkF%@Z5-r&>FM9r{}dJ~s)- zgceSaaAR}p_o#7~M%t^)0&ak`m*okFB|N1^LK2F_R}$PzQR!YKTp|`~37U7q`xlaN z?i9hx58)Bz85m+IcMqI^L{x&yuw)F!rvR%d+5j3Tw0Bq^G)b=_-@(QxdYVk2&{!zS zo@*cWV>8H;J()M!i43Sv$v@{*QJ9`DgA%jcf z)(iYfV&4QF_$qJi#-kp19NtKq90`)kY`lh)%3>O6 z>m(p2l#c*BHQ{i_X)N`_CoSn%w$jlhgl6|GN-=kQ0`(VV`;rj1Xra`vy1(byl?tK* z6LD=!S8u2s3_n4-8j7e?8^y(^Ss@--sd$d*GTWZqmf15hmt91TUS8x*Z*Mu@v=p*- zn~uEh(0pBc>z_{WYF0d--MLQ6yV(!b);SU#6H~9ryZ)x;NdZXAjM!DR3*B4>hFZRK zgpM0E*H}Z7@S#v>UUw^)2|eh0@hajRwwM(xLzIIc zC`rl>C@R9Z>#6yzU?-`By--Iu;<-p5<#eN-*1c`fw?!8>Frkhp1z#1>Cc1aTKzEp7OnN!$B`Q4b))D;J zGtW=&^i8i!vGXdau$aFLI>9xuecF%=&OzcG@gW7L05wUsDY7kK&72o!FDU@(Sgg*M zL1mqMnb|uOceY-|Tzhca-+R&7vfF`ett)Sw>1pOu}J~sa zeJt_1dmnl-cY@MkDv43jIywOHs_*)aYtA1Q?ZLBDTYU>Mpp(BfPV z+lEC(#u+LiXBO|ePTSi8SSXMR3E_oal4nI0ro-U6!&sZjMHF28Dzul338lZdmAF^3 zMy2kq-4Vd8bU?pLH8>DL0;|8Xf}D0eTYvu8pwCNNWCZXxx5lRN z_LEyRq?kX)^F&wr^xMPuUe)fDMZjy1wKLN{ed4!p&oeAZMnL`@E5 zwg#OfIgaTj=~yq)?a=3kbs(~pyM@b`xLIfWDPbIc0xcdkDLHlY#>3xPkJ}r&TCO5G zW-3g%r?!~FuI1h-$w8iRj@&{(m=hN2_DTMLw_*j9;nGkFJIS4EFRi$8bx2T7_`Z>m zAZjDra(99NSyr{YsPOQ9r0$}e6Q~cym8(UHt3%wYS;+eL2e+?}J%cqZqBI9J%5Be- zA^KpK&=@vO>bj40Zsg6}cZL=Cb+6t*h{>Px0UeXadcg-Pfe-bX5PR`*-ZrgrXy6-v zi}K!(6W$i7Q_&>a$Vskav@jpZ(OpT{ui}qMto{DTacA%F){kZO6sKtuT^eZzZjXtN zKbmksrRulP-}FaG<{;N1zPf4QBq*T}!_uHVLRnlK!o zIkR=n?O+iuL*)cK9hL&5&-BNXgYQinbIFksK*w?dibYdc4=_#yB77;h8S@8j1(yy< zXe3nwa*&5K$8?XIpC8CUW((xm+2e-wtQ`QgFy@uMfqJbpSZ?G+IGXZ`VU&lwilEt6 zWLS_GJ;$!;b)L$AF%)GX#{3+8BQDN8J%lHZw7LDGo(Xt@)MkB5ao8J&KBJzL8p?z_ zDv0^MV%;irDG?>c|?*E`tt6E}B1<6Zih>L|s{_C~lN zpsr{H^kl->t^VeJrKZ1@hqr&5vYIH6R2b`)9`{Z$Z{wKR^^Er@XGB2kjiLkIgNB)q zZlvo2M??WP#GOqJ_5V+=GISsTps0BYU4|YgT+UuF_T3P*@V-)OObR=Wt zc8#RJHxUaFwFb7Wq77|>_-I#?94vY}+>A8H<#JPcj%8I>WwqR%2`Om!xwaO`Y(?49 zJ1<*GBAy4d$$%(La7W?S@HR{#l^|<=mswm|+ABw=nzsM!P6?j+)bU5<;&qA8nUJp1 zijEQe!7+K$fZoYo3Xl8^=&|-CjX&v863th~D0tt#=zSFHmD^_e`^S({i*UenO%SoY zg)Ijw8*>BG#&ty{LgY(mDrW=(lpU*Y;adqfSAsZZ$yYA@70ka%Z65%sjI71~>5N?x#{*HL$wphbkG?bsY~w;6>JTsUD>!%Kacj!WsesIn}~ zn~DZ4t{($=OX__HWlE`#%5@KB)z!cgCs4d%p~kHmG>2TZ^P_T|M%oB{;uJi;k*TU@ zt7F^1y4~o65IcMy(MJH538(yd@@Mg^{6afq>Q2vZ$$A=6IY_k!&l1G0$pNpZKy#2b z&}PgH`%Y#XULux@)eg zcuGA-PxRc&=emkz&b}QSs1I{LEVAU9cu5W7DiVN~t%Z$FR<~^)y{dmaW%T6*kfQ(K z8DaGHf{$#XYK_L7nvbY50N1=62&-rx4@xXB11RUYg=WI!dF6As!m<%nAG4oKac-o$ zwP?|Pruv*V5-X5pxs4K$XJ#t`s%oqyXZ{uV)zF$vf4&JQtbu8SMuuF3GrkeA3%^(Q z3=1Y`zF7X^m;fy%IvwK{a0<4Dncn-HK)|d>SF3C1N6U??5EtK03a49FdWQcohBuWW zw%#=048Vr~S6WxelumzuhS9Jf5fAZkKLr1=vG0hvV`?Mzm|3@R795f>irB+voK24rPpD^J|@qB52X?_H@> zFkPMSh-aUjTH8IWZ+l!^JRkX&dZhQ7S<7t@G^skW>_HXn6+_QxI3Zz z*4t)B&DB(Ic>nUg^moWtRA&Ml%ztM%m$x_b3hC4_77de!)n=%j0A3;;tWjT^fchA~YM-Jk9W z{0kfO$1z_lFa|bbisp*?ZFD7C2yJ(Dc%Pd#v?j>OGSRA3kh3iV+H8nl#g?uej28!0 zpE|?+tQ)6z3XX?Owr+y6%pF@#?83#&vSz-#bn(SpEVjFsk?5j%eabix+^*NK_f;&*!;EiA;!j~tg4+|5uJqW z&@UoeePCdK$}1$hvJV2mFW+87ONj;U%g2_K#xH+6E_@842~z@e%d5l10aM2CK_dvt zd$3*u;QQ?ye`RDje1Z2Sdh^03eT(?8+0}&(uZa3{^!pQFGw%*q(5D|RxA#3)YGQm! zrM^0pRpq+dtn=q^>{{*S+wGdhJt~IWSk5~)y4Sblq2<+<#dCl`qcm_v*mjQ+oRSqL z&0AcYCCEbF$$>r^W+sJnP1o|&#bc*$@UiN6{|r6Gp39CXG(~Tvhq=}SzJ#1`Aps5o zuSvd<8*9RR6sum8*E_?Lokh|xa1EkMz242|)CXcZ?DH4PUFs#VO#J(9X2D`Bo4-8G zX5H50(Zg*|C*1xM7w;Njv$C!+AZuR7Qb5ya6MVX@a54DatezM>NP-J=K(Txjdqu`o zfa@bQ22tm!K8BM74DExXc&Df3zvjUE2W@9N|0r~QKOFzFSM1B)&gJUInawLEH`scl z@`cJ^1-LC7_SUOqW3KNhgI<2OFqgatAR|p)$gvMIVKpcPF~If6MK`H)?40bzUs5=m z(-5gT!W}$bi>nMF>PWT+j;-b2zhFD|L8gP&G$-Mf_`C#u{aXesu&k=Y<@jiR^&Oq+ZpwhR^ZjzLXxk}Xh9guro-__)_3dTY z8DDtfKWdgIwyMUJDFkh&3dQ^22XljXL`zA##A}8>;GJ9Jt4@rAhV;+N+hw)3(CyL8 z?$r4I&jOr_`!T)MRO@{jF{3?XJErzV@u`(f(!r|DEm@ESo;5KUo`= zAcv8eotay`x92nf;0YZ;?S6(#O_n~=A4%)9hp9+nRgjE{NE3WrhzuOr2icjBWbG!? zA#h`D#tjc{`kqc#d8?kZM`ZPy5nzryJqoSPJn?71+0U_y7UHjCn>7Z;$6Iks|ECU% z6Pj;nc>ih#E4VyBT~#YHWmdtUW(9SPL#GA+s3Zfo!=5vZHV&!RRMZmGAFG|PJ=uFz zh#T^x$r>rjU^sqqz5CGfiUaU1&f=n6~Y1(p6v$j#vLfbTIcl@;GEEpH3jm=-gC(yT+7fg7 zv)R=rF?MOjfH)WtZyzB0^ARO z5j1pAm81a&o7@kWd*;eLz~A#@`%o6C>T^a96Z|RGc9v*S78YwdM`$6K{^oXl&6{3( zEcV5^a~`d8SY0)=(rZMxNl)(nEK`(S(D=#@c24v2Dobuwp5IYgVN~({0fzI@rodq^ zDNzUVxji!U?_7vW?Xq0b9@81l{IVQ4E1CmC0ecMw$kk-0%k+F29QnsBmc z40Xm6pMUEwbuvZdhFwVx%q@Ce<67chE& zf`kopUStO@ZtQ~$4U9HXgj;tFYX)rQfR0cvMJ~>$9895!JBz%sie*!%BD_LfeAEna*k1 zv_pVfsf>KLY}!e(qdOg1BYCS)9U8E+*MPr3ptFLSdzCs&H!sNjL+@N2DisX&T&_(| z331O0C?t^O%qjY4yd{*FZbv;rk2epu7eF+Y9WnYJq9))TGtjYt&R3Q)Y9Zn!sPCOaaU(yOQ z@}qnxyUdm)Q1{*)BN2Xkbv=gF@F3#2FEyAO*YHy4Q0j_@}0S+II?jm15SSgSS_)wqu6e!lt2CzzcliQnHvqQHB=wz85xB$Sj_n zEi-O9@fym=zr_r2b>a`r&mRL-M20cn;i$UbwWMixsGV&SD^bDKLysFrSeWLvY;3B? z5b8E=)<~25pcrlVgQpNZzv|DQT-e$H4q@2}G?cqtL*eE0cL%@rCR(PwtUA6EkQ*6L zcrx!Zt)zg{#A|F>k0=|&^2$q}u z-HajsK%dci=-PdJh>RH#yJEk=kRlMV)B72tJ+oz#5A%Z0Ur>eHBGC1WKmwHuKiudw~=d7Ip%%QWx`)rrw?SNw*VKLnFt}Ds2Dhy2oux z9ui>_FUml+B!859x);r5<2rD>aOh|KArsrF zje)c@B+_Nf_fuj^=9uAy6~|9OKhl&$u9acMXWgOtL1%UZKvCu}%XmgR(|hGB+u@lV z<%qY7OCmO1G9eXE$KP!c=(bi6D`G)m0bDL*ZW!$;iN_Y-hYM|$O)rgdSA zrVyO;%Ia#14BN5$^IEv;LrFD9+c9EENh%=01$|4?b}V!D7$CQzv^6$lQFFgQ8%lCO zhRKJtZJFQ<$!vo$c+OzLbDAPHWH(qo4=_ z=J3|l;V*Ar8$Gm=e2&tq(sHw?vqL2V@wyF$)9M(j(_bDaYdk=TmIdP6=A|d2YwN(j zSvhWVBhOX8Xvr|sLtwD={qZ(8UMG=e_u*XG2J7@fwt1#bo`iBa4WB5-X%aAn?zOb# zwu|VGE5*V%xm{d04vyJ+%D%+y=1tiGf_9#bWRVwkcJ7ko%w0p#=Ua-2eGIqYG;)SU z*8lMSY)l(uZZrr^Dd!_=7M^-FcxiIE6+DyWv&@#CCPTDq?d|PEa^=mlf7C$(qz|6| zq0R~h2S4s9M6y^IVn;~*$ahpOq9smZx{d9^Ju5t1sHU;^SwAdn)03j-bo{|w{iL+B z+ewJz95OTbv#h36Rsj}aH2?jcd#-AtV=c@9&lnf^u}!8IE?j|5wMEooIKvwi@&Ar) z|BC-ra`s=+*-e^haj5xKPTBF77NVt0b=cS;%;()0VPd&lMhK+iWvdZ-*)( zu$vYcJ@+pr$MHD14!VUmZJF2YUY-c=*dy9m-yu~8`f%UsWpi!E8hfy^z#|NpF&~%s~*YZ2y_YlBVs4x*Yo24w9&{u1-+3o1Ofz< ziniY4A(ui?%y;--`9?BHSf+;z1KSgJH0V6NV;-?sIBUr!zNc>r~^61UI1ANqIm zZj^vA+0$qvh`ZolMGYt+2Q)18ZYCude@b(cty7fQpz;HY??pwSDkMER1l5@@{V91q zl^>mGGAzp7mD&*^n=HB)#cKYq&tCT*JE+MTC-ZZGz>qz^D%&FV1z@DJ#Vt2|%Vuvt&(9CV8(R2wmtW~8A{lY+)B3Sc)nweUv(21~@b+MRi{K0uQVk8-D{>IX zdq6ZYLH6P8PI?7JTLc2ZRUn60^!2p@tB+|Nw`|I-41*&|*RMC=+zlR-(qlQRGrvPq zXOM`+=AwXOY}`)3C_~QqG11t^aR?95z~641Q*@xZRx^LONBZaU{+tAzzxVSsDmp5v zN^;@XRizG^{#&g(g2?s zt*T}YFau1lB3lCFClycIl7BJf!F44H)%(Y)!WuZm#Oan-Hr~R~l+h6?UM)e+8|td? zn{ofWSG=oK^t33MIjCjl;MG)^>(g&^+7c>(J_Dfg=u{Ciz<+GvQbQZGRH+$gpOk)W zR5Rw=643Y+8JcQz^K{HM01)1D=KPfNB^?3fMzf}-rabRfx-FZTQpuxl#y!RtO^Po5*KDvj*3DV1`$XJl0Mhek3KQUn%*cVa9i=33OA=)vI-i&>Y`+Ky6bFC)hfycqe= zG&w##{_9uB{Gv=s2iErE=Ug0(wc2zh1XEbdqO-zy^dFg-88m7@4=$F^_N!l>YGO4p zCtE_w3d^ew2bDOZF&I3SIp$Tfj?~L@UilfAid2}5IUl`%>vPu3b8B(@Zia?*_sg&# zIwT@e9YPzt$zI{at)A=R^0rf9;ol5;drw^|QnW~YC-@;{>sboKUU$RQ9=}(JsmyWOsgs+S7Jmph9m5NoqU(@I-r=w!dDSQ=PdLN1!{yU zEB;kv8}WasPzGZ%ylqlObXGkve%dv8H0cQow+m?bVgEzDpu&?B+YYg^CJV%K80%bV zsF@hoE&bJ8Hmrh>>}4hf6w`#fPZhbTcU_%#0hM!Wz+vtN!&vBiQKv9CX4+u;I$$-K zzsAEDsM#j}C;P7D<}qgSbNhhf&r&8IVNhHYL^V~OE2f;MXf6r!$E40JPAv(>P8r<1 z;O-3upo`HH0}ZEG@=5*jZsb10(~!as;pc$rlTAjd08mof>}-ExaPrVx2g|pRp?Sm-7EC0peJx=a%cAgJj*Hr+(p^vfN%4043-Ha zPyV_lEd~gM^5{&#XVLOKCz#7~nmT^d0RG_d0Wn@E_iM?P6`WA{FJsK1DG4TZY7817&4EtF9y!|u~5 z6Gu~!givv1?hQ=(gP7U5Z@-?NQtbujG^Dy#yoV)H`T0hqL1Ov{yl`i4h+;B@7Su4A zgRJse6*b=mmdCpXlwy@F^(|5o{=|cX)Qj|5SNBgSUhCFbKB-N(LNq!x`1(Cy2gFI5 z@W%Q`h58AYODg0VQ0lqO^{*HW3&<{n`Xi9-k+c)QR2B1(tP>|?Z37_c;<6d&{&rC4T35zuWx3r#$CH`R*zY zX$T;Vg?CvSK`ALi$(9SPeQQ_B1X>MPJ2XWE4V^B_(^Kc>;Lv!vBYV=?a$vzKiNgq(NgrDgi#}2QR`EQ{0)) zSww6-qgG`BOhBTFkWwl#J$LzAv1ri-IS@dU{9hrvQelgJ z^@~T&-C>F(S_-iGzhC#%-7FA!!!p60zZQlXs_k#!TH6fUT#*ZMdtWSXP&!r4W5AVVO^=8n0Qx<%wVGEg(up73;7^XU)N55Ja#FGmBk0ZN z;$M($Pn>O;u^N59jet@IFC~Wz8Y!SrvlrnsutW`HiVkE=eIt%f+%OY+O(BZlUKR?u zpwPK(FPd60U7>kwU!Pt%;~O)-umI1^EALlPB)cJhL`e^X(&ISmGiNLwQ)OPWn_uws z!s1+dM*K_By8xE@jBoDF=n`%qWv0LXMvb;Ddt)=!+Zcoonf$?A81s@70Zy1db>kgt zm8H9pYB<;2__&f4kq1iU;UyC|CT~&Ev9TXldVbxz_w!5Vd-t-v5nXRe|EYD-r6z!^Ncwo!w>OXpY)&pM&U^uUY5DDTsI3oXdC-zgM6|7E^-1 zcDF=h8khE9unjhzq~{L^#j} zx=VPvlZyAcs<$u}_VC%k0((Iy{oYT*)TWLm--eD)Kh8F?2KCsd&J+ER^H)GiQKL*;EIXL>q^StYjY$tFIjL;&+3m>Ele$HwZk08(mA`>= z=c;O;?^r@~x_&Vf&OFVSwZhN-3~Ij8jDCYmd1X&>b9XmFBP!2kU~bk&fRU8XxXwqD zG}o}b*B$h}#cbaStLTxhq2-_{^M8RlB`j6$=evTl%{-%CRus*ldvHK%|1Q5Xq}C65 z@)cdb;}EusD2w~CRfC#)^_bk7+Ltf4zS88 z0M_W8?fZfW7<&n@O-ae&?@u7e@?g{;&V>zdX}_ZSm9EN>{E$ zuAELVgX(kitU)K z#HUUuv@CTHSMqqau9$oLd6kIj<_=mh0%qI!fd~0*yLO{_ySZ*{G=L|?7FLqk`xj*z z7jx>b!RO6g6@=Q%u|-`H5RFKxCVVH3Fi0(-(6&ixNL<3z(;rJ_yyOtjSOeK>W3hK^ z4pq~B$>(GP11T@xtL1oCc0W_2?se2>$z~~wf2A`a-#Thl4elHkaprlB-W|sn&mGlO z{#YpWK!{ym+qUQSZ?(lA5{qXG|8>$uu3bpOx#A#WHf5kcr@(6;C}DZJ%|PhQyn?uR zU(TWL2ylJq*hQ=APChmhb($BoXD{2$+E;Xy4dY2I`Ul&Kc-3T|3EZY&pgCiNrVY?) z&_Bt@4<$$bW#0cVwg>Q>9k{`an3*Aw?l7rR#YU*TO< z06Mhr@$huy?DsweFXM%Ngu=N$yv=Bj%`DSDH@aqp|GqeHzafui-})J+rgz#>D7+J^>w$mp)5{;y1@o>Gv7p+w4B%k!Pii06ZR{sOyQ`2!q ze!Q5}Y6#9)@!#H+YoZCDPPfx~2`)XkfY)Ocd}a04*o5Uq=`B^sI;WE#iO3Tl318C% zPIFD{ot~NpcM_148Z$UQ_GxaT(+(-wC*3Fev#d=@g6t}0f8D#|(g`#lY>tw~ymqz5 zTsO$7XYK3xgo`WT_PZup_i5ar=pPbMzgAgVpH0@nTx9I^)++3CoQ#sD|9Hgm_Qww? z71|p>=L=u3>{_>`9y;gfKfW2g`Snc?@{Lja%0Gn5XTzHwN+2-`2%0E?4{*P_$i%&l z36Hzvj~D`c!gc&Ak=*e5>F!s2gs~5>(Yd31;cOY$$WMRPlhVWpn+miQO*ZaPaY0)% zX(uEOX_hY|+*{EJ>^iD7P|T~(=%P>M9h!EkuHFw%a3zYTKN|R06Cis{bKIz!COdRA=&ys@;DxecPs7Klzvk4k*b6~gLd&YIVxk&JDW3-j1Qa_4T_n>{agJJ6A>3j z%~_=11O#Tz`f9Q6=vzph2Kd{;$l)ySbkUpeFmbc~9Kw}WDPUgP)R%Kc+M_3tsMks940CwJjC!>2ilLRw`Q4 z3y~B(E9-&gci4e7O!a<%>N}revGPOj2N_|#llQj2uW6?^);oF#4v07$*hKuh%Uf^j zIPt^5Tirs(i^8Eg|!)xcfcY=U%Ron zQ}S7NCy(uu>2=*o1j{PwC7*kp^=!!CO%gwe%unfHiP0qZWTxn2%NIa=a2I~Mn z$l9gw2*`9VIem9i7p`lS{-x72X0MO2<`@bwl$3`n&WkLxA1?J+a5D~WBm>2j^}pJj zs~pok;{CYyIA|U@v5z`m1ibnG$7S2oiN^rcfl zCdDFZRgL^@Do)D%l$oSU%P|=dt3)YoaCdoZq*)$jH)9Y#9RIt=V}rlrHG6yB)Q{qO zXw>&YG0~#T)7Xwg@X|3OIyWT-x^t85zhobLUI*4hR)@Hsk`x!1G)Srp3O?9$*1Ym^ zzgUl~B7a7pxu5^Xdj#npyp}_};rCfWgEs2a#TiT<3Q{unzj09c18b$nP}uoY;!MSrX!l` zq=1yqQ9nq2GVt*7A4XAIfD?)+f@W1y4ncr3~S;Z7`F`pcQW_c_DeE%GKc6gh<2yoviBp4MeN9(OTJTl;k}KWX8iEf&Q`iP zh~#LuXXn*Ggi4M$LglNLG$V4heYEiOX%hTmvVoj=9G0H*Usn`*m(b zmTn#yi21f*2Svi08hS*ttbBy#rlH+fpML|@8Zpw6*;tiRR z$s~pgsj*w0ZFsa6ePv^E*;lUrKacVl!(%S$&`DgU_5s1#yPeNb3w`p=2x*lMZf#yB zoD!w|!#T2)xH>sACIV8u}N;T(Wj6#eLbE-Md zDVF1$&*W4g386U;9gM`5Fy})Na+)04awee~Es^u#cYhzhf8c)XvE94x>w3Rl&*zm( z-p@Q9-kd{tBFM;oBopUa{`)xSri)4ve@}~uvs-W4 z46GN4iT+n8`FA3D9$3}N*4&P)7hW2D zN3bzU_H1lyguQeY05Bagjzw4Tt#>b&j%l7vDLh~l#eDJWZQpvjU(FTWd!^kz&Q`vR zN4F*R$kA}oAKSXl`2d8sF}Pb~I$fn9T69bqcZw~eq9Tm$`gg``bZq0e(1$VtoBxw& zzltg>)3;vtSy*eOEBJxe~Qub@c3Mdxemwg8rq&%2b7O{Hsm%S_k?`!vaPC zzeA(Z-uhCSC@>2}#;;a$jzS<9RZj#ZjVdFTiL0oFF_En_(MR<@L$v!IUyBi>r^u@$^Axy$P!ncC zBy9*3UicI(#qGOBrfy6N2oFBU109zql~5;qRbd}74TM~b*F-bOzhWSZU;E3(X|F7J zcn@g$-w7w;di4M#__~PUPw1$cuUXGCxPh|+1NrezYR~z}7`?kGKX=~|GI0h9rF^L> z3k{y|a|4zt6^^7z6=w(X7DOCVH4H6@cXeF4nA0*)Cd^8%`T49Er41*gq{1To$kc*W z{+sAtW|LwKeQD=Q7WD)eO{3>#zQiO$jMAu;5@oLH$=aqFc~2j8-izIRa`cT6Jvr2J zBo|E^I?#tZ++31KRH^I42KFJdM7jfV0xkM%7Q9R(&f^AZmiM8Gf=c@gd=97d*w4L114x#p6H z#E|l=`L%_^U+AGLu&&qVrqlj$TcT|rSx&?6zfP_q%rskYfYKIh8kMhpx^4zDp4owR z$aAg-17#pcKO6##@3iI~4RS>fitV??uJ7p%lyxE)=n?}@99jPD6B{kr{&M<&MD^U7 z{~2+(CA&82*j0S4)JtFZV>wS?7<+H)H&rLFesYm0rNk}&WNStsx^A3p>gSm@{JDef zGR*^I@xgebg}zFm8~jp2M;5fif=9c`l;T4^|Suvu9(3de*26$L5BHhNdPA zib|(2qf`ZavbT@?F6_%4hA{XJ{+!#|DD2NQUvGoH$A&wUj{dX=}-JvL$Mj$CxE z;f}{h3cfPQF)B=ap(W~*jC6M|ymkVd{y9wd;yIy;EGv*lbXZL2tW8+NPOt;RHLsDM z`vf;B~tc+U?((B48ox$o<+;oGCNx*ZuSD{k3xTNdUq?uf&I*Cvi zR1m;kGN`5*v;UQAyVs03GYIml*JC&MsS;0wvki_$#js|6`kQ-|CxF9aL+SRbwZrW7 zCtfBQm<;G6E{#ptEC==(@VVS^dhpC}&hOogZ|SJt3k1kr)r5R8nU zA9TAoK#yd$CPB+{>6c^FO|Iajd9p5FwInmp z7%|&X?Inx2c%fDy&ceu-cQf(ykKGI4K$_`o-e)==nM|g$!0}6quT?TsN}i7?;_a># z9QuQB!{V^OGg#Z@{c6hjEwS$dUQgor%-b5iF51^BW}OC^j$WcJS@7GoumBkdLRsA% z-G$}Fxqx4VK%|0rpBPesLHQt3#X0fgN~?*&<3D~o>$96$`g(kQ zHNSg)`N6-cr3Z9Sz#Z7O%haW*jt$M- zU+DbOQt6uOM6}Nj2SkKOBq*4ctPR0KDy&KgoS?W8KA-x@Ygb(nLB&*Aq{y;nfj!C5hdpVWv4$Js-+27N4IhGl} z_U7r+LU;1h;L-zJ7pAl(e}jIGvM3`C$$k;b3|DL^VsUEI9-&VPo&|&r+&T{zM9j=n zV5IaQEaMIU#&;1KtZs5I*`tFl^dfj~%bdFpbY&R-*4g4_woKl>VePH2KcNV>ZUKMT zDK93OWm7`%PHBz`9pBO|2!9x7r5>Md^z#w;Ht{wS@JtAcQGdGC+MD!&49pw*8o5W1 zq)+zX=Vu1?V$?*>niaRXrbHZ+wf|s6ZMWZ>o!$FZ2Mp@!^gYg0V8%iUNBH9jA)`XI ziu8&9P2||#FU)JBtneg{X2F{c^rlK9TnT{F6t50p9A~4}O#`#S&iIpADV@0(V(Dmb zetJ^lE{%Z&JO6l;u9KuthSFaaz{^0iOYnwNegf7@rEd&Fhq`d|SA&w|@uZx#hcAE< zdh_(PJU`MW>(_l$bu~Di9?{S5kFoarW_L!4@BLXQW~c!X zvxiT#YGOJ{+cP92I(&aSz(8T~x|um=fFpfX&0hw^0S0R$Latw!iDV8|QO=(~kH}Uz z&Ki7nC5$a(O69%#J;&^bqEZaU6B}}_;A6B5I^)Z3c#yvp1CZSC>Gt*t3_hT}1X$+` zt2m2zTyp%Iyi<~{e?ysNp0}FDCUz($EFr0mdyLOA=yIq|ABj!2KR;-A;-i3M|61_I z41#RVq5ZvOq111Lt2^>$?L;+jw?27EKfz5_0HqrN0va5+if*?fMh;0kg+f2ZO5r%I z%i(C|*8axZulrd;`(IU$b{L0Goq8XX49KSi*%%^xR;o|Ta`iXKGnQPLQOnIV8#~Em zj8012Yd!}@P0Mbidu3gmcS=E7NdE6yo;G|O_uJe?!gZ4};;WaX=Tr3&Y?UfQqcG_Y zSl&+Kt5_+}XMMa$G69p!r`Y+K3l0ML@W~_V4Iek2UAUTc{QfQOa*Je8d=(a-a*ad~ z2wLP}WX)S;s>f3mKHhvz;ABg#T0cB)RaC(HZ_PiqboBZVTm@C>3wbD_1_02GwKyYB@prG>&ckk1u=hS%%WhK$p{ibShGd!KN@2B;{Y`|L^FpC zl)66iXBSb%$IEj+?j1*hENv*rbingWSoN32nm$?++mujkj*bF_9tn`#*_ojC0?$SU z>{T+>>*yRwDpx)qREg%dYaB};COUH}bPs-#Zibfq{Hp8~WQwwQoT^Z`j$D2r2Dx3L zCnbr)^qsx>1nTI;PEZF8Re7CTkNT^v=P$upC8 z!qpOubjMQ|s`YP>Xavpz&29K>WMP1K_ zYb%Jj2~ z+Z!!hg|bOP`N^xkVJG^MAmY>2rf3>9+kS4P6Nj%WKO6DcY@`?&3ckzw(U@noNI)Y1sQED{$E8)cCm^+V2Z-+??9lwq ztU^pv)_u?%v8Ed&55JakiFF{Okx8Os1=IQ1vaz%4VXQ7ZARk2BofOc*Iq;(yQSn^6mkZdY~(74&M4(g1d$1(*>+wlS2XS!o;7`>1(`-F=2m;5Y6v-`p9PY#g&)X)0vSQKeAjkACF-KZnjFIQbs6>FRKsayP@3)vmOnC>98~N}=mD0dd z%x}a6EKnAp0K{=6oN9&JsBs_4aaEva*=H#P6apEXvyAlKs@3!R`XW!D+-zPxfwC|Z z+`D_M`?Z_XZ({T=O+%qu|DxY}9=%$@N1LZF>L^|QGV!1qZ;W8rkIaWpu{LGW+gPZo zhziI3k8(#nvl|Dh?Z0t*?K=^2BzIJNLaGW)o!_d2&lz3*{X6k^dgpv1KJvh6cfhp> zjqWUU>MVpLhRIgX*d-Z9XvcHd4q7@^cwEMcVZ;9+OMTk@K0IkwtT~^#=lt3}xAD7IN>fYJM2e)Y{m|w;lvn5q2uim^1tO%i zISO9uL2l#8XH=%l@CuWD-zps$i`hikm$eG?$mOheXv8ZYnXa(ti$RV6J1bC0b#|aC zz&mslzSuC;(33YD{|^CJIEl*E+v`59$2`6VVC&9?3k}1 zqA(sFL?1%6IU!Rjh+7|SiT7kSV!aUOK(*JRn&kq;K@SSv*)5f?7ltGnr0Nc31(|}X z5}&6IkrH!r6O241xu>Kr1019M_+DDxITbsX+sPABXF+V$M+IX0JAQ}r3vYM6ZsWwD zl(?@ALaY9@1XGkfM~%2Ao~rPB2S5$pwh7Hl^Bv5+5bHK!?qFk1q-W=WpF4|Xd=hZ4 z^)-i)EPk~(&~F3X2{KhI5;TvY1~3@b3~Os_Mdteal4Or1ezkDYSD$smn*Tkv0&`W` z2RHgumzI!6{wLEcNhYsrm!z61DAv?m&hf6r-NBQ;lp+T2u^u_&h`ppzdvXW>!`dW& zCr(zbeU+Z@HxKF_J$QN}!ItzerYI}_eJ6k1t0UDn1r?E4KJzCr4TALR; zj}BvSoDc%0GN>u9LxrrxO*)qW{}{8<9kBjm4L?-WTJfyXX-6(LP5j>MI|E%3V8u9N zko-fBKlnnHEVU{LQ!B85Ggjb8Vv4}1n`0X1zbS4`ulaXLfO7&wDu*4GQ?01{{BN>s z@7nS&w+xqB&Pk8_BJ_PhGJe_UeI!LL8}&-Kf01wLnDD^-3bigz-2$Fbj}}4(NoQ1- zT!$wh{?E4l#*FHdJ9sdtm%9&U(vmn|)>{3#rZXt|e4ZT&%Q23#w}l=TFKakj8@jh{ zci6FwD=u^y>-HjpkAt1mv#UTbpSsC|!*4U4J#Sk!cduy1T=Cd&I4PQ9DRr{J3zuOr z`?On){4a(Dyr|7>Q0%9c9^+Zmu!W}N;k2fZQ=}7Q>a{-G*nqlw3#qCzE&Iwa^<|;V zTGvCuh`cxGu^^cW{AS>DlGXMY8!OgyMFUc zaP!tUV-7t}%iJ}3c+T;1`S!nJu{*-EyIO4T_YOzj5>0z(_k4^ic=uv#7+=ELn0w9w zky_Gg)1hKFL`@Imt=zcR98Q+R5ftmHAUvMOKr{C!F05I=m}jm}y6IciTrWBQI%z`~ zsJLK5n}Ig91EbKitfE2+@AJ%|+DeImu^BJTUCOF6n~6Eiec^gk(wX0YAjW0zcw96C zoE)ScPeQbp@a_6m>a{S9mPVCx^7WpNPfL=}gZ=7uc&D=_%dVd1PlNI)2ILUO%isW- z3MGbytbE50q~&;Va(e?uD`8RJw6M-ty%%$^^7rTBsE9e9mk}bGI8V~4!U%ESZB~I%M~+RF zko+yB-aPx~z495$hGHj? zxtFjN^u*(-x4XYi`>JjfB|!^3NX?5BSYmop%-!dh@4@PeM24$oVX0dY#>iK~gYgfc zN>fml3&o#7@bI&1zrSXvcgNyuL_MY7O`tM_dK`Ivq_62h`Yj+Wz~Gq=gsw>BOud1z znnNcYIqd7Rbjd2D@0A5*qv~?v?>j(H#<`MgVglZBM;8W%culSV`bRh~|`lG(Zf?>^V)gK{j zNOyjH5cx+J5_$=P!j6V2@!VHhTJiQH^HV0LiwGC4X=uZJCj7Ngfij@GDf7g@WQ9_z z9ufh+h&94(C^9JP9p2CmH3Xl@jlj`oU%t_2V9kYPHIF z)6N_S2+8(@msqs$l5%Ss)(8Uocne=H!3&ejGACfMcJ^rgbOI)*_B2cqC%_)F@#VlQ z=FiXi!>)P1sOP}bX@FxbyyY?}<)_z~9t{QSm{Yg1Bp8tmZC4f_YFDXz~4&-E#MBxJU# zo%D$!BlX}wo}cPtJpH$B%V9PQ58-gFpKkfv*Xce~bYGhh7N@>!j|ST3^!$R(jDkW- zGJ@0{?%__#_&ZUToR>Nbt7PMpj%Ryc9~xnxkDtfle>Sy^!P%rOfpzdPi1PRl=1lF&R(RbpD*Yuwx3kea80e$N=O^s zJAi2vS};N&uZ%>7)wy$*cO6iNnhxvQuOCbt;rAbN!RN=v1+^o#|Ew))gkh9glzvd` zf|97&7(JC^839wC8V*|chlV8MJ*M)C2GE$%dyl<1;9PiC)w+29`xVF7)euw*QUsr1 zKho8u>#hRQY;Wsr)LFkVw)^XsWcMvEUTx`BnecK8srR4Q#3g##m?>6tHK4^_DsVAw zV4X87p;0(;*}hj|krQQdXwVQS<1@(x0-4AUx5ux9Ih;2i@d+qDQ!{rOX9T*12G=NX zfS{5Lmr9AK7pTq$@z{zJZanjtH^UQl=7HciSKFzltw$?pF2g&rcNw~;Oc@gaBra0_WkjDv6{y@vtsCT^GxZo^Yuk_2UsPaQ`6TGrYz zByA`cR<71kvE^k$Z*iYePYpMC^jBZgJP&C>^{JqUmjOp;zPV1ktL@`p^svD639tCq z5Hf(zMz1jTpT)B7Iqv*8f6(t>1FCU@` zoqD0tW72jxL4wpmF+nd5eik8dCE!tO7q@xulVn|`?hlACRCLh>ZSm)DRhx( z*-mg2b5OM@CO|iP2welI`-S)#3K3wc3E2{Uy7CV8b%*4-$rkp&KU1f z@RtQZYH6KXSE4IwRe)({nZ499pWWzGHdvwztH|a-s(pug;~B9PJuCSzaoSrhgQ-rk zpmjB#h1$kTJ%Tz31YHw#WP}u2H6ajGS`{)tefD4UQBmw4iQ<22TnE(Hg#xj|fkL)m zhG90On#J_gAqAEv+2oyjxiw>3h6U-3t-iCSxJ3#cHwNWtWcIu~p z5FgmxgzQ?h%%@AX<&9wNwc%v-Vccx~WMtRp@c&3-2Qg)-`k3YAEf?c6J)>UR(3~pM z4rw?ne#yI{cC(d%&LYNF`1@oxq`vxm_kOmkA;NP0yyQ$=QuM4=)V6%rCpa1p?xil} z2FV_{UDDhBCU=Ky*(aWv)Ib6DGxmT7S_lL@f($Qg#|Wqj<5KHrY6rrHf9nsY7}49Z z;HFXOCNCAzRfSrF>>PPEj8h7xz<9E^g+B*4k(GjE4H2!f71O?tuP&qLV^|#LnOb}F z&nDTjvAL9(ntPiYJ|InvW*bO0;T|bhin~_iGsO+zDv%hFpD%BMM&w|nw4%b>U*Ma8 zS)pvaO8ngvym0G@{OcMTxFuKHz!X{pCB&AW8w_PNd*%xT{S3a&lM!TUH@bDO7QO;_ zj|ht2=gR^>AkO*!oe`j_+H){22pudNUCp$+TR#nUfm5Y<#jm^lV;s_jwlEJW<&qcoJT%Z)cKVD>a?#g)Q%#2O#R_buv+8>eBjp zO@t#h@63Dbu+Q;JQAAU}_Jh!Se6O$85AGE}(mEe*PluYC zSH&bDog73}eoxHqpFh9g1( z^$aeXe%54kh3KdIK_wnw?nlem;*#hQ+~OmRZaOP_FHT9uLkXpT)r>y43Cxxz!apM4 zo}(szh;*+7&-Y2cM~#KEm`zK>{N)Bw%^gdD|cbZ$tKP=$pY>9%xD-*m3gM1-c2P4;clUqF~TyW!pv*E$KtHQ z%Lv8SBSw+2M(A7YaOtVbNj?a6ag%Zec5=$tv<&c;1B$CWZViQw-?KCFq%#j9x^ZmzAn3Zp^pzwPf!y#ESL%6tC233+t+Rc)z%3u3zlEkl`JL@FokKsS(smYA10cD z&-PzRSBy7;@S#F1m4XE41{O85dA@T#xRnGwc88XfKI%mcT)#vO)bvkTbay7FY8t@f zq}k7mT6~pFBPx9-W|c&QmYfUvMp)`yBor1uT=!{CN0W!@vs9iHNU-%R+gR5Xw@Y@v zW%uXF?F#yQJg$Gba51oJV0cJG=eyb=;G7_@h! z*EH``h5@0}>P|NS`Hs)v(vyNgp;swsBB%5qYhPLB#wMc{mRX8--@l;*vhn2|tm}mx zUnmoc-gL=zI_uAK71O=HUzF%0V7OKryS<$;rs%Hyp2sYo2NLh{P4mLpbQjCPkh2oWB|lc|q`;E9hWC+yiE{0AOq8+Ht@aLn z|NUDX-t_d5RHltZg$`s1iZezOS6T}a3koJA$^DP9jLXYoTe{qauF$T60u0Z$jndp# z+G-cLDlDyyHL*+qdk1Ul=E5*@Q$x=L2v!(%y^Gh@C_clv$Q_YIM~mCydIBonyz$I` z`6P5EWO`&swv6Z^T{pts_(qal+WjpTn7cL;Afs=JThS#m^-S&9tt3R%6U9juSQ7E( z^8yD4%TtOVxFI+XnSDL|ix(glo-~!bu`~W75qI!l%jwSHuLZkhr|V)p#mCiPOF1u2 zgZ$cCFOwe>BLiRDD;c?pHqJE_=})?fAZ1rKJd~BKn>h&(Q&(P?pQzOr#^=3Km=Jiz zbL`IAUZzD^#y1o~LiOqT3i?Ji<_%tB6W}2A&bJCDE~urZ*AN2RXO)yPl8O9J^z`Ms zubBwz@Uel*{Y9_JCwinHR5jq4XzE}`gdB*Y)AkZ7iz?FSD@3xew8ag$yyLsXdzVzA z322)zNyl8chlG5zA(&)dqjGd(l7U5KV6Lv(yDH?B<%iVJR%DpwiDJTt$jTEKC~jTO zH|F0O`G5E7th`onZyyjv)K!*NAU`sNeU?magY*(EIBe%lZ83%_)mAxf!}Op@ z*;*?JmDIdPFH}z?7x98>0pR3;IEuuHPW}A_uCBQ~c?IOZXI3Axz9q)(xSi8}NC5Ri z-pVf7`JSD5mzl}upc(nRwkh_=IjjyXB4HR8j}c}|bIwm(tY$W)U3>;4Tc5eEJ}nAx2^~a3?jQK8TO%4*;H+WI{HE=y#1a zWN8^2y|X_@pAkaOyklY?c*4bGY`@Wo3$ z8fi3xUwg+471ExiPnbl1Qyw%Qt$lP*gp_S^g=jwd@$f$b!GyRH9|wk|>*`Af#rJ9{ zb=A>YC4_G0D$5(G2f}`BA=m9;I+J6p=s$LNi&?Wr^9{Cd#in9E2~z8t-OXwR^$V24TBA_vWjY^tko zonn`#!)Ei&_PC9^#zA++7dscfMUAWU%=^a#OgH*Zu^v1FgI~^Gb%R3zit2cnA}W5c<4Xn z-RgXVlN>#9W1urvf+CvcJluA_S!;!zv%6ljXxg>7=DnV&>SY?(IWf$UUAG{;>Fz~ iW~^KE`Xjp|uv7dg<(tkX`oOtpAVWP<6h-IGgZ~4Y;xG{a diff --git a/tests/media/Burning's Video-drawRectOutline.png b/tests/media/Burning's Video-drawRectOutline.png index ab97c508dc692c3a89fa693464bdccaa19838be2..591456132710408b8df90888d3affcc4d5374e33 100644 GIT binary patch literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Sg9%9fI*@0jiNH{$7 z-jKrCsb^flr{A!gL&xD*1M7lx2LA`F5eMtu%yJf0|jht#s+g5 zAM)@_cg?TaQ!97-q^z4{% zH(XvG^kjO0pY0Lxj|W~~-tv44S8naO|9SHatM}|Ws4jILDF(pd5X(46-1D5_p5VQ} P6v5!>>gTe~DWM4fr=Rk~ literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Sg9%9fI*@014eEGUeUR&TNiQOIXL@y=DHpGe-!1vtFO4Xhp(jfutCk9 z{by_+=jCk6FZTa2|Ksn%^4;l${q=_)-(lXN*Z7#FPuRlmfdzz-XH%WD*T#3lW4kxs z_t*E{Ei}A2&E87BV#mq5n=7K$md$UUfA8M2`475~HNkZcDaMYEzdwHb_v!J(zyC6~ z&PwAIH|ION;pV=-MZf@fYsVk__TizJi-kc diff --git a/tests/media/Burning's Video-drawVPL_a.png b/tests/media/Burning's Video-drawVPL_a.png index a5666b7ccac2fc1375d6506a849fb7231454f2d9..296c3bfbf174061e7590bd808fb64872cf97ac72 100644 GIT binary patch delta 2854 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 Eg4tDVKL7v# literal 359 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�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�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

1%Wef3I-^}*+@ht}g-*0A~omwp3y>OY5aubN(u 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 diff --git a/tests/media/Burning's Video-drawVPL_f.png b/tests/media/Burning's Video-drawVPL_f.png index a5666b7ccac2fc1375d6506a849fb7231454f2d9..d9b057b6d904ca6cfb0f504a2f4440127244ca14 100644 GIT binary patch literal 15246 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 UhEaktG3V_?MotDrh64w_ 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 VB&46j1pEL1002ovPDHLkV1gCV<7WT> literal 14337 zcmV+cIR3|pP)004Lh0ssI2`oL~D001BWNklC<9jd3GryQb&5Op^Voa=2 zV^^&7VgVIF5m7pbN)rL$-Z^`%-ygf2eP#v(?;y$k9EN@NIWu?We9w2S?^?SY`tjK} zpxNb}s~Q0k07R|=5)h(_fI|Jw^FCyP5HS%G-Mhn1&HoPTD(4<{BLTO+a{0PWc;&L8 z0wo{_*~%WPMv?$R5D>cxm_j3jz#w1W`tf-i@=XqW>lA{5C=vxxBlo$#cE56+C8^1$ z^!t6?J6AOl2qFRptSxpodnEuk=k}cey6u7wYx39EUqpy#okvGpdZN7_A+Z1Nv3djq zB19q(5`nEiBs7BUAt8Z#+j`3ZlZTQJ01=SbtFZxZt3^?@`k;QluOktNkVvS6UAH0E zc>b+DAb`mC7R;^H*Qi!Vgw8wckJS%aggCB<{Z=9XOH}cV{)Ft%y362qjvGAr1be2x zkpPjA`#ezd-&wWP3}67e{h`jIix^i2Hta6Phc5ba_n+L-1A@~RY><`v8bw3_3Q~o| zBQHK7k1qB5a(E1(xb_^b!eY_Q4y~i?|IRV?6Wl2RvG8u1Us|=)5?}zk-B4eJ#Bkir zQ=G%@C4cG;;5!RzkMWNWx!E#Upw2(^=J?R)pBzUFVvvBuRdO_qffUO@+X(UKIx1I` zK~s(#^v+S4?H71k?r)lJs?^2@$7Q!0>!<#7t#!9zUnJ*=5mkJVpZ>9{fc|j#>_@iS zp@v^ZL^<&%6&&VpQtk~F3K6TJL^9w>SZrfiJ^s{zQx79i0wIvS6$m6&d0H8YuC~tkIsjn6y9bm1-Q>)&5XcKFCo#WK16^|yZA-&VE$j{Z)v~K%n{=6;_|w|m zc0yJU00gM>4*831j?FR&dHd|lZ{~41Ys~7AOSbiW-y6K|y9ZkAGA|o>U-6cCUEr#Z zkEz*DF8kz7^tpZi*rHNrS!YPjv8@|*mWh`o6E7oM8Ru5YdglBcQm+6Ib+wR zSHyoYu=BVQx!$bq4+SUfQ1lkcR=lDL$01p3uF%Iv^LEcQ|HoD>n+jk6egCgzRT9TY z$GRFKBn*!+iA=n-*%-UOqW}dc5gLE)Q8Bc{raQ( DI&_cdj9?p=L7=S0cN|4 zusd$whvP3u3y;?84%3@oHX*I|#5tWDQ&w`SIau(lEIdjnQPn`0_Qud@ub=$&et29q zk;uwQpPO60ck$}#`Z@Zs5~aF=NC{_7ytuH>&83a~(;{S(ST?&xf*4**V+Bft z6wqtm$2RsSSC-l{`2HPVEo

M~;utq?K;<{K-H=1gmp!bgs0ET{aFPoWe=K~*w%mJ`Z? zO-~XSLlmTlQ0xzdxh|QOJblE`j0anU&cA2~ytU@_bH4gE^MZNFq9O^9ghUbtLNw6@ zT8GhSNoCM7x1=Ma_X#9YVGLD)(nyI<>>U>!ttTeLSa(HE%TnSJeaI1whvb|&cCeA& z<0H-!6Cn^|=H6rCgEzSBc=d|kx{psx4UcviVAq2$3^b zByZwzcLoRv7uj1j0~Z~=Kh#<*}Vc!fMLS5@2U}yywjgZ*F+BXKT6adA#S|mit?@Vp(%@&a%#X zv=2GoMlxz0o0%aH!6iD+5Hb?(eGXge*jsGKWKQqdyBxp$7}tT;(_37?d0fDatVPHu zy3{MMOsYnXxY_Budg4w4^EWTcxJb zw4O&h9=BW#NWpgCs^_d_UU6K5;NF(rVGeAi9v^gBVhRS&Y)Vyt#1vE&QjowUlFIeQ zff9&>Qjm}mB2qA)QdZo)##?9n+uy{^6+iy7{F`6Hazb;slR_gjLqZ+Esu1`{QStP3 zwjJMI(D(d{m-(_2UOXoT+JT*A?-*RpNF(Rodj^jXghcDvS}Mb&L`gzqJJ329p->_u zI!Ei+SuQ&sZ)siL`XhZ`nNbkUJrWX;s5DJQjJQbWXe}b41St{^?MjLyNel?klFy&v z0@tUMnkPFTmw+IsG?ga7w4gD>M6Cf_1ZWI`{4{(ZM0$@D05|8P#AV0U(mO)ptYv4j zs31k=Pi$Z_u&DUz+k}LIt)-CYiycitH((3`I!9HJBwpl}KnjkRkO&|p8kB&94R8om zNVEf`p)}mR$z;Oimhbx(rVW4dAMm|j$E4)u3h9`Xc#n{@16qQ{2)su?lelwCyXPC; z&H0vT&EpMSKnPYf)M$a0l$r!7VHHxcv-E-9b8kzfb8_1bnL{Xb#=Yr~rIq6DF-8G& zj*Av0nb)~LDKtjC-2@}B0X!~YBHrajSwM<}u^Ao94U~$-jFSm_%eu!Wv_ygp)EXr- z(47^KvNjwOg=Aw1G1HU4x+j7ZtSW?{cXW;rDI~kdRZmKUh}OhJZFsUK!Mx)7jCIew zEm{%+0xFH(_na*09ere8fy5_LB7)F|JUlLIk(WF$SPDg<36YS{l8IulSyDVYV!2?s z;L!y?@NFz-{EeUCPkuc`!JQ+Tg5x=rWY^^-f(78+< z3jrzrJ3e0_C=^i;0!C68-gAtS+~4qccVM7Gu9|zxa?Yw^R^(?mMpp`2ONtC07xG(A zS_GUlxe1;aLdts7gKbXNM&+#!S;8t6wPr6V6gE(*%uDO4;$jW(@`h*bk`z;gF{lC* zK4qC&kRv^I3w6WQ4&@;+Sf({XV6D{6XL|-uH=uRSr7q$lA!R6#U{P~AWnMF@GHq)EgU1Fc zLsR7KE(8J!4I=*#A21r9=p2xdW-)RdiJ0gdn?C3HtRapFZd^Bs0|B3L^+n754d*SD zrV~8cvA0YLjO4W8#x#TBQjLulDbYImkhkxbe$>qwdyAGx!L*<@kofEqe55hhNF{k{ zj*G;^gMF^wd&fo3v&Y=KLJ3NZmfW7B9$#_m29M4;T4dq&YR_U08tbXb%u)v6BA9rpZi(<;b-{AFY*hYqsfD-D$zJL_kPL$-E@N-m&i432BZ~YqHe8~U!kC;u__7sNsl+6wys4I-d zMWkeKY&s?lVr+;-W+BE`lE|?g>e==nXf4X*zDO!o3l?({+_}zjLfiAHSF;pds>Ak8 zh{XJetB&vcyZ9Zz=o zzM7JzBqn;F38tN8J8-e#V#lVV9T+^;vm4lS>@A&TZ|Piy^v4rEcgC{fqqjJ27(B-f zO_8aqTIcAFcwPur6-PBn=IWbq59|*O+Yne(q{LOn+EOZ3HJxWWaM80lumWGWKnQM5 zxw~LiBH`AIX^~w%>W_abRmFPC7v4ZgKJ)@#`wt6| z5+5^vi69-+G!Fk31x1NenBwi0cO*BoVLoFyL4!;j%@`cN{c={;1PqoGF*CmNZ~lKo z_euFL{dUhXsUw3P#UzRFjPerLPp|Z)3fgB9s7a3W!-Vna@Dcx=^dS? z@3WC;tZIeK+TUoRn3YTnvw~^Ctl;?*K6V=|@d+Q98nna*YLhdwk8FCBWL2}OF^VDN zte(it*k#8>$7P?lmC<5>$vK(jOZe-uPGEarp!x@n@r`7Dp~K*T~AqZ zv_dPkd!`Mq+(T==|GRniDXinK|6TsAu|kN zbUS!b#5>YKCr>fgkHwTqQA*m5s}1kF3-HfA$MdH=wE)2|2Z%H7f3-p zf?kQ1Xqo$6rHKi?)M%#6M@q@8;pU2J^iCW!K`9B27#S?RMI;1RhxH5&=TQO)F%Sbj z5CSipP^ipN>?~ir$VSXjjvQ<7vnLpt+tJYyGs5G}vm1E0rSsWQ)f5Pbi9X;1o0iiC zA+jY%3U)SA)`O=|+?sNI!n9yBWVcY~Z~;A^GHHm3*^GBRP2VFWZHt6A9L#{l zJELv6TJyq9YQ?X<#Et2{UUbJRkGq(|nwF0-E9luXJj2`53c zgh(7oD^CoB!)s(Y2Ad6BArL%1@YIqJIcZoAT=wi8tBUH-SnnLm5-sUHq}<*0V>XT` zK}bvr>VkQJ5bP~|$l}uAdH$HjkP@$4@P##{=CWtwxMsLD%R=GU*Nq(Y7caRpLkiRj z&+z6$tmS;oa)CBPC`$UC>6B|HEElvr_n+_$AEl|ebCVzb8yu~8aE{SzTP}ADj-sS@ zAUNNE%pzl5QI<%JE>Ifh2%Z?w2Rn{;Sc~_p8cwDhHE3uIKk~o4lK}t3ukasz7fQV? z?&bnK(w2u;7Jwu!GI*rKXr?vGDRo6vQWz9ykr&6P8mYreip&bg10Wi|{>FDx8EoK5 z%T-V3s1#b}zHV8gC69IhwIL*2z(p!UZF0vfMYe#Au%J-HgpbThY~Z5h^(*e}P!gMX z;gol;xYqFL$26L|bLJ&`$GpTvHUqUmN_11R>u{c?X4f*4keEz4y34fTa?RzI;{}U3 z%NY+J^Wv-gxj(@Wc<*ig;*arfeFsn7WHsZ~Kw01dF|s_yI)uS`l&0Hf^|UO}1<4aV zy1*qECDn+vY_`k`R#Qs(PNF+rWsxO>1f;hK(FiHw5`DytEThPfN~;{#(Yr4su1AfS zF`-BNsB$072m=phkMUz+6s9CLpe2pTUgOc!F>=CEu@fEJ|G9qC?+%#B7RleEKD> zb`&M2D<;p<4Oq`&&QrJ1ii=A=^&+=#@Zb?|J>qD_ORw`+{sR5L3(xW+{}ms8fv0Y9 z{fN`m!7MEhlI;!zvl^L*0XZskV>ApRlAu`-239r6V|yC?&I5eyFLCjAh@*tZLH?2l zn4gdl1xesNK4sg@wxcl2$L;R&1BJXe#w|NiC4cbB?4HOlv((tgS<8bBz^ux;wF_Wa zRa|dS5~B!_&5)r$@44)0E%Sm^jT&8Zj-4eW3V{?@pKY)ajN+tXYkB38Uw@sC-O2+N zA@P|fEJ}tz?@0+4un~Rhga}o|$r0O@*#zLlmwDHhp7%b-q~dhR z^%HJiV>M+~;|5~DJCdi6D2;|f5FCC0fmAeAw#L1)>+u#BGUGA2lj4C$A3LILpXZA% zww&*%3Yv-}a6RgI#MElQP}Vf1N=`v zgY_tx>5h?K9RJP`GXpg`5%vRvr!d)B=K?~ZMJ~D_WadE}QndaOTNm?&Cgp`VhWzOz zkM^`%O3hKttjH^Mz<<^`+u^s3=4@Muj zK?o|%?HLyx_qX(cxxgom8xkx^I?qwVvZPe#dk@iudPG8Dz5fK(4#11 ziB%?h`T`b$VXWJG3JNdQV796iP4z zdIz8t&a>&+3~Vh!U}rh&@R8FAAG*o9XWio?54Ks%Usc(zH962>Z*5o)q{Pkw>}}RR zY^3ig6fSae%8hBRO8R2MYLV%Pks=6@s|}MW*Oq95wIsOOpbSk-5qWaSY=Ksog2Cb8 z;sR4JopNi1w^UX3y@m-*$#zX`SWVgQ+3i_OvuyJEBYyMK%qre>gOi3;#jIpmF;V=^ zkMrz*@(u%h`-C{oqA9GWE}7N2Mz#Ya%)v?#6GI>d21Prt*=I7cP?`A}AhjQZ|&U^`Ij?EF1%0c^-tzz`@T&#hS1NJ**j5#4n-M_Hi_iz&-FM=Lga z$^z>^Vhl=CRe6qK+oCn?ImfGL9=n~Gzi?dToe zVv6j`oYqvDLgp@OoU<+zGNA-s5Ch?Wyt3kyGWiM^NsuU!?Oi1Hmh(3IF??iJv8;Le zI9mqxma7&YC}sAOj5uqYc$k-YW-vja*xGE6t~6WAgKZW$mK7l}HB^#mO^DgW))c(8 z!3FfS69jaYw&k9qu6glgp1w;{WzKRoqfkgqZ;6Td66cuCC~CZ;8|SYbbwj%+1>Asl z)CCGe1dx(xL#5g8={uGSRx|cnhMwJ?s|`;sIGQo9NQuwiryn?KSls07m3I>0Z~sw# z=09dyFl{(7=nBZHm(i4xrp8A)&!lEGr8dlKrWMmFGt3<1odhmmJj|jbTzy zsBA6LlH;1o?l1?H=p0*1sX1$z7TjI%-0|BhQVHf2w`NFz-gjI(rkNlliv@RYr zJXJ-ZsSPJ{hK{QZ>m35FFZoaZL3S0rvu5eebz(pXw4g|snj|mLm|1yn4wOFId%l;6`q^N8COh zdonBXxM@h4n;Z|>P?FZ-B86gEF*!`2G$zXlE>at|mNz#D!Sxw;6}95?XOxQLhNGHN zv$c6R_@d*eVhHHMaCXUJ#?yC@n(dyuHz}&@x~eNWOIc7B?Dn)hvjtT})#QTRb|BCK zkuudA8x}L7LnK7P_C&!DvwkcUO--eciRkc-NrAVhIZqu!pzHXKAAdVk?<~fBAO#AA zQXs)omFNNiKG1b+S}rbG@7S~$g%9+Wt6es-kH#zK7#zEfb~uFgKvnvP_j&u0GPVBF z8Mo(r=q67s+4e|5ZJ3wYI5*0RmBL4M1M8mi9w~Bhbpa)q8YV?f&W+C9?Ksb}ari*3 zxi!lg)Mby0%*s5#F>>IGlJ!8XnU_3ndAvs(&F$-)ui0#w%~@}dOPVRpvDwiM)C~ys zEmG6<^p4dLon^5^X_O&&!pQ%HY@wBkI39E14(i)T4LZsKnJ5&Cn&jy^Y>(6U0T;6! z8vbuleFriA_P@$M`&*QXLSZCEpd+HrDK|-UVrDq2NN1FWRfCZz@~B{Mv5u&~u^ZSA zRGQLY1SEXGc`Rr_rSfvz&BiVgF67y=Ml&%~nx@Eh z=$Ntt{;KC}j}(0FjCo0=dCw8&ExUnf!M#l$leCHRj;-Z%!lN~Nn`c(Fk~!gAY(P;I z%mcd}M=N~f=olm+qDz!vuG#n5rnK211(OMNg%YHIFi7$~b_cJMlIRKvBs%C?k|%21 zfJ_t;V{n$%vf1J-vyxx=&-ms)AO^p)EWMcJ06T{rUC=G6A_6w|xI&;6Bzj9T;b@Y> z5F;_r4_xk9cUVuU^Fcl&oFnSIm1BgIjVNDvhY)FPc5v=335+Brtj7mPSsfa0Neh$! zFb7|IZ76ll;Y~@Q@+hK&-t#T*qENIB8?k{(XWM1#NwBp9u#s0TA#vIB*~b`#-nAr{ z)T|ac()XXBG@p8zqXoBHeBk67Zi6mpdrq#gZxN%QTX5d8TwpXJAz}_BG4~iTG7R(` zDIy|;p_~yt!66a~tOHMo=+VpJa>4$?UqwyutcQ$p^B;4GQ^cMWGnxFQNRKjr(nvuJ zc#ljBj#ZOa?U%g6(qyzHB=Sp1+h-PYRg+-wSyULmX-0W8p(HV4Jpu-gk0?Q7@|jkJ z%!7)x#sx?jWL=-+vijzR^?;AGmc8TAo-bUY1i$fSrq)04G|#QLHsRrp>kX3v{S6dtw5gZHv?~Ocw_z?!rufLHA zwY}wc9?%%BPqV2*zw$awgDH6T9i~%`kJz+G&Gpl~66=Q55oJkCY&+%y7nj_+$@xXL zqgDmBCmrN*3CV**#!Lvynp6-xyDe8cx|UK=8$#rKjUT8Dlai@HMuMa3+3x;O(H*b8 z!$?w~?{neMo}}2fw9pNlZ@Aj$9%+1zA-=sMZOA;f54e!YNF^D4&5F!%q(~Gb@(DWr zOL?2DXe}ztxJn#5i;sDRMG7A8>D&RgCqhEPz92@VASBj3uU+xl6<>Laue{A^!~HE2 z!&l$RN3#9aTO?=<>pq_c^2{P1N>Pq2*42*vz|o4u0#ndi7BiBdX_(CkP&X)(p?qnu zj_WJhj+0}o#arGwCqdP4yh0{|Cs-utk$V+c6CErb{K^p*pEZy15)AxmpgVnJ*@X!>_~}HBf`6EXKTEK59GYq&lkL|i1sj7&R^u1ea0vn%eO zVKmoInawZ-$H(ZBD7e^UBfC^oMK0J!3#K(z(htl|kqV{hEsUyXMe+oX_xaF;p@)b9 zZ*y{9t(cWWkL^&(kaynK!ge9%y9zHm-$(1KcJfUOTJET%(Bk9_bN>mm2e<1gAl;U zPmWMJ&mR;8$}pJ_6Y~Y#z-Etg)FnRf%+p*u;cAVwJi6rJW9ph1(4(m7F$LD44$a9p zyi`u86uqHqkuWV$DW8}mpfXGi^OCNj@7YE!u2@@C!g>D7ALFn5YkDik>lgnzeb2*l z-t4J0Gli=Va6DmBW{NQ+_Lg19aT-TOM$yGOoM#wSUY%D)q4F@s$vOv_Va#D|%)Hn*^Lf#+9f*mujwdZCu_*I&TBVtn%uF6YnwSg)a^^_cJ+B0< z2a*3f_&hU>;`bl%Xh)&Yue{0NFoxNTqa}5XUeh$x6ON9#b%UMFW3McT9wJ)iU@NFA2&9nVObn!PXn%wu8n2j?+&STD&G{AE9^1c@ z=zi|+;~ibc&~abjIy%Gc71!o8MaHEz&^s0*KGGQ*riAl2mrtzh1ToNxEO7l_-MxFP z?df^n^?Bdl`@5{$zMZqrWoA5A+p!%dcI<*kppaIjY3g8FoYII?pb716B!w!1h$tv6HHy;MPG}t0aqO9~J!fXlIdd-ix-P%#`@a0~JnwI< zeP+_oNb$J+X=!WiefC*5!L_wVz4bTB+_QzO`_uM{ODj4GWxEG;qZ9Tqh%iYwS;2oJ|qXWRYChMoOj`MI?_*EN?kJ{U7k@|Nb9Ay1(_;=sQec zUa&V|FC!Q-!+yohg~B2=;xIvPi9htSGQy32$5BTk6X4ZLTV63ZQw{YEUAmk ze@bs(UAve8&$?&Xa@lA~vgws6(!eAm$bg}t%rs)JQg=MF?73~@xgPW*%nJY?s2p{V zvmDR3y}(BX&$M8cvuts9?lGCLzlV=3H@x)-3{A_~IaR^)&+@_dQkKjn9ACp_?9J$V z_OG*CQP+Io6{b_B6RahNp(is`R#7s3PN|JS(Js;xCD0hP{&9;v*qtWt)zRh9c9F zq@d&%1%ub|Wuave9sy_RJwB2bbe^|XEVO>n0&JkxOh4B*Yz zdCzUyj+@6A=m$RVqD~?Yfjq~1`T=X`dScWtI}T)QYnje)Fr)A2TDo5O2C7W+`n+Q3 zz_CB!GQ;HjZ~p^7`0xMj(mnZE+K#zX^RQ`%Etw&AIuX+in2cz(A;0MqRHfrpU<%EH zyQq}cg4qy72}#DH^j*RZn5apSq!>V+rL-piI;kKqzt%HxFi{AmKszeOeo3BDX8H@W zTy6ffsfOQmubGvo?+^)|(kWh`%ryH_%n7VoE?S7VvkN}+Ifj7{*kADe7kS|sp1IA< z>(rK4zD@=Q3r@~>c*6byYuK!L_z-J3KGNp7L?td~Z%$F*18v9IC6_C19#c9BM-C=n zqmm5Dyp80VLjNSHU=vKWbSx&URxB_1KmRIEA9G`$!x_G#X;`gUuDM(>%h{`#I80!g zVGJhXbMlt6TyJjWs4~ioi3|;RO*EaO%;^K2rw@b%SLqN~M58A`&T92ImBm9s+~q(d z3IMia(_%jV^QFK*Lxfo}eF%6NXQ_!7> z_<_2mA831`#}C?0*_)6Xd`I7bXX3xk_AjlE^D1-GDhpTxy2a@M`kov9tJIL41p?R-E-cOTMc&s1Gxda z4duiD98K_nMX4eBUdi>TmP9NGZ4#CBZj$SJ@R93N);;y0?MNv~*F6^vjaQ6-Fs1b# z_qpGoAE-(W7SxW-n&12_3divgciy1yna|WAefLKxb8^SD(hkAVK6^8omRrZ{FSz@V zFMWkOclr98T&}ow$ljc1ZZe(V2daXJW1}(I&!qnGq(r> zLr>STUNZEwEz1?_8sAf7T3xF$CJqN-;6YDjSdO+(#qd`MBSzhF`V%%HTd+JV8AYpQmaZmz&V2E0z6hGQKLQts> zB(I#V7+H5Tg9?5~bv4}6+aWfT@GN+VDT)OicSQ8sA^m_9=h(b_E-=sFssepe>`B=;3EL`k2d7A?7e zbdd$^EZ9oHU1V0R<@gBcU)w>^wUQKx#z{mba}VpDB4db(&5JSh3X?>=L?_^kwotod zvGa_BERio|YB`Ky;@B^l6-;ss?4LW(V^R0GVW29oh8stCPmyB`O@lQ&I>BXJJK*RB zdsAM!hcWEWDfekQ7E`*O%QcTq$eoV$HNEnf$gtjxgESdz$Sem7CKc;7U5oFD12!XO z434P@zx2KD;5)8zt5&t_KD|is-!PAG#y#S@c{=j zYy{6FC(r2zjKKtAPm!_lDMj`KPv2oY4h=D6yl&HRzQJ57lYi*AxyO8_M_b{19z0d6N>O@-4vR4MR)>9=`_-4=~Sd!^YuO3H^nl&8cc+U`- z8tR_TvufG&RF2D*dQdUTVyp=6z0a^|x&Mf|<@R;jj{PYQPuZUn1Irb;V^&c)p1IDA zea=^0toXKPsY(v#n%dVbhYN;*c3@VKJ57aiOFs}27QhC4N!xL`#1BMI9JI@1tin-; z4nMHjaIxmRrmCrPhN-&kz9Xc%rin1nb#$vOvsFJR{i^^CgpN<9Z1*QjoDxU{7(9K% zdz{2>65<+VTo4s3ELo%%%Cw$Uqxd?Xu#&?-FRmf*8xNGdQpkA3F$XBDGDp60q7;~| zr|pSwW5#AsstJjbgp!AZzOLLhQWJpYvZcrr=`N1OLhreA!4SAM(U`8xQ+ey_Z*Z}~ zISR+a6AUab*_*N6;62y($s7bOF8SOS36V+3ts`a=hJiQkb19!tvPQMo8Cd+v#H5C zoy-)FESY}bVW7%5DCshFb%IkYG8Pj+=@SNzMcrOBq@pT5E$H)}{epwzREk020D`kr zR~<2tkKNWH!#Lz396VBc>O3E~&ShGn79#hT^g%60>y`f>m^z($mDv*+l87jCU5uR8 zO2j9a69Iocw-2!Fw0IdKWk!s+Nx}3QgQsvTrfeGeK`9%H3_q|5Y-%lfoL+Kr&ToH% z+_5($1Rk7dFG%jPb4+pyM^TVFnufMxxuN$;FeXE{2U8|F>xLpz;ItHgY^H`?h}fMa z44hqZF{9p4PADB&WDwS>mS#oeuqAD$q>54k6XF0Jj5kCQ4J2t62u@Iz z=@^L;B@Hwkn}$`R0mNdq#ocv1P0OaGGZYpgHuBV*5YV?p)v_Ri=DtdnJ9zEGP6D^hx_mG$gk~Samc5x8^)rbJ=k;;l`9l8!j3!Y7AtA zycuwthDpKoJph-{b~vkbiOev`$t*?As^N{d$Q|>NYYXZYYbYxvC^K)X)zQnK*2jVE$IEbR&WHfa#bNWCrhX zRuAl0B{tH-NJBxwCMO_PB6Y`Qt>q3m%>jJC4;tgFS}tm(#}ax=-;s|zd{-n&+&TCP3P@bY3@HBzG zW3}Po1&=Q9fu|;1n=*AcATadwl2fgs;JBo~1PB~FyAa-5`v8$Y+fs2-#a|X|{=d$B*&8p+;XT+%CdY*AS)t(ZD2OHW! z;e12HH7#w20fJ_+L|w<>Jx#~Zb9YIRZ-+bfrmQziE6$c!qXgNl+($G5+_Zds$-2?n z@2uqMYqTw(_2H&t-6##@a>I)^aVTEZ541g%!$OfUFBQCkr;oHPLysR6N+9(C?`gc& z4GN>==!R_pt8%*6Eu^`lNk)JmD>w$#;JVikX{4o;7jc4~H^c#(GtLf=bO0C*Ckopd z(yXa7%yJ^i&t(nQrb;@n?s)T(vzoJ7t;^AbKJcif>?vDbyJWvms*P7qbXCLP*(<0! zoK=I|2PTm>m&!{ksqnRlRt_S#%N5u5lr^DgxV{gt*>G~ktYTIXJkhgm=?3bK(@XAn z9-QMn%bHomx?%9_&p4QKyw9ZI);>4)xwc?Za=PSfrOk~pr^?xMbOU(?k;Q~EXWi() zr&Kvi(2c*#4M$U^j>6)kfaUQ$v1O7mEtE}8insEbs+R(G^!Pw-b>=Jv-9Z#0E@P5w z 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 Ef_cHQ%m4rY diff --git a/tests/media/Burning's Video-makeColorKeyTexture-new.png b/tests/media/Burning's Video-makeColorKeyTexture-new.png index a49dfbfac50170793f68bea624167c5097e4fe91..07f600b254b3a17f9dfc0524e6fa954b96f819bf 100644 GIT binary patch literal 19578 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 literal 19696 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 D3{8!z diff --git a/tests/media/Burning's Video-makeColorKeyTexture-old.png b/tests/media/Burning's Video-makeColorKeyTexture-old.png index d584cd41e2aa19fa7a58596eb6e9fd98fd4d31da..d87d7f754d2c9b631fb347f24cb39df0e4930da4 100644 GIT binary patch literal 20828 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 S%olV30000tdsiR(b<|DL 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 diff --git a/tests/media/Burning's Video-md2Animation.png b/tests/media/Burning's Video-md2Animation.png index b9c5be6c35560c640be7e238eb478d3b508e63f5..86e7514834a5688d54f0a78a4877ccd0d29c910f 100644 GIT binary patch literal 5226 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 *Gv^R3>wuWwgkIN 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 V-f-oQj-vo}GuAiNE77%&_#gI~-vR&t diff --git a/tests/media/Burning's Video-md2Normals.png b/tests/media/Burning's Video-md2Normals.png index 302b9b3de52bc18805f18cf328586cea7a1e41b5..055d536ef9f4166df0178dcec05aad7f68674e61 100644 GIT binary patch literal 6661 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 P00000NkvXXu0mjfR^GB( literal 6457 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 TaiUgj00000NkvXXu0mjf#xQPL diff --git a/tests/media/Burning's Video-meshTransform.png b/tests/media/Burning's Video-meshTransform.png index e8abb00a35cb0d7bf666da628c99101da9c3d9f6..8715cf0b7f0f4bba83b970c2422de8d8e715c98e 100644 GIT binary patch literal 1849 zcmc(g|3A|S9LGP+ni3;)mxLxoz6+hCTO>2>F)ELISwy}hHyh{MoP2B7Ni<2q>EUZD zcPzpz(r_p8yUq%!ho+KfEfvdnh-^~` zMadpHzi1G*@k6Hv65l^X3sWcO1sj&e{DG!?#qddbt2gS+wY`4?EuPan!#a{>VEP~6 zcM5hm;i|51H;TN6M~l74395&(tbYF>JU_Nr8qb#nua<5?%X2Ilt;}eu0lM$@j~h%y z2RYO;1aqfWocPVa9Gb)Qo3{?Arqq5Arj?yWy&^g)+WOVeJg6{TKBSkbLpvWCI}lBs zxJaEy{j0^tIzvp$*g4}3m!qYXV-an|VD$T$XTy8uzQ{Y}Wh6{ZO=^ZBn|xSaIMO}M zylu%iHi3&6zo6p5YkPg5ul;h}STr@1R~Y>UjyG>KJPl>8*+Zy(bJgv@p!fg#l00~Q(2Vo@na z;pw_Qy(LZ)>rqEC6p62LYr$wlvMkBF(mMFC0S#zGs{5yHoUw+t#VJ)B@K|n;rqp00 z+|7WN*)f*YAKz$&)vi|6v}x{dA;e3R6R~G`KX(5e9gQ;^Ridv}lf1hdA(an} ztFit*=7-EKf{)jSb=k7kY)u-ij3`lBJAAyTHIYngPn<>cbHqLNZo9puCiCtUTYuBX zzUmXIPniZJH(Y%izUr#A9%`*ag4}-5srcJL$TIm==P0@!dKQGKIsBdk)GqJC;ahcL z9qg&xjor7 z;&4%*v)Q}yIKT&XEOI|!n6f+T<{Qz`V}HJD&4y*gRAHxQLmT2R*y&RWoyOyI!C8zJ zCuy*_D7nc_yx}=TX=P8Xqck4ba9y7R1R#OwGoV_)mt#@7jzn9ye6Tq;{#k~y-?Xl- zZmreV4TNW;)YDpSmIJe4BKw2o5G`~>hH z^hHuqluLY=L8yW{a_+Jrpk-fpO-om2baT;?WjXTtIzDdcelap%;4(>s3*O*wk_l#l zD<^UwA$g&ZDkp5~qgK9smYWS?C&KIryF3ew-vBB@y_XE_HDNK?;PhKdrfVwggnNLN z?o9WfNo1J1-O#&nbU?M$ac4-SOa4iQ=o@Vnh`n>gA!s&754*54QzW7Inv)%JG%`(a zDyS#w&HREdX%Lkp-mRr3y8Gy5^9AnIHF8r&M~DA!tief)l&Mg}Z~cJ0&h|J+bFm38 zG~==1j*jiuElGOAg9~}o3Qqf1+2G*d8rRq}B22b&L-UM$ZEk*ek12E>Q=y#M^bo>7 zG;B&&^@+T7sA#;)ptFp9!eUJAJLV^ssS@9|vpH`)@_S!k^)0AMMb5v|(WRsWobNS0AXc=TX8jvm$C(Nou73=x^kS2*jz76mi}BqkaTTiIOfqK zB;2`sP~lDY!mG+(KY?FzPM739-&+0Ru`wJwdp^|<-@CRH6d7wogsbWZv6Uif6a6-W`Mh!I_*{>hiU|0`uJp@L6`z z_uwxFKRfOI%F7_5m;RP?0jz_WlpOLKyO`4~u;-6h1+r-B$X8(|`48DiQf({QgDz6x c|BW2J?-Vgj47xkM{SpD>Ikfw8w~$-^07I3sEC2ui literal 1851 zcmb`ISv=c`7RUcWBgERO*kY}g+M;5Jp{*?qp*oscYH2J*rDh zTPx?IS$I^D5YSQIeIH~50Q?}d)%h!tc`JEqw=a)Kvlu;%ts^QT*a=A+jq)-)!3jH7 zRFv%F$Qw0O8?@s2?cnUr=fNs2=+q(a?yFaWc2~W=2X-d9eERUPm;gr<+NVSIc)T;7 z0m2v%`}>Qq7p)D0=(2Ppj{GCJa|N)hSR!#%C2rqrk;B=bI+yb?y#{Ug6&tMiqEjG$ z%ZYz8R%VA;(H1HA9&zRi74o@D{~^p7m;gQHE?W5oF>{=a(8jz#K$)#n=dm)kv{X}5 zqu+CFWD$?EeH?E6+GSZ6UXl4JZI%U(S0WoeyG4CA_PH5JPd&c!5Yr#w6v(f?e?LvA z`^C;EG08W$y#!i8P5kW^b#q*l1>wvk|Nfw*1}dJXJ?&-SdOCB&d>4A3XKVSpV{`2y z|6j~0c6`Q?kb4a>43rBjAtY|qc^rMbaYdPJtn~-B9%{(&%w}BG`87JLNz=LLt#@Yp zNvufmho|+h+TR+NXB8}2y^L%6bC-Pi>G6;(6YC`qSb|gu~Sy(uW{eSE%kmF8t~1{x}ckc#&AnR zf^RbkcqD(*hp%el0Ex%aDM0g#ko@zeO;Paa%+7fbc}qx=S*2^hg95-P*-od~uNJ&^ zyYd!%7}4X)ZA2;OBAmF*L8UAJKt%+bM2@qvK+XbK4IeOBBNU$COZ!O!DAXtg-7w}+ z`I#>eou(&HdG*teJp>uY?3I-H3mf1d@={MG&vItK&{M#2tQ{RQLX=WwpL`cJqNYb` z^oI$7Tnjo-KO{hf-jrq08IO1CLw!=A__L&iWP%$AYgRWz z_}77si9iw{5x$BFLBZzq)z3>P1%WI>#I#CGp;aHnnB7Z=3-JJjtjPFX%Hc_d^K%J+ z1{$1!J*g@dV`8#7f0{gbnvuW@bd}(>#nm6*=(MlCw?4`lXAtry(5_RwD&#dkDwwrH zkZSOQSx#iTYF)AtEFq$jcFzQFxAe46?+-OCb{|A>4_B{y9usd)8eEOlQ79?ZZ$xd- zNBcV+0ZNfM6#{|ar2rT8FJkYzy6n}wtI07A9wn-8Jjw@Ki#^KCYz2fRvI#o;hw<_-K^JjB!H>n58mg^EC72wpF@uVkD1`2%h~Ko*{Tv;K9baXv{& z^{y%f$tD|_))~oQp~^JXleE67miknoppWI3OMyE%ZNTb*GelWgjE6S-=aeMzsTecR zcEIq#sb9dBcK6*4SKssjkV1J$4Ba)fmJ*Dc&d#Cqvx3_70(kiB^ks;EkX!m(5hWR8 z*m#$;^|Ze)EiHgwPC+^+J6lRYI;6BQlZkU77)ZX)-zBP@T%g~CuSrkkPb1g6J1-*n ztC>gp+XdK^cE`O}l(JmzK})S6sPML9&aQQSo9Vsg!0`Lk)6e&27hy=~9c_aREtA*6 zDbB_#NxlmVmkOMSehlaP58eHl{H;=MwCXh1O{dg;B9DsaisV|C_|x1`4b}^nfvj5F z@EoS5mxBYYb(>Majt=f2xo7K0Ci0Fa1PuIGv(?P?q^WqkUF+!U(|I&z-f(%G4FR7An#xnRO(XXCPKRk^xjLG`29 z5Et03L`ab1bEf+@qGBuVc3VV2RDjbQD~>a1IC5w~JhY$xGOVrj?eKVoB6)mZ_qV|V zx&7^R$0CimX=VXD(uCA+;yqih@4;v4=lv2>pKR@KFJ-e6MX%5nZ&uD3^aD@>18-rB z0F?P?M@NTGh+=w0#_Q@&Vx9dMUPbtV*Fj4T^%OFZK=E)aA~ zK~`2aqL(gIGp=`PEn_-h*VxSs{=ZrOUqj&kEBuh`x|G0C-M_eg6p8@a8e>&;0Z;x1 DngM9n diff --git a/tests/media/Burning's Video-multiTexture.png b/tests/media/Burning's Video-multiTexture.png index e02176b03467aa6fee5d1c4dbbbaf47ab1ae3759..68209acfde1950a910144171ed01ee2f23aacf51 100644 GIT binary patch literal 7427 zcmV+e9sJ^nP)004Lh0ssI2`oL~D0011yNkl zf0E-ka)sZ6`lP$|6?}*dU%@_U3(tS#Pk>a_?6{zbsVGFX8X_r@;>VYnNPrOk<3Il! zKjr(D@mHU~PdQtD0DtrH1NfVlAHd(d`~d#ur~msu|FtdQi!Hb1 zV2$b{<-U zO9uwIN-sOTL{h0&>dpq>6O5-BzdOjf7p@aqY%Fikva6XFsIR>B#%D96&G34~0w|GA zT`i)%kX9U76ji(0VE0q{bjcT%vw$}bc;`5C`HfBP;E7$t7x|{Sy;pNzus3z&YE2Ob z*VHuQ)>uh5%;s1uq}Oy{J=_o?1mS{WCAv| z%8c~Jl#A(h7rwTS%~a>|g(CO1@_scAl(z&~A8Gd$U2?^_)^|;BR=sS(>#_h26KpP1 zfQ*yDX0y5(n6*aI)+Tm$?5cms__X)6az4nq(B-=3;%f_Da?Mp&>bTq!=;rQjNGOj**tx;Wn>a*W7}wO3k~ zUervlAyUzm*h$myCuW61&HPp(yBJ~WuV#EW$XZQhr+f9O40oH$U!f&$xRUFhKT$A| z#+k)ig2*u1PFkXIod6}Rjh}GLZO1L&$;KF+WdnPZ@yQ@-y|lb6TSKRnZXhHuxS?H< zH?Cd!DAM+SUE^+|U5=0Y(leP?4Oq{?^y8nw``1W9Qkq%02aS%mC&mIat0b# zurR{`lbq?Hg_+;en#?G*Dm-&%41o0JcHvwN^@(!49o#MR$8-mGDd!Tm(uUUY`>n9C zFY~}U;6XWPLa zYj41kQEK8hm z9E)BdX|AC8?vsoUwu8HNefdken^G~#_Hq<*jIhra1@B?kW}@q~04yycrim6INuHk4 zqytYSGi8C=b1t)BW zI@TMgoyk&4!QmzaOgGe=!XTzFfa#Ht`{u4@Pfm-IGIKp!6*;%~FUh4iLfm#M?s>P|NmOvZAMtEMZ$x*6_+ zjF~+?f`};%z~norAx?q{Qw+tKYr6UXYRXz`n!pf|<{AVvnvM~8w_YZN{m0dzd{H^x z+0exlmGYEnRELYwQH=#*q4njyjc>q2~25<6M8yS+pXOfHWHw0t%B588Pj93&KU8LcQ|02Qt;AMP-t5d zs9WZZE(h^Qc*Fn=>Z6fgA`Xzise)uM$;!NioeXs0lN2|NK3PhlA8_);@v z2tpQbb3l{M*peMg;ciE7blsmH!2q0A@bbrncaNEQiJk%>TOAK)Uxxa@s^`to?Q^pw zb)lfniX=amCi`UfQMJc*c>whV^e!Hgqy0VgQohR4`vHsmp0N0 zd&5(Pw@LO9I7`ZT2ekXZ6kjc|9WbzFITVr=FvTg&WNb>cR~l?Ro9pzDLSUw=qxCcG zt105F)*41$j$n+xYodcd!-SeF`*l4H0|>N%(L)W|xE_uC`64eC!Un1kh?aMhmA;usG<07qRBTo_1#W&K@lr z%LX{<)?2R+c2_-!F&u2(WG|es;h=;EB=Kocl{BJG$pAa!iRZG5-pT8ofdZyPk`M)g z!)!G|wdr-Y3-;k~t^ZFsnCL*G%M0?LVz!it`H{d@x{iE!P>+gH&>g5$0@`%oZ#7I0wRTfKocvyW_&D#bOfdgUr3)DZ_{;tO#j`pH?MK@t@hPv!?6Nt26Ry1`i zq2(@@oEn_g+rZ$U89E-&grEnaW4H@C8B5lq%uuTDtv_mhjjF${93A*xssE^FZx5X@ znkNo$5gRY=*65mL#^`8UrHeSFeA7%K(38=Y*9bbv7@)?;q=-QUtWQyM86Z92g9V(l z!V}xM2&507Wk|VcxAjbXbvb9ED|6eMMhvcO!rdCdV`=re-~BcC;E3kbh#-v^qqug` zH=Yoz7(!USeMpS zbHqo&=#!ldO*zrcP#MZ*qO-BojkBYD4E|!$UAf-sxHpRjUn@AYI|J}&COWtRaH<3c z2Jn!3;yLvoL&q4z5Qmf2#421^-vg(&er;?YWqlP(KI@Ci$?ifk$=3{o2Ue(LmWNlB zux$CP-rl`~`nW92LndG}#swHo)QoecC4C#uT0y|@_Al)ertI`)9#eLx7<~r}a8mY7 z68c?x`kXznq@X01*`dqvY!Y zDFNhjh67^)7$!Pm5)W$Tc?yF$wh~iD*HS06ft4&-cPm{9%M;~bcj2WS?C#dRZv{q7 zh&{Z@m}_bB8pTJx((4Q3pgUf)luT2j+2?Y@q2p;8jm&Gnnl&6WfBYaO`JlRvgRW=m zk}iQEKB2m~8AIc99QFwkZx|Py=K97TGsksgCq$QTYPS#bS)0GRGah(c!fCX|65#Uf zxk>LfVzh8o$tqO%1QCN~Uemg)&OyT;fJhNLUAnCxZKPJ~HuN@6hBhsBr8=sX;ZZs8^)6rwp%-yi>uROj0f&iHsK%Z^vJ!DJW`gXY zctG=SBa(w^?nZusoo*a;tJhUhM|{LipPq!JP&doW%XcQR;ArGGy7fHavV4QODHw5& z8Q0#E6OWbI{0xOw{h(^EQGrsOe!}!|STsNHTCINGyv-8-8~T$@`rxq4Kp>4(q2h*V zG3h}UZBwk67wQ+&-7EWP#ebu($S$F)412H^1ECqgRA+1l^Iik{3LYJ&>&?7XB0X%O zPmbv58iny;k?ushwCSA^%O}^ZFPh%L2i;{a*Aq;BYWrDbdbPH-KXb#O-P=v_ZVprY z$t62b#^;;-x$^3&-YshEnzmglSSfZ(w=TT32CwgtxS_fkxE$-|EJKQRyRuFP?S4Z) z)76Z;svj!H09$$S4PJe**NR&=*>N_m_bgxSq&sPBSZbU0=DNS_V3#A+4S?nIyxsoG z%VEHJ`R4w*T(9q?_Q~yWv&UEEvT8@W?(-GH>kiiYK9dbaYZ9DpTkX;tpbI#Y`+}`D>mi!TiSoy&w9i-&HYZje2q`O`N?t;@Z~Fftfr_4 zxLnnaAw`CEU41J7n&)7LO31_C769hfo>i_6T&!&KF%2zRF1#QD0d&LGbkM?K+VdI&-LuaV) zvLAlsI@QTFv|2HD#rtjOH>a9SsQJUY-H*y^*&d>OPQiY0ueKJAC9qykzdTGG=ghB# z7BM#6RBJu#HvVQto;l{b0ufub;~^!RmAR0fx{!_~@eNGIGto-uU^jo#jvUva`}|V* zmzN`en^gq@O|Dd%>QnykW`5_G(KQ|rXu@r>MF)v;ZjTquQ27M_jYCCzvFKBl!7mGr8aM% ziPfi=D+M>@fKwPXnSONdxDig{43{slL{^FctJz!7PtIQJZo&=Sj`QNGC3OW)H}T?p@QTVy;sPHnj9ATT~Tv?Gm&=%H}T$l`3XJu`M!;N)ZEyex8{Kqj#50 z!I@;nYXxt@-7wb)INPu>G4b%G^KPrxKcp+)PUmkJWC81WuXH045^~}(zf8=_%PCNL z)YuxhaYlcI&vW8KZBn?bPW$cZb!&eE_-d=0xt7!z_dgS^*Gua0p)%S)tPKZz&`=)? zvb?Qi-;?bz_yx1i;4Aj)shqWHc<2>F5oZM8%s{!B<$Q9;g69H!IlpcdHq6htdu7d( zr;&V0Q+gKTcJeOu#<(942>YBKc>P_buP%q$!Oiu0%nWm;tI5&?hoGE2(61^dG>JJe zi6KDBpHo<3=GGXhffb6e9O;8Er?*FK*FRlswcF*U+NruD5uR8%VZ8d64UoI{Jso8o zQ?M!-wfbEO_0apUnU-Pm_~ykjA(2CzB=E2srn*-1vV?*qAHtEN&DrF86J*^1P8~lx z>?U7nPRyw}^)#p%WaV6@i2K#=hqTY_=oV@<8-1=E3$o%hV`&c`R}oLh9@m*MVdPV! zXQ;|hTf!;^wsy&O1!wqf!FC&=fgqi9vAN+b+Pc&3G|B2IJf-K1N}`Q6@pPp&zpF0a z#U^)qb^^p91uJ74t4qka4NSgG#1iQ9e-caun{kf`wx2P7>00VxY~SC^;CWMU3!@jW z_#&LX1YhQQf6qh5u|H5n5wiNrBNgb6;EYtaaQCL?U`Ck z@Cn&-eikwtY$JWcI4@f^joKp!7r-gsiAHdhR}1GUT2!+XQ8e8A^mQ+>})B88}9zNh1P$wDB4>9`KX5M8J$Q$ zgHGDJ2}GO1)klptuA?GlOKfQ90S=IADan*CUY@Z-@@-kw;N}#yIE2SdW)*!7H`^J z+fH9z4hC6pkE=A4?sp~muLPQ{_US5Gj*(`c5p(6Esab+19@H4*q&=JObYqIh5V6Yp zW^1@Nld_Vw+TF0Vh%_6~-wN$UAU$WRdu&)qkBFap%yDClPq&kfrz+8SduIb(*`9** z2rHifA*rV_=&c{As(#@C5fAy}qOhl`nGQJgx($6@&na}=Ju$MeYf;rya5aOhu+rs& ztKlBrS81Fr;F`ir5%*U&)dw9g4*KA%g?&b!|00&yZ$8qW?udT*>RO44X&2OtImT?3 z4Eqrl0Te5?g2!2CV-A?(e%iT78)*rt%b9vjqFzDQ@zc}k1-p`2EzXMGVqv9wch$bK zoJ(}Lt+bSIlJ*YZ>@^Cdp|^kB-sU$ZAWS?6ks7i9>tQ;UpQ<#FStS%Rz$ z;NpG%wmuj@NJs>vNme*4YY-#mLkTxYx5?hg3u5Zg@>EtC(PkYX(&Bq4sLSElL6Vn(t8fQM&thwg4$(8FNE zCzo3$A+tD3@zY5#XI$<$bChW9mJ%^6$a2!RIG@!n$|Pm$D3s*6=;V4yV%#*14pKhY z;a>_?G4@DDvL@0bhBON*EDho$SPA+zA)SWcPFERT`5aX_V_LR>ZP%;@lhQB-21R-! z4R!eA%?`K7IsEQIcgEumzQdI4E8~25{qk}ulNCQ31h@}&#!7GKbS+zz({maL|FQ!% z5YtVxKpTZQ$l;hlm$J`MRg-3{9l`wqrj8SEwo_Bh83x~?jpopjx4NObyIw7HTTFi} zh(6ij-#TEe7CKhNT|OcwY&8VtSSmr#h}{UBkj+wM4N6N<56OO8-R7toZQ>17BCEz_ zm57_FdZwv~vW&2rHLko>U{(ZKN%tbBbbrl3Je*1uqAt4^N_)+28lEI``N;dsM35@an~R>v&$D7yBf z;yrWurQRFOO5v_i)!gX5cD?ehP`(W4}Xfx`jaQ1cs%e<-gk76Irn1YdJlHe3WQcbA3gtLc46!aQc3dt{>-yt`^3-z`wGb^}$+M zvVyEyZV}Xgx1FLZNX4mCYr&h>UBn`3gZIKLdz1QRyzF*{zzR6imI*ssv@gV(TQ*CO z+Fd<;9#kvc!&dtARE9{KY+vKbI7ex94?R5tT?0Q%yt3A_4=xDkXGJo-sG2kwWp;a}Lu!dTjZdyBgCp|xWd%L95?Ts|tZ>RL- za+O;Q)#gWlv;(L+A~vXrdp!fGP8yltP#TBJxy51gt(wjn z$Sql68&}F=#rX+cZHM2hN6PUrS-Y(Uv?elR)3r|m-i7EmP0DaR*7A5{sbX&cg;9mz;l&RNVm z!1lI;(3evzUl<1mt|oUy-uT7x^>$~xG@ow8&3<)Q z*T^#-uuIv5yNur}-q&->+75Wf-1{qwF~VH;C2gBOL-!Eut&Z_5eKf7jkR@&aW!Y|%*UyEjwV-No}-J?2w$H4c+AFs<@$6;@aU%T9C zrWNxz)Rqd%T(<<{PeH#piV2qvIoh|MAa%o!IS9`4i=@o)G+} z94004Lh0ssI2`oL~D0014ONklqFT|G;eX98?cMrN*MseCd9UloZ{IG;U;p-hZ`AgWl_LOeC0ak4UCQl_ zgb0GRu|6*-(hsxKwRZhxXS!DG4v2bN37`N{iW>TztrM&&CB}q*L0zt@{uY4bUq`yH z%bzSq044%XX-7ApdXY zoR^LBD7)%@8Odn-F&Li$_}Zv}_v-6!@{$!)f4z`3UMrGUd5{0%&dRgWsA9paiW~z! z6=qjoPSElg7P?`X7sf8$t^3`W; zAPmAW`Q6V|BkQVJI7qAv_DjhQKveGyj8Bvg^rCaSyU+y~)}0%)N!Dt2U%|iKG zP|>ZFtll>>%H`O^?}&Qey$m)AZ~Q-Ll~a} zSS(*GqmNhUZgS1S$aveJrLl$NeirgdMfs|@hMd9?Sh(7TOlo9ED?l-*Eb+nWF5Q50 z#TdI*yY9zZts1^>`3Nt1Q|4kg7rNEfddDtrD}zU1m-aZ0;kwjj33etE-2f}#PC`oz z220^WPZMFej5B&bn%r`En&Z_mHZ5Rr)3y6u?_G|2(K}@U6ku?NE{l6iVsyyI#^y@m zwZG$gQ`8+RPf;yIml>ug+aAV2I+Z=xMRl6%H+S#4V(fdpdQGJd!F-0n-n8i+*8g@* zeuZvfaAz|xBEMBAzP6WQyv8`~qEeiN0FuUOmuSWwNkpMOuR_g{r_fcp_lBnYm&z=j1b4NpuLEgF)6ktrPO~su5+(q5 zvW?RUV#eJW7^`6%hv@?_J_PXcj5}Xh_wa4vl2wpLgP#L82RG?1_uYux!rukz0^87? z5d=@MeJV^4lqt4~_}*%@Kyr;0rJLCi$JN5_*H^nGMbO6s`uFmlZ z!=#FC3ssBJO?bGlO#Heak0f-3Ja8Qy=~VkyCG4f#y&|R-w4TO-WS%oP0YWpPtYWrZ zoK3E){-Q+5z#1`LOtv$U&u>)sPn1IdtElmgZaTUf^Ag=1MQ|+0F@nU&;6S<>?A=DR z$^jvc%t&|8!XcW`odhF~JOKg|q%bLjV#DPcAVa`2ZJ@0P+!`cnvl>K-yEVhV$r;()tX4BHw=+gnW$#Ds>yOb$uF zY#0O8`i4v|iO%{R1NoSfwO+4ww^+^4>cUZ0IJa#V>K*&4*i9Hv(`nI))drhcH4k|L z1DfC{NHYZ2t~@0Y)2{0F8Iu~qBmvu~fGwx0a=T!B){#EV;DT;b=@P|sR*s2kCTNr0h>l?%r%z;Xz4PCRrVYoS$V?|hOBus`ehm8GxPlJ{#^j62X zHQ9l3ioyP0ZQTpK*np{|Tzq}8QCJ>AUD;eDI-_v_o|mYJNe_D%8^R0RZ*ML^rhg=~aylyoYU6`i2?a zfKS&9T_>VK01RHDj3vx`H4+0;nxv$sNMS;goWe6IKiw#6=J$jEOkf1Y)uCcgxJ1Jn zuAgeKVb|mrruSlZ6Fdy^QBfrFZO6MScFl)GmqO`ni1{^Y4Cai?)Jzh~0wg@c&stwf zWvEw`ngl#bo;i({F=H=$aywKm(9Cf*o#F7QTr>-3Y*$5hgwK*5*1$&19nOcnCiV#} z_tP7|#YR~1__bi13^o!!6+DjNBm3wX*3)n$*LK=tv#w^3!w2Zp?3_)ERo%gNEvFc~ z`g=5Yd0Vp?9JoREfk1RIxb1lqfFDb`$;}dXfVEyN0#=|)NmH2Opd4di3Up<5be~4X zM7m&XE;Y#!+?_Rr>1JWeemHYKpAE*H=>-Ru77s_IQ0jD$gK|U@pKgea0$p=Aq zzAC!=#PUog36dOU3C|+YLwFW|nMhB#7tFj+q6aO*OjGhfOr;0|B|(-=bU0J_A>+Zt zt*t_B++DV_qC1E&_y8Qv;gDCD4d6m$yHrDWRi$Y(0NCK4*2F$0_;!ZWZlF?)sejW0(W^^z&gHD-HWWXG( z4agthsE7u@KU|{u82mw)VhCS#&3UVx&?43ZDfZn zn`MK6gX9z-PGKN3)PQdYKDpo?A2fr7}Q?g$-a>mNF8RPCU`r4F3u~eq^Xj33xCt zLSRfg!zK|(;E1p&GgeE}trlFsUi;y@l!J+m_+#v0N^}n6ZwaXgZ8yh?Da((-^p0-o z^9D0+9BFlZHaK#FifJ4K<^VA97yzINMR;rel+D3=KoUpHv>j#k7TxC%&9RnyTgw2a zNj`zZ!9>UAMY|2oDL8H9fGg+BlD8^Qj4Bg&)Kg{v}a1u%zmtqefJKb;DQrr%Q!P{JUFPn@<8IT=h+3}`(f zifNW%k&nT9n885sHIynOD>}>fM#B?vx2PH@N&uN4EoOm7^OghD27IbT>viMoW+p6MRU9HsT z!SY!iaSQgXw*_1nY;&#z*~q@h=qzdDNMe=Q84sKOZqO2wHe8LE%msxzJ=O#+tyj0f zsT!oEFi&6*<#?FHrPC!+rF+4{aY*TA@_5lTQjz|*;Ji{fq&p9ODba{W5(;rS!jTSK z1q=^+NnmJz4?zP{c+jWn4a!`52{Yz+dooLx$A9pt{k6}<$GF~1jZu^B~{rN zJPLP5_KONCW8-nB*n3v17k?66KI=7oD^zigbcP*2e1leni3epfDWm>A-EP3f7{c@t zmgNY=%I!5)c(k0IvUAaA|DO4n!m`8#=^Rb6w=3jL`j3&ht^zz9>^)w(+F&f_*#U`+ zGqJ{uGOv-dKn5wd4|DJ#%z-gW*Me*HfMO^qyR}FsF&Kj!aFxD^<=&~Bp0cyKSNXRl zx|&M&$yPPi?SsZwD(@t&7-ONE7(2jW3|F>kILv++FRy@1h&SI*Yd}mGgyo+tMw+l$ z03d7<4>R!`uV-m|)CRL`Bg`;Yzb>N=(GMa$Wsa2{QElo?5ZuvyRH7FfT#Jf6`XuIf zdO-tY#?V0|GKNi}t(HcEk`7X$YcaHimmx z5&OBhbz2LAnLex1)#T=phI4~SAGL%-nB<6n)5m5p#=8u&VZ6K0*wNkCyfN4+WY$g@ z_+HvoG2`9fOva6vmE}BDI0hQoLBqtxQAXtqmXP`kKgQkcqrUXnR3%o^u2`tp=7sUt zKD9`iaSb#B{#vea2XI#p&mc#;&M*?~Q+k@xG`u;Av@C^DbAW_K2?|JzGHOJGy+v%7 z0BJSWF*AI2PFCHBZL)md=IU0(4%e(4aos3#%?;@S@Ma!Z0-{geJM>c(btj63R#i(KoJ+*RF3 zTdTOfVH|_>hGDu0=}B>URS1bj2iv=~o9C0XEoJ=rkUvzIUnkjGKjrmJ{I{c9x&SKJ z=wM&B%UN4HGiug?=4&6y6VW~@Um$Erytz4{G|8Q|-M)RtatdJ7?^nJzvWZfY?Ond9 zt}F(SoxjY{l@h|yG8GpU7Y~^qt(5a8Q#`!yOj zvW4;l-Zt3QUp7dt4B0N!FO%o4yO%ocwORYN>M&f({9YhxUwg9|j+BoE`0etG?|rqV z_cYn|{!VN1#id>zjtlI!w*Eg}{<{GFH_96=T1okvm--VQ|Cg7O0I%t7cVWr($X`xQ zsuxk@r1E_m4a`x$>jf{@SDsZrYirD6i!ZQrQ7lpQQMMny*Smd_k1VGW9g3y0u5Ik%%5A4|HdFx5 z^6Zd5U~<{0oTCrmk4xubzdfRV*!+#Dex1(aZ9mrOQO|YVveix~?GU5C7q}0>e=L)w z%{y5GH}T%rASy5k@$5*_DKNe?bgqqKZ|$jihs1KoYVyRW72@hMW^|};)Vs{`Hor#@ z)x-xok5~W6mMF5Y?%!MEPdE6Bas*&`7u8yCEI#msTp={R0&6>-v`t?6?nHD0JEmmJ z>{0@HK1EtC_ktqVYA8U?KzgQ77sYPoSrd>nr7$xM^*OPm~v}eTZKDi+GiMsXNZo!Wm=A(lRi%^^OoH-UJTMCdfR#l&ZrmrgKPkbbnNmd46bsG~5Q5Im2 z@W#l`s+6^ARpvx@#<=}JqPn~iC*7w^Qxrj zv)GDW3L<8#jUuCV{8U01+QMC**)}~K@Ks@n5&7ggtdo`7RXYBjFW{^Kt|Y7Lb33qH zxLTie=e{dl0vyBmq(q0f!u=irj1_$4PxT0snlXQ-G&rX)s!$uK32oa0p9E<)9;F71 z5!&kVReiRNXOb9At5sH6+UcwKToY-DW4ozz@HL%`?s*(7M;UCPP(HJlDy?Y~n-JDF z_*v*AYiHV{csYBSz?|R+))riS+245XU>p8Jak8-JxRZDa&)FbX!`qOYQ*#=|T797P zne@B@&JFcc=rGKO9O*L*mPf&csO`>0w_k;G0tJ4 z(XDSzuqbh70-TaMuNW7roW@wwaP!XR8_r$dKrlO2BW}>9qg9aIWc=OBF$M?52+uhm zi(dVj_UMl&8ni4<&r@P7d&9&72ol?Kot43`2Y7v|O&i0%xUS2ii(p9=%ZpWx{RZY# zE|#WeYjCicJm{e=nQ5fYswzAx%3xiel zSqtDiYqe|fi1uKqL`}0nYqWhzPiaAmU^C!rUTS&HLE;FR(tpNM>8m^Tj^zx4ElDMN zm^}?`kXZiAo}oJ_6JYa^qrGftsya;XQyqJP%%(2OaUFLCxQ)SE{WfQ}#=gLuc-}(p zy7DX-ufLTUlhAs_M&GDHsx->(_b&&%XagEo5>xIxfu_#{CiD~tJQTlkaX0=6J?1VNfc=&9!bMNXToI59W`YGTs)Z`@7d+6J*y8Usg$yIMpy-Sr2ouDs$EUPLzY0EN{lJxXXWzRSV<~5x7JT|E&}F zDsv!(=M)F&vQ9vcya6NoEbA%7d6tSkUz%K&?5HuBE+vkqvl&3 z&2MBm#$W`A*SMcz{R#_tgh1D36h9FU%0slYV=O}EF;^f;VJJosZiq{N>bFko*(Ewv zGQF+NV>hQB@;;@X)Bm2r&nDEB#ArN5_*R}BDX52cjRO3MatL6nFt-jHzX>SOSFtcn z_DP5K#I!^(O|qYy0TKXU5P;%|g7De>@u5g{q54^S{h~tX0Ivl-L$ zctdv$KJ+wo8emmmKUJb5ioy~Dh-kJXDShD?+HciRYeAZ)>9e)|03rI*^8oM|!nAc| z%glDcpF&t!Xk1)qu4YxLWJ4f%Jj2}noYi^8PeXKe(~A-*rRgn-JukL)^SKU{lM?Ms zZvTfU60xebGCc(%pLj<|_fzq9f+U7i9_KV+9?}^0s9&HP_YCfCiRkoaJC6&$Rx&bz zqMyQ?Mp-3gpUXg(I5?watU=Fy`C^PasGrZt0su(iWtl!t*m_b_tN`l9*vEU^BtJn* zarwFjBa&2z(c$4sDL@#*#}%lW+{h86i=UOPTOH|0Nw@=mwGLiM&kfEDkh(IL<~jxR@h}MyCK-u= zSaDgN#)2n003)(53YRCr-Q|e~sUg8;1ZYsQg)-y|b+}XI94=$PEeej>g=-)m9#}r` zGxT`|L7!66`dN3{E0h7!tnO7AvcmGM76aBtpG%?}WeP3j_(pom6I+-9Ao`lF$>9A} zz{5xM9om@-qS-G>`h)lWTs_v)M&hat0F@Tc9JA+;pBI<|%MfiJgDB{h%!ZS-n%@0y z7iXOU7dSdxc)wHjQ;z-%ty5tv^8|;|{$uub0gq^x5z+4;rY%C2kA1J@!R?9ce9&`w zeu;5nutx6@?lDjieff&~9S^O^KSAYYZmaiPHns12=W^7Gt~-cG5(BP>Ablk&U-Ks5 zB$r(hM2dQpT;zz9^uw~wjR_Xcz3S47mM`5!e8f0~GF5C@t z!34@;RP_BMhZHa10y8p0rr z$AsDnXdWW%YSN8j{x()HI2F6YIi+WCy&<~tn?8}Yn%-N_IohOrq;-p*{jMx18KZM zH-`Fi+^}S%Yl@?4a=2Hq;|zsQ4i`3Gt6^-!1u@;1HmBO1taN`@`Wg^u3o;LIK*L^X99pH#xk?~RmuY+Ai7gS(YMK^_^hfHWNuXg%$5*->;wdfY( zSlR}$+DR<3YqOjcb8pLX+u)4FizYbW%k&N(s=&%@+l|@lwVJrX5OSSpUD=s?u)x-i zZh`ZaV^z4T%K`6OPS2_Y(kWh_+4o~$tQcLjS3HUJsv(DdJQwDWz4 zNx-1wi?lA7=`*r?^}zMhHJ6e88Xjv)s$jO`%Cz#s-C`%TC7*qA?&IAFSr5inay(w3&n4&e_L>Vh#=m9SajVutGw z&@7nMP^uir`=9O19ks@08Z zAU!Z`V84od?$K?XX6@PHVeUTks|CN_qa2KbQ6%}Q)n0gqF~at)pf)GwRen1=W2Y9b zrOnn*L#ZC3>CwTcqFP9NANB-amn>sf=5@Qek?&lQPL>Z?!hw~X@hZl2tu|B}gL*d8 zhcU$}hyM)JHK!da+iO2^^sz@rTNN9L3)?m>R=n5FVq7bhfv&cT_nSuZoCOy+_6y(< z=K@&dR6dbL|E4XMxlA%#UhU_y*U=1p?%cIQEWsHh_A6c|y`wev4#UMT-{T$Iio$8wJb=s|+wrZ$@Wr+TEpAzR?@K zsw)D&4z1c@TZbs!qFy#Xh^`3Kj#opd1LY*Z*(<{gD&}td5@Wy}sPM(DaVVr?wJrsp z?3Dl$*@Uk(FdKH`*{u=XnR>@j1F>uJqIj*%hUF>p0{DOdfBS|#@9~nyhS`38H_X7Y z=ye2{o9GwPzpPj>iIvCb&{j|Q`sw=YiZ^PCD$tG2`ew7eTRE5L*d>bP6ZY7JmFyQP zS7lD+PWqLj-pY9b+`t z8q2$O#l3~Ou#y4%S_Om=Vs<5Xs~HoP3xgM6-7s%^Hcf7QB}$*%vK`6J?DsCm!=$!T zO5j!F-V4jFR=I@B>%gwe(LZdMFwSrB(uQ_sIro_L66EN`cK^z^+qXrZTB85**Z)0n z+3)fP%BNk@|GWHN`3Crlmv4Z-c=-nSi004Lh0ssI2`oL~D000qxNkl z-)|h%70178ukG0RQQP@ZQlmCNQ-M&cR;5VvtyQH;Eds<}(8mx3kthlxN|Y!FL==P| zB8u|B1H4y7LM>8XkdRu0T3S_=s3-&oG(c>x9oy?)>$SaoxVzVP@A+}>%+73f7rq*e z?#$jf_s;puIdf-rcBgCrjXp}PC!T0p^tif<9){FX zY0+b|o>sP17GHcZjoF;lNq|qBs23yvNf~<#l(ILg%-Q5yq$?3Ya;8u}ny-#i7{CTZ@{<=kgPn~MCPoPHT&tNrL zK|fmu&)<fUtcP@Nu6H``>MI`PKWR1PLnu=CTWqdJpB z*#Um;IR>f+7@@#oVI+<9n9)|E5m{thvc~mP;Q@B%Cr|P{OsJLtU%0SEv30<7P3xIl zkGZ5qB6Dx#8U?T|Jo#i)4+W(H{K5-9PRLw?SsENs=~^g=x%Hb_lEGm3x`dR@Ncowa zqZ#?}<4N`eNC5bymzp9~!j?LSrOIA4slcjM(`vdNj66>V&%|sLvZiQd2xvWnwtV!c z*5`)Q9eep@pxOIg84YdSw8QKQ48O z^W){q0isFivg_F>PfAx>ub;&carMF~p0R#fWt)p+tn)s6*y~YapRZhDaO!9yS$Z2n zrt6tSa?(MrrW}OIo?I1q+XjbDXa>V}gHn&jY^Fnp02J`bD_a00sI(9dmC|(!DI!>@ z?2(Wf4W3h}O&Wi!^a!SndXvYfjG) zG7O%#-Uns91{fi(L8x>kIHJnRm;(zO9)+}-OB*WIA{|Qmpsdun23OJ!aF!jwh;XZ! z`uen>S73Wi^t|aUdaWpQ3uNfT`Vj;$J@UNH&}=FBeRGp(nl36SSBYA;l^D`axrl** zKt}b52K}x?Fl4&azsez{M6l;U)_3etD0NK9sGhso%)xey?IDLJ(5Nj-JroC7ozMocq9Ry1&OGl)K2!i(q5;4Zp@P}1DII;3u6Mxd>CwoINIm;e zsBW3sDUihOS#ufN%KiN)m$9(G%#R#tieL$^u7v@!m}|mW zL|T+^My5)oK%pvyq?Rick*k@zi|@Xx5!F+)vS=ztqHPA;h+vPgawc}ui=CS&(P6VJ zl`JiRaX)fN=y4ol*^Aw|IZRDqX2z$e%x!`-(&HE^RM(E{p zGOw~}Z2Kq<{1Wf~feGArx%}9StpsbNWlyCNN+nEBV`>UhQ<$E{&6^C@yXMMXoI zg$lxzHQU#R{{Ah4UO+bic1O`}uv*dfJpZzx;I6DLqqdHF9>Pa&CicFxhqe$r>{44c zfXy^BgHoxE+3?nf1=OtTJqclOh(LGKgtdiDFgt*~%M7JG)|>juN*SO3g{jcGvO-H` zxzZ^ST~Eq5Bekn-4zLg#r28;1fc}1luI-9^}ay7g+ zHZpFA9g9eQR_eGiIecKC7~2CY_HdI9w7w!nc4PY}zWirYLmefLtC_0Rd>ai0al(uh z2RL;Do9kG)iCQ1-`c>kFZn_xc%y!TU(Y$YWiB^AE7wAut>h^>feJtk0Lothz|PzAY%2%Z*j-$_)m=%iTmd(R zW6LEJ`mk+xdP@&Jh>;Nt5977hGU-{A4Bds?#{cFf=$<`!*#`g!cZD)D?+g>h@4?J} zl5PIzqZk>fqxA~E`(36TW*JsJL`n(QQDAyF-(6Gf zQLUm}#?GDDcRP4bSgP-7X$eC^*uFh>+T6tSw0O%sq1pm?=?12NJ$Hp`uC3Ll{(kJ* zg}r;RXO9ncco=JIs8+GGglZMlD%RF=0c^#7XT^TXYGwul0~i><;2?JI#{T_GqArzi z?HX2A>g7@?tG?$6*!p696-(0?y(7Gd1!kve6{DjVAIIou{iCI&`g*fy=66IG&qOJr zs#L1ewU`G6Ff@c6J1{nePd~-j^LA_jELUDU|6ARVDyt-PyO-Rw2 z#ZDFr*v!p-*{f|cFPAfHJWs&aKES{*#wIXz6@xpm_$3ZLh>!lLZQ{kQL0GAvRH~nD zyB)BHd3BY!A)2Xj18nm1;7&|k#eMhTz4tKx843j){4GBEleiU|qDv(V4%Puvw5HI> zqJS-C8^O7KnUV7#YiJkt{}g|J6NLgM#&F|HY_8+`zsA)+^Yv+pHgt_UShQUMn9a`= z@a$~njpqq?U^|A#uryU)ym}P?b^=%bC2r!y?(A%nJGvb(#k{hT)7Z)?Pr#e&=quv- zJAm`m=8X~x1&odHN2{BkZ{BQjhXu@L=}wjc*hH{74KFR_(Re<9$8H0F-9NzR@Aw}L zjNrDr@Yz2AV9y?ZOktVL&0%@j2kfEk7QpUxu!q@A(fKGJz@y*A4}XK}|7AWJ-i~tP z1~1(!6T9>CSYGzsK>@pqovfJ4q|6@!YA6T5g#v!|D5h`VlfU{O)oK_V!MOarp}Ft4 zy2=bYd*d>R1w1#GU*kCd9@vIT6>GwPu)2czNpah98I=m}j@|&wUI*u?902zZ;d>K! z;|>1PS`8yR@$I`Y`2q8(Mb+2myMtZ_E1CJj59?1audIYSykiF@CNMF9{rkg}Q^-Ea z)!)xtCV4%~`pdl>01xlNtQ?~NRu-{uBw)n-EtmC+K^t?rvKJoqM+s9?zD)ylVgfsM z0BFY}S8mTOV58i=w9NtVkMGA@zYo-@6mk2{vA&KQe+wH-F#utoRyUYOM(SMYCT;u1 z0%+T5C2PRLW4P@nfjYGs_WlT8{X65PUD2o2&9uJG*Poy7^r3iKW&Kp;&^XpsaPYxE zwdp+RLip8*gm7ac*DKLmtE?kzr6gcjHQ>CyW?6b zt$Gx&o1gW2yzX-Zy{H}qZ0YJxN6gN4&6mn))zg6WXV$CLt^E8A;4V|l4PG}ncPU`^ z>CA-%Jn#Um(xZTbk47vmcG-81uB6B4-+p_m{OYTwZjS;E%3KzA(RYsKTh#a;MjSX` z3Ox!~e^lKh=ioOM9i@c@OitFP>1pP7P43*eEbLLhuDoBMnBVkye=XVhGC0jNH;2hd z+_-_sNzBe}apm+i0Bn`(&+PJ+3wU7x^Yit>%nW8`l;bu3U-);FR#&_9pBT1?dQ<38 zy{|z8zpwtJ@!ose)sNQ1hHu1=TzVI<^hk-Pj~m~PJoHe0eaS#<_(rHl0bjg`g@pwF zdNe$YFTTKIkLB5?)|84adKPfGymcXACi+-Nv52uTjE`e%48y~nKCbribM%0*rvbZ@ zbx?nQo$L6xzey*{Jy??*i(ebSW?Ear@Gw)qQpxYp^K7J~B2_&K*xar4Cgqe|E_Vmu z&)tUR)_v9VRTllA)RX|}4>dOCs)HvMlV z%jJ6bN>9{wj^27}t9<93T1{t+-P3@}<-nc1)zv!Mt^n-nlTWtF_W%4j^*Z2SwJrth zN*z7)G~i$zi?*u)tLk0A`n{fN6|1Y?0Pb1^@AY`e`5VAn(qBr|A=3XxbY-PZw8PP6 z;p(`*G-c~ZFZSs)*haQj+qTuYcILMW)YVDfRpnK|+FIbnSo#{hvCf3uX;R{cRZLJd zUW`@T0vvp`owUZjo{zTYzNHe$-&Yu;Y+r5H2Ft-$+bL@#S6e?bueMuTYoc2Sy_}Nm zF>Q~&iPU>{S1YjH*L&K6`;xHK%E@xNms2X;vz6Jm%{IN9vQl9H$Gl$FmCM!L8IS{3 znqquJ_dhs*NMu=R#r-r9>>7Eitm_{{zh2grK_I<9SOnbS3!;rV5UB2=#8rpQh7`-d zdf&z1`h|KwsbyBQ!;~e?T%bPV9mdBwY)LMalrVCU=zLyBW+hqc_PuXrz_ zQrTjrqjd`|V6RUpQZ$uU!NO(%>#=Kh*!F~NJs8JS8ykG$b(JnfdxwIz7Zf%NxMl`f zI$#Pl2$*_}P0>`|O1CW!wi3r4c-FHq$C(tw-r?dpo!wl4?a^hq>VVnU^#R*aGzCnd z(nSTZTc{-*o=~VkD#pdZ+=%9Ik!*UFC8)s&ri^W&P}u5~UQim9U^gZL*zA}BmHOIs zmO?tnH9mrA>ykU@N{W_+Etzd4g1rhcTxtKMP_}(&uFnB>58*_BS<)We$T$v0u-ik{ zvq~K6$$&K&^mQt>v}cogko7xlnl5^DsU00K9WaJMpG2^?|Ey2rQygpAbEvdZ?*QQ2l$`6X^Z-*y z)~FvLxYg@}vQmlQn3c2xoMi!UJZXU6JSL+`F-=Lcjk=3ax$4qMD?W7>-R9VMW$WnS ztMd!4=K%-3DWzN`YLy74Mx<;h^@kPZ8WZS>H3=#;;#F1(N|=H>R@kki?u7yCg&1Je zEUl>=Pm+|%p1Y++^$25aQf#awk4ueGu1fc$n3lsAwOV6Ou3XW=E#f>)oV>zPG} zG_9cLe-OYB7<&|hdEVPrqU%wNgi6gSP~GyOLjX7rUcQ_FvymR4?E2IZtW;2-dMkCV z646M~5@S7ew-Uj&eE6`}Bh{5JzYK&TIFhmAaRs>|+MMfsoirl2QnT@NAuwj!O+*(0 z=EonGIu-Jx)k`lWh+t{%Rd(0J&{Ym5RyFnhsO!O?9jU<9qzRdtqLmSX?V&w-RO@p? z(STjO@Pf!V2$*#x#V?&)gN%c57L;T#h}pv{e=DGlTkes)G}bJ=bp;|upZx$j3uJdIasPgD@W$)c;pJ; zlPCEeCRBEST|M(mY<^A=mq{Zy^8BhR=}=4GM9R{qPe*koiShyL>fE{5tCytY^qP9A zh{>ffA4xSMGkL9svu9(Cr&9iatAamp0THxbG)lWq;Pm3r$rl|$=Nk2xTa3#w(#t;Q5G`QEduQ7si*3NNXF6?RHAW{Rd6fzS}17E7S5m7 z>gTTx0Bm*QM7)OPvJR)v;p%oas)|20$y@DvK|^ zn8s|*>Qun4o_L~ZQ6b&>ZLFY8Z}H;AY+B4s-2m9?$dRVS)FbT_^0;2Q)V`)$)Bgc& W&ms9eU^x8%0000004Lh0ssI2`oL~D000q%Nkl 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 diff --git a/tests/media/Burning's Video-planeMatrix-scaledClip.png b/tests/media/Burning's Video-planeMatrix-scaledClip.png index 36d6cb9dc7f795d8854bdf80df4550d2aee207be..813125eab8ff885957a98cdf1f19a8de42902887 100644 GIT binary patch literal 35533 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∋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 diff --git a/tests/media/Burning's Video-projMat.png b/tests/media/Burning's Video-projMat.png index c1ff258abc97dddfc45872942cbe0284a7a85579..13c3b7efa0fad35594be4a4c537d06cac99e7952 100644 GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Sg9%9fI*@0EaktG3V{wi(E|x3=S82 z{{5f++Ehv9G(s6WzG?lxTBq;D^Q@Q8P6b6f+#He^i_M&7 z7k=Nd_?XR?-6_V%RzdB|yE1u=@LQ?xDYNFj`6- g$zVtT!$AcgqK1LAN)78&qol`;+0L%5H3;+NC literal 814 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Sg9%9fI*@0a|SP2J)SAC6pk z?c=z?f@7X&z0Qxvr+(c%;Pa+;b9vtH|F4^-PIvq;Wy<<}rk64n9aU`l|C6PcpX=hO z+Ov_HCEp&DwV(Y?vDR7IZsqf`8yOvM48NpHe>Kb)LgT=|fygTDM3Y|LU^gv+XC&={qj-ZBH_6iho?V zoA03hhn&To4~}R0Ms9iVmQ$|CV|Mwi3mM_H*WJ`#pY*#XJ)=8ex@@+{F~yq`PhQvm zaQx_ZE-_^bsUyGcSbR(6$`p3j`^7ZzW#^T)IjII&8#F9z^A3e4b~pJpCKT4)Uw7bl z%+5q(?yqxMy9MXm(~CO1E_>x_*Mk=qtSGg*?Hv+!Wl=)COvJr8{)Sxhqt~oop?mP< z)3R3!3vQg)GOxk-U;N_}X`9N_ti;Z&+H+WH@2Z@tnQ>pjH+|<*>$=PTPv!ox!|CxS z{i^1?lae`mVo#uDaZ_;Gdsp}J-CC*VOCR+ui@%?0@K?)gRgvb46wknU&+2%in@$U7 zrm0jNT3X5;W>CSqP4pm}q1Fxd^*48#i)_2mz0c77qh^hfO@ENQX|<7y<#NM|8#V0L z$24D5t4fqmn>tfZ)l#CkX)Vxu0y=z6M?q04mL8&(ee~jq=u){^35rlL_JfZUB4k*) zo1qFNr=FaZ@yq*w(dD$?jtF6}{^O4pYja=7KjMZaj&24}aT%+(-$w6^+7(CDXGm|* z{?S|`bNYX?;omxy0^S_g4@~=mZc0Ztofp_Ar;Kbn*cvRxafo3E8UT|#6!bjfzZ%=| Tb!*cvdyt5ytDnm{r-UW|Tgz?# diff --git a/tests/media/Burning's Video-renderMipmap.png b/tests/media/Burning's Video-renderMipmap.png index 74b8e7f1891a07f305b6048ca17594b38f0a1531..10e66a3967a4bb270f97d3f0c0e7a389785d3301 100644 GIT binary patch literal 775 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Sg9%9fI*@0*yj0<8}%-j=-=|PlR-F*FgviaLw8&CG%?r(GV z>&y%PP&ivXAkv1p``G^*Y+}8tmF!}@Z<(79Jmbh&H~ag8O>1VJ`2GKo?*s33wHn<) zQG09ntBbqug#>7POqgo%EHCBhy7mwD9D7ze^@l7xd~aJ3|Kx|x*KRW3ottTKxnR}Z z``b4hEPB0a^#T8{$q)4t?>^F2->-fB*H-f`Ps7X!CNs>XZ@f&_Y>_FNRy3i>ZE}{o zrH1R%1z+C&^gF>7bb>4L)bsrY`_X zpBvxJHIumUo1e=v{Nt*kOd(a()-^LkHXS;B*go{bE0q=XA|?O5n`?93%^T-uUb=UT z|GUZUi#aP^23(Han#Dr3ztX)X&ppB|p}3V*@7L5V!mX@%zr3QZ)!b}5#ANOiE6Khr@2IgsX?EhCFLC_p j^TG|X=#d1#cGNT4IG0_yEUPXLOyCTju6{1-oD!MQp literal 814 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 literal 6789 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 Lyt-Vqj5+*&RBbe< diff --git a/tests/media/Burning's Video-rttWith2DImage.png b/tests/media/Burning's Video-rttWith2DImage.png index 6fedf81dbc1ddebbad03763f2e871354dd68aa60..bda4efb947a7eae2d69eff4741f9a26708fe8de1 100644 GIT binary patch literal 14603 zcmd5@Wm{C=+dVYmkRl8)G)PDbG9V=#A|c&1baykfv>+i}(u#DaLx_}wgeWz12uSyH ze*aJL>=#^f!5Lx7nwSDP4n=!rV&;MfDO$Wde(Qu+b zy2DxmH&w{tMz#w~;^wI|zGXcBbMaAjul#_&mx+l)iD>MX%YJ#Aeu-#&#(Br*@Ada~ z4bOvlZ?Ui|PJd~p~%X9`P|Jp=X6 zuPZf0m*DQ{OV_jh90c`LnV=B7xxnX{Fc#+Z3)VZB=ExgfXX}VNZ zc*#{p`@KFH8sE*hlD(;#rp?3x@_ik`Xe2Q2gHE84E_}xx+vQvnE44FPpm^JAYmfP3`sRrrV>}#8wn*@AeP%NTjXD|(2~-oLevI8auGZOsltZ~#A|M}jkxuA zQCYgK%AQVbZ*RXTV>~bm(y7GlYlvU<9B>9IM~~JXZLzl#h9Loj!vaSV(1u? z(Wv!RRJ0l;!R5|uCC5#hbI0M=xEJ0h1L&YI1~(Xp1MJ_ccS)o%SfrN|gxO0<5t)&g zw6wJQySs6+Ot!RNAE7ow(_%QW_y)L!InxNDG&bOcB_*Hh>mLI03WJF-5$~Ieq037U zi)3rU2a{N5ieBu#X zOD457&7qMZyU=7b>ju;0NNI**aa>f8bsJy|3S8g@mu*u<&vD?^*(BKs>4p~r;jiJ zz5&=Ezv@(z>cHH{D`yLfrJ?sIO5QP%MCM^-cJej&q8n_mR@kX>QXv6GRWj{mJm`k; z!H#o(-|e?7`l!V&D~zF`=?Ot36JrF)4!p^ZI)#Pws}RY_wd!s4E=AlXV0-H;y}YFX ze8|dbL+aYM?3Jn}`1t&huGPZ@q%pg1onlCa>)?5tzInva%vluN1}t%2b1Hb)Q^erWL8f>;GtdT27~vO6Bux!lV$H ziAixsEp06yjz5}cVGvpxq?c6lG^(q!Dv`>?Y)0Z5su%unOiNa*SNr0|W0^XcvnyKt zFrHr;xjA%qJGv3P^Jek)PIm-g31cK+EPTXf^^(tN!5xIZ^}D;%R-@iJN8?%5DbF8d zMl$sa7Z=Ow;uww#8-BsI>@ExGMc*Pw2Hn`b{7jbp#@t{Z@1lmb&Jpn#HSgINp{X1Q z7~a4!5y2Z#Dr+hSY={((yqnq38TE+F^{j z#_8JqcJg?NF`d>``*Xtz6F&JmuStjP!t?R=>Rr*qQK+2UTawqa33qo)B?N>0R{CG1 zGsdV&V5s>5~f2;?+Ud7j+``75J%W^&2ljX7b zUI$^Qs_bw!zOF+(VPo6as6-V_FaRJFKlJeM0BR7!>1Su&o)!LY#&SfCXAE5)6GSEj zt}%c9{CR(WKZPZ;)Ni#frYt|0y4a^^V(WABVjK9DnHe3`DW+t_LUrHE^^Av+(rRjI zrlzI=0WU0HrLXIn_#rGTFb^Kb$VNp)xwje>ssjLuuOoY>&4ef8QH*SfCRit(oa&si z(^*@1il-5;_6}@>Xh`|wRZ51K6|Cju7q7nS-Vp%UFApCn=sw{w2X35v^FUA>&Bg%i zS4OqlZ7Q_fjgQA(fYp4Zc}e1QH4cxwf3fX!the`MJ>xk9ou->8ad%N4TSOh@eLPCv zzTfneC}1_l24mX2b(AmOC1}^s($W$O3v22A?%Xer*p&L_kpBLNo>=mR54bsumi*n} z=K+V6rb=9G6(@D|`k->k8Phlhh#xQ2v;aHdhy(=RnTPy%8X%i-eS z4Jo#_wx+#uHDmEeEk}H!KMM-x01=z5niZ*|c}UJvtiQJ~-Nr~$PFmhj0QnzB z{vCAgghE+<>AoXEt`eGf&w*pH^I+Pg&2^hDPy~YNxxr4ldOvis-%QLID|w-KP4Y%YNL6O(If(a8vybst@bD^} zp3QpUgz^orBhuxbKA!cu{QFlZQkszjzn}8Q>2bS#!+sX`mPA0(P-FU&<)yL zSx)Upu1bVa*L@vo`*3tUUh=wL;j!GC)DM-M;o;kObaU10-_Q1&JMONMOC|>Xp_-i9 zoemb6fq`{d7ig6GI!Qhj9+BAH1sbTa988R+^Dl317EV*9iaOeN2?-d_6UQThL1}1q z_xC#|Py7b}e_#U1yJ7+P26p3Xs3B2 zPBqA{%werUgDa#;oz%SBmOQ*}kBg9Gw`G+EkkW;R({H-<^z;Cv(?X9|=B|J;22zB` z!&n(V4}hdUPZ`H$2Za??+aUeD#ZDR#tJ!MfAuF2aE_06Qht~ zeGsH|0yl=FU)d26>SFA$Xg>L(3E5gbt9WxVar?C{72lGV0J5;KxI{CC-}`!hYpO6& z#(0)BLX@Z^^`98p&-;+U)7yl9&`2ZQR#(H!l`lbHV9(J+gIrsCN8TS5-`gAds|KdI z*nW!%E+c^S6s3*pPo+N0UAoy2&d6tLtG211PfjN7I7s{W$-gmRUah?yD_%}J4e#5V z@6ciZJ9iaWhMNPWyKM~km6f8ef7%^7cjqRZ(_jLr%7}rvQq_?rs*(mxH?LgMRRT;@ zz7F~JM6qt0v^KUT`Ffe;tqIDe)#z{QrU~9#3?$nL?+eHAJYB#7zF}-`ZH)^wJcUQ_ zZkFfY?%7CQ&yO$e8&lVqV`*{rxOFgmOCk3$o@xr!RK{QTgNM+~e2!z92ndx5rY%f+ z5XwKZu<-tMd+88RZkJ*)!LQ0gLZYS34_Rp1-gC^g)U%(XPD7k4qxit>vsk~G<~XCS zy|0|=1Ra#;J`&4$ftN*brird~g_cHL z67<Ko3-myrF&CL?DUQlG*DHsEHYJ4@J+A&M9r-3!_7u)*UZuHo3C?{&BRl-Z_kN|h!(;7YX0pWXS1(Vq6y;c77Y1x`1NS0n@gyaly-QE zRh7M-Hfm~$6-ZHRcw5908^)qk{wly;@L$h?>kIk=dN^Pf-;d^|5&nyh`=}1)Xs6`m zU2PseHUhGn%1SfFt*1~v>d#V9=6mxVJ$zCcsUV^}Fq;;4{SbxzGGKTRus%1|N67e9RrY}qRSKU_uOk*m>jZl-yEYI7eBwM z6YZIU6459=d4K-fZsrxeno zdM|xVNU)PhUZ#h~GDS=KO*P0AzALqBbGFTz`SmNxBUWx$@L?3j*62?!OYi4pySQDl zS7YlZoB5Ld=YMXaFkbj9-t|5Dg60Ekp-nd969EVP<_l3#@*w|w^5p~BJFqHNXo=?H zg7ElfaWT>Pi|NfOW%tcGZ@%y919IP#p_4?~g}A3u6j{O}3s{b3}%d6&qrRI26%@L z#MAp>?MQyk-`XBkt+s{^^!4>^PnC`5zBq3Vxo-CP(`Z7XnVY-&m{pxqJ7uV8G#k$^ z?}hu?*6-i_>g;nrf6gy1Mx}*|j z9J_}_Y3DD|$QTGSgxgGn5eA&|O~&d!Oa1nK>ieUzD;jh**_@xGnkwno2^=ZsKTi(q z2-$s{q|Uz9cGc=pKhLH5NlT3AJaN4!x#zqhv5_v1(M{JaS72*y1!`7OIr zT|Q|O=kkOgbMH1gj`5$G{e<;=GBHy&$++iLOd%IF#o*Hsm z)&1=rjgFZJrP{WTFnAGMSL>|Eyv19w=$rA3GyYHrK1IU4t&LJ()(;rJ>C(g4z2h{=e zH#6ZCo|Si_(RUk#Q9jkA;S0D2A&0?$j0QwCv;mU?XOaM7Un3J9Amq#PSqxq-4llTM zHQecSs;G*5qLH`xb>*F1R+PD3I(Mud0Zx_OMd5uFkYQ`xxNl#9mBVEj&J47CB-B}o z>N*qJ-wqW7Y?YkMTmb;e_cF?&B1^+-_jBA}l4Px$<-!!N*lpvNAg~|!+}TMB;Ns#n ze2nsVv#rIMYti$|K)T@V^Mkn#OSdtwXad(EHN>l1h7lOf7OnVn|pi2Nu?R)`?`gGX2{U!N7`g z;@`rDNyJ2Xffk$L=R_YH5Enr6{n!}KrwHwe)Y=*=LBcOq zRiZ)fgTswKFW|4=MKbLR?{9TC z=OOp!wJTT!?0oOSg1K`w@7%6?go#J)rX;&Bhl4DS`~8FRaWF%r7?AQT#$U`fGE8xu zy;fqITCb>YEG=yY2l6_6kCc!@idE&ij4Hf$D9IZXYAM(kWT#F}P9XQ2>k0~Bnvavc zVGF?&BTm7Nl?IjzyYHGeeeTcSvnB1ejX^z(&kyeY9^?i7Q&OG!+rB9Qd>D6I488>4 z5e9?-@u73Qf(~t+;(uaCDPxmr?(3?%$UBM65L}huS|DZNJN`a=O$@KRMB|9&Jzp1 zxwuzVjND|TV@vc{``p}@&>YA^-AKi^&=egVy%cyn+WxoAAvhR@3_Pup;#l#+1xyGo z`o40=)xORZMJ$|cZP`lXk8gq){0K6~8+;Ut*7`HNX!No?U2rYs@b=(7|NdsY+j-kD zGcyzHXy^Y!nUB@G5GbI}L>5cXxNEl9b_fuuG>M)YsF4`=4x$huj@Y7yeLne78PSL-79br;iWK ztc<0Zc4oTHr2B)t#IS%~GayqW6Px^PpqG!31r=`j`5aUpVYSAeXjo?_aY~NiIxrB` z*6!loGhc6`#s{^ESADgH@olziLuixfbT%1b=D4R~>R({QbFk3-#fT>u@)yv0)xR7i;Ii$?=kpGGLT{s@GXkvX!3;elvu(dT0#e0_)a~TJR zg^D)^BcrNgV{}uerfBtnWz%~vyC;_Mo8`MwpIDoMgJ!>dyP@ocCuy_rB`rQJ#RMXH z9;pEU3z_i|oR%ir!Okv5mZ>aSjX2QC%+Yb@sVT?!NKMmoX^zxku53gJS?X~7<_9j0 zK{d^V288zOvZ>2Ji8N*Kw%d%@(fx0XD`c76R=!4#1X`m82;p3aeSXXkxg|y(R}5uDvrT`0MKK z-Rb>(zbSGT(^3lVy2p7M;JZ_y;v7SUX(_e>1%A7+vEfsemFYV?bu<2EZSDrnUOpf~wPxT9H3Kmer8W({&)SQzEHB zlc?dhu0&az?u}3#cJ9Eh zki%5vFcN%RtdzdEA{fY&lWP$AiI!=~AB$zu5kode?NC*p{Ls`NYza3pwMtH-9>Ee^!;Ok;*4i&ou&j6Jg@$h3aIpn zN)Vm?ET$?hRG;(M9{ zU&j?!RJ6;A`avi|90_^`G?w{@J$;~j|E>0_KTKTEON!G+~~zYS$!1mJqm zsgfhZ(ZZv}X$D<}OX1^@%nCZPaWN?QZAZ>IGc;wQ}Aa@%0FAES48_X`v8{#@UiD+*RkUWZ6zz%)k_fNL)9dR_O%>=}C zDYvca_O}S*+82M0$A#N>#m}cVleMXO1VN1{56_r50)+`sERwP)4RG=3>mc+KWM#QT z>-N%42k;$whyNCvue*be$^88Mcwkfu4+-Y*cShdM>Am#)TSrSjk%1aIW>=VqN0c0s zn5A}8UshNc!%@dKH))lJq;g-~9QAh$^z=4VQGC`m|BYrxH!9}xPXXSX#4gE#4_nPsgDhjIba%B`27vCXpwk6&V0X>5fPc%6# zXw~+}^x0}^r^+U@n{TpaKVeKY2yqv&W9ZAfagh_)9r+eDHvV+WiHWJWyu=x>6{L2s zivca>Zpf8=ZweLpZg-ZoN`;lXk+T~=y6ts9fCC?NXW#e{0S@{|?|JsqjJV_DGLhtYvK0ev8QJNRuGer&a2;bBdx8Mgfv&}ZEffyxc6M5?AK5!^%U7W1zg)4 zBB0;G&fnkK-+yCoe!}s2IK5o)M59C1;}F`iE0<29cSALxZb2}dbQra(PW1Q+~ zT=u2~xyfSWnaow=IAXsZ2iEGfxtjZ%n@=?DE3)J$HrN`x($;?2Qo6=SPY+KIX3N`r zEcdhFgHt>3ZfLD;-l)~+K_n(@@R>Y6%FB6dbp1P^jgrj6db=U+18(v4^%BG;byV=$ zw|CVG`8QU0by6&3y%5xJbI5RAUeH1hxbb%N5QW)Nu-o_g+wyu8d0@TDGTd@UhOS3s$m{aew|CqsTHT z`|`XNb7GF^fsaHY+6qiXux1SJwwXhtSoE8mGOc53eW=$ArK@=^1$!TF=-Am_dsk`s zd)V5t!|1lQF5Z?ly1|l!o?{f~eM$uBLvgWXI$~z~i{sRj9(g=yNxaoIcNYcyKB*)Y zLsn@_k(Iu;O_>ZnTdb@GS$X0cgC?#Fl4#9gzEr6KgJV7@q@kftkeh-4=P1zj%qi#- z-+#o&|8P=!$L|iki_-lGk*RI8-EC1Y4ZgU1xA3XD!=QoQ~YNlv6DlvwX|Y2{+^%TfoY!- z?FLW|gc3#54%Rv?H0>W9)knGE+c(6q{LHy(cIjR#p?n$|buYYVE09)L^3yBRF0A^Q zG2X()%%^$sm_CF)1-3qU73nuXibJ*J*T8`M!$>ip5B*WoobV+T9nY!v&$AHR7+Ene z6cQfBZc*<*#mxH-&zCMJ(w+r;Mv9Xap`GsEU|qkvmEHRD3HPPdogT^44pLG3$MRF| zK$q7ul)}f$>GJP9Ph*4^y?Wg$6$Wc9Ga$}$FC=g6%;H6eptz~SpNw!(X1Tey6Sg`0 zOtAv#e@DfG-J|K`q1lXua;Du%ySoZ@>tohxixVpWaY1khaG9& zCicrz1S>g#KdVbno9TYb)j>4bp-b>_yd4n+m(vPwm)>pQyng=WtJ|mY9B`r!PoTKZ zAn>5JP`(G&S}Sq1F90A2rOs0?9h#;r#i3M&=iUnA+^Vef?`#HBMxaB`Z8uda6MZ*T z2T8qtU}pskhvAZTI%6|q^Ho2C5n0;tt?_@UmQ0uF^S}QVpnJP}skhQnO6V9Id^eJL zPi(Ks%+aa*5w$7Nd;$};Ov)NYJbyj|#(Fl6dUAbqk{%9XOj)H7qz+4Q^r3STWu9e1 z1f)JgJ{$RvG7bN0^8$OKu6;0AQV@ERvF|L8|B{CU+hTztUG8g3u_6l@1b2c{%ARnE zlJc3cac*!eC^}ZhV1Q7PPxaJS=iVmY>G{QRzNvpAxn6gM+AA$df@qmSb;Wc9imz@S zM(yg{`IsFiPhsi>6n9HBO3{^@d&s>tKA_t!D-k{2yi{pl0qVO1zZf}i5)DN$vznBd z>LBs8$|YO-M|z~xYQV=+Fz5o>eM3e(&3?z+rnfs88UiQMbb-NoB`u;@F!-T;#R=1N zL_YYJSVki9s;^%U)se^bFZylvt*tGD^=K%I5YEi)eIZ4lWS!ZhciI0~uM<@qD?y{*AG* z_+pt!Xiai*a%7}jxxSXEA7V+j>mTAvEFGu?^l@ZYuffZLa zO)-Ptq_IUtEqu4rZzN6I)62+}Ikc6J(=?J?l%qYk&&NRF* zp6yR*j<2<-z4-0Hi(yvvY5@8IyeBqE5t;<~66%hrW&03U`lk;^p%1_-ZdKf2weU$Z^qEbivCeF@YO%RSIzmgZHWJ&w05-^Ig+4-~(s9-Wo~A)9 zm*KrlO*$j9y$r9u9QC;b*EhG*7-e8CYshfN=~MJ?bO7oVQtz)K3V*Qj^1sPMOU*uu zChF{P{tgWr+^DdNrnV56huQW#m265%i+(E5 zb8~Y;<8l*@M(!5P?25!w&zrfr&I^*KqRp*7iZau=fDqP_T%5p4odDVuT9Fg!E(@jA z;pR2&nHmJ^0zOl!4jQm?u4l=L*ecD>bOcntyG3YP>yHQ;r-mGQmp;hQxSt&U=KklQ zFP&4@+SkZ`CnpYHx~@cZlyQIocEEB30k+!9ZD6_pl)4*s+Z1nYDgVuz{alHKfR5>X zy}DjO>i(aHHLyR-SJxS3!GNnV+{2oq4W8+E9v?qpOODQ&_?>vC^@&HXf)52uMJVH3 zUCmhVFgZ6QE3&|diXSPH_q)O+goF&H)Yx&w&;qo0SR0j3?cTjgFA0Wyb*pLF>eQvD z9%V0ye+h?Fs{jny#{c=WK;<5J1e}U2E*3DqAjS-1ighHb40XGV8m@!Je!dSk! zWKGadUsq?3SdcuU1$%iV7BX;3%^u(^b+vywEp&mo2sK^K9}C%k4@_OMo{S%Z!WxVS zeMS$#)rgyGaXY*?LRAkNWmx>c2C&0>eLH^E?SX#X0Q*kuX_fsX*S-$P~@m%kZZCqENtTtJZt1L^oY&br9pLbY#-$~W&|cXxMd zi8uswO3Y8Mbl-)@h zM1$G~T~fe;5?D|wp71GmuJG@4-1aTk! zYz{xCGV?O0q6M~zgQSYs7r|M8TB1TC49r;`1ot&M0Iub)kWB_ zxPq;cY(gd)&ef5q!=NQB&L7Sn#eLgRr*E6wcLCFSh4T{ZfF3?9PW=VcaOux9EMArH zh(EwCcdBn|qGTZ_P++3A?hDv0^9r2}4*Bpi()tp}`>8nv#&3kr&(88hPsgUGp_V*@ z7!qPJ&13#8kX1MKH0!8n;^u}xIx(DM0fXLb>Cbw(AUtesaXW9d?z+V(+}3dw8%02R zj>SqE+OG$Wj^3}OARUnQ;%`fIGk7BSaeK`ggRy}_F?u2eW>Ufu-uOQGTAO*XAo?mC z@N4it<^L-H;=_l~t~pnDhqbD|)tX+dFR2pgc&KRhxPW2_5-mmEE2uzBceA~=Hu~q! z?$fm2tE=TsQ|h+2n-b^qp`pP^QR+{n>P5T4HKa~GqvF6YvSwu^C-An&RzH1^Z_BVC z6_n=FkB)qxRq3IJ?}oGpZ-$-cSNIC%nDH$HsUJo&E1t8jEf0mS6n&uFn3Xmv(R;!M zML6(sw;1tc{4dX$<=sDmC|M7gJD}#~~oBXn5t6}JBO!@g;I-;;B>~|a!0hpht5IY{ptEi~=N-)%W zf|ZwgpdZj7Upq(p!;1s??$z1!dx^@~6qXgna3TUO7BJS=G1s+px_NjMJ@Ai7J)E6s zSm4THcwN9WBSfVYi=B>pIdr zk21?Iimy9G8xQn?t?Tt!xU{u9$@?~{6kg)n$M0k&6;KSl;z(oR$TgvfY1lYEj(^D$ zz56j^mobG!g$xnD8b-xjU6r9MqN-BB6CpJ;=m7*|A-m7N$a95YG7vH<`CaD^;-;|B zzGyo5sk^yTHcg|3A6i|#<0U4J5$+Ae8V*}AFHdS{-EUf;vIOnc6<6pe9BSgtT`06D z;(B=vr(I7!-4&)2YiU;RX`lS{Ks~aOlbf46R0^r-<938O*a}l{^;>r@H5&8wu2x|o zJFP8mJmb?|kc?I8qICSZ!g&cON+~8sfsV@6qNBHk+tH|aK&eBQCbDf(^sQ`>!HX=C zC}|7{zKNp~yYjL-DF$D3g7C=bDC4PR$GhFO;iqM~CYyCG{-u*(E)R5f?$ibxQv*93 zsw&Bn1}DIfC~OcEa$IxB#vi?U1^~+2tsa&RvuA!b41Y26N>_5FXS>YkpJLCZK6-@@ z`sep&E+J0(%<;YVcS{*I12yXGVE+#Wc2IgXTm#SwZ5i`0sScTfP_SB-W`ie6a2kY$ z>R>Ulu))INbivD9_;bE5 z-6}th#P%0!BM1F#oBUh-3PEXnvFkmu(|~r4@nhko4$|X3LS~^CFU+$<1{Ap^!j8m1 zLCJ@Ry1cu+oec^Bn^VZ;r?Ttwh)TuAY8tlK)s4~c!6bSch^)re-@l+;ZYw0+rcn1> z6(y(=p;asfi%uUlfuCq5LSsd{zF#x;Gz#==ZH4@LUiBqH+f)PZ@k>wXipng-1|FU< zHPzfYr-vLdo96y)S%-g(8OdTkYAXFcQ2I=x+4*3rlZlsnWpdk7jLyYL6+A#7KkKz7 zs_8_+UM&AY-1sooUW91MD?Sbvf)G-j5>#Di5`XQhmcEI`>J#DzEVA1#Z(xX80d@HA)6*~a ze&D&2Rp|(l@sM~W``98r`SBc)P^y8n*iCvQnA99}^EB2a@2}%pXp+-7p<0$fI@lm3 z241gJ{mNDue;k=v8bk34qL1Q>kY(Z*^*=jYVFs*kaYPago1JO%Xg)B7le(O)+#P&Y zA{F6=5j`8=voau;gTVU{#XHVs&VFQP%zVawe&ghuVueQrtOd6 zmmFTO>*Zdo(}3>tR~pF8%e=hCEsFjYL{gRz_sq|qY2%x5CfpuKkkOhe;kYO>CEMEB z^&&T~pxftbDl>zbOe;lBFb~{)$F9hlL0U!D|&i*_MzQ)|91h*TY(JA#bI}EYwIg?!&dOuK|IRwqG@*fk zfvBjcugTV~;cmYe+Lu=j7qz?OaXA=n)A_QW5=C`rYQ&bFb-WtavCOpgQ=QNk6AU$+ z9O0oF4MNqUy1*pNbH_Q?!(|#UELrXFy^f4PuET!F#1Wzy!=jWrdG(D-PJ=8)w$;cR zhPR)WRqA)if4V-lbbO#>??uk%IkIT=x@+Un^BC&N`%+)!f@YNzmW8IHPvz$r*A+?h)J9eK5uWi7 zBsSx)K#BmMm=b~6S!zcZ`-yV(poEt?DpX{!T(DSUy|eLFxL4a{1x&jf55Ms}RbYsFS@reR;mTZpO;mM05@EZ3=dGZE+2n*WYn7H89IpnTDJ0QM#iRSF!FF3(5$-I zo4*zp?77DRi1bcDIXj zKTUjiw9?aV2DscGcPK*1u)K72=+$}fBjy}sm69!K)H&(?Qger*W;b^ zr4b3M5>mFKW8OZJ>LeYAP9i2bXd7m$@WTFA`Nr=6B{bEbb|s;MA3XTHxl3vfjlx*U q*+jQRjRO+Z4i}K+|4%P(?h_UIkEz*4x4}b>fRfy6*=lLCu>S)meJiT~ literal 14596 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 diff --git a/tests/media/Burning's Video-shotsInShots0.png b/tests/media/Burning's Video-shotsInShots0.png index 7bf1d55cfd4b535a8d6112e04f61f610339ae1c7..44c3d07bd4e01920ff3312837608ceeba240cdce 100644 GIT binary patch literal 5267 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 literal 5544 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 literal 5544 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 B)&~Fp literal 14841 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 diff --git a/tests/media/Burning's Video-stencilShadow.png b/tests/media/Burning's Video-stencilShadow.png index 0186a74aa92ef08190f161c8c19467ee0dce8f5f..23c257b5bc8296fe976001fe7cfd33fc61cf7359 100644 GIT binary patch literal 6130 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 Ef-;$#wEzGB literal 3495 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 diff --git a/tests/media/Burning's Video-terrainSceneNode-1.png b/tests/media/Burning's Video-terrainSceneNode-1.png index d105e824700c9ffa05d9eb1c964a063358e2b934..f69b8582cf779eeebc6d10add1f1645aa2068aad 100644 GIT binary patch literal 33428 zcmV)uK$gFWP)004Lh0ssI2`oL~D001BWNklFNhNea&4R#df3A^R8?lKwIbsF$l4o+V|&lNkN4MIfA+Jh z^2^Gqj1}?5`@WI%w0qoje=OI&@l8K?(W9B!%yTt0T=j>)f8m{fEC^kD#gza6-1?yp zW9BFnSeW@;pZLVRe&`O>tc~)Yw%ck@!^dBLFY z_rLf}_ju+-LZphiqxWZ~_`(2RSH$zJ6zRFy`wI)^EM$_aA!R|K25OqIAMn zz3j>dKlh14tqD8}l0=^M_76YjA$MkYV4kHknyzXshJ$5cqD2>9@t)s)`J?VWPXVCa zAuq?;R~^g*EFd+1-PPA#bpDSp@u4P}+f}c8!}Mjp`N0>s!QHR@(@)*$_TMke6tFXE z$bI)C#r@*M9g~08jdfANk1TZ@KWYCozSCaeV1}uet2O=Y_8xtPjR=?t?ElK@gE7 zQq;^Gz_L`S_?|~SYMsj$-t|rb+`THyjm-fNXqMu38+Mws%9`N-cABJa>#P9!T!cdm z1eiJ0agS#`*37e7E)IYJ7A7Jl6!)rD)URLlCs*UC^#~w_5Jej1c?=gm?@5(u?bsdj zlBo>>U?}ELb6;u|W&?6nkfjh7DFW!TuE*L$F@umKlD4tn#3aN4fI0SuydG)@^q-&b zsO4Dq))mA-s8j_&L_`pWDa=t!-MtAiZ_+GA03HySSh(N?d z3}O%w9OfV<2GB%tM=>>bxYP7oyOYC#>4!?h3Maz354vD`(Y29hNzPidEzuN|O^5&p zXxOQd7eD;`Ia65Xl2z5!48;uYUwG#`0pQ$o_lJ=Ia**RT4}B28>%?-ejS$kqR45I-Usx@jsSOFp`)z+hmV1HeP>;McF!9EF z0Cu|61tj=6-MqT3OWtO+z^hSLg8^toSl9?Q{SxLdYGY!;GLO?9DduE8R_%)wLrV-d zhQ8w@Yy>Z0A{SR zRdaVIA|_HZ1FBk41CUk!;l01{Ef0POftZOM=0rpQf-r!{_<__#JT4#0uhkSPpnp8uI^){KKnYG`}EC8 znAJ2F3(UeC$w6S^Km>q6iGu(`F*OTBWeIfs(CecD1fmlfa=Z!1`)ffGZ2L$ z3jj4MW)2730W%9s4p-LzOgDHm6(VN2?ZY0v7VhB=96!j%W^uZ~34SQWt_d%D<|}^k z#h3ilOP=EJ@VR%s{Z)(bMJh|xetDDabsox zrdW?PSFLJ+c~o1DrMgGvDP7D{H23wWt3jJUL}czo5m{0KfF`m7X6_Cm0{Qnm_Tdsk z7s7c@dF)iTv)cYxcXf<0D6m|YRnbv33IRwWLV&4O4-rC4ZpBm>i4uT7(noVqPX{^m??lR@m3RWI#?5Yt4mR+C}QL`(uvg? z!13Mwocr8Y0nqeC5QzX+x4;abN#UCwbU|b?xSOdO0Yn54oTms-I1?FQW}7YP08^g+ z>jZZY17xNn$lT10m8QfAV3tB7%%DqNeCd9!U+!)E(~3XrcfJEC=JbKbC5UOhmZ$^0!P^bKX-Q z3t-l;IjVXtYNl1qOy{xLYMLexfOWQmp&nlj?jA!KO8v^IRSba$M`sDZp(Yf!sv(Lu zEM!>rx-6NA=g9#ijz?#WX}RPDPc1-ho6-*)7@(mP07T-B-Syyry15$*15igc0?-$Y ztVyH|u?gHINzBezmh#cduf&JX-5Y9FixZY$GADI6a|Wgx%m85OQ1hxbVH_n_qe>1y z0U~B*)2eO^g8Ni|%^g5BBVu=$JBZDFD%RC}T{bs(`mAbN%_8xY&wK5opZDY-#8CnO zBNKOKW>6CXfUTx+x2l$_7BeOUrm6H!pRH4(b*MXxvb(~~?NAdJa{(~aaxj#!+L7&9 zAmpld_{m52qaN;>Sr;*Vs=1mMtucfq1aj_T0I3lJxN(2o7fUg;N!+cNi3kxL>e8(a z%>g9lJi>|x4*NOpuJiA`?pFc)$dfKyv=KlTNudfRi~}(?rIZS zF#yv(nT}$ba&ZK@BO`)A(qYv28dM*w)q1$Unl6js#wTF&ma z09XMtfj|K)#7xY@Nra}$atBce+{Q4EAut#7toFrszk3R+7$rt(5-nO;G@%RJ2rt_B z*|)uO)(C(PzWhoNp0`o8=Bi`STs1{bi6l%ZI>aEt6oiGD3BrhhoiMc#hqsy|+s$H@ z+`YPkdC{grv*w&bvtv6gfD`NS#Cq5pvNNr-9zW<0{lvY$`GN-yStks9)3X1{!Rlnr zD^-O@!Ysr{%uWmfKn`{^fp@y*P}gjw6quMG%qa+fhKb=R2ob8;y69I9`m104`V-5t zHR}LuxA9Qdq!2}T!cJAaR4Z!5eagT?(Oj*XSNCFe`o?~3PBr0alx|`4$YIZ1Gw(weqYRi zv*Ua{)V^0Y+h1n}YE=NA{?duI31=T}yBN-Hn?o^<1;%_(%CheP45bFLW3xC<3^>e^ z&{)--W=Q~Sbq(CdqQwkO1Pocf?ShByo2_yNuxMgpK7KI3T?kC<=G9eQbJ=V}a}Px3 z?ruyDXN4=A8~{pHf$JF*O;Gb{9;O%s%-qZy37>t(+i&}bhp%gGg;JoMS<^LBJ(W?- z+|?XrPAo!969)hP*Z<18@W=18%2m~gAj0qY-QRn_fB9ho?G0H?nZU%$e#olRp84a? ze&+jceH()ZmI=O042QxiOq~AwuRnMD@3?gU)Lr2K0Uvs~5FgD-i{uMU&3nUL^K3R&D+XqCNmAe| zuDbSTF1U-kSM{-KU^a)E2}772^xF4*{3#FkaR%Vz>IbieVq-HDSY4#tDN{>fkc)$P9hJA^qf6A+k%7@(o5x)JPCpZlvH zxbI@xK%h|Lzu||3`85e`h`G0e1=W#Epqje zZf0QThJ{fXaApV8oX7ywYEdYPJpP4Gu7+w}te!X+c2~um08F3AL_rviX$KH9+Xe~J z>6NqJxZlqL-{R2R9J9Egx?cB!R|0s%vo8tkUEsu_X~IpbVQ(m<+Vm}~A_We@4m{~@ zKYnDZ>x9{n)i3*v4?XZscU+aa9&=z$L74c)gFUUzU?%#b&;I2P-1fG`DjdGSU1u07 zkmJw4@YlEhw(kfcMb+U)(LHZ_#QG!;cA6t#cc zU4Q7aU;N}h9{dH{Q6?6nM94Q}w! z>#1?LVcp-@_v=~!EK-O-!`wtkfum3tk`UX(Id5(wwklIn!~d&ixPx4Oo)Mj zNC zX*XN5uCJREdBvF`{KmU$j?^XZqO(e zpXrj|J~hXiY%{$EI536z{#cg9R<*8bS!wCDEK6C{N<>Z!V5n+3@r=A3(~&l9r$`Qt zOu4EW^;P%BvOnf(o6Fj2n@_y%&3Aa>V_YqYB#{(21>P_9pi}^hHZ?IY6WDXrsv4M% z&D%DJssS(un4HK6ZRA-9AA0GVtNNMm*2R!QU|}K?COB0^BLSGmAi%(e$Se$Z^rN0y z4sc@dW(R{dyVYT4sJuw%g~MmIHvHnmU-t+()%l zu~oLJ5at+oN+D6Wi=hd;XyUP1yA@x7sF&xLU0iS%R<=rX9>gB4_$o zoW6r!TZT<>VZwBgQ8)@SHfKi$py z=R(q?R**6|u062RV0BohOXhIigXC_A%;m|y^4TrF~ ztl~bHu1i&SfP|?D(g@4x?_dst6L}*XS?>F+izk7lp4OwxQBFsLfrz*jxyvONHNpU9 zAJX;LRIBD( zyBN;eSpe7_Yj5NnmKDVT@|z9@Qyl8jt&YwC99qP!E*+k=TTynB9GNv|&1Z`cSY7K> z1*A96s{h9?|4NJk_N?k~VR8b1qP1GhwV2x`OP{I6L;ys1B5 z^xRAK+YqV;CT1cg5Jab-K~{B#!QFM%1ZHwjabrdd1mI(@_~m;%^YP{oB6cq3xoWQd z!%x0&1Oey=tESFqqV(0G@Vt>kL{8)k;1-K{WG8rv;U7*M?5@`2?C$P1-C)x?Wwz55 zmxV}89TRhl!}qu+5xN+g5YOJ~j%>A|k($RS!ASu8<(F>insjKZBeE!DputK^)Wy)X z0l+*+Vk)j+ck-du6YG31l;v30xd0f7eflkLyVJ#w`;m(;$|5x)YnhVBq{>t?COXq5 z;k24agy|wDDDAY#JX6RL^DIRP4B)JJ+qHb8iA`W9pU3d{pL_C11mIvSQ=l6myA|^a zsMS(DFo!58mBwO2RW+-n>;-WcfDpN3uH+`xMA3?&TCW;;Q~8RT5XC?eQX?Ru;(k*< z2&RS|=l{&(z%Wn&^MZAri znBX>RW!}Xm#VG?5NWi29-%!vD3LpVZ0m`5xfr!++RLfP(T-BCC8H;W*tNJ2@BeU+< zZ1%FtpKa_F?k*7lfC6SXt8LF}QUa|8UFTA2kjU!UPK~5OpB{ zIMk%A7`h-$ka-9*k(PNDxD7nD&NnW{uP(=5y6nHc<~gr)CxS2wZ*-MSALZ_5u5L_3 zL`Buz)wI?MpcOuQG5hATcW!Z{op+J~&thzXbScc62*BNjl20y&>#jfbr4tAHtDK9C zW9`R0Y5`!V2YGzTOD+`;rTD3JJ{an9tZKf~Mga3ha>;%588)4&>lgp&dj0!9e)9*s=Dojj^9MZp zT_3vn11`Vn;{bl~{pbE$2mIL={`%(6@JFBf{LLTm$DjSnfBN4$-tN1Z<;bGj?!uyp z0Ah^Qal`&vnA;HB7%Cj>gbkHEiy~2&xf-{G7-AG&l{&d|rqiAgj;2nRnSJ6A&KNRi zY8F^{(uFsDV2T7F*V1cUSISQ6rl4%<@F3Ks06>6CUh?#%)#6s+AA0$f4}Q)Q0}H+O zQTHCIMIv_$s;gQ<;B)5f#c%$=8!oyJgUpbtElXLKx~jTzi$ELXzrO!>E`89Q4ma&A zL}ps&vOm^AEf7zQ&}%;MJI{R3UB_bX-Ue2tqF$=GdlN!n`o;Ht^jQx$KQcw8;51Jm z2*2{OUwrn9pD~&h^Gkm9swbZRqbK_@tG2>7?5~zXF%T0^dgz~g?yr8}*0-7L5H=Nl zcOpzpRABzoFZ}f*?sA8nc~i|!tcUej1$4MeN7~K^C;Rc&uKE2RxXo?NCkvFB`=9@N z5%d4$I`_Kkt~>YN4DNq-UG}i^1B1xXMX5k#1Xxy^EGC^qa?h~Bc=L;2d-3z1+PQHl zRyS?RBE`2o|8>v(#b=IcBWoifU?Netp0=tuAVSPAB6U+k8-xjyAiAzKF+-#YY-T~^ zg)jTrlwvt;YiNYVtf$u5T(ef)@ISiYM1jaMAyX&v(?yra&vcvXQPs;(^zU!lt?G@) zGL0wFnAMhJ0ib3?Q@3qS1uxEd`avGEYY2SSZ1!`%`jMAD^6m{wWLf6AJB*{&HpY&a19M=>=G7ep5e^JB z2QU_MP+-3N=U(}Q=RY+FhaiE)97P>KB6Xl-Lif)Bpz^#HP2HXF@)vr#P&wo}+naVN@LrUp@(7@8O+ye1+BAFLLwRTY?E z72&izu0wVt21?W3SaALR zu)E4y;R%tN*6v>wXD zW0Y(~VQPEpd}=ig1~WkI$X1$!ZdEfQFu`fGT2vXXJ_^FUe)?hn%|`!0@!Cn#q%>=y zTNRE|kD|_7U0Sp#8}}t2-t& z8UWzt1WcZAb*t*DG2gJ?Z@0Ec34j^^W}q)c00IT!yIuOYB0Q=A7_>$uFbsY$lC>JfjI=kv7~N5!#fZa2q8s*Xbi_J-%LVw~d*> zEHNxdHs2d+83q6cz0QP}YXxD}gd_8r!q&O)^{esv{l2OlnKkDu+N~6y^t`7YY6QSJ zTTK^ZuKJQ^zI?1z$swNDj?B~1c>*BZtjFqVN4jRKNwXmH$lLRn%_hshR*J32$6x&> zVv53T46`P-Aq1j^1AvZ$fXz`IqpF&j`>K?+YCi#W;82^k+qk#tORa4PM`oSy8BYr) z2h3^OezKRlnwn1}(j=dN7)7xS3duw9r42Y`u%n88*3)N1_uxqfQ(os=J7!ATS@RClLT` zkVdEtOvH;6)samlAaA5RbTRZ<&%g8uF$x<6@xYuYX4fe-1rmZA9Pa8iYVC75$i-mA zr%SL|Osi~PKCvG{JhnC4o;7=`Wzh|hF_~UZle|+2o+85|PxO$ho2vD7lC5BFM7-I> zKy`C-QX`N%LXbt*2~kn|t_vRq;PW?}IB~FAjb%`@B8S>^*7gh}cA97;rUzd3L=ExO ze%@P_(=r$cG*yAI7N+THK%hv{N|?al#Aa`|sSOdptckP80hl$>5!Yb@vbzwNd^@rT z4d!on{%arkvp=;J<;bkr?WbPOj4Z{(#1nvNghr(>nhH~e9h5pr_ic(3f3{z0RgEH- z{QT2zG+V^5h%tap^kb4K`=Lt`g^F4fB1Tbv--};=&u2biy6!1uGAMBzYIXydjK!-O z6hJZWgoQD>Hi3)TsUbUPS?f>@z+gsd*{E&WdDkuGjWDKZm#G&YHBTFzfYXifrtD2U z=%R~b(UbdYuf_zJ_eBW`+K93aKfFk1Z_ifQK?uSz1OZRVDS%JE^_@F+zuQE94z(U% z>#7vyN&9mEU;OG`3M|0xdfe~JX^!V>(WYjgP08R%NZ1%wF>RGDg_#HwW{q@_$viNb zdyoy5>>@K^tKlZdVDh-1dy+C{jhsX6)JL_6!CqZEky#8+|M{oqSp#C8_T|Z3j*sI? zH3Vs5Y$5}={$Tj~Q^S|`h8qvY{q=}ybD^VMIyy^joUY!!y6mspTmSuXxUnyNH6ps- zGk>b%7*5;vKJuzJrWD+@n2uVD6;RpfQkMik*@&zt>dQe-tn&@4e0*K|yxEkq7#tX? zF~`HRW}d`dg?JK?rW(qCOor7-w_yn^beg;@>g%x_^m*FvW?oFQX;qyhuMl|NHQS4J z)~2mlduZMsn#aS7xHF4w5&&o4_g>lDiG;`K7=mCMUxh70?-Ej_#1wCtC1!$3x&klYF|rs zn|#qtz*}GZy429tEFPP8$GSEMiTGB>Uw5bju+>S{dSbmE)L23yI@+~6ZRD|NbpvCl zwWu+%TOCRTkOWlex?ZG_iWj1fMchpLI3Xq3EQwp8i{$cDNx*Ad;aX zSA$cGVbO(8yyh)!Lm_OG&5Z}er)u&wm&mkF&D<2&SW7m{MtA=CXVQtmoe)?ONnl}- zAhgrOTP(U`vlhTiCQgI1)`Kxu#VYH%s*z8|>FT)OGamQF-Tw0@_WyQox3_YjC6l!& zOwPc=O}xdT{krXW5cD-Gxex+7pEwwn>)LSGN)40jk7Zdl>G5#a?6fHbHkbmdTu=3R zw=ZUxpl>36>}8h#WbRcpS1oGhsOD22Rjb|oX&0NCn>Q@mDIIB>ozz6;sapulPk8Rr z4yAa@d3&p^?${!2b+X-tMUq!P{}%yt!e+HXcjnQ|)Hl-ELxH ze%H&dfRM4PTeb?In01j4NjaHmW*2y#K%d zA^weZ>91b>Z@o3G3*YqKn|arPD?aq^P?fK^>ZAYGTaSCodmZ@ccl|rp@R{rW=H?H$ z_D}xg<`4Lre@+!W_8vc?=0$ZZey}b8rb!b&gXCy)3M3_Zc_8CM*VN`bqoO1Tl)+G*1 zzwpeLKjwK)8PsSj?o6uhf-BzrrpMfGx734D`%7P@AIgQ1#Uxyygja`%xxJQRXph zrI3i(i9n;);{M!U|IL>_>|U)&p+r+cj${AjAa&M6Z!qW`#=6g1pLRj9{*o5k^gl4PraMZd)VDWU{}01`xtjj9dFky&#n#UxzJi`m)?z)EdhZK(GCm%skJOCGNd0NK6d$)mBc z6uE;yL)Gk-NERtVH&ZZhUl%M*)yuM~yC>nI#-~THmSbIy+K)Qa(lQTYUiYIpIWSQK z^S14p6d0zpNpUQ?9?DnE}e(VJgyK5^#puTEf zYc^k`K<+F|a@q`*s{+1g!!)u{%t=t8S*>B|QUGCZ$j8_D`sHLdtm~@9aJQ%ZTX|-_xXm^IE*%CUk!F@HI7w> zI<=|P#;`pLN4C<}AKN}W?`SgH!ly<|t(qwl+Qh^Vp%ghVZ#B))#SFlat~oaEj%{^Y zGdVPGx+u98HQQ?2dD8+ov0NPt!;s5~{S`59&AM5N!Zb@^-Xs87Yq3oiVD4wY+6Hq0 z6;LO0Iy06xeC%UqOgR9U5d&fX6AZ|vgH>l|-f;3FWRA#z!PA)VBF0EGl(H%Xz<$le zs{{9W#$yl0I+&_?HtS6%sIlF|MGPs(qK%6-PHkHxVqltL#5X?Z!47k`!}D325`g3T zeKi6}ahzP2ldHVDF1vlXemS1V1;BF1MJvGrQ4=UIso5&$>XR7;^Cp2%VOPKMiqVi_ zn5CfVPkr7`s}g{$l+8dsZ)Bcuw3TDC(56@wr|AOQN_^HV9i27g6hhcu%nvQ*^R{hM z1E39ZsBI3nO%fW1T&o5VW-+3y3LpwGLCvarAc{as{B36+`Sx2JzSZFc04LvH_t&4? zzv0w!Z#^*6Ee>zr>e$XLk8B@Wv;d}g5SwtEeGNl7HdE)eF%Z$jqXFp7zuW1wNdN+a z$T01E!tY-3whEPiHchrnL?LDl60ZFDU&_@8*lI!-rC9yyat+|bFc>VwFuI={%Bi7@ zUVE$kG}ZK*mgBe_$3azy+1VB6EM{lTyTh{tfZ+T6aO3XspwG+oU}k6S%)jaEBey)d zy)|z(mBuHIk$ieygnPN>WBFqrJ1t-N#xr<&>X*O(`!sI|G)bb6!P|xxt(V~#{KnoU-U%eR7ft*cePyIhWWRILC~3|Z@H%z#7|nE&D5LxGYdpXB!~oZz}?)d*=c`)PxW|I4UEL%PV1_JnZpxN;24PkY&8KcxsK~xPW5A7 z>Q~?Q-do)F{?%-fV2&RQU5eVe%&46=%UloEA3V}f|kR=ZD6t-J* zfhM6Q25y7`=ov43#%B&zr~0v&1wxF{qzFJ^xzN9WBrp{I3aTKt)|&s_Wd}XsiOe+ z46|`2MW05mlgDqek_pSaYZ6mrp0H#JqP97zm>0D!7))~|<~sd75x^88Nx-U(BPp1Y z@HCCir)d-+hQr+4Nf?oNVq{mj7W0Fwa5T&e6Os@^@Qn;CP;;Ml=QI|Log^s)I7TyL zFcX6s;hl!JQUb8I&O`D2zU=mSoy(Vg{nu}CzXzN#Bm*EqKbBJJI_FY#o|+U=7j>&i zQ~!5zy*@`~vlt^wBitsA0nUDMC=-Y7PRm@EV|nK*e(47-rT&3 zm+aMsz|6f)n!JKs1VKQIbFaHj)%&5WhO*a}y`ij1-Cvi3q4rs8#aIl06ZNGobLmUP zhB*9ZdF+g@eaLm$=TE%;N(W{sbxGz;0I<`AdE!sHpo1LhGj~YraqH+q=`q{^s&pY9IN)#R>eY@p1bAd4w1fY|2XMFvL#afx)i#G0L7moP zt!_n(HUKrko!L|1a~9olOv|xE;iKE_p)LXlgh+8e>z8j@FNZQ#4Q-= zY%Oa(IjmWNy9vOcVy5s-x!pXH#uWx9JxzK?i4>+^KZU>{h?yOpHMiRCzGY{Y0;}7g z3gB?pC~`k!Vl28ii$P6)=y8uYveisdK?>4a9aXEl2uG2jnoUDZlLp0`=W7i& z`~i=9%WwQoUw`u3Hiphi-tq4^JKufn@7??XkAD3JZsuJFUhtlOMwdSJoA)0Vg04_$ruC+;;pp~wQVd+)W@ob&y$b{w+mQSeWV zH^zH!kCFF|6E`wWMC{efHRt#J=2*1#VbR6oVSMy+pOYGYW)>IiPO6$7AF}8==cB&g zjB<7suia_Sb^c_`H3n8e8#s7&0S(W8?MHs@G2i>_{aJHn(bR3CkQGxhb--$qzv_PX zJzlSi3V|8?zK?w5fnW5+WMpQ}@sM-YqJRwEt8n;!Ad-7c_0F=c4Wyw^1} z1>5w)FMs2Up7z*P&Kpf;RYw3v#=_Uk+Rxpe-TaHU{NT-x%%);>zR*_3&tzn<7r*kq zyzu5n!{C4-G?b!hyD{wg2(wkrKYGg>zT>8cx87YdpPy`o)tLJ%?3@;5&+Ld81j9s3 zlF7w&{s~X41x_LY)qQ$0r~y#3V#q~glG0Bx<(;p+h3_)vnVFgV7PFGXR;7I8>dD6r z*8qYK3=YJdcdSANRg|K$*hW_YZXBI6wN;-S``xBJ+qUQ0_WJp3KLh|r!+3eUxw08n zMa?ri3QRjqb1;wdHUOx3)?FWF;7Ih0fAw8m<6|(-R+rvFr44?sZDVkYCd@+!?ENIz z000;j(^2xeBqiGxlh6dWGY!3fQqWxSZqDYden82qfIUb1=WFG)Jm~2>pGRynAc;u zx*XSi=8267sEQOZnQC6M5V{ymz!eHu?Oa4mwDr82s#F290ZGgZp6H%Wewz2wSEEMJ zyWp4zM5x%%kG$d)rN}3bR{-An(NDhpW0&6ZiNk-mvdTuI6oW2i&1TGFDge6RcbZVG zi)u<_ZQ#8ws7^S=tIN%$ll9TMA5s}}QB?=}_V4_mT_1Nt1R$VZ%AkcDk`=K+tjV-5 zxiWG9kWor@=kaE_86DA?#q8Y9V$rtVS6ZowX*SIwvQ-%b?`F+3hCr62{NwL^rkQzm zT?qRz&Vz3}SEOSXxQ*4;g}rLJ)Znj18Obd6G!XYk5(VKa`M58hqqo` z-nkyvSqxwxOnOodjsc7+0-HB}zYEdRCYQblfTMN4?8nWRQxb@JBFFR_zw|>byIo(^ zFfOU|QYyI9dkRdW>L$x7WdMO($#&&rxc%bl%JGH?HyrHTK_@HYEd-bL5Dkquth>T{Hl4p?*{?GH;?YUT^Z@Cf~UnF0ayNQ~(}uM8v$? zgx0aBW|Ly->)kS#lF?R14#3ouz)bs(|9Z9QTq|ZOqE@BbmAD606VkwhN;EZdMgact z{qD~Mf}P%AVp20xW1|1`_P>7210IMZW09hAwePR=>AKyWbMtmLmV>T&?(e*+>SdDJ zD&^&viQP4exCp!+^D5;R-SRpD)~S$@8HvgwwtH=ij!wp&DJ-G~aNVpOq!d*Lx^^)G zVVUxs{U(6t-T|0#dug*=_UZcF`K7fM1O8~)`TkPz^w6( z`LX}}Io@*;S?9cN!l;^6tJ`eHM_9S#$A0b^Klq)V8KAcH0wb8801T>XRaG`omI!q| zR3%{%h$vN6xLD;)4_UD#7-rEb2V+1CSxrn0#-b`_S{bQqsOvSr1ZE132@H@KYVM|N zMI<76;kB;@NTJ0_k^GTYzCx$XqL#o=(I1Y8jYz=;k4eK&N0mVxTX5tZi^_$gL^{tK_)TeM+Rbs@+W z1K^kxlmzQh#-t>)o&h9MQ(C4!3QxUBz(Wz&G zK#h-!w%eP}y5Jg5Rh{UVJX3HWLQ-Aja-8!ZYDONlWWtWTB2COGfikdZV?Q8ROjy8KQV2Jb%SNl&5ZifSp66gNEKNfl_kWh+#N(3X?(so%8K zq)*XBwR(dT#mZ9UzBfPp?-pJC_l@YF`rAM8v)}WBFEF!pE<=|8@Zw+iC*S+r`h*+y z_YzQ48W*qITeQ*D`dMJArKiF0Umc-QbBxN$p{UqI8l`@Jt$4PZU zox$cIw2mv#=pY2gSW5;^A&~)|NnrH}{g@i(59YIT^Y;7;pLf_aasqt$~l`o>t8;vsHCDpkz)Gv=RddI zD#Gu6_F$)L7Hzy{XTHSB7{cmHVMS_sF5!_5aiarK=az3|^|yW@R#Uisv5Q%&U; zPBtGuUIFNnHjd_jnUzVqKyUu}-`bmp7(D9gXHra!zz$8M{m$LEXzq2ebNzg_>l*+w zA3Rac+K(bdotZPrTGpi;jS0Zzesh$@K{ScH{D*%LDyCXWZXI7c>i{gGn+136e15mZ z{P%w37iZ3U=9XPF*O&va(>Bq&EONZw91mj_Z5=$jA<31K4SRX{m^%}F?!~{iz*6UB-`B~J8Z+QD( zf95B=@w4e23HaI9{ZDn7HHQD;SN+jvevw!H)qnRk?*IAs>NDjD$qfJ>xqNhK=@w0x z#kkJ0DzeFC$Yo49<+{_?g1!~e=y=hDMHBl{lIo}eU?^IPEe?pzGgB&>#D+8(Y?2xi zIZ$vs4}Knkcdp;)amq)Q03JorG&Vgy>mz-#~x+Rzu-l;X%mtwIc(^qZ4@ ztUkY_c0A-wDmGDk00udxr+?j7x8CivVIF;OPEEzizrE#;zwZeT&m!JoD6$(nhWq;q zhwuHJm)-5DPc9;V{x|P_=>6|cM$CL>)^y&R*-<}aRZ-KTfBNosJ?#GXzwMS=?)B8C zR?knZhECLav;X|AcRl8T4?v}(erijuJO(wze|`76A9lYl1F%197i~Ll;%>uGH0<`f zuxP_N=YRIH*Z#`0o>T!qjwv|HqU%(S#&mg||KalCYv20z2Y$g9j#`R}DH`wp=GI$3 z^MLrj53>LFUJv_<2l<^Ch!GsM0Xwbx#UJ>&@B6WT1|Tp+_GjmfBa6-WFxW%v8GZ}m*=kbM)pSQX9^pfCK%=lkFRL`R<7LEAQLLn#}}vxdI* zyS`PrIMJ-l9CI68U-Bm9DoLnmP4mEHq(f54S=7vVfAKZ1zVV4qiH@uOL~C)PNM*?z zK$B=<5>C`3TrqW;J;iGe_Qs^1us`#u2ziqQaQqS&!;|p<%xN66|j*ivRRUnR2%QS z<9?K4wa*4pF=cGB2r#O11c(uH<2VoijM)@$Wb3g=0UKqh8KkKyI*N=cqv*(e z^8D|*ja}er_IREu0!i}yzwMd3UE_#zQSX^Ot9NkT6+x)~1pam>2) zeZe!E)eJt^pwL=UnQ*k2lI#`W17NbMY}Mp66}HK7-H9!W8ZjyA^F2EwGu5$3Kbm(g zdN-ClvAzJ$96f<7mk9|7LlYT-x*VR2(gjykFD}PXOaaGk;ln(7?+Cy$qg7I~QPn#_>%(sA&dnPIRo4xGB9dVRc4d<;9BnS049l^! zuBZTW0B9@or)iGHp@`h$sZUYzj%XhJxp@n~5yqnIc3su|^)9R?=o2duVRBaoVksz2L#&(t`EVkku` zP7l}=8Aa1jE}m>IoeamTG>9giz?cBYC=kt?uujR*R)=1_Syc$(xQxkBorq*pQ3|%@ znp-^-G1r`&BX}ahT^LwqHSA)5U`0|Ood*hxx8HW*mbd-&*L}%--TVIGUS|)k-<_YG zHTzxDhOh|gS+bNjz4M(9{Gu-w&8kul+^Slj^>99l6jM|%13SkgRa|0bhMI(&YC+Bk zteC1|*0?r0=V+P5a;nFqdDAMe9Mi?s=4g{rk%O;){N-5t%n*R%)u7w;Y)GjTQ;{x) z*Zd#9_zmCxodDKjVFMc+GqZt=U`kXbi)$^YL(O1(3L)k#odjF!)Har_77HSRKR=I2 zZ76zaJskGg0OxAzOU7bHn|$ZtdXv?N87itLeXbf2F#*U#2vk|wo?KBo9#X6wjl4IQ zNc~)ZS#+_w^y(_%iGzcxR(32+j_fJa0+3Y*G?XkRj%djKs2^w1wVtbULR4Y)iKCOl zb-&v-H|*~?rsE-9TyBm5lA*;s#`oepGz)9a>>__X_w2fM8K zIH!vzV_&ohyl6ZC6N6&WG>s2KNs2924yX-p&Mn&ACTxCo`O57!Bw^cAKL`#>A=;qPK zz(B=XVJxLKk2F(|f#8^$Y1=?CIUdG!%Kex(WA1Y*q91tK?;Te$B2Z_8!cUlKvkbKL=hcGk$;CLB{Hp=4d)sG8Rlez+pFT@^ zdcFO#Q3c=pzW06RC;Z`C|Jz-E{KC)uTt#I>P7RBK&iaG>FLQ4Q@k- z-WzDhX)UO+z}l2C6&zv2fG2g{Z<6#`Duv98tz#2eJV9{+-<{pObTob0sP(kaU}bnCi7CstTp8b2saB65E}%M0(QqrAQO}7vJOa zl8Hi{(Y%}e?Fat;aSwUm+1*(*7n!=?Zro}2T0bQDz{M4qK=$*m|C8^1{G%?Mte0bQ z&Wa%=Nx7PM)quCX_q`9k&zH=**aV-7Y{o3A!MXj#Y)pB~YA zCTjj{B99Q^mY@8U8}}C1?X+i`u;=}r_mK!X0Rwhh--Jn)iK*KP6{Az{XuXy7n<{E! zvSMa5C9F}kPO6?Ah^it?r?Ml}vv?{p6d8&n(IPfxNh(U1HSvqDKMP>L;j7D&lTDvW zp~(qt4irOJ#0J3GMdyH>=+AcH{LG)5w@f^W21h$>I5TSj%srE#h`#@&uL$g!xTvOT zq!$6O(}qP8+TbGdyotMAyVHguVm5`@-cexkOy1GF4YMZ1z&l;DJCBw2Ogv@vkNbQw zCRLsLFl*eb@h|(yp9fIPidiv;mAx+RHW5G<{4Drt-cr`>XZ;ON;e`fk}>TskQrB((vmfcISc zYLP)@nrhp7tfN(4)$~WLT2$F0RJ10t07fOLe=3nkAO-m;<2`9DirD6l-w+@ENC35r ztUzR5w9U19GXU#hSoNbARZ#{xrb5KjggB1@Kg74BY3LH#_Gh%{F~Xx3Fkp^iI`Cu?Qgq2K3J5aFjX|NQR&z|QSAj)CLN+QY~>1F>PLsjogUn3$0n znZfMtPk9OeGx$xxZHLE~R^!P~jyGkMw3Mk5P*>39kecA&d7X-H12cKg0D|Y=_~Bpp zfuDTA(U=q{uvMy@f8PWTAQdZm7v43IBQ7Re98rz;P*0rO$fuGcX##j)(h1l9|1>k~ zsKP;^hV~JUma5Cn#b*f&jV8xKH>b9K6Z7v9OT-)MK*ipzkD8mB)UI~O~Xm$xF1tiN31oeZ3bYu8LRC>6ah-0Vm6j6 zW|Omss83~M+C-O2A%b_@k13aFDaxW<&}-)L+_kf$0Oaa=)0Z5atB1M(W7FW={%p3+ zvQA^l+J=~Ooe^M=nq@WGrfZ0xX8xmx>)WrcFD-{ul-X}-{nITW;`)Y|h)4;Do@=Tr zIDXcPzH1%*Mnz#+ZIepPD%Z_ookV1!!_~_<2f@|<^t$<@A2V&SsCRUlV)Z}yFaHG( ze+2H*iMsBrsw$|6E}pV-Hfcp_Pcj2JN7wEx?s5LirPT?5lQDZRR4d)iF-I4g;OBvN zXCA=WMRR`9n(3XZVKt_|`}oyMt1*k-alDMdUAMObAek(h;4?U!bN`MS;b3W(ZtsKx{!1sM9&7Sh62+-9GMf>npGXCN<<(Y z3Wg$L#>8qomh#JQ{9^zhXP`cnj~}j%#;j_ASdhf@5B}<{01B*TjBG1+6f@7{$6`e% znFUn0iarp?5qalKiYZj=cr|!JoktS?bai5wI9bKW0paLs5U{ICe`U4$V{zw&NT07V?;KACSvuKd=KziXhO8u{W?8JZI(E!u+xxu!P6ot; z;Oa&yR?Dngd$_?71+Ee}?H>84Vy0^BsIF|mF%vu?DZ~s0+qUgI)n%R@^T(2w*)`UT zX6vGTs>KFZYdT3R7dcvPyyu~CD#g`UGL19mhh!!koOk3VnzT(rWXN*o$+Ap|YEW&G zE0)S6m@A}B>qNldMcW*7F*s7Shd$?9=55$*8vr-%FS6Poa^hLOzRfANycQ(p$(B#lSlxMS;kbV7_mtH*sET(c-&(usT14d7Ht_W z%)~^ZT5lV{m`uq;trk1YECwH(8?*K~k0l$KLTekMy37EYO-;CnvMJOKSHl(UYc;~N zGgMZlsp^>Xorfn|OBev$dA#23+B1u`4erXyE&H6Ms48J9=BJVeGUt5lkGj(~Ln-Sq z5u@gqqUU+*n9LEkACv-)+k5`IrZT73+ur-P zpZ4+7>$hM3nNpPi-tgD&z-Q$2z4ybP1vB}#AO0)?xewg-4|o0XQD1TYMVPWKx>a@6 z0PfUz)u&8Ep17W1j@AP}2W>lR!X`^G*a#7IG|4ftNMdfCF>z$xZ9?P7u_d!w(Asaq ztZ^|=^chVr)J&w{UBCVBzx-RjwbaFHn~9E7SfFr7h3@x^XPOVGC_U)D_dAs?qn?+U z{^~t{^Wgh_DG_P{q^g&z%tZkryzRa3e%wEL(Ak~l+)lf2F_p3&^K#5XDz$d{ia&kp z^KN=LV0WHu{`%j)>|RfOYG4Xv^EPaf9B#%xefPVc@Q)tsnUhHL%tQ{{dJi@+$whwe z&;IJ>hkj-B&NF%Emt(rLS{IedKFOkg_MX4{nlHHz6FcVw!h}D0=cga6|EsS5g=oqD zXRgOS_(6WkQEg)ug+lAtukQZp`zC-KQ?k?KGajG5Dfp$WXZ2(g_6Mpbg%! zD(?4;XM|aIrVHn1;r!nG!m|JHr6qtby7s^`){mUganyKkW~r1-DxL#CSxUacEzmBw^Yi9p$f}rmcYYST z;MYZ-^Xsqu(QkZgZF_H~$3s3DOVtD}2ic_Zy1)EykNV25m_@&6T^o5*Y%}DXH264= z-VuK1kN@;ux8C}g@A-C7OCq&Vab%uHzfNU2mY;du8=w8CuMLjpJ~Yl9_Gy($F-yyp zKRswpXU)@Hc&lYqRc3ZX-gzrURI8S7lgjZbb=+?n0pQ4;oyFkj6r&WpKkm~fudX&l z7coR`&h5-a(HF_JmDJHaz_K9BRri-i_W7FQUJG z(T<{n2>@oxs$|qU=edlzTwe8Kv3@AEH6arj*(g%RlEjsQ+7CIETn`lA_`>gY^C+q? zzuz^B7&_0M`OcF~WDnrp=XQ!#-;rC6V=n1<$hEuObWKVNn@RySl&sU*pv7dJa;{tt z27usQR=u2g2Vm3?VA>@1JHOb zMMp7a+H1p38y0O`G@yC1REs+qfD5mA z^$kyWqRMoPYnp({;*OOjN6NY^Mp4xnwQSdGL$q8=}#2 z>-Zox0GQN_Uiy+B%A!>Q?m(&N)G-&>jFPkM#<1gK$2>we$WBQG>rF!K$!V&DR8(~e zN+(qsF@WVbEJp2MvZGc zchT2`pd-{+PgSMHKw8$~#)>Z%c;=K9Kw#c!LNQy7>#CRbsvZZK zT}?F9lg25xasQ^rCuU`L!#{oEaAtQXGA5b(;3iKVk{LO7rfFftm}b%M&msZy*5%63 zt?d~?I2rn+Lcp2D%o_-_o?5P$V3IgQ=JT_7wmWlaoiASrO7kCjv<2ew| z*%{kLN*N9C04kZR8a5c11sKCIOIA$HW3eeBKvunY(jWFIiEK}#wneFtnHI5rEP)++ zIHsaTWObcjVpB6R2B}dtK#h$>?R$Rj766T>nQyWpmE+1>D5|RBnYU=KdiV#gUEFjNw!t=lA|k4pgo$oDJUQye^Rw>r&+pEvTpjq_vx}h!69w09N;Xms z(l{U6ScCiB7_!=O%th2TkJvCaNg{1Br?%rf+n6nj}!2&4D?qRE39{l_D01%*ZC~Ky=;_im0lI z!L#xT8;QX^tXTi z!LPahm!4~!84pQPlH90MGDGENzT|cP6}5AS8N<2|<{>oB6VW3cBkNm5j_?e&m z!Sz^jkugiwDF--JeyWsk7>m)=o7>ES^KclmsOsXT$Nvw`j_G8{4Cbu18Z#SRGqjH4 zY1>GSR8$W-AB$~D8BG~VG@1OxbPydyR=F6FPbp~u*(R4ERVnE9*AbWrL|J5~Y0k}D zwMFknCuX9QRaYr1D6n%OFmo3J07tCgq@pl06GP*C4ZH#afM+LDJ93gz`n8;2?9H2C ziktvI)RtrI2q3NJ8S{{3mCC3(qIP$4cRN@t(|A0NeaUJ#8uD0F4bCQi#+fGEx?Ep5 z8J&?#Y4!RS0Z4+B^EJEkZZDkl<0wKz!TUayycLgr@bYov+|2vE=y}d&CW>W}Q$f~G z{M5frM13v^wROD7)X@#hQ|Dr1o_I<1gVmWWHQrJ+v-Rs=f0{HPX6O8A!;vhyO!>me z=E8Eg+E=&<&z$cZ??ks7d}JQQdeOd=R5E~~HWn#nz1Z=XE^aoTT(56CS>L`~U+nuj zz2;3QR@YeuaVk;0JJXp@R!*2G!U0O-8yf+sqKRI(#P=Ncc( zDnYIq)Hnp!Mt}Krf8@!fY=@ii&P@;CqgRgBecyQg^Iv_b58=YlUryu3%4rsOEHaLH z?)=%VJLp=^P6>|r+^pM;9>6?s^sWkfv&wYDa6Y)Hee^uWCd4{l&Mcap)<+^09kY}z z%3>^XxEU`j`%f%4x1aPEmg%t1n<6jy(HGYzh|$TAudc_e)l^?`48&GBwY8A$DpP67 zk5=PXv0^qIjc1R2tZlU*-uX7fHbn0krdefE%B@#VK6Lr$;&KDvTpMnjH}}|?ooipY@xcsp$@YfBLg8|IAPLmY2Nx zu0OuzpMUe$zWDd<`p8%RyO-Ye#}_^IamPbW$rhow2^deO{wJRJ6Vv#ufkJSOfTAi^ z@f8)FZI!JIU>=*@u5G<@jHveY-}jth5@b%VpfDlZvhS_Q|G-JX2Ji) z8~^OzJ>#a`ChRw1$Hy!(6d6pf<{TXk8h`UIy!zGO^VD_L56e=-tYf}*(Gg>n z)4%-PH~iagdd#8;yG^qf{LIs%fBL^05C**Q`)-CIICpW~fBdBX{+GY*Gmn`6zg-Xc z(l7I(R;sCqaPhUTx$cQissmh9L`7A}V6f=<%&fg((e1Q;lLf&4cHRCpi)OcpEr;DJ zSFetvvPE{M>q90Ttz;#lxD)-{yLHyayVmm})UGZ_f`%O{QW7{i*qxo7cSTB;0ze5T zDXqs$v(|UvPoDoYCSDa?rnDK#xBccH9t|lK+3&i(SRp+B$&XOBF)1nS#`tey{>i4CF>@qKYP!+pZBNfCy7pPW{^}pQ`O(BQ^Ii-mV>#@HMGWV==DK-HL{Iyr-+%ElAODf7 zs}Ef`xx5<0qzlcwiL>bc?ss4I@b7%~ufFL|f8m?IVWYMx`FI#Fuk+z%Ty3%`&hB*A z@3z1EhCc!D=&yKybB@59l!+0^#j0e0wch>STi)_LH$6IujAc3&u2VVMj3k9?M`!vDOWCBdN%HESc?p1d$63qq&@an)rfbg6nwjHQ{`gD4LR~IWFRa&R&9VM%K zb7cY%A&H6@GY576cA^Kg^F9!%Xemmd=(uIx2_Dr(%al}xBBDkFRa+(bNoY>cW`?mntivb`t6O?tyd0Qa|RVFyR zi*p|q-WQcsCP&T@1!6O+48de&BYC+gVlS`zo(WwVo9g6Gcp zIk|odd7DR0DiCzu?XXXSUL_j0a7P0SHaV0D)ocy`HuWZT%#q2gHa@C&5F}nOJ8!R@MF7m$ZQLi;>pPbH$vSs2?sr`qn1g(BwW>GRgFKUgM5#&=#8it3 zrdG{Nyw@~my4VF8RR|JE&6JC(7>Zg^tqQ-pKlv$`Jnhv$IWeinA}2%IIT5DYjP((#bU44}TqQAz-WY!Lb6$@(PaT!c)Uz^3Mm zYEOuYM}%qTy&4@3>Cz^N!Iah&`0w~%zu?Eu?KJb&@5Ojs+g-mCZ#?L(Kj`*n0l=cG zuY<<9$c{lU%cbNp@X&2m?o%WhV2VgTQYw+YeJI^jKsj86$KXqAd z9N)0BxYxOZyYKJrwv977=$h+xyK8o0trK*P4`xwK@BZ|sbxn-q$gE+#`)+%FQS;0e zBl@CO*ZHu|%RXfh5QkmL!r@ zi)azes`Y4i^hbZlQ|!r2^wB%-$a^}s)6F^$;3VfkB#Vq$m|pmOja9EKP8;;MJslQN74I6@qz3o&o4Q_<7?`vy8hT z?8F$EJR^FFo_D)&FpE2pcj8pfsGTa-)pRtbEMl-yY{*-e>|~^*TK_hqR7_w@Rr!M~ zx*XGCKQ2cx;0e!rZeZ62@5kEQ5|gt(mq|}`@c6F>5i>QxpWE&By13tlz35_esp{1k zUF6OMpjjrlJPcRH!sJM}-r$3#Su{b3MWqRWV8=OM8AoQ?4IaRd>}XT6;{0wm4;&b6 z!$0~{|Dx-fsx@qxgZHiDhP@-lAZG+MB5MKw2xt)XjzyJ;2|N}mf?RC-x!60OY|0nZ zXwRv1#&Rr4vv>}bnj@`g0^k@2Z8)CACmz+``h@vYu2~+;qMBBYk7siL>oHG?Cr`eO{-u$!VL*rs&S(Ea!)}1Aw6nPhg5UWpevqEFz-lxe1=H zv_XcF$5M*wD7qTb183XEHvNzVMjp_|KmYl2&v>S&5U2|AN)L~U%GE#kgP6C=Iv%w# zID2@#Hux!Y-1GEca0MjMnq}twq7{Qpkcc9HQ5*dc;#o>(W2uz0SjrPs0v8Ti23qfC zOy?HuK@4BHbP}8oVNV$d%PUV0;dtXfnD$)34l zUdC`x`8v3)vKs|JMXn8DC$cMfR7s}9RCy<`DS5K?G+Q=pbOakx{JvXmN@A-a)3)!U z2k>Y&>`JPFKX#7Ej_Odf-;DWLZ+gWfpE_*fP)aION0b=WMDHD+iUJHEiFk5M^uO-C z=LygLXO@fX`fe!BSN;#a@|C|<`}l`{^p(H5^Dk~M`RKp?`Ukx7lV2~-2Edy?{q@ql z4Y=i(zVH|K&|f*=d3XM$zu}$Fe)?~H?B{>*b+07iNt^A7B0D&4f@i{ZV4*3If~LR* zc083G1~nMN5wT-_$_+P^IsllGFSj`z#JGs@>ZUrZra&>;>Xe{H(~G{Ue1I9t@gg3~ z{Wh10YJXh$Wvtp5B7E2D{b!pt`pUUd#g3foYe=Rnl#iBof(I%&m7n z`isBzsaM@Ftw}bc63jVv%w5W3ktFu+d%yJFAASadDyDC~YR<4;@~#v=!NGx-eEhQ? zzv3G#{=aO&KJ%$h z^-nsOZ+g!}|Ndux;X7XZVq%)WB2T_*R##!_TQ`AE)0mS5AB*fG83Mx-JW=H)r6aNO zGQ`L<#Vr)kb;@VmxE-Wr@0pd+24e738k~+Y=Ax39^VoRKqN5bzuuXYgGJw%E0Mp>w z9NqqsXOyBtR!21V{>Se6wJ{gZ&Oq}zRw5sH(GNXv+6V8l>8ejZ`|>D(9Jbm&-P%%KI1G`Kx!o>N&x?O&W>VjL!P8iM|c4@xF5WtPkDurJJ8OkKtq} z>oIpll<-(LWYgAj7J1KSe&eQN*RO-el>Y>Swcp_FB)uW17j79plAo3Q{` zk7bu6E9Q00hM~x|%cFOLNLLiVsvj7L-aWA1T-8*ycR~<0XH10vtakaRiEUMTXGvu& zs^rePp>jN%c>q~WRQi;ib6GKp71Oy3yzgS+>Ulk{{9+a!I@_^X!<1B0p(^mQjsTpq zD!AZd6MS^cjN>*eVyK8e_TwLV3k;mPlM?Ra(T9qmTxk~@Fcwt)a#b69!eZ7!oKGoYeuS0Bc2zwXE%wBe-BRdlbp z^_Fl|8=QNr>j0b%`Q`6=^|Feg3IL*`0XA69M$RCOn90hjXNhzLe79Ei~BIM~kWV6~I%~iK-)* zK?ON$GM%()0CJX6w1{qpyc?6KMej0C{u}~u+*AjRKR*j?hFKk|5Ko6u$*W;C4ggNap?2em(d6*@^FW1R#qscpl=eWXHYA6ErVsh4|g(x5h;kkzjNo$f7^{O z*z|*9ZyhtUBx=UaQ*^F%UIg7xHbcGwwV~stt^@B%9wd)R`z)hsF-$DeCirDtO^wEx z_s4ato$rhENp?v97_kDPwo8&kLU5kkOJmLX*T z7qHaUTu?dojy!SBrOzS?&rX3UmZc89cFr>^ z!K^a1S#a|zu02mx*hk;{Q*Zd^Zyb}-73Z56ihkgDLkgEA*6L)OzF*WP>YFr~7Jguoy&LJ003zUJkBwC%bpdPx9n@V(?Bs^Fp+ zvv#S}!9VdR45a{g;v#q|K)l#>C*$ayE6}W_x|cK;(M#LinDl&Gd$vcm!%-b7$Ko+g zlXWR%j)9@bddQ{Ao~ZF$v6~e9Lz3VeF}jqyl+VVoD4z3%SMO*a|F&o=Fh$R`bF~FF zV<7T`*H-`)Q6aR>HQtFqi&gB%C@1ACN=(}s3u zug3Jyrd!tji+6nDO?Q8uCdMtuG5^G^@Bhi$-Z7|dhJ63YW?Bcg!8=9?k_t@CLze+q zR8Lqo*DY%R&a-7Whi*(mQWb7}J(~iZ!o;7#nDbch=(_K-n86X2b!@ypt|I^_iC7bZ zHxV-}M(hvkaN(f2_INhEVCSOe%(f*Jvne4F3?rL5(zkx#jhi-#*{Dj)wR4^^!7nFw zeZ^ccqjD8<5gkR5Fo^An^n2_cC&`_d0MYwMJeE=nrO4Tk0f<>0+*vmi1BfATo((2e zZg|_P0320*8Dmmer_>h_LQ!QSXErI!+rU+*8qc0EiVh;MqMnyk@Spthf5cz6z3Ee5 z_-prnZTqpi|BsEvJHB{5fSW$~=c>vd`T5WM)x&=HV}FCH@@aQ``s*KX$CrNVFM4)g z_`Tl~9Gc+jz!OQmh!JR6SGzoRSzuVy@#N>nqng0=&jHBe$NQb?^1bu+uwiEJ#krm>dU|P-WNV?oANw_qbgQJ zS%E8+cc06f?*8@b@4N41@3_S?i%~ab1q@`cdv5#4i{E<7yYBtst%Cw6!Ywxzks&2fn^nFE&Jp@zV&a&d`Qdx+ebo)SQbscdJ-Qwq zT6K@@(y|I_NFty4?Y|-1{r_+Gyygb4idCOyHAztttsEaV6@VtVu4E!G*n=i)m}og@ zE43QH^WS{)sYrBgS;rCU<|WHDfnWJCry;Hp{pSMR^$)_cEL z!H6M&yMAcFL=MJT%c{@C48Ty7i7KYYHsdChZPJrn`ftDV%ir$Tw zZpNa}K~zMhjK0tR-XGp^<1?RpIAh0ua=LnS(+^1{rxe*4 zXb?Ra#>tMhjQ&S{;j`nONH@4gqj<#mCHpky}L zOq?Syef-@&{Xeh2{zET%#y1?!w<+(kbV+j-c63n3bF;9Ma^sz!eeVmNR#cxfUoN9J zlWi(}QO~?o^>8j=Lh2eW3KW%2|RvD&$c5TOULDQ4ceSzDXv^yMg}^htZtQFI>t zEcn1Ysv6Ks0dUsmp@@+M$MZVoqPtW88j8K@*4G2b&?=B~uJ%oRCDS;mD3b~R?23Xc zi9ELHcSQ>yB_^ta18~x1Q>^D#lyWm_MgHt-`hEszXMpb~uX_;F}Q6qvG zsTmUvDu3-^`-FMZhJ6>J@)Q(B_I$iiwHHyc2@fWfgWLs$gCZ`O;81oRM~lF- ziqA~CETxxhw8?p$@=yREi(WgcmvuC=EMg9I@S~J%pC$?VNuSq!Iok~d2*EYp(UjB# zOA`!|X&&lQWS7L0n5pr8=3PC(Ovu>-m*CRzZs_qcX3yD)12F!RYS^;zrSiA>Fs(u3>mE)~ZfKwG)PHeOgZ zMZ;O2He_%0V?#|9x@4_VBD<6xFll?lMQ zw@aI{>ZEefaS03u&RH(*hADOB@@6EWMeVm^0j!vINrLmov)BX=pz&T5>miBiShT2q z_bYEY$$RWLu!q;?qU#|saW;$0+03paDtaOjT_?G?9d=pZXtJX*qp2Jw6Ks)%n+PH0 zY{;Hy;ln`{7SRKU%wy4YDt!@0?8!j79m={dw9nzP$~#9>9E_Esm%FqX(=L_i4lvc@ z#@Dglj^%VngIF7=iX1%ei~+E5Kc=P*rlzWnOilZuV#^k}O-vu#_9xv?pi_7vz(rJTpTOvy9?jx~ zd3ALYTR(Y}L8Qq{2|xYL+jd1B+4O&Q(mj0E@3H{!-j9aY-29%?AzvKw|G2pN>gDz2 zPJoKY0l4S(J8RFib02)y?dRw9vf^ziUp?9U!Tpc@>7_M*ZAxGxvqkjh=k+`|G0O_T z`HS0r7|L~vmK}dB&tXV~8QY;aqW~wcG3lpo|H$9_krz)~Vq7tRV;}UWj;Qv0+*Yf> z7zW^~wz_Io9W|i|zRxtOfJv3kx^i(l0{H6Vn;|QK=Cv!PZRNK!xiG7jF;q+dx?I$3 zQH2Z3dY4@mnXuXb@`Q3Kl0_M4yz@-P5Q1~499ln(3o8OtshE|)@|ZULSd_EqWPeJM zi4d3>Jh_)ba6}H|n&<&|az}M_*tlQ*z|Xwzr`|e>JiZ-;c$M-4t2F>KG%-4dnde#E z-2Kjvy#0M|dEeVV@WBtiTgU*MjH%CdxgXW+#<%_GC8e`2?XoCvvPl3oV|j4Zzv3M~ z_CQLH@A?N50BY}(lr*XBZNjlk$wr8b%G12^ z-AL>mfP>oCftiU3=h_Iupms8rKYncUXD3?#53M>7DeS?ms3I^e;`WILv!|S!pPN+x zE^fzdvSkwooM2PwSEuUo>&H5 z&Z(3syXdfvRp76w?@U!ddq_E9a)sog6Go!Tg()7k@vcw2mzM1)dRT=`GHmJ5iF*zh z3{1ORJkwj>_m)`|Z~ySSlj_+p0yycDDAbH$YStya)Q=ONf2u_u+xBNevi%!Aops5~ znB>vV{VD)le|=Ir?X#L4)_zfYH6yZFbZuV<$j!A z7ytdPyKw#W1RT}gG0j70oEtLhIw=cwLdqD|Khf{?T8|isf{LAl+~0) z$1DKN!W4}-!F`?Vjo4RWB!KBkr6NUf-#zzS`<&+h$SOwa*v+H&M5$=)$TZcSCS^P` zvPcJ*+1$Cx5fO&0UCvWif1AqWw{*lswM%7}il|-50fYg2{yMmrAuX(_2Eq?hRV5`oxp}7x#)2lJ@Y8C8k6q5 z9`evxmqZEh#Ik3=SylzH!W`k7j%I)Bn#Gfj>NfB=}#7H^EPaBF{u@UD3^0#-d~tcuL9UDv(oVBIoFT10m*=jWiu7u>b%7 M07*qoM6N<$f*X*1rvLx| literal 39271 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 diff --git a/tests/media/Burning's Video-terrainSceneNode-2.png b/tests/media/Burning's Video-terrainSceneNode-2.png index 63facea418382081704b0672fa0315937c6ea5f0..63a19a9101b9966e610a812d0e1c8032bd54d715 100644 GIT binary patch literal 35836 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͚b%XIC{fdUqyqe=zqa;QV~U;0nw4y+PlRtt0w>W1K0iQ^Ui8Iop#-F z+wVI!sB2$WzNtfC>T+J4me(@#PqD#N4a7vlx}K|>qJ^nhl5D2TuDGZ+RE?i~pd)}L zaI&mMQhF*!IcpLzlMPJ+pi_m?t1dVW1OutfeA<6|#ZBeC`tyHX2l~7G!V~JMQb8M2 zanD6DAsGbstk=9`IcuM-7xk-s9#+mcg~04wQp=(xkua*lTwTpo-jPmHVkaBtJVTGX z?3t@|Fw+F1P=?b9JSU!ExTabin*@RJnRED3-_h5O%iH%?pEtVa;a7SWVK4dSjU0_MPuO zcFRGGbzhFD4q?;6sHwbj#c=>4ICf2NbCus%*Gr9G$-S`+8V{iHl#T!G_3u6FRhI@P zBG;*T&x!5s)l~q&IWy{W_Kpmu3J}!nCEK2w#s2Y{e}C15C#aD#%SwILzrSMd5dB*| ze$!rm@`6*J<{hkJH>j!&gSzq#fFmx>@lh4L=hc{3`)+s4JI7t0)U(?#8~{ClVI4dZ z6IQ#fm?jUp@InAasx*6aDG;?FSLmsaJFJXg$|Lym-}=@`k3a0!#k`yE*qcpv&28%# z%Wt{x%#>xJ_QT4r#TT@8s2%OIQ13gcP5P#)YT_(bvgbeBIr;I9m7hGY`+;fef>U6= zuIkF?EZfH&fCt)?vMx3ik&&t}+Ld-!n^uyvNdcIu5yOfPhbkZH;D$|D9M(j3<;}Nl zx%=*?zv9x;=m&?GrT4iti6VK;m^~MKRy+4K&nM!6a|9B=JI_qxoB?Dr0YuF^F1iIX z_er~`C1syQnK=r&D81+RaNguncKAYcv zt|B7mXjuMNBPREp_kR3u{@|28Mq^B3eqh|)w`=;n4}J8v&)+uRR2v2})5$*bgP0^{ zQRWo0XID8_d2T{gL<}`3OjKja&Ut1gP@!n;p=%Y{q|6hK-MW>TN^q7yU-vlK+H1DvXWBDYQQT$bp3n(@SF`*=(1J>UwcQ+fTngvD18@zX%;mzHYE^| z0{{w4H@xkA$G_|k0TfF{R_b#CQB^qt?M}T#o2Cq)a@;r{v$QEs%leIJ_V0e@U>xIe z*A<)`6NbU>yV&d)w>U`!5cj_koYS_Ycnr%w{Bp;BfIfuiEPj_|TWvk;xwYJHK=Ps>;el z)JpsD?f-q?VH+38^2X5slC@d0T5tr07(j5rWf9Nxh7W%Bl^31RwuuPAyFG5b0+u`b zHGiaa01y+P>WJo>dbLfHX)>Z|FKgW=MwK5rFOnURXJ%*=@t42pRUKh9#U0}~&B{b` zH2_4>m~9gEtMB~R{m(knhzkw0O>)of7C=^6bDR**W-K5=?RlvQU7r9%5oS1MW-6E8 zmoA-Vxzbefkw6p*A$&3j001BWNklJYzwfA;Z~Un8m2*BZfB}2JddYp#Bx(gU ztJa%#A^=uXjF3*V60&G<)mBUkRb7(fmUJmp8Dd;2ImOJcNroA|B@0X~nL<>us9G|c zfs332sG15!b^VxUUbKVV9+rw43Zk;| zG^(A0iYS3=A4<}G64Uau|EC+iP((2pk&&DELDs@yX1X?8C8F6aLgbjpAf{w9k;J=V zK+)y4U6@v3G+G$cO9R);vc!PG2w9B?8-`Ww-J9R~x?d3WS;u_>Kr^f@F(EiU>flGX zLal;j)o=XQj~=t-z?lisV8C~7UH8-{;J?

MuY0gpGrS2%;Js01TKXN!8dh1$K@R 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 H55xZ-O|dVi diff --git a/tests/media/Burning's Video-testTerrainMesh.png b/tests/media/Burning's Video-testTerrainMesh.png index 98a7c0d23483c610e1c5f94362d9c4b6b0fceea8..9b798704ec22b43dcf8fb96f4632cc8f36b89f86 100644 GIT binary patch literal 31341 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 Hu0mjfuK3qM literal 33283 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 diff --git a/tests/media/Burning's Video-textureMatrix.png b/tests/media/Burning's Video-textureMatrix.png index 26afc9e7eaee8ef1c5f81ca801acaee4151cc9b8..462d769386fd710a4722cf66ba5880fb891aafe2 100644 GIT binary patch literal 13577 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 S*PZ_21bCpShbV(Tj{G0aLXhPE literal 15212 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 LR*)(|8~XkqbYW1& literal 15190 zcmb7rjZ#x_W0RS3+g0!TD zSJpwR_9**o`gXm`X7*%ex3>xbXoI#?Uak6{+Rml%0VXCI71zpX_9|;2V0l5H?JOGw zjbM`hi_aIICcV8>-A`(NHok&{T7?dDn%Bx+`sa-r+XbyX;ZF4)M{buI*us2p9?PFD z12LDkGO22J-k#V$J`LB0w6ET1od|%IaULVK^*WbN{8+E4ppF=U-ALGqqgUI@d;HP= z|A!*kPUdfX>D9i{4UafFc;5R=mbzyghMw-WlE)Vh=s;{^XvuUr?vZHA33}v?QTaAA znWKb82b(XlH_*ZR!hI@+LneQSFoH{h+?mk;$qnj4x?t_Put$m&j42X%uo;5 zOJZ}Wl8cSgN!c2XFeW7eY~G^O@D7fz!hB$Edfrcy)n$8!shXI*x9zvlf!=rH*>EHA zxTM0#!z{su)*wf<}o9+rCkDfivBvkm^)=t z@sq!8ePsJoq(woKCRAN^rVzs>!GX*epV`a~tud3Q>7$I##x*>xjcIr_e8_LyG-|p$=*HTp#jB;Q9 z^axL6*h11lduDV15(U#oZhPTmjbxD23z5bBA#y2cm9xL7<%uBnZ_~s0LAj;1YB*;9 z>}yAk53-tl6ih{xi>EBK%D<3S_46r~<_}szcrvJ%naw1LB!Gw+Nztmth&h*8A(I)=%ZQ@YiNqhk*X{=?VE>vqsKKj;i>+_pvJ!iG1<*tCKk5- z!f!qEJ=D#s%b+a*t4!+fS-9O1Q^O$-fBGjT6RYjSlo^}PjsmnH`6Qu+DuI;?#Yu%< z)oy!J_LJ<$M!&4@I{ER~xi|kXEpTUKfguq5rC!aG`VJLH^@D6`LL=(Ytq)pA8mayw z6AFmz!jRG^6nfO|cNp#v=zHhoH3Q=_0{Ilb!$=-u3jeMU*9XY6~7z0dI@QLzkKy$U>k5oV?NQs3FQ!^IH*Qy6kd9WDw#)HR2Ft(hV@ z0RNzx)>ej+ni+fpg-=kLu^Ojn3|grpZ4IxFZdez#M;8N}w5<@eEg3OR=N_m>CKk9|1-sUtj}cUU-&mzxE2 z^mY-#Lx+{|*{lz)!?^)hE2q>KI+|LlO>!eB&)E*dQtnB1D6)`BCH zpswg8dMm{t{kIWz*k;Q=aWOEo#>ZJS{m=IZLs3#K8gy)FAdjAwapLyeN7@ycy!|FI z*Mv}w6(We5NRX{bY1mJwX{x5eJ%`ZgA}&*5VfM*?a-(R4+=iYHgfasstFu3{ZxHc3&guH zlaI9%lB70P(u{-Nd*F|Lkvt_-h)PF;rUvh}!>}@qn5xjZopMV;bV>0RA1Uh_?YH-9 z#x6KR6B10pm0mK~&aaI=zDP-9IH{1c-pN|{+va|8%lY)E9p4_Xqx#-PU<-o!-C%j1 zvZ4}fJ#tClrp_R{q1XUzp4y+?kG-& zCIXwPz3{G-Eh)~>stTT$o2qK~ovKcWE}3d!ovN;gO&9A^z;ffo6Ao05@lO28D@TF$ zjV~yMC-=|gR`}KO{ZXbZ`FAaE%|E1sD61jb6kFbpPUi4lCIt_i+VHHC0i(eCa;)5UdCXA^f{BM!&VAER%#|uJb!=oe7oT&3$ ziXmQ+`nn=Ki5Q=tHi{!gh3d9i5@O3Sh_cMPn7xac^%^yy%=hckT3O}eMHfZlj|JlQ zCzJ6Jk(QcT60ySNt+oOj65zGf>+{V3wd7>`vcDPQ`~=)G)%^YaLy7*#TwF|+tdBRaC>mFc&r@{wrSoPWCnUpW zLW*E1T^s183S(OnlqgQg@31qZ9|1JDOIZ2Uj{VKooZ=rX-)*>cd=3Q5>sawL@q?C7Q<~SRvxZ4&`36s zthsXy;^eOzX@9!(Z1?gi;rSY;-%jnWdwA*w%8Dln;mEUQOeP|eKqn3Z>gICm8$hsW zg+OAjzW#$@5Mw6079q4KZ}Cjl*EEu#-UN7BJ00GK ze;d-OsUdS0xV4o4bDk-ysI-i=`#pB8)@VoGVae(NiTH_l4lq{dZ+%K8v*UUL=t#0*#wY&BI;;{ag31jE^I?K&?ny@j^DLC<|*h^lhald|azp~00=?=O@9TH_9~^@X8d?6hV&IzpEpcg7bD>+fd5%O%QqKQ)p{QoI}R z17$lyunP*fOk>`>GkYFy2zN1zMJAjDgVtyN>|!%l@)s+Mb7jp0fo?aQSjyz&z{$F= z(VOGL(q!@!x@1`srb3(y$<|pH(DBBJ)0mYf*26V?HUGbAnYKcX2d2DMtG7-egFt?# zue|*I*Y*|>uwWamCYq6zO(JeJvln9uW0Ux`bv?;jSx5>70Es0fbRo&r>eUs}%*krd z^*WJk@rTa4B4XbGhOgUxB-{NI=(QSS;E?Z1R;8M>tPH#zBfsoUg>pNO0{A+gr8YS;Hw*alLr%Jtc->Cq&0}x z2lUE@Hk#M0ZC^IHx^9ip8A5bhJi!A8ZB-JaYHMj5j>tv&HrJdcvohz&gwX(r&?TtY z5t@_|Kw9(}Qvkk{DigVxysD%3uc_TwIjN0?8Rxfej~J0Rt0xrnKx(%F*Y$rlNb#rp zZUrbW)}ky0acCYQ5(}&5RL8YvyK#&K=!cWL&C@}S>HYnAI`FV=*gh)?#u56dsDo{x zWQoQVg=gtG-xt^t1G_$_Af)pFTy};tEeu5D1?UOnQqVoWrXZ!ku`WjTyC2?j=FkJ~$3n@D-@N8mIQ+L~pezhDmYH4}c%s!pN2EHoRvEIc(*~Ci?q6x#xjnXko zKnYW0Eabz~HKq+qsBoy@?&BufkiiDZQs~)ohmF1!cLvScB$0=keNsUFbBbTbjlB@4 zcdX05lzaQIB`B8AF?Fw78F zGD7Rs`gFnMq7?l{2x$=;Gc5%jm>T~jx+-=sv%6@T+SXkgzbvaJ1#LRUEOlBS2*vmdkH-Y&W#8;M>3D*5a-G>37092?V6=JwhXW0IG%}BKp z-xX1>@`@52Kx)dfRE{`o$jtzGaSI7|?KS>`S2_f~yPj^iCV1x+}Z!n(AG=$m$z)o0BG zau2`JO&Mi2bEswP*U63H`el~Mb1xn?)}^1bFhmZh;bE(2pY}9;U!KsUi-tc+h)hD7 z31y7JJ}iWSR*@X|yojSK(5k7EzZAGEHL;9|Zvdzzpu z9$XYU#7`7rO?B)M7(&(>k0wupSrePqazaEOIw`|vBDF8Ch@&)^cq%)0 zWPR;jz0H0MKlMEw26l2_&fukDBDnIyxWc?3aW$wEs)VSVClmR}eDP`1+x6|d>ZMs| z7Sz2=^mMH5YAN6bJ=VVfb_OmjYwA(6QRI(x)!EW8F2xs-G`KWj)~RYAX+ly`M{`<0 z=`q~&W!1xmHI0qufe*t*BMDY;j)%Es@wPF2>Y=@rb9rVph|sK`{z#G^%jN${-tt__ zssZ7)wTqXVo3vSM#WIfQat)Dw1>>UL<7@O5>Iwg*L?KwwV8u zrn`dzn5RW4k?<#JX@bUvzZw+X)lbP<#DE@QBC3$sr}Fl_LRUEs@qv!7vo~zX?%@nc zXo(bbySM5VQY=RJeAsNHtJAWr%@>B_w(JsGucHotT z`6Q|3&m1$%%ap7p8j{6sj@-_C(L8e~*t}UfysNL-j_0<}dq9Xk4ZOuQemc_* ze9&&c5lTs=hs6|=M1dnr&POf;$ewqtQVL<{vKMs0rY;vl{hLQgO=C?D;>Sqw=X8km zo?t^mb?da=!^Y0)(vd^Pwv1Zcp8Kq4SmIcSIq!E1_s!l|*UZcm^#ZTdkCu_$lhLyr z0#%+|pv^MMBkI%|Qb3H~Xk=YQ;S{Bm{%K1^AsW%e&R&XrJF#SBzxq_DZg=#%_uX{R z(IkeE7kj=_uG(p{{IgnwmzVD*x!r*H{+%~_gSv}^d8l$pr>nc)vngRxz+uczM6UXFKuITW%MS;LlnqS?-+h1TS~Og2-P%xcQ@d_%s zCh=Vv$gWxhz&vR4F~D|qM!rT!d?^|nRAedTvq)Bzr;$ddyS}^qfe!F$ZT1Ddc5rZz zR%TC$8$^4+?=Q3<-Kr*W#4h>Df_y`r7(~S`q5S73u%X(pXeE-+9K>*Y!ARNY>u4yftrQzIF zGi7B@zw8RK)vzZ0k}MfU{4SZ!42IxSO-ccFNob_>003OCVjmZmALP=S2*6Rqd*j2| z_O-4@c2~x3pyWmXg<-3+jJhgLT&(>yUp&$9p_?#vL5JDV{NA8q^Jjqn_U^;DTi5Ms z5ljh^*xM{;n(F(9mH;ttljpe9Qi|gBcw6+F$Tx1L$q;_QU)KcFg1w~1izhUs=J>D0 z){J$7b&E#r9a@DNF8!W18*j@_SLW<^g+&t}IKi>=_HeQr5-J$!RQj5?rWRP@TP!~? z2&C{mn1~)fh6UW&F+YgnkhaqiTZOg|t19&{*PKOV1 z+gqQeK}wSh)|Yw&?m^r&JYxQ$(rswWr*xjMcHV8jr#aRk#EWSh#^3~7TU({jq5<>U zy=m4^+T!0b=HAwudz-eBqCW1`fx^_qpsPJvL4#*@f%CXaxb)N)FZR=2FQ_xn^Z4x^ zEMn!K3sJ)n)jqk6w(Znd9o1z%Ss~Ea!|T_Rz^EAX?Qf`dIeMf78X&i>9{`l>DIc`z zWh&~YC6G=~XJJv>BBRI+U-M4y>&czP^=a$Y5wNN6UOPP+YR2Lu22%}{L;I93mER$` zgD@NaN<`=GPWea{JX6#6C6*M#D|8%6d)|)vjb!1Sk#GGqG&OY`_4OC#-&7D#Qimyg zEhiLv8kQy{)A@Ps5hxni^o$)BIl=(6KT>+Mua0TLQn*_K;BTb+gGhA)TDE;1Hg55f zV7JDInh6`;YBtMYz0Fs@`zfNB+%x!K_?W*Gtk}QlkJbY*+j0tby?DR;==j1wbM~^S z&F^RiVJr8(Z}iegJm=GAs4u$Au9RuBx$?xle4_ft`GM)jh zwa;aT^#0aZfShrPVmyII;^${ce~_pdS*7Q!ru^u;g047i?Nsr=ixuPJ74fI>w+3RK zCdY1$=p)R^{ODQ zAh*?Nodp1(thw9MoGf>&bR?}CEFVN|o;T7pGJL5i!}js)29@@i;8}yp_-xzANn$b) zziMp^$!2znI(hK**<}i5M<(2kPkvHe)YW^~D4%z;9y`diZVy;@pEh4aB%iHLMiwO1 zNV`}g_8W$VFKx;*Eg%q5aKCc7t39%-X&FQTz29$t+Gk)`yugqDWiBYTDEe1?ER4I) z9fqc_Xg*-UjLqnXwe3CM+hRrxmPDSVB=_kR*uzNtjWn(?r20oV>c&d^~DbLe%EKKX`@HMMD9UGamDLwlPSE45bFwz-zLhW*9ayGxAKbqZHx|p zcV&jUw))Io_yKGA)mf#!>XA+_9gQ1N zKZuq$I@%k|#iT|nj+$2shzKdj_R6C>OLvP0tlwp}7Cp@EZgU=?eDfc*4MRA;X%`cw zh?64%d>$}2lnCQ8`Qs_0wxxhcOPcuNV1uq#A6+Tiqj@%N&q&deNnjM|S+@GXd4t%(;rQqqsL>$FFj(FBpE;=3|I^A@O2vsg$3nXT! zoc*980H~7LAyS{#vUC1?I|zIreA;gLhz}s6m$lxx$s&(CW+~;8&2mMYTze0=*CTA+_9lYX1-o)mjePXNjs=M-Wyt}{gX#QOI3fxclaHzCh zJbk~qF85OFhbbO0eLxtudwLb7P7wEZ@XH&wUkz!aWXysmXkiI;soMYW!SC^CXdz-> zfP5`M^qJ*~QW7+Y&ZgU0C^dES;-W%Jv4joDGhJT_cGZq8k6V_VLIdyS;PJ?>gxtS> zvlwWBos^kNn+;25hiWR$P-z){15G}12hX!GhZE^LM#Z|FvK1npVGeSnQQB#s&cBq7ik#ajtv+#S<0Z zf^V*$vFY7=Qq;DLJ&z|Y8)4Ik!x5Ja%;0VMkBS8uCcmocpraG9oyNkH)bGsX<#+CW zhp^g;@O7xO_7ztQzGkLp3C8CFQ<^2KS!j~UbPgqwTQCcDsM=V>1dsVhHn{GFaItJM z7W3lRhE=VeI&-Tu{NzGMPXZ}eFcKGCe7WnI5kfujgPL0hcsTJ2i+%c{0E&)gi<}p% z+`kJ>9AtXo6WpDpOByaogJ5Xxd{&aqg(%E^+VMwELU7j3G(^$ftg9Pisa(Aa@83Uc znwZxi!VD%48~oXQW5x3(wHFT)g`4Xv6vAUGu#nd)(%>-b356b%C4H~zRktHHCFrEE zHKPG!xhfI;?ni>4X-JT`SIgbnquHz{H$7&af|v(g4#iKrsQiqz>3b*h6k39P2X+I| zz}*q;dLuDkhi5%Po&%8p=+Z5(s-0?o+@iuN>4RTh)~W-8+<0dtU=?tPIn9m#qTN_8 zuSoW~cBEgHI(quHN9vv9a?{18wh`EzVLNGk0$ab&wKSSo6-sLnvM9_jjS^FMW8H7>wUEo_`L31W{KWmGRT&O(OxBudg6S=L*E5}!#OE;d zO=fJ*b~lj<t){iVF=RBl7BA7`XwRfbZeuIPOwBwm+ zFQ%Z9)1Io?gDMaeGGc5Da55;Fb3n0z@tIJ7*OFyQCt0Y5zt#R~8BEgOoZifiM*I{L zp?*3id^BFaZ{!qzS{r}Bs%By!2h#rmb^s~NQnVB)Y5OcoKtq%Hs`@{zG5NUWF{g&M ztSL*jD-Ehg$+dn*SFH3m83;7_JeqExSN%z1$i|Bt%6<$)jy_?8G2n%OI2*`tf+VM0 z{2UWMJq|BF+?fd3R~M@nFIn^LA+{sou4Q>FYXkRtdID|t_d~;*)9~X(mG$3nxr;BZ zzuFj>qt*)tS@!6n^1^50!8qTgYs1GLLrZkfEbPNg%>2J{frMVcvzKp2^c>&5rWW%* z)qf|%Ey29*MNn9{^z2N#OP{#$#&(UJT0<>3udeR)%R#K)*dj3^fmOitK?=?AAjas> zmVTT7r+Z?pFP5&hZXTCAouTn!_fDW}w>wb|jK165p=~4a0E+hmJws_&yi?3@mm_q; zKQ+1~uMkwfJrze9Nw2sLy8r+x;{UP$U{-)J|2HF$A6bs_*EjMp^Py*Pc{G0drGgT}7-93fW&$YSlM&LriH`*WLpN2{N{0@9Mw}Wfg#j!+Zv7L~@oS)AzFV9PpduO5R(j&Diqg zhM{ob?Z>x!1-YWo=(IU6*+#T&8>fw2SvDJq(*jJ=)Rz69O2nDn+`T+NukZ~N{kv$) zqKMJ(c`sK^S-FSH6vvo;V*+eVB$n?-nn$k;`#hE-d2%@^7r^uVX=L$coY40rpNC%R{AK9wc{69yFQLReILUSv>YY`K+3HXb;O67v=0%xgUCQX3O{MMl zcpiJqZxdVNb!&AcgThxVtqEq8F^E)SDSHi&0MCByy7AI=u0#}b_1MU{$Rfb;kRIcHF2Ongq;82}%TV-8GyPyRPw zPdwDf|01O?%ZsFZ9M6qT_o`|N2rl~LQXhDN3W5^VE5K0>CArtm4R$iz00 zspE7Ox%s8tKnJ{uOSE3$sirbu>cnsZ#&j2#bu{rH=sz(lUd1VodSy(vPJWs(nK+JLS5b6_hG}hgqB$FOT()>r73WC%13X*)W3{} zDV=QT)NiTv|1~yT-A}i29gS ziSmv>eg@U~KCFDU@|mjoyW8^-Td0xFu|c(`Pd7Av;OGt|wIq^QnWem=xKooy{Srn3 zQ7dGYZXiLG0J3R-wZOfTkaRK&^^<%a$dUtZ(~#1*i%Mk0A09h3Q9L2|8<3CJi3?ob zwX?izrH75!+C&Kjz*g%f73k%cRb2Yh96k=AVmr3WDNpvhzE^lxwjSE;Msjr<8USw> z)4>d;N(=o#zoN%yNC;`oPWA)z!o6BXNMs(ai?xrg$vBv(wp_A92u|fdf>1L|CXky#Y(pgzpT%7eN#qCqs9vzEg62(NC z(I7}7)TCe4;A!citA(Kq79&kl%M{i7oYCqh4~2u3m_ALOyIt|-j93iBP5{jge*IFL zRISIfAF#+Of(1m%*ECjFxjuG9Z*z)Wmjt>1-I=@jn%vJu{elY` z=GD9EM14j1U+F1HHF=6kpRvDTkFu86s!SzDFHnYQz& zG-^xi8%V+;>?@!xuNvBo|1bFwV&wR*TWm62K5j&jeU{UH*$255>#7~_u)i#U2XFUA zZZ7S&E-nr@WyO4{u82{OQ3vL6%j%(FA6zadQI(Ioj9MLXVWOP;*jK;Yn?n|Kzc60C zH}5JRzeUJOF$oEa)T9i`ou1p#DVh}4kxr*JOVT^N%8uX8uaNG9 zjZx&^B06)$`?su9H-pJf^#74RNC<)mm*i>m%|a^aW5RMpe@3u*m`qws}k97pg$DF z$S|AVU{Zo}!z<37oucr+?xNAgS?_9iJ(xp?q`>zyE!F;~!&I|`Dskd>=eW|=mi`JM zEXtn?KEcL=hyWq~e0DJ3NUAD-V1HRHAvLw*!7spHl4Pw$if&qtuYpMyrr$?oPc$t- z0boWYl|at}U{Wd(RReTzW2VSZqY`B0T{^D_GWA%8r#tPS9!-mx+LeK)oqbrozPq5C zrJQ@F#&)j%G?IsMM+3dq9lX8v$CI>EXOIY$q;*g@nVAADqJs&a7z~ubC!}Gsu&AJ= zXo{8f4;!jmb%g@qwRV00Mw zn2vqz@lAx%t~JBv`Sk`@*~5*|eNB8Ia&>p$*XwtHDYE}oyA1OOh~NFLL6336zc!}_ z#Yt?szN^>TEbQSc7NsyzkkA`tm2&H)tAg7R{>o+((XOzlvL@t-GAO7nDS4DCb@UaGz_6N1D5CN7^5`CCuQuTkV2yg@ok2$k8hlB z{IL?XawC*@&e=rk?_Bqkw=;iA-zxpV(3A{;eySGyFs)BU`eIG>qe547?i&~!cE6H+ z-1_wJ7LW!lO7apG5fz5U^`;Q@>MFicEta3)!Yh?|-;AYy@}(fSP_frpXqfVkcze@L z&i%=QZprDM)75J9d&v)F)B6?!;mIu<{iqS8_y#Mgj0kzx{-S565=d*@_5wjA3@;?= z2Uy{8VSd0Nc6p6O8-}Oa!jnQ`ou{Pi-v`Gy^*iFaT=G4Jq!khNJQv97kcZ;FJ+Z8> zEVDRT-}_p|l2lotBQ+ruG=nUo)#G*_aWIs6Y7#M(rz*)?*oG1Xl|3!S>;(u6k107q zbTvpZ@_23dp3@ob53!t%f#Z9%?VkI-%gr~%L}xccX*r7z=e@AZxBeID#Hq9sj-JYq z-5RVPxe9}H!)V-yKVS%S(d4nvvZ1Thhl5I5=Nzp+GeCqtm6dgcDX5+1hXHhe0RlYu zx~lBfnTIkc~p2la0Z8dUmxQllEGFiO_An+d42sF&Owt9VX|;M zg8{D{0}YhNWGZrR(WIRvqQQU#I8v18?&2{vh)(0(o*_#>Sae8>eCNX^AFjP0zrilz zp<@W?=NOpg8prIaON{TAf~%bY;w)U9GWkKWH3m{*pVeg4e}UK=zVVBDB}4H!E&O5( zRTbD)U3cGmThx5@wuSO-%fDrO+wblP>mu38eVzt*DAi;vn^U%M6+*;>UzTRchaz6* zS01rFKr2n_;aHp>gj`*~W&%VnYN z?l(bl#+>*s5_(qb<=&x(u_NlsD5_4oh)mldR@>}=@;N-)B`;xL_m=kN`nOXyPmAJr z@TcLY^WFc@z{wZeF-Nz(A!?@cnLQzkgVoMe?fBzm|5HJ4cee13WSS7#9v=3JnJIUs zy!?%DCKN8xu9OSD5@H(iS3ng@`u21GL7!Lx2`=hSMy+0y{I+6WGh!o-ugN_*o$a^dMj4HPc}QQ-K60U++ux5BUOP%Nzo9^BByHt+H%_*6PuVQ(OOEZ4~fWw00- zs@}xfPMvAGNZr4i<$G_NHYX{!S=yp5GsA?F~XpFRMTY z>Kgy58q--<{Q@ws!OZ?51mzQsJvz&sK2-gv93Nk@UIhlwn<5o8LcHF%L*UDuF<)e~ ziW|w)6)kezf!3TC!I$_*T(kG zo-?FV?!6q$;jU{$`PZRggVSlZig?zWoL9i11d~cYClN_GJ}=peFh29(V`;Isp8(JH zhnf4Y^VP_=aeeer3Ck5!=(%!UsanWnVTSZkuATr=9K%hdG;1sqM@rme;ljRnz-h~p zjX{G8H>V=59ea%M1!hm-(KNHPQfTLc+*JVbz@wCvktP)V)hfoL54^svjf{V9)CeRF zqCi1MXao%+#u&w(&&Gk|Q|zUjALQmls4HsgL`gnI7t zCorBrNJ`iiLppX*G30gd#sAXh@5B{m(q?QV&v)Oy9rYHY{G=OD+tS7ZwphT{zGGE6 z7Wcc|VeXX1-JQ8#njbXw9@}?67HcYL1oWDwanG__y4u4KWb|RcaUg0KI{a5%nYwJ* zjhif!1p%%|tZuWW)RFn|-&4^kLfW1bqUZ6Q_FL8V#vC1$9X%Z#*G;q^dtALFRO=mp5gMR|X9Z*b6f zY(Yd6XaC~odPDN?;Jq6U7!M12>@XLt8xC+Qv*;NqJQLz{G4vGQ+0g2S>8r=jHGnh1v>Gl!CeIz@p! z{Ip+pMuDQ4&DKykSTQM2`a3NqPT*HL;%-JxRzv5JqVI36TS@N+mIJsb<6l_-LY7hv z1!hL-g@*$Lg>`gyODvH|+H$h{KIPxvm7%JdZ*)r{`8m+yAr$Nt3I11X1x1-rE$C(=r!C>jFnBk+OqvD=)` zXDJdi`poGYub<`{>o@rwJ_M}`a$bJ?Myilm$1o(!@a<66IxGEMx`K%R>QYf!x;0;vyg?zAd3dT^Si6RQiJJ$P?vAj5)e>)_w zTt)eC>(Nv}%lYAC`Xpj1_oJ)4g0sunVvV?A9OhU@P0sS7a&NMFj8jH&+p+lH50`gSHWCeVNUn>T zp0{%htP>Dyr`XF|CFQ5CWckQk2h8{4eGUCcX3hL#_(u;7S1GG9mUiea#S0f#S2U(q zqXnQL&-rF|c7INEz`0NBWp6KUhE}*0CQ48gw+&5JkwVR+L&NIk%I$P?TI5PW%iIbA z%ngyi0EAGHy&ZkeY1G~dY6h0ZqD63F0&2UQ0s{l}*_K*w;z<(!R`6!f;ZaoSzt0|7 z+dX)^3>}zeGAPVe-cC#7TyA==kXmHHtzybv6v|Bd+ZNq~-Ybx2>a|`l8nCiZTEZ6C zXlp4WmN}aKg#b}jp&Mg{w<=L!dNqmkEGf8YSj5YYcyjW^jkh_P zC=4@*3(wwxKE|eqvdzfc+f8()==|6|WNsp&<c7VmU$R>UY%Cu{ ze@P6nqB$ci`oA^h$@ekIh>BciJ^ZlRo@~db^H19W@Q&iiqkuZZ?3M0=p*S8@Y;1zF zgRio|EM|z{Xc!xUn`o8c6Mjg{hXoIN2csP5)w!JaJJunkpkQ0Qkk82)2@>0n#hb!) zJ@HqBt;1ScWK+HJJL)gWV#um1G&Pgswqx@%BNqtQn<3w~5I+OOujPRphzX!c5k6o< zwm-A-h2XzB8_kkQ`Li|RB3Z2)kOye?)ZaXag~3%c&%NVtkmB3F)R{M*u73@{i} zoPIf0cl=FPQB4@C^s2jqw5B21;ws=dEe!b8aAD$RFCfK_l<2|hNlB>8Hz5K?rdi({ zCc#G{w3Gb!*-2!hLSdI9Uo6f|xhG{XxR}no&L7d#hyD%dZjtyajV`omt@x^!v%JvL zTL6=aKi*G@2YPe2Q3v|F-T!nRElS1AmDbEEO10O64%t1^<=LwTnhM*Z+R9oU_lG;P z;2$Ki>EpW0j24=>r9+B^H>Pz=LuaQWBTj-pdYu2-(a5G-@GVe95q&4GX0ymB)rDk9 zhLA`9t)qU<1dsKiCtI+{i2uDmIuY#PsL%Su+CW}+mwi+&;J5{`A-)_q3P|kH9%ssY z&jQ=3Pg=bzKj2u6aUYvV-Lb%I3u>QM6<=CdhZb1QZQk5D^YZa;4zCOql*IcyM7%{e z;cAOEgtpuAW)!2+ad_N`*o*%$7b0gSG#GLPEy!T9K$wec3jpZFT4h?gw#In8K_+bO z{wL=z2O zR@vjx$k9Ve$(SOxd>M2h<~_P^??xX_4i@Jeb(vG5$8U`NL`j?tv9V)NfEQy+)e$XI z*%c3RlC1K`T7FCfYBA$PFDZ{5GO6<}u-%&-Nn&yk*0w$8-|l*{>kxY9PRkvdo$H_d zafCw!7?Cv4z~NFv8U&!JNX`dx_wF^#5YgZbDIUB58AdU@#E|&OgaO_$_8jf4U2axk z^AO0Pw`XBaQLkK2sjj8&v*J@ea*(T!W>by<6t#TuG&&Bb8n+r=TfGv0bZVp!@MRBC zJC+pC{b(se$K!Gf*VZu$;gSY^i1sBQ)aTNlPe^MdZ@ml*N_{}FebU?SV0EDO>Vcub y8{Ai3))Ta>%>--z6F&K-hh^ye|9bNYb-MXG^+IfP##&bS2n0EaktG3V`^jfJ-jMA|gt z)e2T-mfSngYU?;>cLj_1In~zHOMJ^Vl%L3CUcaDgsoR8Lg@cOx2b4WdP5blu_c>Nh zTf2roKODS_w*IL2yq7ul9G@*iMXZ1hU(->?4Hg_?><1qyM98poHzyPl7OXLNy?wsE zTFTF#ufN-|G5|;q+k;vie5588} z-e0G=KyPAh*ZDgsS0~M|(Nt^h?74iPQ{>~JKP`vfKJPx8Ho1OM=Ue>Df7r0cNJ&Hg5Tw>1%Gbr&JbwM#ul(Q&o9<4aQO4Q z?c0YJTrv|5K5u(ww~L8=$x~}ZSU3Sq6Vun%fBEb4=i-n1wH|VC{=f9iqoej_bdGa7Y^v?I%``=$W^_Dp+^1I!iR2W?HN^Nb<;~WE>{_o}w=gc_6aq#rh zP49nK9JzeT&-)H%_l#)*$!46Z6A#XJI*|CqH*C&!>+Kr?id1?k4&4t4oqocvTc_4k z?|G%q#o0NrMSOuriXYT|ux|T)upyxoC0TrE*>7R7TMZhPLlP_^Gs*UurwSNsgarD;hHcH3@b&bu$^ zc6!~@*crBKd-vS9BqtfYi_Ps%&!n3hlh#-I+)A2Ma+5PfN!E?^_w3n)+uqNzy!xzP zOK9@)*yp;66~9F0&e#0DJNC!v^20YbZt%=CJs-erz^uJbggqzemjBPPGj}e?qd zpVm}zrn2_B*1h*76EaktG3V_Z+oIbB0Bemx8Hv|>gDC-%~^baTUBwx@8yxA?S~WhotyCUp$ycX$@7|X zx7~i5x80a0E`HwAcW>_|@BJKb{d!exrC!){vrR7@-!3wWc<{C?dW+=p-tHw*%P*Ah zdrS%560*hZu8h$(pr*s?xV}3WX%zcC3EvkpS9{gYn8g(#XAj0*U$AcO{K-Ea@-8)x#e0cinzjgBQCr_=N!{2`R>eZ`%pU;=S z?rPL}OT<>yc(U*zZdp*kUFz2P=g#8n^x)Tju9KfGuFha$dyYLg&wPHtWvTeB*xA@- zmy@5z$DIpT_OF{D9Q1j<0Fn;B%is6jsjsf~z8C5#*0F!-)oqC^&67ndKF{ksTfy&X ze|fHO^O^&>x3}eLn-^Wte)2cqVzQBrt9NcniuT#Aw2gaXTc01vVB^?xGw0SeUS&Py z=(Zh+Vgai6+(JL@t~>0fsN#PAyZGPgu2QFaWoZe4lNMimUU)9n%s2R@hwD_~q|*wM z@3+0Z(a%-&^lWEwhht8%_KEukwcGYLpIov1%>>tlMH^1t5UKcjqu3zW1d(R^e>5Lf z|8wwS_$CgCIn7uTRdHpWxYeuoj?va}k#Q%P+BKzQ?rmar(i1jzZ9eQOX3>*Su;T<+ zc-vZqC)4Ssa~G$Y-bOE>YuVU{S^QukK*#^;18x zmNhc!Cn{zyDNudA^0kwXeP@cC_^(Mf+@?yfC5Gp%;5#vCiQ}E^7c$=5f8lm^;Zffe z%4fgYLB#^uCX^MUFG{eRKa4p?{U?8H~cP! zqra;{V2tZ;EB^@9fwv ztsC>A!`NSAy?tmeM;Px)k5ymn#WzO1GI(q$;hw0_BdtzapeiaFzL-zSfZ>}KYiKX|WVYU2IxhxI~N1xI{S*ly-IZN=f$Iabrx zvpqez<8F%U%(`O3tmQ9~gxNk`nQdI`9H085cmJ$w$9}kqF*ac2@q3fER=xSptoh;9 m#`P(I53U~OU_0LTV83ihPVKz;p}fGthr!d;&t;ucLK6UoktrAe diff --git a/tests/media/Burning's Video-transparentAddColor.png b/tests/media/Burning's Video-transparentAddColor.png index 59374484678b8272e48f30ec3aa22b3dc0a86455..e05a00af36df55665e0563a7c03e43d7d154518c 100644 GIT binary patch literal 23545 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 Ef+IQ&CIA2c literal 29747 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

2PBomS4yXRk2wDQYRYPV$gS1RI` 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 diff --git a/tests/media/Burning's Video-transparentAlphaChannel.png b/tests/media/Burning's Video-transparentAlphaChannel.png index 358455d3ab1601dd186cf294124c95550f9049f8..4d40afbd913337f4253ba7e7764840f331b8d416 100644 GIT binary patch literal 24002 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

+VHlxD!$=M>zvo=kkuDB5jgowf(pW$`G;2 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 literal 29346 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 diff --git a/tests/media/Burning's Video-transparentAlphaChannelRef.png b/tests/media/Burning's Video-transparentAlphaChannelRef.png index 21844ab283d398b90eb314cefc654200b70627e9..ff9d411693d48d44627b05ea8974ee1275c4b22e 100644 GIT binary patch literal 24373 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 z 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

qd{wP}f1wQ8nckk~_Mc`~sjQQJpTCV@t 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 LNkvXXu0mjf9G}FC diff --git a/tests/media/Burning's Video-transparentReflection2Layer.png b/tests/media/Burning's Video-transparentReflection2Layer.png index 926d189a5a47a5b7cb391728847951c645524018..5039269d2d56deae259191ac14ea4c135e2ac8fb 100644 GIT binary patch literal 28054 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 literal 32288 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 diff --git a/tests/media/Burning's Video-transparentVertexAlpha.png b/tests/media/Burning's Video-transparentVertexAlpha.png index aef6dbd7b868d6a313350888ec3965166138986d..f0565b2a3781dc47bc8b70817046a3c75529d96e 100644 GIT binary patch literal 23800 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 XJpcriq|o<{0sw}(Ch$sayQu#G==3fi diff --git a/tests/media/Burning's Video-transparentVertexAlphaChannelMore.png b/tests/media/Burning's Video-transparentVertexAlphaChannelMore.png index 666b8145b18fbec4be1ca452d4a7cb2daa227d74..066bcb7aa9d606c13ce6e114f0da8a6463ebe65a 100644 GIT binary patch literal 4924 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 a(S3Fc-<}Daiapzk0S3B8@X9-mG5-U78&*{S literal 4719 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 literal 8955 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 diff --git a/tests/media/Burning's Video-writeImageToFile.png b/tests/media/Burning's Video-writeImageToFile.png index acded3e44801886c041f0de8c820a968de302124..4318df1f92e3257c953893ecdaa223d70f83330a 100644 GIT binary patch literal 24188 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³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 A#{d8T literal 27966 zcmXt_L)=o+JQa)bFPcm1Gd#s5UpS^h_FTDp zgyXVHg7RE7cAefeW5;bDD`E9Nj{T@|D?2RYCBkQW^?RGJdF*ReR#vwLjjv#_Vp^s~v4lGx>a zU0XbUt(@G(yZ&ln`P2;X}XV<=PyrhzYJ$>ERgoM zdmJAWNWLs=x_leF^U}Eo_Y61wdpJ~)zC3WYeL>0-usYSX!3thy*~`yzZz?UD2#(Z7 zZz_BZTQ}YOY=3@}&Nhu)?eFVb`1cPof16S)JUqED*VnUKSQ2+sJQvb?s^@N4ky#e6 zA|xnz*&u$&W3nxR+c$gJ{@D3cqewK3HKuJU{2?&XoFq42!uA*0=1CE>YSBM2Pl1p8 zOA`AnXD7U(%dK>36ApnNNa~=q{qi;#MGS+G;vC4R9U3WR_Ng_aVVyy_!H?wE+CRT* zbGCE!&F0!e#>UWpPgl71H!pOq6(YaV;o5R+D@I028dWJY-5PJfNw=nBxiV�M{m- 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 diff --git a/tests/tests-last-passed-at.txt b/tests/tests-last-passed-at.txt index 75697720..eac8f0bf 100644 --- a/tests/tests-last-passed-at.txt +++ b/tests/tests-last-passed-at.txt @@ -1,4 +1,4 @@ Tests finished. 72 tests of 72 passed. -Compiled as DEBUG -Test suite pass at GMT Tue Apr 26 19:16:37 2022 +Compiled as RELEASE +Test suite pass at GMT Wed May 4 10:25:42 2022 diff --git a/tests/tests_vc16.sln b/tests/tests_vc16.sln new file mode 100644 index 00000000..5d2e05bf --- /dev/null +++ b/tests/tests_vc16.sln @@ -0,0 +1,71 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32413.511 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "tests_vc16.vcxproj", "{F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "..\source\Irrlicht\Irrlicht16.0.vcxproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + SDL-Debug|x64 = SDL-Debug|x64 + SDL-Debug|x86 = SDL-Debug|x86 + Static lib - Debug|x64 = Static lib - Debug|x64 + Static lib - Debug|x86 = Static lib - Debug|x86 + Static lib - Release|x64 = Static lib - Release|x64 + Static lib - Release|x86 = Static lib - Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Debug|x64.ActiveCfg = Debug|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Debug|x64.Build.0 = Debug|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Debug|x86.ActiveCfg = Debug|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Debug|x86.Build.0 = Debug|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Release|x64.ActiveCfg = Release|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Release|x64.Build.0 = Release|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Release|x86.ActiveCfg = Release|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Release|x86.Build.0 = Release|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.SDL-Debug|x64.ActiveCfg = Debug|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.SDL-Debug|x64.Build.0 = Debug|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.SDL-Debug|x86.ActiveCfg = Debug|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.SDL-Debug|x86.Build.0 = Debug|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Debug|x64.ActiveCfg = Debug|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Debug|x64.Build.0 = Debug|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Debug|x86.ActiveCfg = Debug|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Debug|x86.Build.0 = Debug|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Release|x64.ActiveCfg = Release|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Release|x64.Build.0 = Release|x64 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Release|x86.ActiveCfg = Release|Win32 + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B}.Static lib - Release|x86.Build.0 = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x64.ActiveCfg = Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x64.Build.0 = Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x86.ActiveCfg = Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Debug|x86.Build.0 = Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.ActiveCfg = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.Build.0 = Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x86.ActiveCfg = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x86.Build.0 = Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.ActiveCfg = SDL-Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.Build.0 = SDL-Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x86.ActiveCfg = SDL-Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x86.Build.0 = SDL-Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.ActiveCfg = Static lib - Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.Build.0 = Static lib - Debug|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x86.ActiveCfg = Static lib - Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x86.Build.0 = Static lib - Debug|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.ActiveCfg = Static lib - Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.Build.0 = Static lib - Release|x64 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x86.ActiveCfg = Static lib - Release|Win32 + {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x86.Build.0 = Static lib - Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F1F60B87-73AE-44A7-A160-A15DB232D421} + EndGlobalSection +EndGlobal diff --git a/tests/tests_vc16.vcxproj b/tests/tests_vc16.vcxproj new file mode 100644 index 00000000..5fc3c039 --- /dev/null +++ b/tests/tests_vc16.vcxproj @@ -0,0 +1,311 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + tests + {F301D3BB-1E8D-47DB-88A9-8ABC0ED4A18B} + tests + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\bin\Win32-VisualStudio\ + ..\bin\Win64-VisualStudio\ + + + ..\bin\Win32-VisualStudio\ + ..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\lib\Win64-Visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/GUIEditor/CMemoryReadWriteFile.cpp b/tools/GUIEditor/CMemoryReadWriteFile.cpp index 7a803e0d..1916268f 100644 --- a/tools/GUIEditor/CMemoryReadWriteFile.cpp +++ b/tools/GUIEditor/CMemoryReadWriteFile.cpp @@ -21,12 +21,12 @@ size_t CMemoryReadWriteFile::write(const void* buffer, size_t sizeToWrite) // expand size if (Pos + sizeToWrite > Data.size()) - Data.set_used(Pos+sizeToWrite); + Data.set_used((u32)(Pos+sizeToWrite)); // copy data memcpy( (void*) &Data[Pos], buffer, sizeToWrite); - Pos += sizeToWrite; + Pos += (long)sizeToWrite; return sizeToWrite; @@ -46,7 +46,7 @@ bool CMemoryReadWriteFile::seek(long finalPos, bool relativeMovement) Pos = finalPos; } - if (Pos > (s32)Data.size()) + if (Pos > (long)Data.size()) Data.set_used(Pos+1); return true; diff --git a/tools/GUIEditor/GUI Editor_vc16.vcxproj b/tools/GUIEditor/GUI Editor_vc16.vcxproj new file mode 100644 index 00000000..f0f8ca24 --- /dev/null +++ b/tools/GUIEditor/GUI Editor_vc16.vcxproj @@ -0,0 +1,254 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + GUI Editor + {621827DF-F399-4754-AD51-B53F4DC6BB0D} + HelloWorld + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win64-Visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/IrrFontTool/newFontTool/irrFontTool_vc16.vcxproj b/tools/IrrFontTool/newFontTool/irrFontTool_vc16.vcxproj new file mode 100644 index 00000000..c7128d4c --- /dev/null +++ b/tools/IrrFontTool/newFontTool/irrFontTool_vc16.vcxproj @@ -0,0 +1,235 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + FontTool + {FBE4BE88-FC64-4F51-8A43-B7883BA1195B} + FontTool + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\..\lib\Win64-Visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + \ No newline at end of file diff --git a/tools/MeshConverter/MeshConverter_vc16.vcxproj b/tools/MeshConverter/MeshConverter_vc16.vcxproj new file mode 100644 index 00000000..a6e17d6f --- /dev/null +++ b/tools/MeshConverter/MeshConverter_vc16.vcxproj @@ -0,0 +1,230 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + MeshConverter + {E72B637E-4AA6-46F3-885F-AC67B4B470ED} + MeshConverter + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Debug/HelloWorld.tlb + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win64-Visualstudio;%(AdditionalLibraryDirectories) + true + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + .\Release/HelloWorld.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c07 + + + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + Console + + + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file

bE~Q(_F3KhmbcsC1cvi4K)gu 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 diff --git a/tests/media/Burning's Video-drawVPL_h.png b/tests/media/Burning's Video-drawVPL_h.png index 8ed44557ff1cf354f3a8ca7e6c89316dac82cf6b..8052e5a738d97d9e484f0099f7b862bac04f397e 100644 GIT binary patch literal 14192 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 ?hRjSQh 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 literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Sg9%9fI*@0EaktG3V_?MotDrh64w_ zZ_bi-p6%39I6Yy5;q`wne#NsFOg~u2c3e^>y3)%GN0<0F0BYz6>Nklc~BKc9>-geh!8~yVi1BF*A)}grx=$*Bc2JR zM6r-s)Oewy(Rd(4F_L<<5K%z9Ac~4HURa2t0gJ4+p%6FGNR&ieOQQ&)XizkAh{yi% z*ym$-Gp}c+uNmg^SHGTL|9-!!@9UYKo}Qi-GiN0N4fWEJc7FmIc+mt_Ihw#KM-y1( zXacJowgjG4c$0PtbZB{J3@*=@{7Pf1t}E>nc(Kc#htK)T&N-MoBNKRs>seH;ND>?o z4r%!`AO&kCO)2`%1o=*o2|TUT$D&P-x^Bku>VM^-3N43>#3ZpztiGwkkx5fL{;^-a zlNQ=cmbzi<8h@;T98F-AqY12XG=W9nv}7r#=I)wODw)8e4YE{@)`NM8NPbE?1q5gU z^O88nAwVX@oY&QaQ}^VD`D~+LLw)B49}1>b1%kwST@-dX-btGO9h5OkiM0VB5t? z9ksrUdqg`0UKkQsKFb39$p^i>a2@%e@Mwc9%ZzV->EI&~H*ZX#h8|q_3h!NqQQZ|8 z8w`bahZjrs=3_k_K~B)9L10}AiSq^-i9d_7j}2a6DBL*VZmeA55F^UT+4^rq*~>%? z0!t=1;(r4<&7&fd003($qYDvVkhsT6?)aHNwh*s0I$GPts^)!<#%qGwR~ik zjWv@MUN=y=TGnC@Dpv#`H;P`L+iRi!6*93jjF3A;L#n$$AA%}kXsgYrTqzf#*WmE; zZ+}^|S)flx6)x@h9Mhj6y}}HI*=_Hm3c)@^1x_09r+gci#6@_(j2pNVRlnf>}X@!WCWnI1|gwD7p;i--%N zVhOOiggY5P5{9n9;d(Pm-tB)}*|aishUf{-O^2qM{*2U}5ipKC*Ev4X6UOa@L9hQq zdiQ*@HcQ=TUIZBuI7tut)H!T>q(z%WN9IaP<8sio1g|@W^7sSs0D!T{j(o-&j(^)2 z%lcvjPqLB2+#oCUqGMRU2eh+L4>WtQ^$0WT#o^U0tp5pVIu_{jpp0ZVRG<-fNV54y z2m%zB4Xi&dYrVM6dLXCft9M1*~advUSa&%_Cewk zN4#Tf`h%>vH<^Aj04=8K0swHU3x8M;IO?xO2)#vql>q?oT?TcNBbIf`r&=~*3$2EQ00~ z-LCoB@#c#K_l>ETM>67%YPl9=9ug| zMj6X9%NtIl9*HNop=%p$$vUWlcfr(?H1DRBZ*-XmlZ=5_citJa@}plH3OyV}I3$3A zufYI-w7@f=SwfEuG6GVAv%_RYIqOsFbJm7a>D@cF;PMKy_DrD+fsZAWkBoGtorQUd z&X;%$;Jt!ShyHDnS>hY-e}6?%-Cdr$MA@^fE?`#RFX-)mr8^+>BoPT0v$2OT!l=N6 zac%#4Vx)K1ZJeXidsyB#DP!e0fulbZY&HGaF974)tsK-Tu-kPDukL?u(`c+)`bg;J z?b~Zt`&;UA!OIT`9R1k4(N1@vR^qM#a!{whCEXjnx*ro)#WDD#mVbNuJ3CKk+sj{& zcDb|{pQ3ap2^%{2i4G3~`I9h8Yxe^2!D zp9tw-mH#aJV2w@(W89@;SCt)_Z548U{V$|tdFxK1JfEtSwK0fTSnt6X|K?ITbsD7c zEhloPK2cgmFrfmi+>jtsNK^+e1|p-oGHqc zSd{Uw0V_+b2du6?Pdf`(+EwL0wimI&p4}ddm6+SFr>+#FE&xE3x}ez#9Q_WKRe21e zFoEkrj_@5S`x^V>_o8V^`dWhlIs*F@UKcoe-D!EWt%qsNkslh~foPpRny;11m$684 z6To8!_iGL8Lw`r$)4J{gN4r<7jHxa%tr`8X<*!~8<$W$HhhtS{?r>1yw3d~XSuBpC zH?+_#cvVO{3zZ+t8;NuM4P39aNk2tTIC*OSFa*mj2s1CRE+wlq?JUS4y$35% zT>t<+bz7c=T?9fB3a9At>Cn${w?VDcVT6}He>ax@u-_rJdGxPAD6{!L6a+pP0zC;Z z6aC$=O@G*7NXvq|=BLJP?|W{sZPC8rB60!%01(qRQ*09$Se)ok3N3>-zRVCeeMTPU zM$rm_eRY8*Fj_7g{)Bc4Tqp>fI=QRlwsHOlwiL&Q=h*LQr@)1Rz+t;@N^TpKYx$!9 zs93lED6v@hP}nJY#GPlxa{VFhTlZ*LG=b@NK7WL93~#tqVO`)L&()?sk9U5|lCmDtff4zBpZhjW7oZv{$ft@p<2z`M? zaewjzn$JHVA!N*0PEEqS3d!F5N49HPxu!zyUKZL+mda6B4@SkLE`w>OK!|24@Sa}6xeEhk$Wlj*C6KlF)^#!90h)n z>|xnREi^}gk??kIKiVlk(HsTNzwxGoR)6}@jn)s{^}mQH9lWqB@bmCqm^}Nw`bn}%J1TO~n#5?*~A-u)v&Z|n-p;ZGNZbs+C+$E7tKJNZL|X^<9pX9{;uen{Rb zQ_>Pz06;;H5wuePfV{v{=80ZU$}-6hSRZOB<`m5)^BpDLEJaqkqRoU4O<+1C*ngIi z2}D%jAgeAU!)XA*0%yJu{S{gmuFji-!!17AR7o6QOF+S==%_0VA1>^fvYBosVyUs` z9bn&g*@!k4(*h5Xs>qzn!qaOe`3>(|GA402mk;807*qoM6N<$ Eg4tDVKL7v# literal 359 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 kNh7Z_AliZDG+rnb&r=u-gNDM$ zSSn@8@|t?~<&|x+Z`ta3=l9n;=l93^+PcgZfgzR+-o4|7IA}c<*+YTr+UkodG**SysQ6d?jE>Ji)$ z#PfjO=4NFp55eQ+R%nrYlq<-bhz3$YY22+%>e=s3a(kqlbwypL0Q~t3)W;$~hf%)yhP?SgY`5px_r~5^hKR z&haG=*rNZ2-q=M0oyaHKbbs)1)F$r zI!eYszd}K$-YsM)KECa6jh}GowRMd4FYn>rm#XJS*?!1rSSd!2wQxDX-t(A7&amo6 z+u@8^M~v>os~@rxCZ>ejtiOI-=n!6UcC5H5%BHag3eY~PRUtftzeh0-=GbeW(^SPVn1ntS=Qns~unOHhq_ z1I(Ftb+6D@tXagBOKH*8{zBQc)DWP${S&#{7_X(as%5L-X`fWUQ^0_E%CCx1Ii*qv z3I1fe)`xWM(UxlzfVi1xDFCz3y$rdxJfHEO+4>iBOSP+nHp#fAP&W&b2*TgwGxm=d zNCneV9suOYCzGtihak1G$)yNtctW2oy@^>ma$n$ngWG5P%+ znhmk-nXGcY*jDXZ@wP&%mf^l7WQfM2uqFTHS8h(K_=uY2t5eG&od83M^=6P#zgw=L zk;-MbPJEeI*A<+D$9743Y*fVerE=!D+g)1kaUlWURQR{To$&qn31;E;3>8*&VB6Pp zPce^tOCd=t&1niLSsFO+g?n8n3(k770}krwLH@w%o^EGUd9f zes;cmdYrjkinpu@!vVa#wqTKOm>8=!wXsuSoEIQY85~f7Xic_;fyQJk==X|nIPm`0 z!(!Q`*o$18Vj@gos7d#K%Pq&#Kx^QpDs(lRrK6dzMwR7C4(m~VvBTk_i+0+%EJi5h-G<~pb~ExYF4D6$+NFMVTJeSzjuxs--MJ*F*-p>8J`gcy3V`)39oNuNzp&NSha;o_sB$LIYXsOptD( z-AIOd!YTFSz%8pH8&@e5Z#17~%dwKoa} zWj)dcJa$;LU-`T4p>6&*M!RFTc7AD zifvf0EYP$eQN3#!r-mq@8X0<801Mq-7A|0FSF-~ml&&bV3FfT&4J9PCQci{BODdgs zU@%c^Fv2XP0JiSDeQW&kk2AT;1IKn&2QxHAX0o%v5Mx?kOnwE@)O=00@`(_`_t~Lb zyw>?MTYWostu{ZHBpmRk`{u}~=ma&wH8Mw9Ppp6Vg`aisldwQT(TT-j5|Kmm$-Ch` z(K{gHQ8Neao2!3)^kkK&*W9mt)bgnTk-#<_VRE@=j{)oM#KLH~bFn`o?w-+fG<4Jb zY1kI$_S}W&A?ldcE~+7;6}FkXnmN7 zVGwzP=@PY2cr#9NzWQsbrB2N67!z=#h?<+b1WlWuDiex@o|o2&YD{K@$73VSDAL{y z7`beyFu?RW_{T+ecr`l{`1=sqz>E7HG>R;xGGKKvIBsuS^XMEd{?ZiFYVLD%pyo(* zoU>vSXK-{d36P{X%j87VIM%CJWKN+au!B*bDGo1bJ<|9k!kmjGe*dK1Q{Jh(eN8y2 WpFBB}_WJ0-1K3(35q0L+l)nK@y39WS diff --git a/tests/media/Burning's Video-guiDisabledMenu.png b/tests/media/Burning's Video-guiDisabledMenu.png index b25bb937cd824e0c06a915cb5e805a191396e327..8412dea3e00282449c8cbb483f9b23f838b1f267 100644 GIT binary patch delta 679 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 literal 5471 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∋98mLNs$;Pz1OqYLalYz_sHm1|r>kz5syklZlzXdW zz>CdzyoevWzx>L(S26PGs$=+2bh+sES)<5)D33Q}?xwYseHKc>Ob5_Z9Zcw>2qPD@ zTbKfXnV2Xts?$`xr9y+M%U-slKDe`7bYZ<4Kll2P2%@-~{ed5PK;UAw=)(QeZkEF7 zB1NXtMLIj~KmY?>3?$6%4DZ~lQw54saj5!Ut2x{)GUkbeL4Z5jj8x3`MT^tt@6W#c zcn<)6xHE6J*J23(2uuoe#3Bq(sp>Fy5Fs%MgNgpcfB(V%_OHG%Ro_nb;5ab|_f{c_*5X^BfsWDq8_%Zy#Lz2uY9$LPuJ7E9$gK0R^6EG;p1J1 z(@o|!s)oQpSW+mt1|eYJNYZm5Y=9(dFiI4_04%>)cIM?Q|YK{o3hr-o5i={i(aFeJ*1z7su&nm9R)C1`uL^ zd5FwvRuomeR#l)J2!q>knBZs_8%aw6&;O*}?K=2>=Yw!N=Kl#>J?D19!a_=OWq8dK9DeFP+%(*&(kT5Ni zuLTBFr=40g{O9jRb2kIvxoS0fels1-k~cPp$lT4bpUPC+AP#peB#94Y8YzgX1>t!L z+kJU_y+5Ca?|yLf&eOfAy>(}%hPx;IY#y#}%6DFrp>Q2E1n)cPV+=ve+~GzL=9amU z;UItmQxGOVh+-Fnc{gb(a7Pg7BEwY;QBbXAHVL^h-nujY`iECP{Pt_^AoD)N-~aac zqZgYu-aNW~y!nAQk05mF32BZ#LKsDD)L~Nd?9SnncV|y;a;>J-YBf_E)OTvdeOFBy zE&|kABuI$Nq2_RpLcwUP#)Jo}@MKpHotDWA%4jk6LsEl@8YLQpnOM!;5Eu^ZCIx{B zf8eja`*VNxfs#Ml<9Nn*j$<(!t3BV=%Z~5P0|G#pvApW>;dR*#w$A?7-w#CY-pU8#E{1X36G<`WTDs7;mbe?LyLYLvL%7ySLs=cb46Ey>WcL2qbiJe2!6PeH;~iis%AFFjmcFKh^cF ztoM1n&%3db|CK-TVx6C?bFEgZmTI|Lbr_KmDQK5qkrIFB2~K?%gG`UsHzn;7Iufh$81EiCoeCn zdf%lf*Lfc!X%v!>+-)rN-bp_cd%519Ec$BYjf-V;|NKe!WIYW<-@Bf!sjFJe0mpu- zW3H#Gu20h1QVNn{*z6`EQga~)Q=2lDee6>xRo6qw)pAxR20-vWF#$uarFs`R3Kums zRP!m<|L|Y>!khPxPnL1LugoBax{uj{a1b_lsWxRDa~&p~iWN0gr{?m0I z<=OS{Z~f4{$naMnh2P9P8xOED|eKZ-iTldv)xew#(kYKtV>i3Ue8Wg=nx=->F@AN^~u-wgJh z>#`Z;m8Eo%Us;8RH{~18@@I}0xGvAP_0RvJrYJG6o14*C>u#(k%g)^4P~7!5ekxr`40KT(6hfGCNh!SlZ1b1@#K*t$bhqCZQ+u(uWk)wdy_xh^AML7o z=x0Q3R)r}B0YMFF=#w8C|k;+7-#!Uqhz)c8n3*-zC0cL?H1~H(TwmMhU9nM7V zh(b*K;mfg){QPE`ik7MlZ@F8|_EVjTx}%NwB3#vT(J||oYc(VPoBu4bVUscHe$?Hh zaC7sjHWht7=<`7@2fdlBfs{sXwXesjn^A9udNb;-+NfU51JOEb8<-pFE^0;nFc<(a zP+-n#rFsw|qGDbY0QOm(4#Fjf{_(&5;Ni>sbX(s#3HKHv!1Z7cH|5iJ(@f~!{`n%z zK{zlm(Pk){q4Y@_{%pTwpDPo`5E$i<#6i@2JCvf9QYTDPuE&dx2*Ws?F4MpA_AxWB zcX`YjnXX35>g%!o{olH7RX10g&1U9G@V*OO6u9?Emb2*IfH4Io0D%BEQU`AsWO>rBIYA>A_TkIj%WYwzn=y+p zG3BZ!i*7sQT$G4{1Q4s58m3}qzN=OZQ?;M@+RGTY>5T4vyqZrXPdTd{@Z-%;_EQxm zW)dc03e0y`k-&wCn8%@%s!=2|m1=C3VvxvPU?U3Ps^)>*jESpzvIPE`3IH<`OS zxp?2n(L7x3>h->?N4Wd0xH~>`-o5j3awjK{d;5#+?Kr$Dh$sc}>eZa!W-#-}OvFWv zfG)^X^v#QoU*sp7@@%Ke#9ie7=*vZzKop4DG_o0Tu4bUB20|bvMlNP%ENK?YdM`Ko za=hrxX)L;&rTtX<6tAzwT75Z7^FEcT+adqix0khgaV^!VS~2|1FTZeiHMeR^L<|@{ ze0q8R&Z&vyQa3e&yh#*MSeS?@Fa`04FZE-0=7D_7I%aKAuV&S3mVybZI|&COBB-&s zt3l0GU6{;Uf3+aebTDs0b^pkn(a1PHz)?6bK6aX(YzqTSbm-GW4J0>+aiFQy z&0VPRS$>Hio(olHclFZ zveL)zrapzuP|Yz;#T|VL)f~X{E%!+rK9zdC9cNv1_b=Ru4h+S1qdNS*`_g4&WYjze zTYH;KW`4X}=Bl}>J6fk`ehOl$>P5{#%ycr3k!7DXR|7$Wn7NCg>mms1=pzRvVlpRn zivo8yHFIP&xCdr;toM^hXlg7D<_=;K$3d>WMOdDzwSu3k7j^mfzUOY#TcH3zWVnZF zVW+|~7DliH|0s*Tll`9MSl0s&FzXeKS=-MyGsGY73^@`YFD@4T3P`)tui z!x9dqSPl{bfFSJd?F2Ybs`n|F`+xmQSO4Y@oxR-afBY+Z5sC*Hz_Z$vHCM0ZRlV=T ztPKpcOJUjZ-QyUTin_XQh7y^&B(pB;$NFp&cjKt)MD7M6-0Y{o{7>EMs-vh+#r~(S zzGR|m4x-3RM7OOS4!YS5eb=?&6(HsVU*--qn8OX`c)81WmuWjyhr9c{i;G!uI16`={n=77V`MmU%T4 zK~w~WyB8g@=4!iQ1P?-y>9nWoN!Ls}vZ_#X7h2AOFqLW^y(CcspsP-t2n197skcx6 z)>p5Z_=r~F=#b4tEvp44X3E7JNP&y`Jn}A^GitRy$<5yW$X|c>`o%(o+)>m6NSL@y zD{k$_YBe)2>Nw0WF*5JQ+NBT(cUN6Q9#htz`_hL19^Aihr*W!8-h|7kTBA?@_E#^9 zx-bG!t}sF%GN4h{hYAT0ag@MqLTjqId8tZ7F$fE*d#%W7kzr1KAG;K$szt45nfI|& z&AAr!qVDd(ct24m|dOMmn^3kU%eW>OR2odO@F3r2pN1i7UrX<`44nlq6SrjIkiti>f^G}|3 z-?`3odwoPuw=_Kn?2cTGiGy%4S8q^-2}n^&)y=*hFVmq65=wCc+JxPw5CglTRGW&u zb{dP?dRMv>s`)T!qx&26`al1Z_Zp-6-~QE$oBcjWn04K9zBoTVS#LK#@Y?(rKiD?e zuDJ?@$=#a=O}$a7)W(?IIL>GD26hgXAagSm)q{u0k*j@pJsiyfm_@{$+G}KjFppWQ z`eDRyPa;GlLJn6oRabYg1mPGM?uyXD=I&~y{@e4XIXR$)Mjuu4HVxD6FaBT`ND`xC z2qOvR0Y?eTg!P2$jO*#e^|YHbS64GKzn=7Rub2C}tA5nW(JUPGvYT|6>X@}U#$q?4 zjn!_7jnz+jIqv1}f9s|VS9U8$wB}LO8@)UgE9OaVg;+)FvLNJYaGyna<^D>|$E?ST zZqY|347s-NjOf<)Ebr;mJ> zZ9C~O={749skwoisF_s&^4o%Ryj)GClv+ht)y&P!8>`kBj5aI2em)zs1(6_>0#)@G zCQ#Y7vpq1sbhM z0)EuVM+3CqPEgu79dm0WNp*D>Ch=BJ20jSl+Qj7XjwE6uW z97{2`>TYO$-di`8{p>G1#P7NuU%tFJJrWTIZT7q6EHTk`Dr5C1v~?t5b4Z}9nAAnM zm>wu^ki)Mxn?9vkpN1)`Syd$>atc8j)F6k!-+R74o~3QhDeydr5Cx$q6ord=&RNy^ zE~LOwSj~tK0x<#+ zYv5%+7GdhUK)^6g^I4}sDj`Ktvr?3mC`ijOA~4ff^?Exo(a9pMW-%9yfr9Wb7FCUb zm?*{2q#Xhr6QUS63RQDqI$tINf&8Qor*^8aUa+x1`lmv^RVy0wFXnLPBta>Fo1ortOd#QUrOHlrqC08QAB zK~hS9n>CW5Rj@|-kubNIRkK>XR0~2~3RP{)wE^!CI0ZSHcgtSf)y=1(#k^FjjlFUw zkQrK=XxaKZlGokM?03w@2a}{b5RT`e6y0p5MNzKta1Iiq8YaV}5Srg#eCnwC__jP+ zPtP{lt)Vy^C6>TPa}UDnQMZ$-xf2#qW}OIQn5q-4I_V?7+?D;LfB3=T|9rS(K!}xH z%`16TFXqkrGm8?KZ>CzSy>i@LZc8=4ze-tcD0aRK)%@Nvo^+nAmZCrZWMYOEBEZ~L zEeMeyiZJn$?F#td_YUy4A3plz8?UW5>#C;i!&Ct8Z_h^;d8#JDwfayEKpz`pgZ)^K z7s<`8*Eh@M5@2F8b2F$}vny3q=wUeQQ>a>|s=Kkky_5=sSqf*XSzzx1dUoYNuDeM| z9dLCtR)E<9AmG5h9=%a6On`sXdC|a^f7F|a7zhwVk{D$_Dz0gLFF^C2skgs_^$<5|enTUzU+fT*89>0zPC!xxA|lq-2LfIhWSw^YMvsM5ntU{d)@jGG>sgE zMfjUfa2J;;0YT({`-Ph(fc#ZCi=>;I7>l%Y&^txwDKtW1MPWy0Zwo zsXpJ8BMblBXHI_Z+v{emHyn0JLQ9uoPKBnJ0y6w6+Ila7oS+!23&Qcgl zJqk`tK{&WS+2knX4n5SrW}L&z?RaO^yZf-)ou8eoxBF5x7ZqW+RW%`oI}@0hiTWgE zFmsQA7oEUtHH-63`VQDfDocct_m0n0Svb`_Y%=e%GMYFGgozHC~%m}smU3L zd}z<%gX?iW9YWhI&Bd+nxF|X!7yw5x6i0Qqmt4o9#q26u5?T_8`iwyYGi=qzY6L7h z?t)aqi(Sdp9CWoSLpF0fnKCopzSDo@+1St)ZXLma$paU2s(#eVzSw48kLKadDm~uo zgJoED*k_$5`Rc}lSQJvG#xBLcK^Tq!cdoA2yZye@y6n3BH2&b*-}Q@M{mtJyz`y>@ zZ+-3)Z(gm}L#|PTnJzWn4@v}KT&%*gO=;6z7kOU{Kr`b2E=(@mr=&C8Pnn2R4boDG zoS}FTnNmbhz)Ceq9V+Ikc*;GA+X1q0`!?GDO6O);l zTC=;hJ9Kw#(I&8imNU6HPG`$_wg`6?VIFxu*^6yiUyisOF)E@UvO9*!$Z^!kD@WZM zryYnkqfXTf=mO#JBp!r<5Ey;pMIS?ueYOU1n<$oxPsLuF%K`J<;`{c#%zU49sy0u| zgzZ>`Ax!UW>e(XnksqqeI|)o`UTd?DvoH-){n{fVH)8C@DT-`{AqF9$w?F>Y|8Ek1 z?OX3I7xON4+i?O&%`a;ZLSTx*cUP%}G^@`eFB7+1zPy>9t;d(!{OtK9H>yq*a1k<9 zcb}!0Vr+{kL8J@pj;ZLFm06g1Dtfb@n!{J<;EAuQ3>Rhxh&TjsU_aJeGziyP)wI@H zOLg;)w1&oN-4a{QpfFDo8BwUHPwH76>RJ8ezE*$(twwHEX6o!@l~NbZ+|Nfn+T>*? zPj9lhk4{#7Ce#U4^KI6BQ4r1h&?jo$kr~XW>VauKlN31yHply$av(hp02oZD<~KuK zm?Ytr$6exD?U!HFAPh19BE+}6YgLOvm&2-0(`LWh>~_O6EoZ#~X5M%47k=Ywzei|4 z`QWv89)1X*Dj6iixE=Dm4`bFeqg&s%CE=+WfU&x}FB7X{pARMI#jd>AUVZG|@pc^D zT!bk|sda?kk`)A?n00}tqQg{Xsh@RGtM-A_0g$;*S=FpoYpR_)Md4a?Hc#mmC8`(sn-y(NwgH^8S`yUo?n-yUXywIs;(f<Oy+zRBog9{b! zKD~DL2N$bqmI5c2#(FmXTH(yp1>R59%$aCARCj}047}{q^)6SfZr&u(*72vJMJ+HB zoSBOHayjqK0aCTA?PP6*7XTn4L4=u`wivpug%~ZjEqGhQtqybFSGCcHs(e^GA@W86 z`b_A!m+OJ&kw4fMRbNJS;zi;)Sb@uJd9umNPG*5;Lh8QHdOawJuJ)x=i-C57!Huz+g%m`H=AE#SxrwlIxLQvSM%yl4lQQY zvUyRvxv5MPg=3)5RADus8L#}Pm$P}8)Sqlh0g9ihyAP9%)R zz8PsZ+4WG1dY7mRvakM;Vi|<1`c$1jQ$O<%9~`-w8@#Q((5+lisz2FCA0@>&PB}2a zZN1(1DH2mPGxt^B4LMI!{xkpd@B1JAuV4P1(Ot~v=1#5=+#_>P!H>}1S~rVOq+aI4EU}$&h}FY!d(ods+mP52Q`al zAX;`om{O#pnUu+=O5;@8oLLp>U{IsMb5VEiBQw+4$*S#M)KZ7B#31Rg+Ejxv2NU6Y zCn<&?B2}%b1z2NzskmqLTrF2?%DfP=p{j4E+6Z(e>H^OaGtl=1{*Zzfw8J8>+6b%Dz*oNvSHq8AW0qaG!`&Zg$gYM-K1!%gS{r&muK19}jP ziXLvSn!oc*AKW{A|LJ8P!|Bn{^Q)_z%gJ&!=1QPaYG7W>y5;iN&0cu=p3i*d%is9M zp_DP384*2v`sDp5k5A^w;lkXynh1~6lwul7UCq*qDi<+JU}lu+<_HXCx=l*Jorvx& z=yMl~RVOb!E;_zk4>%k|l@x;Ta@OgAm$i8eLCDNFu;~G6_9+zgVg`4uW(UU9Nkq-B zHv1?dM9Wz^T6Dskq7b3#K~|}1rRr{|%p}Cj9JagKQYTk4H~}%VXu@2bppNR;>f+7`Rn2Ed%Xt^CHrwrfAVAH#7}^7a zC`B2kY0A@n9J&<0_p_h=(${|rz@qPW({#DMu4WfUz5Bt(#LjA_+FVf@L%QCM7srch z@9%Lr47ld()CHabs~w`-3;pn$NBd$RnoZ@yBKJ;bx#(`Ja2G}w$=tdqfr*H^KwV%b zA@Uf!RGudpiUwiiS`RJO7mLo_)T*%LqPwB2W>JLh9xrBnyj%}g+mVR+6acTP=AI%G z(5Tb!Y@3^n$l-e6IUx*YQg^ijF+z-8u6xCH;w!1kUi!ezRWqq6&?EtMdp^`sZ4oFj z3Bc}w+7dTa_vlW9F0z>^`}rd7CWZTuZJ%-0%lp)Ahmr!WcJm=2uvn! zcEQxfp`0zcvt>6`4MN+Y95zuLQ`KCxR1M}{i%sgedTrY%Oiey%tMAFsCE69_V!Ld! zP8OY%K^GCk*ksLWZAYWYq;sLssXA1>m=`r+9;=BE3qS}AIAS0p*^ITC_rg(ZU;IPr zRjp6){z-i8tZTYcD^q;S5pL?@^^0JRN6)VoUDyqonYR1E)KuNvV~|oSGl_7Q;(EJX zs`Xu(^(i zTg{^o4P%*dEe#-hHv`Q;WAB-_b=8B4Hj&z1;2(d!Q+HQMwpX zU;snb{Zw{Skw5o+_jcK)YSp}X*fwLGiZypxQ7grpX)Oc+)8(c-yD6KgKHrt++p^x5 zF`F53v0<_x)F)}n8ZmHW%7*K)I?+rBj(yhFvnKWRsJXhr)$xsyJ*8n%0!|kpS8G(j zeyrP3$7=1vA=Xo$YaMgm4*6s;8>iYQzS)iAl>093$4rDEvY&Dnf{4uezBwz#T*f@P z+sn<(p3-g{j_2Iupf6EoZq!$D9dw1W-+&F(`?canC2g(+7rYV*i{`t4J7?5p?_|-(AX3zbs813Dt2#5sz%fWz?~D53Q&h5ApJbjwpTyj^ zqqc?Gc^7o5yP>XkWh%Cr^m;hVbF)B|vCm3GUE)5l8Hg~84A6S4#cUQhxL*&Ng3S|e zv#Gf@3fkeI?`T~1*pH=)(nstkZT|9d3kx1SEho#l5nUY1)0f++XcW0PJ~FHOsSH!D zs?)9l=wqx^>Gs1LLJ;8qP>eE8qyPjv52%QzAY4hE^t=kg1{6z?jr9e{bHb^_A8e@6g^tR zsVD&)g_!y-JYNr+T`o=z87rpZEOK`d`-nV^r?YhDq}%PQIx*1~UyrqFFZ`9q+nZd? zP0g5)qRdisb9HN*9Bnw3AOGy>`u}0-O@3}muk*guyv=S-_w~1}VpXxoA}LX%B}Nhq zDX|3y8KjXSCkS99gUmcm2FWM}GE8Ph0RI62k|04c2oNBK)4;MV#gV13L{cmk$?9(1 z_G?bN_kO#zGI-Bda*Zxf2lt+H_IaDNp6B_kF~_3DP~TX`RI>$}G2aepH^~rXJLM@$ zNHQeZ$1-KjdMs(GFMLXpsm-IXDEQchXQ53wT)>4e3Or%!sGuMpr-~N>|=h%5J0`+x=P~Pm*^&#yi30a0DLy|)*o3ZSsLWq`;85JQGiA5_1 zi4Yq@p=c8Q%0$PEGtbTtBM^duww78;#xNp$sm+wi6tZD_b`w%5&u#_*3R$gXL&h4@ zdN)idWkoWn6a_`3EPA?_hZsXFn_;Te4l`8?l&V^5n5b(!5j$%)yF<+}#JIKQsKFy) z^@533yE2NZxfl2dv50uf4_9`IF&CM&PDGd~rt-Uw{Cws+%Rp3}M$TYkFhn71%)J%d zTPj5Xq4iveL>CQTM*x6W3L$!L#-xVuXe?)rMTStOq=qDBcznM6?GGM5KI>Y?>oLt6 zn~Hc#i_V3jyO0Ip>8kzUa{m5#|LPF8LmZ}jn9^ZPQ%F-x{2%<(rS>Kf>md&a*0Q&3nW&~|73PjqG>HCq zFfS$$)hVW!_2VzM!<33>>y5Lfah8xa`%wYsUArGc-!zL^YmEsZHO{W)i;$)wx;>0B zXC|`DHRVv-4$c}PTy$+J()yB*xtU&Vr^A@P@p!SH(mtf3+Iho-Su_-vGcg_gFGcw_nWjmEIODviMn6PtP36#!YHIovds!mzQ zC|RK9ZY$KGVQdT$z>uUUG?u-kT=aNr0|3OV@Y?nv3L*?4KEI2dx6YZ63Ny_+U!~>s zA-wvERcHYg0a4^Kfl(zd35j*dkHKhpFh%g}_Hr6crwkYkV zaJRjUY4p|@#>R3f60=leqBU#{7m+Gt0enSop}7YHSah~J0}-Hcd4`8ZJkIbR2s8mEW6=1^k zK3GeKDSq&9b$gg9%kI@?`uN%Q$$75|hH%+=%LE9j5Q-dPS&u0cIqmFeYnKh}LgByj zYv&3Oiyo4MqFJ;)NXulIEF&U}QFc?Qt>~EL5bN~^000S#=#-BzqAAICDqmrBh9HMf zVgYBc^ZZeCH-(F+qKfFvA*-sje7&B!&V^V2VcvOBe0+XljqMvZgt$43jkDHJ%4sz} z*&MdjQ@7p?qGE{p&Vy>jiK%KT#W44cGtL=fZZ>z$8b%}nz+-Zv!i%h7%T)B(sVJq0 zs%3ur!e1>N6COf&dNGT!jIl67y*G>@F)<+h#dW-5`Stfta+X*7v~c{%UFa;I&+Xkl z-VXVE;R%$EI7rM#=^Gl$qH0QcGZkytGVaD4ijJ|QqO*q9hs1<^W1ZpmpPs(^aQSDS z-Z{j}xxYMV7p)Ue5m42}@v^htQtk95k=k$00D`dahX1`^Jxi*&sMNqk6|HKc8X#sJ zf+%P$5L3}9Ybu&6ho$J4Bn#BCXUbATFtxO(NJ~U)EHTqhMw7EBqJn<*>JTziaVr%y zmSQZ8x1F=YR34qLoVCN0t);^lE?4v0-65B9wwfQtsfd8;6jO*vR77>&`4DSrmP5*- zYK`ezm!*<(69Ckc!redD%1vq=Bi7EteO5sA-K+Kx3KJTpm};|-8R_|YtoNoP1|%sF z{dAL?5Wf4)sx|b*I?N4!xr-L@;mpP?*ZbHsmPLTb5mm2k-G}Re(xSdRq*UN!;df(F zQ2~ATYJRb7UtRB(^CqP7qfc+XxY;cm>kI>;W&A%reE#^fcNUQ^>d5Dh6Je(~z=;rYp|^{sQ)n?viH zDy3CxYEg-)bdB@I#9S)BC&Z+xjWe^>Tjz`9F$7R(99K=c5_xON$UCk}N<^)}C#N1k z4biH1W5_i?g@~uE$av+RNU3d2={hG;ckcpUm9#dVKf6{AL?Jd9`zlSIc(Z zH-hl&b}&qY*jTEovh`-xx?D8mQa$0InsVWP=Ub;qRJFo8vHC@buqaHTh+r6VfkTi( zkRg>RNvK&G0K>;{aBImh5@N1e!oADS5dLsS&agF%1fRV=yxvYz%(W!1RmT*|`D$j3 zX`F4nXF_jyijqoU;v$lB283DHhcw~Q_<^b9oF$iXw(P5<qDbf%w`0mhouL{vBO+Bv8JOT# zPt2=L$fDnVJpaY@IAc5{$qIAF1aNzZ%S8*Ru)*CVAab#4c4IP#hnSg=5E|5dK^2{1 z`Nrduho|kMlm6|CrM1VTd@e9=Z4tRVX&x^7^LewKH0OLa_gQp|Wi!Mf=3KO>4)I7> zHO%~Pe)9wo>W);)1_daUV8tk^`yfM<8jwn&SwRt*anYEW=f+Uo=)T$<#-v#l0e-mA zpKr>e(^*k%z4_?b<}l?{WSFvHx>)sN%;S{K7k%G0hB;;39L6c8m`licvmeh^y#nlq zsc&b)w6B>B!z`*X=Ul{DW+sJW+j$5n=d$P0MZO&H_LvBJ;-VrWCUR0ExWyc)bb*4x;n|s4t)#ysx&P5gA^NGH>pc>$O`>g%scIpgu zj;E}x5ZLQfH;)~mZ!6J$;HbX8l#5~44#&VdlH|#BS-mH4ZzyIyCW8sf~ zWv&fbrYyOrDu_TVl8XYMH8^kB85*OE>7Ef?jZspU5jKWC9`W4=%P7z}^OMil&aq); z!YSsqarGm4YZ~WbmSZj!aJ`=%p3WNYEHfaf%H}X#>h|li@nv8pVj^o;R8u;pQc86s zDR^sM+-@y1B09reeFu(J(p3V=M?T#?m&kB9u$|Y=mE38ZvY@q<7A{U*1j($b@4o z^VT$kH;3rF%~>8S?Tc-iJKj%a)!R?An~1fddy8Igrk{Vg{{DNHhbdV@*XyA%d^==k z;H39cDi)jC2N89q<6JB)odY_)2G|#uu0IU}Nb|3r3oOkxcdP2jf zaJ8_ncJYsI(r5c}xoT#u-5%oh5Sh>#Jek{1UT*L9an?C&8C1QcnC0}O`N7v8{OsAf zZG79A$0zN2A47&B@ceeDmCLL(%ih*Dh=}qZ{>r(tgov@olx0dXWzFSifxC|`Qaz-r z6C)pWVy!{TGGQ^y-tY)n>=4{c$EMv%s@c8m% z-a1w3yz3gL0N?Mn-(147<^S%(+p3ODN!DZ5Fit0>?=9X!SrKt>ORS`j|=qnIaW9YuAN4w-( z-!Lkutak%5);j(t>+;P7Jy`j>AwO8UXX~Iz&lY|RMGzh?{LMZD0af@XZ-QgAmhW~` z%Gx((*}L;)+c$PMByY%DULVppk9-2CSX``Fq-)#% ze=mnc?*s^xp5GmMZ4eE;>ibdLW1 zAHV(=FGdCA`-^=NEdqJm`);Q9`Klsv)S!=fZJ2jW>m33drqFmBQ(;oeR7xR4B6xak zODUZA7 z))|vZ`RS%Sar*SU-A!fQm|c=7l*Upnnp78#e{{e#P}kVqm{ZP0VAcX-G226EEX_J!L{lp3!=$3EwJ$akf?O@z*1|{6cgxPdS`PqtI`?m1^^L{Gaot~? zCH|Z5EvF=7l8_`zbzfGz85u@HWcY|sxxXskAIbOLk596_-iBH08)tv{>aZEZs&5Tr z$~k4N#9t=v8iz<@$hnAjrm@Cb6JpMyzk43Pxzw3AL)8D~PhJ~F&|`15rt7ODAgX0L z*mhRy__{flA_xeG&YG@q%!~+Z=x%#JL?-o?Q!bY2;i+4+wusI<*ExQ(3Er}(#w3k3 zMU)Ul#To{H)|na^b%tXu!&GW=@YRk(CMF=1A;gqR>v+~WM6KV_loUa~F~`^2csBPH zx0(P$EFtS(PV~b!hr4|M0B`wh(J+&!&KiF2a7@DP3y~(-ey#47mWH zb+qc8Wg0_X@6+urZinz@GhHm(SL@;Ji`n`6T0N`#2 zjW?y}qHkAydzixCxRP%y@U*u>(%Uir&p%lo)%AOXd@cWLpSTv^5(d-swM(iBxkzqB^O(mg!&4QcCb%mqv_=`{@t%Fj(c(qFc3N> zLw|)S{EDoqpjGp#U+xR^LnwyH8vE>KR1nLo3d0zulnF@zT4zMGa-7z?scT$SY*NbK z>kf~7zL>d5U_F+9_-y*|O&p67XoXoS03IPwfPh~$$pH}4=(_$Z5VSGuoSC)0sE#2h zVoa%sw4VFM^iGENMVZK38e^GqNm&t~dP!%kscl+OrDJfk#8i^#c5>dJ zx7at#q$yW8B|g77c*_WoRadj-)y=^fib;s@^9jGbW|LWrxIgUdk!Y{DB zNz^zKvl?r&lvU>qQz=JuBEk{)hKR-(1-xDl3b2~DW5~aImY+6qHnT}!m-LUX%cuL2 z1rAdhV`gLIxPny_@P0Z#5%_YSyLul6fH2r@R?8S?Z0l{+agE{KFqKjRZ~#&o%d^Iw z&%I%KwH_-Jr?Iph(-6vj%#|M;QuRBM9QOz(wC;-oIhR)I7`fG2`8;gYJ z%T`s9i2u&7E}t&(+5QLuKt!pkY7G2ys?n=#oa_GA(fDe6q!~F8q(^gJ;8w-pA|M1!LI$=nn03ns#kQ!&Y#)@Kv zQ&+-TEw!&lS+zD4p!+^(JDaNl5m{pzUm-y?@29)NgoG)l*4u}xZiv}37KI@eIhGt{ zeTas!bq4Q0cx5fXJ#z{X*OLPkCfy#U))S-FLt#Irdg8XuJbSZ!_tDaMv))bnAw53t z6`*NMDOywxQ+}}OzW?6&Ftld*qtsr6>SXjfAKdj>W%pE z4BtQFU#ySwK@hPr-#`Ho{_$(+TibbFAL5&BB!aU=6SJ0_bCD2pDn$YN#yG=oU(Pyj zZ}*`J^~TV@@t9NAqWItcbo0?|=o;HKW=cgBnDH>Bl+_wifS4-!xJW%H6tk*hQUE3h zxz1a`)*=F?ao_awdcKHi%4I(WKF06mZXa9Ejbl)-hK5+G)L;ne+HE~MYeFhDqup$cUQ`Jo#6pBc z;Gh5O=4|dhzdrP>*^Pw>cVm2V-V>mATpMtr5K?(^I=kM7{g~%7X9;80Vafownz=0H z@}!%hG>*F3e0AJ6)?4$*%l)UX_Aj@?s%uY{?tJcl_{r^yyP@@lf9GlUWM!;DW}Je2 z^PGRV(YmUt5B|f^em>&a!XH8!ll=7A7A3}%2>?_MQz|04s5Sgx)txWeMQcNn^$`2k zp3d5-l;2!PD)43~|LBX+nQANN3hQdU$wl^4hT|ucO5?2CrYKA?<9!UtA~0htY6x3P zmQfVaxNm23Korp|5@J$-TnZC`YTr=rO|6?N5wvZLH#BQZ5!jE(J5v-&DOFABQ~bt) z8%y4?G5n~*U#?Si@E~H%m{%uFNJ0Q($n(}&L(b5m^8%Vh4r6M(RnRGBLK20>(wDc> zzxLgSzkI&6%)5|>DL0nSm+hPFWDOwT`P|1MyCFVWb%&5&-%V322+%b)Bze6aFIR0T za<*ukHTyB2E!@1dtKO}8Z!J5^IqUP=p>vijU!At7@WW4T`9J+vR-fFY5anWKx|VPD zufY@ies(LdW#-x|Ysn9}Vb|KiJA0GYM6Z)_^MAET-sLSaLv^Jdk#`s?0LX*Kgj zWIezl*)a6SH~%zExUQ=VlG8AmC`yhglw1^$1#;f@0Ohx z1<{H@)SrH_xgFAjWwRav0u3SOqL0t|-I%MNV%ggw`eqkeX9#gUq%q`SibKe%c(V%t zI!?zkcsnEoXf4k=>n-<(fyQGz3Ure4W*)b#MEIHU?NeShw#o>>n&G|1x)4X$yW5ZZP8)y5*?8c-Dtv919XW=u>JvJ&cpWz)5e z72mp=9mW{5=29M?w1&Czqgro5EH}HL0JFvr)yojv>?RSIqTKDm5X#*?gjgywB$mRA z)}kmZd*3?q>}L4*%kBG57C8(5=YM@w@f*45XRpIsCvMU5-~Sm~g8(q4vK`82FV~>O z)vzK!NQD_^twls8TJ~<%*m=_s!QDO(;Pv*f93Q4T=vcx%A&2an?nFVXSsFk3^UbXs=4#E>wt}CXZRN{_CI~L z<$v&pk4_Avbe!^bcgX+sN8}6*F^THuH{tcorf+QPjI-n&d&A!G`O<^pqH}#?8f!Z5 zhL}?p%XEn8?vUoKlOx&)4U;uo)6nP3rs7PQs9N}jkYg5Rt`E58-%62t*95G$qhp-S z+KQg8enBxTFuXiCA>Ak6mJ!WjZ;lK9>S8dA=J&mbk zg@5q5t5=&b>8HasU1K_L=B-68oj74BSm0c*i zQ1lo+(F|j}-lbnW-yy<&%G)u`T2n-GF4d9WHRg2gE#o(z zEL7#m+3dXs%ex`uB8_A3css_o&U2@~_q0IZ{m#?-%$jiR5 zh8VFv-PODS)#I={Meoe*F4PNW5hzvo%aTe#0Bg8<`0mz&VVKW4BCPGYoR4_mDro-4 zKX~xosqY-eR6g2hE~OOhTNiU?rg_Un)ERb`ipY8&Q_)zc?(IeNFs51Soa7j* znerj&KFE+nw9bpfvt@^fqS`o9+c>Jwc(Wf967=3x((LU%Od)ND)OmBeiz%0oBxjj- zZq>V7gs`@`@UvIj_Z}{O@qGP!J-)a-oG;osCqzUqmyH5+jlEhmL^Q?ZEp^VE&fL{$ zzi8~+7hNjlW)~iw^dU=i3_duWZO3Sdo}9O}C87$gGyHeIyX2wRj(`7uJcLw4@fR-# zN#nA2v(7C#Tj#ZRo~KyGD2FL;4>1-Ih3$|+*8P}Nqz-bj-ZqwQwv%CsDbHF53OUQH zbM-P(q%y7eZWs4cHq3ySMT$Tvno5x(jW_lA-P{e0MF42MQx#_j5&PDLkZK0_Km6W# z>!{i#bCDmuiJ-zv)tHBbt*277bzDTYW4_szqTEi|Khf7!*VBgB{s05H>GN&rYq)mm!|iU=Z!$aaWR5=2^dehh^X`__E>t##lm>S?gkwu3=YQlf;c7Yw&s#ER!J&F}Kb&-ZZv;QMD0>hfwxY%A$s- z4uh%f0uf~+c#$-E{3Pz77ZwKh2Gn=0&7VrS#{>G?cnIa_#Du!hDc z&Qcb6c-lX^K6p!p5dcDn7bmlN<{Ji33`zD=im@m_5r|oakg7t3{}SZ-Zaa34iO^Y7 zE&Pkl7gft>nNJ;_wPx0u#u6cxq5%5mufn{orKgH&DgsgvAZ1EL=B-_HE*Ef?hAAt6 zx12>9XG~6jK!8({qAK@9_8MTX?`Jvl06>JTw|(ns%aaMWL);B17a3z-_Fe=YpY=6X zT0|~Ry3G(eYv-N)#mmjCHGmki)EC5Dwukujhs)OSdLQ0TiZA^?Q_VO%bHZy6L~knnJq_K-ssYbc}w_c$LBbtPAAR8>P3 zRj5wFAxWiGMS+WD%Y^mhc7|%iXiRz0IdA!D)s7(pKu{ySJ~FU*7EQhWx#E z&O$6N@21=BVcz<_aWR!Cmk_0O=3>`qp~OxoGdK zx8w|o=+&w@o%@?Zx>z<-%mDD@y#I}NFK+ka*RHz#n4jInT8+GYxk|ZG6ZLZ0Y!0cm zgb@GZ|qm|mVkufK7R{UO z=nQ}3(J~bXx#V1!*&7C8CjI%Bn@4A}DTY_O{K2C|0(^NFf9-3_&))35_l?UpcZXlR zIGiuM0!&%&b`v42W_~y3`UR@M`O*`ivo!Z+J?5CjGPI8Qg9px8UiMZ28FATIBAhj5 z*}1MEYq%&}F54+45m@wY)%)EPK6tVKrT_geUZ2g~+1!8Yt+T^a#t?JS!<0pIGbU99 z6+Gq`$r;Qk4GEHHwb=q-z9(WI0lk2hSpjk?OxU&78Jf4I4k!%A5ileG=N1;NafUie z<@kW*FYhuU(@wNPWOeG)$2QRbf!-NmRixCDD+T31b05n6e6J zXTTY{I_<}hE0Zu}DMbJ!ka0}>s?A&_}AW9cAm3-V^6KE-@#gFd zUvEO|hzY&rH=Ci(sM?RYZ7dTKk*G|ucx!HUK|~Cjvw5=*SpoJ_8bStDB$~Gl0G)xm z?eyq!e!HDELwbBR`|-2&Z@+)_zkT@ZTMrgfR%DW*ePf1LUap7JS({Sj0t)~*OSYOd z7}-!~jb(bZiTu5HmWb5an(W3$CruU|Vt#beJ4OTzMaBe;Gk|c?+xH*NQ^Nn{|NU~& z*;(rzop!q^hnO#y?&aNhvzy+!od3yBU)B{__sPz&w}uE*l@QM7=JigdRO;qj;pKSW zmdZt@kPzW?*|grY^-U;LT*j<*DHk(MmowKnMufSeEHK2v1V6g1laHV>^Q$qqI)uB1 zLy~$b=OR@(rL&h?#rcD?`3lU3WaU%c6Fr~Gi$rwRcQtzRZ%&HRBkeA;{djrUHxBWtnq z{P?7~-X;Kee9}3C3OZ#S6J9JDHh8gY9-sEpDF5ikZ@i@^7xQInH$zUTeC?vU8^U%f z%g+BlA73+5ogP3(!jEYjgKExo)-|5Y_{BQa7$+hyQ7*#FD)Q#;U>Ox)HFI_O0_b5% zD$+N$s4|h)a@un5EE05vvgjdZ$N1yhTs?TTQ&#C$%idLmJH#@C6mtc2aqEnzw$8*N zqUv%M06h+I(lN<#5Qks|QVM`&-0woyxz^FyvR!ok>BW4Q;&#X(m6KT$Vi{8zrhIkM z-R!2mF|D)vkQS}q49OU59gnd%%c|n6Nm-b1y^k@=e$0($6*Z^|QUuQD?VJ6<5L%*t z`#0W7S~SaY*1otKpPqJSi*9p>Z`R}QefP0Yge#`)Xb^v{0! zrb^;R3WBM_eWj)WnCkdDLB!LUu>?~-!Z9kot2z|NkRM&l8q4$6R!C~fQnN{8D4jPQ zmZdY!vSn-;vceFHGxQhN5dfVrh^SEKnZauAVlKm!i)cNJ>!|g{nR+UVXwK4sAVRLm zCB#EG;+|rLEXoLmsED?PD3=G9^LcCU_JJ8=k}4vNv9y*e{f`hAt*a7>W!epK*4Uff zM1v*z5xv3y6d$Qj_LBgtnezEc-FFj{C+ojsd_~)+4b2sxh|%xo>PEGfr8HsshFWS=2HvJ?}!< zMR{xCFeKNyEKmfzWy81~5+SmoS!<`5Lzat$R{&?w8QM>|8Yp&CQc-95)n+_fG|mz; z9cPLYG2vz?vz8fQ7|Z)_FF*X{&C`qSZkr#Sbzi*R6xE=R6=tmsDYcF+Pnsc?PhW06 zczm+x{S*@bj-fb1xk${y-+ym)cSs?XuRrK7myKgy59xZ4S?ivjwM}ChXL8p4kpAeS zoA)1`%p2z&U2lT-jHoH)M`!&<&o>`F6J~CkehQ;uwx%Z9p)P1fIHJ=HF;nNwtl3yV&iPiQbfj>5pax|5t(p5=6PrPqcIfUY~yNX z5aIdt@NfO*>GsI6{?n{xUSBphs zzqsDVBqwuUMETtZy=VIRgYII{qylfYaTD}v**-pLyT%y9QgjOCk3PD2=fSe~c1Yb#O!V+=r69g})PKfTLUAdflMf1gn2t*c=& zLaeuI1?U?$rBV;+#xWss&V=__IsgF(MOC#3M5*B``oW|AXE)P#FIy%uscaPtkpj#c zH>FhV-<9!M`_hIWWQkekt=o-h2&pbvLb%&afH;P{A5+Sjinfj$XX^I;{BC-%@*?u1 z&)2{AYY+dg4_|%o)`?^RhV#z6yd6_6m$T-O%3+vZ-|fHq_StsI`yu`E`PO)IK5v=z z+0Fi9+466_fAVnEta`tnr|4eR)t^gqtp_aR1lGfhABDAqJTv2tsEmT;=D1aQWRnqYw#DlnnZ;umBw+(;tZY6ea*Fk0ujYj zkg&0)sMf1{6^Is)YX{rXabjGZZX=>&1_fv=ZKm>O$RFQ@=-RECkfCu{OI~NpZU}vA z4by&1Co^Z6U$3Xi`W-^9BZx$_&e2@-E@lm>?1z*^j;3@*BC2=K&)y7goj1A2r!Nja z_~7E7e)#-rSM!o()muX_B~g*H-rpTk)0ms>NW|xzA5;1BUtFug)v`kepT6Av|4qGF zjBaU`p0$Q=*uy`>bmo&)nN``Yu69plFx@t7yOBYF%y5A~+;Ph-LI@$j1r|a`MnVGG zAdJ)?f#AZD5uyZJLJy%y(WmaY8$uq@?h=1C9f5Tdfi!V;ucjw|LBK~22 z!+PKMdHJ9E=?Ck_uNbOaK5N07*naR1B>7r|NxSGR80f`C1kLV4`+Ox@SxS+)EMF?xs>jTT|mS zr?>n0Y>a*2A-eNbNTud-AF}q2?oBpKKXD$&?pcbUreHaJ3 zT@TEJvEe5P4@+qv_T~=QpK|lNx2ai6DXw}~s`b$g(WhDov5y=a8vt<|g|eD`@@o3% zVP8aE-YkFV7r*jrfA`a?v%ZUN?EG#@Q`XyKet6dJm%JJ}GdU)4j)%y<`GdFDyM>Jb zk^kIJKQP0p5S;tQ({<~LZGrGps{hA#-c+$>5iO$UtB|uiyBtf^FRqVc^l$b?Oexnc zco7j%$82UIwTtnK7jHMKju{*2u91J>{W;SN%pf=#Blm$jPtoI?>vrtVSFtstH!}a6 zN*Dc7q}8*2xN!u42%fP;z;iW5`1E9@iilNFW(1x$QK>GKFNdgu|*oYz=TSK-cw+Hc{{c1^^(OiHUi0M zsf6Gi_knYjd!;tI%T)k`j~;CgOD4pj^PP8dmf)y0sS?4v{qkVbc?aM7eE0R|oB!wc z-Z-YqO$4C*T)w}oum(#KEFis;+jyk!0TSL&UcmK1|Guu`gb-oT>w zi1@=7Up{+u#*Ao&U|^uyhyW&vMO*9>03do=_ihN(dEN}(5e_kkS{6k>YmIFNsVFl| zNuG@k%^ZG2-VFEV;`2d}&K9kDV7)&kZ$x?-OYMqxCC9$FFbauWej#7#KUo zYCwqj$IPe(0z()Afx(-T+#Tlas%w`{0}_=b)v*sBJXI34fpN=pw!w& zf3c2z;AfY8sruk-*iAV&GK5Fl{>8h~W(c{cArt{ZW5RXsUcOtNT@BxVaj1%CgWDyE zj*dy*?XxGEmi%&`rlmNdPhTA#o%c)8M`xYuf(xF`M@MFWSk30S_R;<3r+1F2iuQqD z-IcFCT!ZSftCgvJ{`PQM>JM){6O>wmX9TNNqK|;)*`4O;VzZG_5sZlXE)v1+?$9b> z#6V55*qv%{wC)@dDySpe^u8!CqiRVN)d)~?uHL%_z+ymJmbnCAaD*)@)^J%$AgV=# zkb>u2MO2;ho>`nSp%pbVQDelE#W~7F8rgT%dCwr$d_ww@m+^ZyX$TyWc*e$NY=+Ch zlVfg~={5{iv%_rB$@OmTqf14H=$dzbjLthmfH`Z^JTBMWYtg3Yt;f)LC%x?^*$g4o zdbR4_?w6nY=<*LfyB(v$1j6=eSJ%D2J?017`0^%w?+DWAu1H`o1K zQ_;)8|KQc(gUj(^-JPcV!Gp0X@W1kl&sLE^j2tDgcl-3{tpD~WI{;KwLby5R$7e%e zC~AcG$?JU;`)nT#+95@ozqL6Wm?)RpckvJZ_>!ZIWD3FY z7~T1*d(TV(07yj~)0_$uiE1;z2FDj(JyZLhuOfeR8DAgkF>6t)0!>341Fr(Toq>s8 zyxTw64yCGhoJ$qOTx+dLgk$H;S}~SA*v3sC0D+KNFuIENfz)6K+<=d_%}QekXy>bV zTFTiN8Wg1^C|~dL2UmS6@^Bl!_u?=P{>9tVDI1!-J!QBbztfw$^kCa9S`fAHk0-HTGuISV2M?+h?iEeb}YK&4t0otL~U zWy!LR=$vbdt9Py)k>)J9S~CYUire_?>b39ZB{wFQXL63(o!d9Ze8YaWJTanUY9s6D zxVeB4AiDc|PJ@LFfqG9ZDjglQ+jgq@lNW6!ac{0>!prRl04d9yYN>KsO7x6~j**$F z=@2}?Nh~_E} z&o^C+htt&JPoD258|?&?s?J$bQ87@}DmtZVD#*UQ^K-5dl>s`&b>{=YyMCD1Ii}Cv z9FL1Oq8}hIQt+3c9_M|;9vNOi>AW<_KOo3L`Qw3RLl`xuDY8;x?Fc{j9k@z z=YY!}CpWd|L9^YGC4 zI?q3jtOZ9)5ir;c0RfAcccf|xwv_s~r)}pDOccgIec(X&pyNNjNlB~$R{>xZ*b^Q# z-0pAR+?}qrLo@G1@6^n>5L}a35D`yVJmc88Qq4OywGjAvzl_nRqK7FxI2(&-6=S9@ zIz}pDfEpP3;BSxVVilTuwTdz0XK&_X~VvG;Y`t2B+nZgsU zI`^YDC;sz4^)RYZ$u)Bi=Sh>A4! z1`t9KEmf+Rh|Nm|^0~@3fCD&xdRCZ-==PK@*WLA9B5Wi!!}s{iT5Sm2w)Wr|5pz)_ zI2&U_ToHkqo~`5EF<*Mv_O78LI;P&ELo8w+Uv#6# z;F;%CI`68|s>8OyH~-LXs^_au5Oj`irxG1>j-uyR zxAT*W{*+5#76l~yjziEYK&jr98;3*7;?2$=LGP{dG`~~F8N>l z$De-tvtu8q^SB zhd#Pe^^)H z_|et64-_12$Bu}4@3y1c&t=<(uRK`q=S&8__B$u%Q;Y zw3IG5HA_VtQ5U#{c}lHg7rf)`azX$kEMkr+GI_%22myx9O-1)}y`5#QMhIt}12d95 z8^5nuzmGc|r!;il%+@`ntYX$VM#TM8&R5}-YUdq*#^|S15iwUWgR$o}dLzUT?rU>T zNdjZ%c_}(A(#0lf0})jrX%Z z;m>~K>1obwl*@#wxEZ@?Nf(cy6}6CCilZx{qqs)of~=r&R2`_k`dOdrzWpKDsRSdSBk0N)ltF-cukfVl%j< zswZgN5BI+80SS+j5Z=>1oTE1MUP@)8v2&s(3Z6*~PD>r4SI{;mjCG4$G2jz1Z}%swt@1X-VEu%B5Bf-rXFgX{jRm{GvN8Wi$8(n=UwB zvfP84)I_24ykvQD-jC5a#!ctP&V6=$^xg%+{hZHNvBgrDaO_+kU2xQ_$f_oKPla#h zAtstjZFZdKiPSnqcfSCb0XCTb#o)J**O8yEy#W-lMw{q^YhOV%GcyrYgR0t!*sC}Z zTZ*2hLTF2=(YxK0mZD&`>b;n5`rsW;OEtqK%iOZY2F&5we{fNzS{qj-}>;oFK?Of=e~ONZ~Y5D9XjG){+Xw0;0ew~ z?^th6da;htGa<2q|KNZAq*e*uDVUkY7;3F%#>~xeH7)7--L;GUa?>>l77$aGE(Gtm zi%!iBQ`(Fj5uN5dr_xS9)3P8!DiRzck*b`pJLf1me0)A^27Y)pELqn>czizG9%eHf zqd!~uoBi_flQkjUEoIZYw}(XyQn5KplX&M;0nrg(u3{HF5!@aZ1w*7I*H!PCu}uS- zt{1&K$J%0HD@S9XMJx~wk(;|+&2CQhZWcs*Ft}Z^P3JrT)p8J2)B8D3`=r54jqb}W z*gzV{A$V3ZCaeu`pxQ_o-qE|m^6YXfBBdG;I!7&47d_t`a<1A(hX6On9D-A|Ig1*A z!RuWfBW*{2w>xnROz`&R)H(m{AH4a_kKX#TQ zAv@Op;(z(F%Dn>ERvr;CHD(r-)JBDikaOVXYZ(p_8z=*V{{MK&U?3t>=-sfJT1Bz{p;J4m~Fn=sAHp7Qc5h9G94Jc{z4#xsc5S9t3S-o zF1kPbi_k7f9YFaB{1zHN0!$IeX#95ezdxqikbekzx7sB z9Z@a?0n`-Q4GB?HJv$Xaz!xuGeC_#V^VhX16IEOF{$f2&shHW6%Gr7-RSb`P465Tz(4l&tCY)GA70)}%;=ftRHr2E7@}&=uSOMHiuQqr-uIpn zFgO;``^#0;hEr+)(#GX8gZH#t0Dvl5q%kzGRPhcsy=O*6ECPY#1#fch>Q? z<89R>2uDAsHQD7*5q`@v^$=P=!-AEeE#$z zI3D`|?;8$Qee}-l=RB8Mszm2XmD}TVz8d-%h8U`9>yZ=DX~`cw9sr>8JTC>%K6|s9 zi`-7-Fqi1)Fy)3ZIL^h?rc}0rucAw?T_92T{N^-7_u1PedTMK6sf~ba?Wq#e`?&{z zbJS={smfBSDcqgXlu8jhTlt6U5Cdm}VnApF7P&Qf>RIp3dUxKrv)*-%%zzPl&*!j! z*=cEMM`$L3hN)ms62-a-9?2r*ssg9|NM2ACkFK;IW*bct&jE`-v7Txqt z3{2tI{ zL?DN354YV{AB^u#C0F@xfBkK?_<;n$5(~{NT_1)4O4mZa% zCFOfygLx)LkgFb+qJ~A}X1}buu7lm*N;jbjnr4c5@v&AG~YNqM4nRqGr!7htpCoRxvQP zl0GDSvtO>(v52-=if1~d8sED%0igBnG=EleTldw0rh5Vqvn2Tn!a?GqEFB98HY`Zrd;`p>xQNsmSMixh>S=T*;hwRb1EKGxSK zc{}OttiQCSh0XKm0;ezx5NBf9Ln#x<_X{dmaMsPvt-V-@gbxRH*<6 zs9+$X!8JexMDG;g{Nz|4km)qEMCj`7brqhxx z#z9TZ?BgfncRoElz35w=1K7Pmx>-CAb49>>k48}M_%s(7g93PmU@$~x#M4}p*xBIr zNjry4W~hK*uoO_R-Vqai^Ri2?=RMKwsWgtS8JgU4T-&DBk`uYGfi9``(Z9J{o?iA% zEhR(+m~-ue?}NKNE`Q^n4Tu4HgQ-FXn}}7hiQovw{Zb^Dd@<%W33@jBvv>~=Jf)b(Xy~5uf zU<3fLIo0VNX{_}~3mODpdNxW5`5r*gK6(X&np2&>*ZqGv2j zcv|Z9p;*;9$S`V{uf~|LtEI_Q(3_Ag!oi=m|Q8_Axtza}PVQRPK^}vCD^I zn}ONka@2jXn?(s=@RY>D-C=lkzMt!g{dazJ_|sqC{Nb0AE7jIL|3`oQhu*P>RH+8m z;HyN$%!FVDQ%WM5a<)>x^8At*LvTwffhl@-zP>n4hg_8jFE`sU?Vu_|cmaGclo<)q8)FHH<_TC^$T&+DE=UrtRof zz1s}o_LM!_VXA%PA7>St$X^>SrOC|zm+RQNtdDc!N5KqO9)vDnizs;*iwJC03j=%s6 zA$VL7+)UH$4vu2DM_bIPJUm;O;Zo|fWY27-DHjB&qHQJsW_|Fx zLsFCN7`&q?l{wYb5cYE!J8xjC&fgu=`6~8-1Jm6pzuqma1@!iiyWm=IEjl`11w=e9 zrJ2`T7eEmey>GmIu#IhY(RQCc@Wr}Ixm3Ofs@)#5BaDQHr9Rxa=;^^_S5L(;O0}D% z-kho`^bS2^bFfqc1o&D^zco`kkyJ6l_b5GtRHdoTOvpx;-R*oAhyV$qa{#a%qpIB< zc4Oa_D%*AEofoy^l7eG1OjT;tR76yBDQzkwYJckEt9dEWlUBW4bMVyo_AlR^R)asz zMa25x_EQeN!Al!m7;cXl5gg%ZE}y@h&c|qAo8F7)#mZl;L#etu<`x_!gi_nY4H2LZ z&H!6s!F{l^fnpKC?vpjCSQSGAQD8)<>NWw+;**Q`a1~a8ifG3;+&cxJh_#=-?n5hq zsUr5iiJ%=$;l4%$?*jmYfBElbV*2tVv%>l45NW>`P+N6W4R*yoxv8ID7g5XxFOK@+ zwiW>IaZxxGy*|qAq_sj8*e|l5Wk2hbRm_^u`SK<+fn(UuLPP`xr4&RYq;@rGnfy|P zh@9gth8M42GvU{sp661#;E!_(o=eq>%|(^c)?^Vgvs9%NS@p4q=2Dkj3}DGc)Y>ql zjcY|EFz=>Z)mEKfa(#DLm>^|cvQ&{TZ%)TKi`s*27adg*5&iu7c)5vlw$oC(z*%(3 zLS&o4U#TM5tz|C{Bf10BkY39r2>E?fF@$+pL``$~+6PyqiuWv4gJTgp zE#)*H`xx4-qe1=N?T%v~)ZjR$mj9ho@}3*d*)aj&lB#D~a(%G%ZFicpv;J%hXRA18opUwQ%XJ((f3XVBF8T&+Q`MGEcJHSg zo~f^Fb!^`lLfia1j(QXMtV{5s~#OKMS^D)tqKkH(B7fon6X4hU?!^5q8ID<6Hhi{*PT*k z#$5F=GsWOMBf!106A@EY&+J&M)OOG{0A>;c1oMtkRnx!T$N&He zWJyFpRL|JjXR5&4eKyfYYETS1gl&AdnrE~9ECL7y1Q42nfmmww>>074s>QV3%c`oV zEZMr&QEqr#N*5d>^knPz$*xa&oAgi%09I>%lI7aE6|f6b z72ZvvfC7-JCTYPcKmsxv~|I4$5^XPNsddo+{A`yCxl#OJ%s3}Rt-$YRKD?a^D`fAzq~zd#yF=s<@)nq zyHv9_rJ7R(u-ilG0(YJor<(}@jR;dw&rPc~1T0nFvtX>DzWjX!7`AXtsrK?N!`m5( zLQ!Dgm4CeU>&WZgMMg7oh=ibK54IhnI>srt(KiAZBB(<2jtCdg+*A+*RoD)3&h1^Erq5;ggthz`@$0Y^t)bKbb$IvpLqUs%e{qg7-QQgkQ5k)m0x$f?zmO!x_>w$!xl(y z8v@_YM%#JKf+sL->j@zqmSl!Q^i!(;?r+RU^mfvz0y}y$>t{!ak)6X`(o|uokg8>Y zx!Nw-DOsv^Dt0WooArfEu2bIwx_AsM^f1U;x|-dR0X9IM0&G zH$Q&TT52{!Jk6O1``|a@Mywv^3S*$hh6KDe>tsv@SV-WRb#upWGtI(7~dT#iAYsKW1mu^&6WSarK&d6DPj zYv=j6NMKvVa7?8St_vI;GXn`6=iCPd#3GvROBtJDX!l7a07Nu3c0>rBBT(x+^_~_+ z6N6)cfRF^Lf!eln#?}Yk4t_2||BzuX2uKK1Dt&Z}RPXOdnz8~wtA=S+YNu49cgJ}y zQUC2c!z*H?b9HJW{ zdq+2?G)C8YG2iazCzqQ*v=lvGh3HTe<}9a_naE6;01%g=U2vV}=Gj961enr~a|2># z^nR3x2&=8-7mVI zCAH!=L_v&>ydxv3hD$N;$U9o98DLS{FEVGHtLAFN?a@VGrj{Ia%!lc8Ivt&NOpr@; zj-%rx702Y6bD2|-IhCfyOiKo^HbyU1yyNKoY01ZV?t)X*oNMq-#MZrcjApPM!kp`u zw-W*$my(KZ2hW5<=T^P1Vvey7tg2(@9OK-XR0rGOe-AL}tG01^=~DUcxvU>2CNPFYV`Pf5HZ&nRj|-lOIWa#bQkGxg55@m`gh zYdua!P<{UR%*===dY)2NHOJh=)tquJ;)v92N+lPWQ#OO!!{i;8s=3zVysWyAsvzN< zD-k|DkBvEhT=Me=tCZ#TRLtzv-2@0@=Z6?J_jQbQ$-;=<;TT3^(5AN&5@P%N1LHdKDpE7aR?#^Nn0ZH? zr{Ks(22T(e#6YyUWTq?xxEDG?ru37}_wdy?yubb&X655Wmy6+0|?x5)KLZYPCz&SMhEttDfH-)0|}8d&hjW>5)B@T=VRFP?%^g9LaQ%nryIL3FGV8yM@(_h z9C6XR)`S%utvZg5dXIgeW?sxy#UMC>;6MR3p}|9!tf}af#K3aV?cfL@I%?E?CiD!V z70@>tsv{P))=eCV}B@NL}OL30oT%DsQ+t>#Nz~hpyHhmwQ z0h|wh%7SQ&I49Z983E@kYG!JR5IvjOeyTUe^ufc?5fa#W&)55TH!rG+Xr9S?TJ`Rj zq(PqVv;6JBML+=0*j#q^vqLZ@2%efb(aabjIvPA}I@fzrwN!OKmo@Q(zh*i`t{Jj+%@JR;sihnyR*Dne7;=D6>1vDOGVy(bIlPrkJbbDn<0a z{H-GsrV6X*&IZ3!J1m;3PDP7=BaDu{BQ;E7wYFUz5HVNHV%Y37gpP?2xhY1fb~sJJ z^J$sy?rz!f*PmS=03i+0t0{mDF?4aYKh1p%F?ui|(R3B1^8PCDkfT zFB8$=xQaeH@2Pn%&Hm(9)&O|53U{Y6Ej2nwMGs4EGO!tlTI&aA!i!BfOnJ`r=1|Vo zkqkDydwDYxQ5Kt*GUw_&dZtqnN7(p)YDNgrb33#*f-O@!@&JHgTbT?1K=r=VZWVal z^Sa~SQxV-ywTMElU004Lh0ssI2`oL~D001BWNklD7bsqMuJ)EhgTXlzb-`ubJ^+eK@ulU3?qhN#j%jsLS#F(tWefqMY1T06xmHSyV>2ZU%&Z|b#D!)&akJIANy3@ z*Q9J`tIj#K_x|>pzP0wD|KUfUM{LdmSeXDKXMOza-qOaCm$wrDzxtpeKq~3`wf^0gg(uk?kazM@yJrpu-K#7q6RA2u_? z-}^#-aA<$|?&?o}b_+LioEqe^dAI!fv8kE1da^S9VCKGZ*xtcN5(CH+v8;oX`0Bky z>=LmDFzP3_b~9uAh|fwBFZizKCIFU(YvY6CH$I$6L4%&Yxt-s-(tq>rthV9C zZlQ&IbW)BAl_)W-f%TE4+W@M&DR(9Sg#$^&d=K zf>0zf)8bN3-e0(9hwA<^fN*V~bBPB_zmtjmq5Rc*^(!y+_XtO;Fnicsxt3vJT|g6X z-uUCCyFd5eq;YM0k;_El-f`msgv7TVm$5UwRPKzjx^>QldE>VV^~!!$84uuWWv^^y z@v>D*lfGKE&R8_9|LpUV^OZeX7$VWn^yAa&!^3jiOP;^dKP^qu1`bHI9QAdoW!1QY zS$i;VS{ni*1T;2GSN3RT4$j*54(y`k#*quGrIdm)joN}cM5#O46?seEZlqV{`DoDV zK-Ds?gt#D_4?ct%VnWlOSRyU@MiS3yU`F_4SL} z>9W8+F#qss>b&t#suqGNnr!KfX0P!p*oD0_Qo(NP55wb01)9fKAipj z7kBpu`pMD^a&>jAo7SaDILiXz!NT7f>pT(0g^%y0Kl4`k2XANZo;oJ<6?w+tnZ1(B zJQeTWZ*IKU3v>S~_v`(@qeMJex-=1<=yc`ZutTi`NdR~=v01VUWwk zeA!eD5eNvtWHQO~JkRqDs6JqjQKBeMM4pHu6;g;^rj-;@2qi_TrTk+r?_3_Fqg0Jj zwP^hHQIbm0OXRe5uU;H}V#)-@%*8!7M+}ch5`3Ln*CJtxz-pV(X8}`+C9e(;@3c_%Z7#CKh zJ2-0q6nVGmPnU+7gdi;mz+%-pA9|^3tv_D+en#U$0_bPr(Yd=a$?Milmu6>>zIuIh zQnsts9nP8u$E#~Qy;q+Z9nG49S+lHMqC{X+#+Qv-)~+_*dUgTK)Us-W0HCBW))Nr} zQW6Jd27#j>f}jL3b6Hs;+S%F8iz4D0z|1I8N)!@}A`yZpQ$lO0q)<{!`bnxqszs(n zKT}sHiF{#_-5BUzPbZ2JMYGoLj}oP5yU9f@fBOlq4m|22LbBJ5Jx9 zHbRJ~_Zd)9B$8?u0EECx8=_tUAO)>m1*&Z*O<0*QNQ58)@c(`||5Km3d~aH-Ecw`e zwybR;Aqh_wu57|fJ337Sn0u-C+JSj#M;}*QS>HNHK?e(Wdp}t;;cEwGrzajR-D&At z6aL|}0FWx7lxS=7XxcuFZfp6xbb~zV8v@{&C4oV4IG4Bdtn%YR{`&hX2EBA;kZ77N zOyk0AWu>I?FgZA_Z|wGpRIX}&G;6)*UZ!kdF!wWEHqQCbFA6YAowxu{x2&xTS)#NO z&hvVygTMj81|}jY2td&rKk^d1f3&E+@44P{L!8d5)`UC9%|R2M zpQslmIw5$l2L1If&;RHP`TH{;0`>}VRC>kXhh7=})Av^1hl8a%s`)4x0T|{AKrfXa z9IX;1i&V`j6VbhUQ~?-d5(EI_LM|H{6*UJ2kR|GqH}le~gt#`WC8l%ZIh3`pj2-1# zXpw2b%;yVBgvJF$)Y{NGuO)ew!=jtdmFZ&6)_BhVkSGytZCSfai?s}ZgaA;rjza)2 z==I`+2|_f}X(9o{TL!rTphXAAwe6ypNhL2L)z@xr0igf>58nETPi)8FrhN+I{g)@* z*~0~ZAN@P;tk)mTtIm<@ClbI{4yx`8hLpm255R}co!k6mX*`$#kPy69>`Ja53jFL( zy!QCK8l?Dv=kwY$C)4`T)GSRXU3hMyKDL(_6Nb5b`>?e>6sdf?bf*h9>4}q--|tIk z`Q|}8)c8_603g5sE^TEW9IXJfCZwqZU_Al2b5J_($Gv0&Fo4GTey)zsYXHL{`R-f2 zHy+k6Umq-MD+LkggM$S#6^UZ@o(LcjxNKbAdXmI}iy~XDS^%S5RmLl&NKyn6KxKS# z0YEqK+W1ThDUe8E8S!F5Cr^7@0{~i!UMc|;X{Uj<3OVj2VXYNE^ZX=#ii7|_pif4C zf9A(u{NZPZn=jH~dU1Za*PSg}06+G(-rj^{r>hR*aV`OT@!=|B>7x)Z1Mtj5#0(|H zMKDLijLLcdeGMUKBj05ke*ULE_0GZkwS7G)!ohS^H$EWTJ-2Bhe(+Y-Q`Fc%L~lKA zwlaFO4D&V^8v@XV@WQ3+Z-3B@zn2OCMW&RLPtK}kZKF!Goo2ze9?cU)Qix1TApl^M z%dMU+TL<9LNd;ik(@7$(OnUu{%Gzxe`h$bz+0yI`QsctGv=UN~Ai>aSl4zMH5YvUZ-)%T!rAFh{1yItEbNFkTxD%ZQj&jUxodbaQvu%Veerz*bMkB@5vC zcCmr!M?Q50A8FlG?~QUG&|m$xpZS9?@1#$K%;T-@=KG8G(>MCvrvd=}-M{_zTJ~_V zW_gB*0PvN=8l6NE0OvdazlQZ`)d8Xq7=ZUd2ud}uUe7-8|Mn+d`^Llb?|L?WbyqD` z)xlYFuy6;Z%Tw_qFBSx}CJ^ZV`R4NZJ$-lP4_8hC^Txj~wi@dJG_3=$JIMeXOshC$ zS)xGQJXWoJa8f0T0Q6EV)?K^4oeH8^X#pJ0>MN7%@+5B^SFO9bov)0q8auD-`O;q9 z&d-+ZtmY6{2;^E8x!#P=8%sh0sEk)y)U5{)1Fy1nT5c>cgG8p~vay4NAQ(XFC<5%c zGtb}m^4^v0&U3yz?!T~+I-sA3&)nX|@7}`s%C;Wz552Pe@_r9mO5+9NN?+>`?k(N2 z@q%$QGpVM=hQ@?ERe$1Bd;jOxPL_=`E+`ShB$&WT(&fHBTsdaMZV5q=@QR^Syt1>w zL`0M-N|Zog0y&RW8;oZg@N?fd`V+73f93w-<^5tjP_w1cf|+r+bXtoSC&_v3k1IdO zXnN{NkS=u_ECCYlp&caz^gR#zfmVyF=JxE_3=x?5yfEZ5(MAtWPgph#RI3=Sw;MRp< zu2L;rz*dnA3++7OT|OXB6aeEwx?UbWkP=|#u-17$_PJ*Ud9pXm#=Z1Y&u(RjjK}Am zpIn_3=PNsJY}vYx9=>eDFMZ?W-f^W&;6e)k#ZKXC6Bqo|oOUJ`E9LRhq!Bmi|Iwd) z@#FvX*TP!;yS0pJfxVuJQkbYtC?3xY0A`NR@|tTQA&f^VNo!$k5JW{HSH=k<&$zbJ ztF8Oh_m_X*<-SfeT3;yiw0P^#Tp#PpTgjqrbtt857T#dl6#xv}Lu7L|2Aygtct zrCQIw_M}eK1;Y?$ViPU`=;f(*0e}q`s!MR#++rMON@S|L!+8&^wM%0s{iL5MG|sw! z_2Rp=KL8L}mqg*_PJXy(zWK0RKk|Z{j{hCco9^#-{$}|rjk%EWXU143 z8|-2CES)I;AOCNDC;FTljFq553v*#=yOZc&2tje6StE*%MxN{U}KtrJoJST;7* z1mN%gsaGGISA}#h?CND%g%HXnym{P0iJ$t+=+V?nSMIp!~ zDl~xk%4~e7zw+a+#}g^AGw7V8uiu{moib2y!374eYA&oT0Q%{F@A*dy^HZPR-F&ov zdjJ470Kl?y@uPW5g#a|dByr-)500`_E!(6#_#|2Rn z2|Ok0HdKyR#u1<-0Q!eN`PvshJk2Ekz_Z!igVivnyHoS-nSJSU_OZR>&QbGZZh!Sm z1K1sBt0n;4T0UPk0IqKL05mql9vbHva4z^R+T-(;1z`5DYurtXn?%USL)F=PaZ~CADYqJIAD%a>F2ktiq*>Ud!Q#Ng9@2edwf)_FACyJ}o7Q*m7a80OtG2ZfrI4#3VJn^h)HgbNpeIDnWp1fWERu8=Y~|FdsRB@uw5 z(gJoJDFmei02hL>0l>UAZf$FY6z~DSFjpr_(@zzEvbDkbtz6A&X95PfO0=NPk7xZ< zta0I!0>AOrlUJVE!FRL}0)Vrn2^Rv>H6?`$+!(KLz4x)X!O9_1*wTk@o^CGMf3{!V zFEKZ^i%JG4vAh(X{qS8K`H7=lW{%7Bs z0%&YFSQxR^=TeHs@i_a4V4W@ufVj2*IH3ILi-_7NXE z>}2}6s|CKb%J>NIuy?_1Y<%Vm6Z{m+ zo_XU-1CW30az8OXyHsG4;hUt7?#vz@RVUNtWNxaZnJ(J%g#p5G>sLP9J8o`{G(5xe zdFg)q`!0Rqo9BrZjR_JstzBh<5OjH@U)syQbcn7OuLR;SA*5XDG6u2m9*&t1(=qpSq}={HUh6M1VVh6ubSn}QEg zUbsAX%Bd_8xtZ@tPcp=+vRaDhd0gJ^$F;j^U6HD&mR*1kp*22&CxwVQ-+E@|z^IKC zQu)9>1RvP>-~w+B&+M6PV8x$2%KdlmGnBya!-adlD35A!dGNI|J}@-#7yhN7By~m=BlMtet{P2>`|i zpvz+jLS^Y5Y;a z-8A{fKQR&PuZ*+9Cskhww4JkleJ49PH{bp0JyYdW0qgxk&pr=J;gY(P`tpo_Q2~vP! zwhl0!g%Cs#fD|MM=cU`-N|h9?4T+Wrf|&xd_aSC15-nR31YwwoJP`o-zyS!1jXrRJ zfAOnN;`!hF>*Km@wUo{WCB%8zWQlrpC;7Rz&)z+4q#%Gx%K!+FM1enoE&%JiC*c_z z=P0a`Zi?2iDKN^V57-%HH+K6``lTcxy71Qrjv6a4XIi!{Y;=CKXwEZ;G9?MzdIAJ9 zh{WcI?EmkIZeXUr^`p8@*a}poFlmYlh@6NGK#sMIK!=-C&08k_%1YVf{Ak!iauyQ<1RkMx` zjSKtzBp+oUMD=xLr|(@@)K*FYu&SL4;qoZKI%Ac;0544ZH^eaeCQ-1FPN@a7?aAOGBq zNV&wTjPvJfN`Ir_PnT_QotMzspd?kT(@FzaIg!YZxOJYtJvxdlPP22K{`WufocG~{ zOa1S@*#jV7d&(V;F~h?ZfG@v42k@DzDbVSuFCMfm@V)c)2XAiycsy%gznlX2YrlCk zFKw1c0O!WXl9c^I{quWW;Iz?~A>eRnnVGo@pmz%eAlKr-+yHP))<@cwU)jq}N)Ny& z380tjL6#(1OqVr)RpXe%q$iU#mEX;Cmw?7Ezj5%pPDE7HQldz;67a$Q#H+(Eyw{nh z+W6yDh>`6EU>{ger$(g|fdqg}-acH=I2Uf$tTF(Fz(4%yt1-#pJihsG24LLNQixUE z02uai0B0*>P3POjATt77HYU(TN`slB8u(YWxCrTsKlQQC-Wt3+YhV1ntI$u0d3~Yf z|HT&`ZO*S8th?s+e&;LRC|V4v=fLu#uO=E0^-W^VO4h*$dm9@y-N& zaMsqAvCiO@#ser4`Cx9O6s_aN`d8LY{z>UQ1DP5YX`)azjv&g${ae?PH)j_LMm(jj z0{Bi;G1V=GE9HZ<*c6&fM0&nD#2JU`SqabUyp8Vdy^4! zP=fMQDIth>S6i&P+UN|n95}KDoyDx2FJV$N9A`CH&i8I_R&vJ1J;A7*4Vjz@6h&UkLzG(JRl5urPo9OGi?w z*Def0QT^hfDLy)&AXS1E6f&?d|MnX<8eu z3=$LA1OlK0p5M)LMZfg83(%t(i?i)Kd&bI)zWmO+|9XHC6*X}pMVcrriGYbT(F`V1 zc;B3c$2>-}TH^-8ulj{oxY8GusJ(zxTCi zM0b!W0Cnps8y?T?thN9y4-x=Rmgd!~gIVKewcXBDaJ->oP2d1Z1s=MmBKoIPWC$z- z9WOHmedEsE@0^iuYqzgmIbSZ6qG6sfdnHB0I8NEZgb?`NSqq}5bdBpg-9es2Znd@^ zfL5JgxwWg6XL>`vp3dud+ozx1J}*1%`0|YjfWujx$q=cuc+KIgF>9WGkN`m0_|_AM zmPQZ|%X&IjKzu}nJl*IY|EX7`00i$OYO#)ye&~}=)d_6nh`k8_@Z0as-#+e&ux@Xy zZN8v9k#}bXK%vES6?JkCz`@E*auv%Me(U}cz)O1tfdA|5GtXSD{nFa_dE*-!089!6 z;H-99id(zIS?$W!^#lp(g61?4jR|)e1`t{Jb?G=52!ZEzxLmHXG+}^1U;qDs@w3;j zF3N=#)Xx*UvmG3SXpK|rWf;~M_t!Z@B05{P z0A9a2J};Y8i&w4<8!rGnIGz_tryZSVW5c|*#)lYyWikMm)xk3XSQ-JqccCz2Z6jik z8Dqi?RYY(8g;$>}{mKR*FiN}5jS~6k@3{;Bvo*mcfOW0i|MJXTLMCq@+cjw=T z@r}!unx+m zE?(G9Uzn&@_tQ}#Mv&YGXUvn&!( zB%;XFUM3KDn8@?W_cPhgLsZxLf&KBmZvdhLFFYL=Z2@${?9T^6Cioghr zyQj4cp_d8*9!~2?E*lf95a%oRG`dPrqDTltuC8_AaG8R6)vOpiD`T+EA%xeTzx{6n zc--qHX&RVfM#OnOw(3$(Ng*m504OOKXhX=AD6}8~2+PJ!%NBs~ZM03amRp$;=IRtA9cK5F>rLNh2@-#n2U&EHj`Z`zt>{x)<0h~Yrr+)Z~z z=~?Ap*)NhrCW({+QsC|T3k1;}3GIJuC(qQO35O14|A8 zyfE%J?k;x6nOAgkk}L3ZWoF)gIBQ%8g89-YeP%Z=O?YOcIIt!d7r?OKOhX6+@cpxf z8N*C6=y+));b`85M15`Mg+M%>ZqDZfux!FvGz z>o0w{5pg9%S=(Ns;%e9|2q^?_s%u+cuMKG1C6oC(TXX?v9Vkj6#e0XVN9U$CVQ-)k zEnc~lOMy|M<1s%hkq{Dk{Ne2JhqF>(l*v&h3q^nO(|baSvh`)_zkF2BYB#H0U(2x) z!$b`e^`-Y0!G^a_>qd(#5#wCn*v@K?c@yp&)l$%n?L3jhrhP4P zEwvN}a|6OSS47lLMXU9><3x&hY{(<;;XTgkOaQGlAc{U}oP%Xu|EuVp*j|19xin1y zT)VVut+AekkX2(n!?Co0 z1PLM%B$%1*{O8|ORc4&4Ym;=ovZJj8z`X1x=<5e1fM@se7~tmw#PqQo=W4wvUbjg(lP?#{vL8@S~YXwf2Fn?P|i#=F2Qiq=;1rw70X%%wPHDJKr`LFWk7E zB$~ls)J=V|Sd4l-?`>Q;sg_DW60YVRz)2MV9G8xn6D7yFaE{N~fOWJ3zt* zS-GQCw~D1A0E?A1o@(orB$K9-zFM!(4&7*heBj4(nQ9dRI5@L5QPcS{OA{po17O;o zOe6{C%p320u<71qvQXtq4G&)z80k2H^c^1K?^d0T|EDg@f8xo&kJ%zW^X) zS2c0EY7gcPz|KgYF05rtQhHFXi=mVPa9+0Oq{DiLXKYckMRY^Jqq)cu83HLmt+5Pt zE}YI60QIue2bMyBurr=8AV_%U-dMZSuRME82y)&t`1t&MkZJn1#Se~lK#30Hg~KTA zc4116Va?wsONl^)nr#+ZXnGWg7riYm2)y z9>B7)^?JG^z>CUiC9*`u8i!b**&4sQRV*4m?j-=0adYfqm1=bnrv(5I+k@14URLey zD1G5tf2*gqdg{FOQqsq-_Flf+Z!JedTekkIPnLa+zD8*nj6$nIt2d5TS10Mixyh6e zLV-%CyCf81b|q_zcgH0PLxyw7@a&~tbRh1X)Y0AqL0Zeog-F!&GnuYS_!{dP>-Hx_kx3z7tUo%d zs>W80{p54I*S34ReRX)Y80GTXBx~A6NMS?JN?IEL(Y32XwKGVPRC(}pVeg+AA*r?e zcy1fV2;uc>y&yOqW##|bJG0sZ36|imAFkdwT2(ewHr(1yjpyUi9GB*x2@qr)8^^)x^7g~|A96VKxO|{4qnJ2Po?a6t$JhhAm%I^>tiJIWMOZPQ>8>-(YPl8QUYhIK;T(z zgXd}Ej#eH(ofZT()_KNOu?Y}2k4In}mlAQaB?(2MHO8;A-G|fp=E^MT_@mKakZ2t@ zy*bZ`)`us@{a$f0o9&N#)>!~PgsiJi?n+kC6*r+aF_lDMD1ob)k3k9%KA4(#=^y^s z&TdbxEUy}OZJheRrz@9f(X@VH!aEDkK;2p)1T){h+~0UMxsm{8mDyAZSkH^HX>2fo z`b8okicC_svnBu}g_xJk?JMKQ(z{?+XMB+qdHTx-BSSm<-H|< z0PJM)`Z%38KGk%6D``wPYeLgH0+u!qGc(>b+E^!m-czNDvz6V@kbzMeNuncnQ>E(0 z#OE_0NjyG1Uth^Znr;9lBCS+dS7v$d7proR%P85*A%<0%zF4WT0HAdtFwB}~2IFSY z0o>Z)0w1sZpZVlYqV^G{ysXaldz5+Q@uWmfu-;toP3JQyt5XS{szsx$ppv z=PiJ$4RzB3Xl(F8u@8I0WKd)Q81)ijKA4r6PSR8Whz$Rvp8<$lB`$3hSli=y)p=p` zzx?nsN0k#&Tp1>p`&p3*Z1Snz&D}h%!k9?8 zH;a4p+I4wG0C01X0#q44$W-Hby0RQt3OumdF|2h`T&O9m%M#*tWJX8pCt3$)FsE9# zCT>~)2|75PgTRr{0r%3B*8oR}lS0Ml;%vDr(hv)T1i^>ky_bTtl=$eD<=TeGelKd9 zCuBV&(XO&<1|2`}%&>NtWTNqGNa(iV>tU&-sEvPSlE3k&tG+lc&DBu?pfi0Ix)-FV*Z>%)Z+0D_2FgJ;^3Y_`n}DQbbmdIC_5PD;G;> zBSO6_1HcR-O0)(5X023fx+JmlyjV3=YhoUc8F`j~0m67Vh@8LmOhk#&t9qs-F|giH z-~EpFUMr=j)AoV8Z5fej806x3UIQRffAskrz}_f-a^9qpS{F!&D?@!SGhRt){bA+e zNb^+0GOJnT8XE%Rt+{Wl%eB~KAO@M7EgAqe5CD=CcXMeWuI&_gA})=4f@o2r{ zT$-pZ4kl>T*{wV(YC;HLpl%k?lakbxY)V1Vg=1zxEJ*+efRxlFX9N`qIB-AHwQ+>- z?u@_ZQbJ0Oay_fuZchhBX~LzUUR4f>>I)DkOO%qGNacxaUGM>WnK-k=piFm$$GGl| z7S?xf+)1=(oL5SvT5S#TVXj}eHWDP1;6Wz)xw^eS5Wu3bZR>7d8hql$q)7DRv#M!b z-P)?L*4jm7R*gA4ujsG-&^6=2NYUlJev!yux-;tua-iBXfW3YfgGL@|kjf$v&hxv| z);zVju`&+8I8y+6iO6zAL^1!hSlPJwY?z9>XDt8&C@Jn6NhGA8#+dm2o7gtRh}QXG zQMk3nPLl+&zCem7yGqI!7SGDMt62dSbqk=#Is-fz4qRa4mj&NT2E)jf9py4<)h~H-Ck*(B#a8( zd1$#xwU{@4E0ZpS)`gV`eJx7MM3iZox4!YbSLi6CXDhd?-2OO|5<+0v_^S0T@XCeK zu?IeAsG>wkkt)$zcQS7y-=>rlPbCm0gMkkr){`pL#ivS;F*c$LKoBvbF^<*%D~(aN6J&IKl-(gt|0ZK!;(%<&a)tJVibAY$fTsz$kb6jE>}xc81%F<_8_#7A>O zqh2qnWgkMSbzl}0m2Q_ri`NrywyZbkMo_JFS}TBew?+*3z`rBx@80P|q-6KW zIu(QX5@;u*S?Llj zqWj7|Oe?ol$V>|XB2b>nl??!%EKFrXYl9?;_yJ&$W6rhEl9UpeqyUQkmk{FJR=s~_ zm_(vPYu)L>L@$PjQmvH~8*LoXjZLdq=S|(qA(%r5dQC{3FYAxio-qSjbuULM(v*SO zauMIlDFuo3PEjJnw{;>?8N`CRT}D^N2@x3=lqBOro=9fOw5*L2f{H{c60?={AqWz0 zPVL8sLTWiG)bYv=w5(m2x8ZVMuWDOCn82wZ6JjYf3Bq2X4wgnq(vsNvmf>6&4brl5 zS|CZ1+gG=}^HM@dHCwgsJvu*_mA7^VAh9(_?;I>1ovyY=*`Scei`E6PH!1|dIPZNZ z8w6@Y8w(MMm_!ZN*L>fR8ru*CyPy_pK84+FNqjGjqWC{@BvbE zlt-#{2!Ymb!&tLi6pQL<%~}B{vXlfHYltXOB2{8T1+3LF1!gITNHFv6K=(5l7eVX{ z5e*BSXklzYP=L=10x`WKqQ_Y$z^4Lr6bF)ol0XUq0` zU%X_jXK-blwV|J>dncuFJSvhrQS-`7mvyFD{=R1iIuSd)B#}aCL4;-N9Z?&2lFD2O zFdvtu^>{FA=Zy~x#}I%Z%C(S!b_Yo>Q!xx+U}eK;?L3f4Qi48o{~uxR(PLYdor$fr z?XlN~fBvPftjcmMx~8(}B!cW#69Onm8W5UjAV4EQKR^==G}1_8L4$_SfHY{JTT(YE z2@uGtY7)irX$pD$; z?8W)|iw$5Yoewu;xjacyCF#rPZZ3=~f*2o=oHL*>U42z5Ili`+C!O^On5GIgv{THk zWu#&p$8Tl~Zr1omDT^sO0>rHuA1DwsozD}YB&%9GE>$4vY$&v_K7;_k@RPa!+DP;> zIj`(?PhV6{0z`~6$;cBhB!ae2j3Y99dpDbuiUX#Sx1Kn|MB=>l zo?y{>>&bd5Q}L4-DbBU#f$;fxHLtoGFe18e-C(z0+}h=FLn?u?^*+vTI3;keNJPv0AJ!Hf-=;;YsH;Iy`> zz^V-b@v5;dP^5qej*6l6(3sG8?}$PG;|U1@L1jZf6_Z>{E7zu3u4D{chIllKnzH}^ znUVk-mR%gleFfbORM#K;gNb{PhnE$`Au%E#Lf6^&O^Fgw%7m@~?&nF&5VaD{Zvf7d zjY57PxV;jv)8j69!I`+$A>}MeUm<6#pDX7)0Vu(gWO1Y1x^QPJcOI+@MC6D%zscZ! ze&xP7mMcqIu-(2soOcS5F)*GKM~=V|jE6TSiQsJBILS8{f3$L|%1FV;qjh23wwi^` z;npCF6Hf-%IiD#ZIZDnd6QqE;3)8g$f<*H9+9Zlg!5{CGlb%+REgQ=aTp<4YkNbk5 z4Z#QKd~ku9)-BtB3=pB8h_%@~HUJd=`#RX@Pta(FUos>M4=tGG4RJ?DZHg*hRWVoyiXDB#&0>M!V#yRI4TjNKi zT2z)XY%OWQj0eUM0e(4m-x~7DLn`@IWdi~uz-x>X!8FIimA%uGoU?i3{_m6K7nkj* zpN`99I*+YT+UcvEQ4s>YI9nu298IfHnUaUjy6s^)t8712tqZ^V!GU*v-8dqwS{u{b zWn-1(@7^0o#+?le8UKSf`^Z_{g~kNVm=8qP?}CzybKL8zdE-;TBtuU`035-Fjh1U| zLLynBxOM)i;UR=FQ`QF`t^*e~fg5X^*nO#=XN!pj)OfALk@Wh}j}#X2@e6u>pW zTJb>Od|(VXLquHGR!J5``UoghymM#+q*@Tc<+4?h$4&E(=I(oA-dLCvYSy?Lj5TMq z4O*~F;Ni;tvrlFpU91^HErm6%pX)^NN4w>N?c4=^dbOVP)c#hv)z_z2bz`jHm@1K_ zngDi&>6-`ri)9x)tlG}l&@Xf#$Q92MH7L}ou^h3NC&qdHI}dt|@isuBSQHgNVw@xA zm`D~Ak8v(%wWI5k(0D?Cd1aBYC~f<31+Qx_InPrmIQ#UtiVv_GbZ_GqG1f})$lbd} z>rd{$TRnJKKo{_T{=3WCQlU1W1Okpgwn3G8A2jN~1a*ZgQZ_pC>jM7HG+w3!JfKV>!blE-e8DptHHHJLd!Om^~%p za?uFRW8L-LZN(v2!iaGqnYAHNj5CZF|MRD-JCl5nCEinOeLvGc{vZFw{nyi~NR8e{)&D;0JpB*hC z%WU0R>qFhSGL=`WR&tgoHtA_1;z)_&*10rOb!)5E@?YP{iD6}2)p^Ak5D{T#gWwDi z^F%~;E)k6~G0x?SX&cRQ0AQ|@*J~#^SCYlRU3Xs!T=`|064-P$z94D*;SNP;0ol@o zfBkeBojr`-==!Y;mA5bsftc%1Ch_JIl3i~AL82uP#rjoA(OCx+l;n)zq~QIO0|5~s zpxTIAeTfOg8FL{x2bt!b3z-%a0z)7I<3b=>cT^jSUDf#K$No{OWS%GjDl*a9Km^A5 zU(EcQ1=EtXj(VwRO!&*A_P7Hgc=w>+%fvf(2dmlw24nqiyuB?YKfG!mZWTK{{q4u2 zpTAtDijRt9*;q~hobU9ryOVrpn6GNP&-Z|CzS zRqVP$^(zAR2HiLU`okT%6P1CGtu6hl!}{sM8iGRLA}T--aE2L&&QT(n_p~yh^OOh# z*KwV0qVJZVf>z2pueDq^Z4Bi^@~wg+qH{qD?m|EW$r%E=4Som!oe7K~5fq8+Y|xT9 zPlH@XI)Re>YVGyrh~CuVQXpe&Rog(JF>X|*P3Q82U(VZAZKPyRR`hPU!T2v?We(z3}7677d%~a=yYfHqGWQh3baTTt2SS3dr{vGH>XgvXEY;EaZzitj|ABY0M z#j-PmH;Xr(AmIoAa>U30001BWNklZ$n%4Py zTjlZ9>ixUJRI8uAm^tq`XK(KfEYPFf-t+USHFj&5ENZuI?4S_OPS(?PyEn)W#zmsp z@nt0?X9x$AV!CQyUDo#|`Q9iUmzps)>SfmZC&z34XJ6|VJoE$^E;)k`hy&K0AEZ)o z#u=Wi?XvYTqfRCN!BsFOq*}zly_h%IEiw6Fk@iyA-UKqh!7x9W)jpt>$_4h}wg*Ip zthUs8`o9h$rwZTMD9JMQ5xO zyt5Vn5GYSXk!;4samErqj;C~d1VnpNu#FP3+P$?;XS?(CzTfsiZ_P!{Uv&*wYC#M^LqxxQMpv7!q^c_N8ucbI3I zKRI6f?Pt?okwQShz*uUH3mS^zZFB1gtEzp8n!x^=x6YL?WW` zL_`dzwLuCN2(naLm(4 zM9HrJTz4+clcFjc05FC`#5p5^_jB^*u z`nwlb@7^EI)=mg)JHJ0E&SuphPkOn&x0MZg`eNQ*t-3{R`yS z=(2uszA7^{C}pM<|4+W&2LKf4JSEKQEUg;1Ze2X9IRZlvoc)^_LBLcp8;EmuJ8%iu zyy^nrx^>9dPCtEix&Khx^f#bT>hez@gUT`&ay>c#r`!U8~^%FT(#FdA3w zj?$|2aaD_R9*8JV^BEBsX9&_N}efJ+wf}bT_7!)C-Q-!)0hy<`QV(tT6eQm#~G7? zITvQ+^)eB=OEQ>w$Ffw!Wf%bX%-@}3TA5yh;JW^oDV_>0QAA{4D$ftY|;JWdve6xPtKYjUv^LDCg$f^B5y)} z6&o>%bB2*zhya}@#yBF~Xlrd$Fc1MSlh`?m7?aR9bypx-R&|tSLc}8FKyVYm43Quj zKmk#lLdHig3q;0+ulMDm@%@yq3<=J5Q+`s1K$~U2n>~kO zZe5w_T(hgS5u6bqXE0m2dt1F>A?CFU058whfb`~W?+2evw|kl)yE9A{jaxR|?jW}w z8sj8_VC-VqArb+sYa5km&*ts^IF}s1{l=uHB_NKcupjQQ0QeV&)!I?abYj>$AEE+H>}AFkypyXo0@y{hitBX* zB9e#@o2v{FAr-7pEV2NY>zK{}py@gyGB#>cgA1XT2_PsF;R8v|YHKM_oLAlk7y;fb za7%Ll=sc`DA1zdlmS)-#=g2qN8AW-ssS3O|x?C@6-#H6F$J3_i z+`4tI&Z|JsbZ${w@XW?$DE`+?XAi8H=HVBE$UEuwoq@8Yv9*4fvCBMcP0Bf&7v)g)sG zsQE^ng9tbhnHqKGyhi}%J#A_yiU4Pd3(k;jG?Bgn@Ssrlga-h@HYydH&EU!bz^tPX zfOEW&%`z?^0OxFfSTKf+f#BFnRiebI=>nmaED-cF1%L28rE#UrEes`;A zZ4f|b^Xkz~&N*kCTjvp=vF>8oa)w39?@h|BenvnHaBrAhF51opBqRbM*tnk_ov&=5 zUaHrPtvW9xyIQrmQb!k6FIQFP`2X@}yPsazOtP`YCl_|v_)#tj&Hw44lpJU4E=$#u zld5T5FH>nEIvXavG*x_5>Qu>LnV!z8{c(R@b=HM-=gUm~_}Rt5c-T4fvI>&Z4TJz7 z8A{H~MoxxOy_xx6F1iidCT=R+n%6Q!g@lNnDC$EEGy;I}6jkG5BlEZS_=^ewz_MTL z&KF4}dU^mE%t}$<=PU_=ch{- z;A+);@_MnTyVF@CC63Ef3Lc0$=Z~k=Tl>Ab^+hTV#`&tTg5xlkk9LZ)c{@ne^V3D5 z#G~C}wYHqWy7dQ>;$+%XZO8xH-tzOTpmUyqvw^H^$J{5mAgQ_)xGb#C#!vzo( znHm}G=2n>;kn#M?uBm~Eevq$S85m-5@EJYbM7vOGBzpAkAI@qu^ zFa)yBr;5eZzb^xfi17Tp%Tfu}G08DdqywC-OyrSu9$w5k0MJ@)ROtkloH-vjLYc|g zsu|=82s{Pr0|E>SEd+NP$r0*I03vJMytY8#39P4tdlY#tsWbN1-=36Nx^Ap(!iR5SVHq*Sb?!iuBz57SMc5r_u?Hv6F-?}@i+oq#QU;oB?yPqB{-nlbK zCI9Sb(Mu%}e&hb|^OMEaD9fbefA)TFyWsam@_23m;D7jBA<}H!O?v6i4p-g>CHZ8K zrc(5CB_#$=)`w+fi-cR}I^(Bn!x>xFt#{UVkV0Q9)gOmo5kFQ)1i*zTGZoiC5#U;57aB{cWdHHkC$;e}E42Q4k(@C^wqs({Df8^57S1TeU`V zemraT2g&2zB2GT0^G-0X7$gbj|JAP#FYB;16n7@-zy2Xqt*JV<-B17K$@z9anXTG> znanCt0r1uhltX z^fTN%s&4?Eu7U~BbdGb@8o#RTAXf#_()jH{tvmP0w7qO%5N_6U>c*D2iaQF45^+G{ z0u9S#x@gKwafV^j&_*r!(PgCtTQ!CN1!ocCt$uPguYCy4GcDj^zF0QoL+EGneBKDo z%2YB0CGj79_wHw>tA{(iy+Lxm=pOH62jlFc*UQd&6To{&HUI06&exsK5_LLj0ceyl zV65$e17jRL+$jNl>u9z%{J;PGi3eQP;lKEQ+-%(q3;pc8d3Ce|{_e6`<9WLw*FYb#ya)e&4mEfMJmn-W$B67~O&Ji*8o-P&@0813FJBNrq z(EXjVwE+=!2HDxX@gcZ?No*HEyY%uyu56j zGqv?w{X9>E3)D~5!6g07cPBqRT%?kZdiwL@)vrJ9x5kajl4JPf_58iNWuh2C;Q!q} z+38FCPyf$42JTOuO*z7Y-TwKa8RfdOzL&}KMXNcE%WPOG??T-<0vh)-!I}4@1o{AZ zs_V`ogT0}uTOSBGgUsn)6Uj>f9x%8{8-S;47Zp+%V+4c%QedJ))w&3<O&NxHsLY^vPy;d^#zy)tQ#~I@c*NtO{&U*lAEse^g$W)Pt z&iFEy@$vs~yEvKEiISZI$tifZKN)43y*gjq+s>NKa)y9pOxPY|XR{_tWb1rmsjj=W zGxv6etGfH>@JcX#x$1uVot=Qtw*I{bqaS`c4Mc^8BGsu9(|I#*+?`R%4o}P<{;#WE zrcUPOqgS(3i851*s{75iwmGm;i;H>loktTTgj6iH-vHtFKDak1)H`cb5zdFGO3x5u zEgoW>drQYQ*Rr2~iD_hAs5`%It#Kh$H}(fuclJi~sz^nq*yXwnz@jS8q9N=3%hQWA zNq2{Z;Ns1L0TAvE^2tCyJ6~*%(fAoB@JCu{Y9F%gqr~dBQjQ_kzw|mK_uNRV2AQ<+vL`(#)JKrzl zRzJBj$>x=*te2df&MV3JZ@+hNdR0w&^8E)}v$fSyJwKi02^Wlpg{DB~vu4pa0!$^w zw9`7Tq=<{?tJ(m->uCem(vq{v#Z&QyG!lHUK5&L*nZ=GbV^}28c^?nkg26E5O7KiE zfuOaRtvlsI_li|hHGEe1y{`+qZ3+)3L z=RFVrWQqr1>uZ&-s_AafJ-pm-))`~hlJ)@CZtE0i-8glN79u!{UK}w51!r$fG)F8H z1_CX=N-Ox{r8n*^(VYH966g9dHeAj(zf7D+-s!0u-vPK;c_R4f)2rJryjZmLEk2ri)jIAR{pk5jF|HJA z4DJq#Qn0P9LQAYo7!-x#yz}hkaa|~uX#V_UIVjW{+r{BUWqcTw>YH~*zxnp?WNH5C z_fPw&ShRr)9<~SBvbK`rq?hE02*G{uaP-O1oCvmhB|z9Nb`1--8$Ey&i?p))1(>UXT;4F9xKt8~BU#E&2<6?2M+BjBjqzG=7 z8yI7PGv_wptCUD2kJ`XRA^^ZxF9frm9uyn^dYU7{L?9vFL@>m*GsDFoweKUgcT3>HgAa~+xvo3+;<6Tkc?&35+nF+zisRj3vFyynqTLx5 zoUzW)#nJ%<{`USrOVP{4I|seXWjn~ldw2T3I9zU*dXT5y+ko_=r;Gdh{qtEn>Z=dG zwqLh)R@pR7&ZqPJarVLe$??2Cy{fhb>K89(3}A1VU9385Z6s$E36EXLTyqBW>Z-dz zce=7sj*7?iHh>VqVr@6$0nU_QHvqStMFb_d5AqU9_>Dyr^>jhb4oBJxR$)1$)i~f1i5Ba7rZAxHtA~!G+)>Ewnv?FAwZdlA3vK4 z&RXaCDck919>dwZeY{Rz0;zxDn;d7mb7r=NX%c;!7Vn{KvT?T)g$ z<7`&j%XvF2MPuw@ZSQZFKY1|?ArL_zipJ!5BBWqd=M%}wg!fav>cVtoqbV6fWPD>S zLqt(&St%hH2+l&Fs2b;d$P$SF4B&n#h$v5GAz3_;7q$It;cf$Ly?2g^IBB>AaBCa_ zaE?;&ol)9!zRXnOZEbv}xDT{wo#M<91lmllG)H7uxo~%q5ux!xFt#_!%S=v}t>BC? z^hAoY&iY85L_%;DY*C4Seo>8+d9E91OUWDh*j4j zkYwzSzjJrpSFuq~ejtg~7oPb`!&K3r4O5W?3JDt{XwJFnL zZ=AL!gg~58@ByPX1Hd6>QaoR52oG19p}q2S899S1X%k>cLLFJIp&r0JLhX6g-hkFl>ys zo^mauU~!TW&-_BmSC^F#ObHP@agGt=K_(-{SIhQv)~1>_t>Hp&2CLTYj|(k1Q26N8 zl_y+vq&SqBp03O&*Lf=ERrks3t2g!rTYYsgZ=HwQSdQF$Plk8vo=!^-xx0SrH)oZLL@}{LcNd`GL*6j|9twNtKjN+_w?gyV9 zy|FXAoVVZqE4gfmqrC@_X8S5^W-MreQixKJv0fS1n!svHK2T$Ps>L6Cu)XerWbm`sb+1rgzdO7;&adi@ z2!>gbDA{$jv96cutx@vJ*YiyCdDSuWk9UfXUr(Q2VpKfjn<+OMO8}5c4ulsgLq3oX z5}}{Uh<8k?Z_`%+AU41w-va;!`KEeqI*Ydy&1(~G+>2jM+prN4{Q~2gc37e1O%l7g zMWkG}{T*mnu>(O`z z#NRd3Vq9#hfQT^wkSEDlYyI2%1zh)Ze}1^mG~X)xkDp9Ge1G?6&u5c?JfF8BNe78s zty=^#&K*pW!?UFz|8S>we=q-+KRSGMzW%j0x8J`%{O8|)u{X}Q2g%X->e<Xxnh-LGv0f@i1I>D*?D=UVlOV@r$RTG9moMuiLn zt?>uL6aWr}X+&<_UjMu=2W#v?#43w(cC%Lc_CeX*VgLewRw9vN-2cMNbJ9-(-Qo=< ze4~PReK8D%ThI68_p0IV|RD6<7s<(W#+Y$f`9YD zxSxy5Wg7?t6Z6_m7wb0<24$+xm+jTEnXX$Y#IkDk2g%v0`{7d?dBp%h=~St-Gp*oE z3dR|0J8N9ff-#PXWUJO~_Y)yl0!%t6^Wui_NalRgI0xM05)-=|KsL2gL zK2V~V3xoiTrG6@Y`f3FLJAEBBkQ?J733OCQKvbMP+Q}J1AgEeTM4X}VL2~}6FM}uR zsZg8&aE^<{C6YZ|x=m~&i>y*DS((UOt2nAFQYkp=tWT6=2(5L9m?+-bu%|<92@x2A zmVB75jRV!5o69-EWNI3D+Cvuc^`iKviiMu`;PpR769tbrAox`=W@F05HVt`1WpQ>DEjzSJsIkcUd>zUCp~2X zS{Ke&-PxkkoS!f1X>C`vEfaaV?6!O9x^;jsU)wU3{9BL4^V)uVG#?c@SM2Dr)`>Ws zHJtHLFMWD+#Sp8`TIX9E_Qu(h!`a&hL+gDMY5K+SW=|;=Kh~O5r$kX$1iJ9V$wzIvyez=prcTj$Myl#yjl{)IxMuwZDm@r)W$Ds4+PGI z%gP`@)47Xf`)IdBfJtBHQt)A+pP#L^%Vckqd~`VLm-=$q?hNu@d*|SzSEqI3t@Go4 za=vKqj`HWHi}&x31V^Iq`N`_ZIYucmf&hS$Gbv;sDvQh*2LS7;DvKmlx@o(pwT+0i zaf{AN$?g^i*8l(@07*naRO5!(s&&0o5Fh~F87228Sw9t37ar~8)(0)wvUZX9hzyCq z`p}bXlGtQ4||+56o{I! z#!+0tFEp=BkO+;VMeBD8InKoC+D=#9s7zvK#s&1j9Z&1MQQpfG0&v7@<4I0HyTfeK zQ;}Z{fN|H0GyKNGQIQJcNN^VQS#B_%t!<)sAUdAgUcyF&Of{a)+_;~JuNu9yOlGJHUuUZ7Ksc%7t5|p_35l;oC~4;>X*-r1?zmT zQ0KGe?kMkNe0z}QiFkIp`21w`{EFR1mou!IHW2lTY_VDqg`?BcgPnflIY_N57 z%iq7(@1?x8frxy7aj70`CH+D^-rG1r7Ab>kpVC-srINjWw*Y`d2@2tFpRJDPU7^{7 zZSnkcEu?&XSxwhgFg%^NSF6@~pCw}5x_&Ap!>h_NKnB>t+06)iuUHJ6#~M=T{7Gp$in6wo8*lNpZDYA>i@Z`PL{W+AN|W z;@zFegZ-Uo8EqUm5A(`K<&Dd&>xFf`NF)I43^K`>b>YcLHO~0SyqQ;Bp;eK}ak;7ZQ;C^mso*<3_2D~1?|sZ0 ze)McLt6iblcOK^<;NG~j&R;G~s(GHsL9Xvjic|?;P_=fF%SCOh^E-q5?6PLog)9-) zg+ZBUDOZ)#(!V^bdYQOd)^ZNepKj1ZJ(UOSI|wg)=DWUnyv$Yle6=! zQLcoD)b`f8L6HN1b^eWmo!I5cwa`M$)+X9{6XBxq7t3x@+s1}PZ5OqL5bP~Fzy^lo zSFA3|o#Ce)o2|Nk`%Aa4+4@W0urn+G;KkW8OXN-XPOe!AzxSxT>1s`~FKm;)xt9UJ zvy%lx+V-v4qOrkwT2yAcm&V(ZapnT;4)t`^3`<>P`tGE7e$hPG?&YbRRV@URl3C|Q znFN4g!L-~sZ^Qvw#Q3j1nJa;XX21J>FVp(&R)4#%CF2YsQ~cph`JFe$Wg?Ygo%6=H zqsw}`pM3YNZAO4TgiJ}vg%3Cx@Xm&wJ9S!~Ja{TDNiCo)(R*jZ*@FsP23;@{0ywudkZv z+C=qHd28r9Uv&UbDg=Ntm3&;&M=$4pKeTP<7-Pw`-$g&u(fwqY>6`9K+_sYZOXvSM z6VdWaF#P@x7HC>qUBAC|=a*UfB8bC_Xix|@W+h*_oTIjL>2=)i4vXDU4gi89 zXLvEI1Hr6r;YO+B*7ZkkY^=rNO)$ztV|{FAxD+W(7pc&k?T&P*`JGYk-MhniZMS>LKl$Fh z&bme2{_?~lV>kC~Tz^JDDdk3G3gGno;u~-5tg0?PT#XBZvH$?ZdAu_`1pRq|DK;pR+wj~Q zWdgs{ZN7PV98?c;apTb&udB{~1>-+{voCJ7taozN+3?N1?D76^XA~2qxLrX}%gH*n zJ=6dYDHd9>pFE$RFU+J&8ygD6=j(c0YAHmVO*E~OlATT)#gPeoxR=js4*+G#FP9wv zeDCq#_V4r0esHD)e)xX2Y(k=vb>}CA{_U^rJlZe4_nF3VsXOaGKdy;7{i3a!rU5K)wz&h)Mkn6T{fg-KkIO=Q|_w-x)MQ!ZeNs%h`%{Ru#Ax+aVPXuFG zE}zcrRv{Zpc_OOTm8nGVgIssUFE?BfT(^FIm;nIithFvK#aI^xnG^yO$xp7TajEOh z-P_9FQqB?#QqkCuD^V)8Q8RD7;5bP5lWC_pF51wzuv6&Tc&*dgdchFljgCk}0?`Fn zR&kvIgY#O8ruBQH?D(pFXTL|}`@Q6H(G-bXx32Bn?l@c3R%@OJjz|n~zBbfU_@7N?n7Vx_g$sTw z)rtj`3;t?pS`W^+MDwF*^>90Ve!ff->Fj2zs03Ry&N`@_i;w@fzWi{vnAQGt)(F9e zrF=cDW|hqok?D>eRgFHSn5;Vc=MFqd4_kX3^!GMn$n5_|zfaej+KQ6vRM- z5YEa*wo)p}s8kBT*Sh{d!j5M~tkdI3+}sTrfzvtI?Z#)~{FBsIhUzQea${@GMMK99Cr-mSgH@kMlZ zufZ7&Towjyjd9bZPmkX%2s@psum0u9we9xX$J0Of?$Lfb_~$?SDi~Qr84UwxzbE!u zfkhWaT6A~XemiieLw@;<2kYo2X)2XcTD!t=9Z^VW(S6U2ej&?!TOq+I7ID^Y1WK<& zVY8_*Z0m(wDFEl=g)5lS`r5YdxUAI_w!EeGX%Ir{3W>vh*lCJXN>xYzr?cd+-v$t6 zmy;$1H-gs|kiPV3yXieVpI67Xuy35*s->p(AM3(*tX!R#||fm|*OD zmS4TWRes+oo1ZMFMj3i(~Ia6uk12L=zdSAg1QVA z-J@x-%*{^Q*Pw%0yn!xAlBR*@NvX6pd6B1ip|v?33<;1GDlHUXEV@nK_Z%mel2W3y z)W)`&GfEq?Ccf5Ppp<45d7*ouZxdU6huk}CwS4#XmGkv{Ab8k+YdO|DjFge7)^Fo~9r) z5Y#OqzIOlFC$$h8V3`=Z&?JRwxHMOW3;Jxd%&NccHk|!liLYe?<`jan+gIAR`d+^!IMnGlZuxHD3jn|N)dv8!TAu3&cWtlLs#u@{ae0H} zubOp(FvJEuvd$#*6W2mxVExI0v$QaH zZm6|I!WBGDWG;1-$|Bd4mrXxHpU;wFx8v+>m5O1yEEY*Y2r&c>!&b{la`SYMIS%s$ zA1@N$<2QF20RF?@X#A&7wg4>R;@xqw6FLu`JOP|s^Wh|&rkYYRm}iWV65S+CW|^_* z&I+^F^}hI(Ggg|-1c1_tQc6LU)|}I-NdpF>(e=HK(mL=&oGNXoE7)X_)ZKAVamrCb zESF7INU4<4ruO#r+um!}dYy&?;N!1e-D)}?xwmt2k!*$T&7IaO*V;{o?|0m*JqN&# z-s+F%nJr!EhGnvZ>u{U4UNHjzfHazICgtpOd}DOOWs^lZjy9xZyR}h`vYu20;8%X? zaQ)?{?v(rEX33MdVQQt8!n_hrw;q=sT2n5)+IE%#8op;tx!oC#M%VT_h0=j1X3NZT1*gOo z=P0GD_|}Yp_9x3UE0l`UGQzKvKHLf@z!}YQl}Py)?+#9<>6=d%zRUWdJ6^^@$SO-&l^M!vS*-9Pb~_N%E8^PmWxq=*-k@5DpAJ&r6C%dEa{$S&SbYKba-@?St+g ze)sIJ-QBrZr1bb=ZqWs!7TtgMrDqmh>uokbQ52L=M~ISQ!2rNuG$MdDX!>GS`FJf2 z4I!)SDm$!;$kr3sprMU>0|-5Otsl;lLNMKJI!;B@VqFkN7jYsDb0{HHN&whzm)j(% z>2O&(Dz=+0*4hqU3O2FllIs9Wqoiz<2LR|bIDk9*!TNXhf{h;ni(J~8ww5Q(=Sjom7GqiHyigC%N{jFAVSBpFT!;VqXT-06M*PmF z%jG$6XyDM$V;z^(=b*It*u8KZD~oZS%-$W$ukW`0{r`IK{+G7sWT7m&-G)1#=bPvn z0vHX!ghf|romNSv1h~4}Aq0ieFvfGZV9enTq14WBExwcxdrw%3U)wU&+BmP@>@HKa z%nFB*lSyZw5Z+QT0{(`+gR+(B- z8%_zQppuor}Ug01RWjEcB#u-2P0M-`y28#vv~roiDm=_gDY-BYy9&Ripcb-+Q`_ zE-EqD3-$I2vtrN{_Bm+H-~A+(rhCF|;i3+ps=r@kQ0#3P3w>rpufXTF4AQ z=sCGIr?Wf|H1r$*k4~q8k(#wO^u=J7&ZENdULch9IGJR(_g)-QJRZe1#w7$@ra7aR z3)cX&Jg%#4^0R4vyITs-c2E5F-@W@!e*1A&c|~q@oF9zi`XGAkk`0W~#FAP9fMS5m zr49q}*5gSlbd}OYZn{m8NevX9BRHe~`Qr{?fYp8siTd_YR);`BpPkHCyTN&)fA3)m z;OZS;kbE2~Am0g{*Kg1_z7e$pMtx5VCh2^hZ@2xrlFn3}Fl-YcLTQ|)8r0^94@V;c zgn>gy*__km)LpSZmP2Wqh4BLM&84E0yzl1L*)#^=FcPKmJy+Xd;2dlA7^c z%m8rC0knK)r|lS{0az}1+eR0lfBw#JFi-JA#%NZpxLOY;34r}xkQXZp>mygZywHKW zf%KL3i{%)=Kl|(Z>o4#2T!*tPUxf`TXVzL6(RLsKGlY%ic`7X(1r-jNEDJ#?fPZmU z|C?9wXjJamat#CoZHkZqIBfIKXQ9skyu9lGI9=*5KT5y+v|Jo#N0T2p@UL$>R*oN> zWWV^K#w?a}8WjX=yX}AOjR)4-Y^rwYrpidqvcmJ+EKd#0U^pVc^();%sW5N=G+f~b z&M2ccLy!^}NL`ZrlFii@YvRio$#cCOx{D~cX;XHMkFCeGA>veym-)eVW2e`!?(Qp{ zQX6|h{MGTS=a(=zoSu$j0G?n;ZU8ica(zAMhn$o~zN+qAg=EXU>S|Gn4y_Q`JO0BE{=%^|b?i?WH1okj{nHI&i>xR{rR z`tsju|He-T|MimrfJhnu7jxO|^W9wz0ENL7_k%yx1<-K_fZ$#3FWy365(H(&jB9$qmo-AXmi7$Zn-Q3EvTyO#d$`mJ{l)~VT-#YOG>$iMV ztwc{J(O{Z1Jl?h4uA`zA@OO@<0Ia4wpO(!b^d%Q10N}~_?D;p7EWf>X89x9I&*Sx% zFTd0V*1Vc)BUp=1=du70t+}slZ`^Vi!))`EwIWIYzyI0xAO2jo{?x(8uM7;eERzJz+(Jlqy!<9GxckKd{J|1 zV+~!)3MrLzt8T5M(Z#j>ZlP4|jz(2@Qpepaub;u?xsJ138eO%PB!EeC)pW%&E^Nar zPMK{?9wo)s@1LisZUxSE=q?gjJER7)bhJ!uv4ZDv08u96)JBldaJf`wG+U|b;Vi13 zU)yN_Xb0|AxVFMQ2j4u|@OOUp13UO3gRjVCjKe4|SrLhi&Cm*FqgS&8px5yJ$ItEj z$DiqaxKxUB25w#QaCr!ttV?a?pfcm8O8kpMtHpz}!0BL%>En(lN(T9`Ueq79x7 z)3!_ETpvx6fArHk)S_E`Y+&>{x{MOnakD%HFdSYGfHN{%rW8nXX~j42yu!k^b{POT zW7-g@^fZbAXj3xl*z-_QQc5TxttRU={n{UN_pl4#?m-X0n~%!?kzl0Ai>Jfo{gau^ zrERz`Fpli7#VvJHm3s6V?qtomF_{AAa=Uq|&JIrr&B& zXaIM7INa6}ma*ZruUKow0LWD-#Q*S1GXO59fBHDRuW ze(n3|*S;Msb2CqMp~$?_%-Wd8Q~BVccsiE=7S)D5RpvmYf>Vp}Fa7EhTAz&VL87%0 z%qG+sMv3RRi)3lhr35b>^k&Pn6}W;k7?Vq_wA~S{Qje|pa>need5&;6FOxsC2EaM} z(OW$$zW1L^P~|^AIGq};lUOd|;{QG#eCxq^uj#oCb2x3ebeXDke_=T&4P3t83jnl& z)uy(tL!4KUBH!KkE$8&km3ETn0DO-D$Twq0mnxd>ef$cl<^TOx%DwWHmJ1+S`)18o zfr=19X=AFTWPSY7R~AuquTYOoDz$OD?~G#orH9#X-cR2?O#w6=+FZNvMB(vNKA9;1 z4k4V9t$?Az_}M}|p37{!uoxdti;DBv)+T5rI8XCDmziBh=Sk@>A_TA8+VdUJZg|^O zkc$9K-@T-q*Dr$-GG16EsZj|^A+?ec#vBb7O`(C*m^1K8QSu! zT$xtGaRh64%y-yphrwa9Iv%rr{2TK+7`(kvI8`>yl6a$Xl-J8Z_Ra5Y5U&7;6PZ63x99~NfWud= zG^?f8g&2fNWjLktIQLuufD#hAtSHR?IhM;r6V3oI7zWew%S-#-dHVIE?CVF_U!E7X z+gsg1*N(ZwmTRZ zz@od=4lU(={b!eKt6F^R>RVp9Hf^7y%6YDXJV&F_8anJZ09c|`0G4@aw8#PU8temi zdfP3(9XQQO;(zRBa55=H?Gx{5^}UkW1)VQ9c_C z2*JUAcbVqCBO1Olk20Gs8z-6LIsjnIdg|H>#aC&gl%|CALg5M?B{_h9^|xR9?2q5P zd(isK2M+IE39oH8P9`ycBqfA^hx=Wte|=YExlHq1aPB#dV{0<2la7nx z|0})#97bKiCd+)U+W;_%lO$6B2J^Jl;QfxHw7k9_c3W<%$;WZJ)Arg8&v)5Y=)LmN z_WGd&XR>Nb+45=VQUFKe9Kfr#SleR_kIkY2fWydekzU_f`7ci^snIX-c_Om^)00sv#om<=s$N3Er;Z7-FyxjtF0It_Ob=Te)0`A5;&thhfc ze)pZ|OAk^2Sz)rmxYeN^jf$hGI+`i~62uWStX3A+p~KWr&PTBhI3WaiVe-m+TV$F7 z#CJU#zbkpxt1~QOXL9yZ4sE4gHI9sl);_0LL`WL2&yw>vo@M_I-II)=m^He@>YCT7> z2*!lv-vi9Q{Z0Yg4&1ubP!{dnB%$a38YCypuWh}MXWAj zHHs7f?z^5%i{y-fKvsOqXM+JHeaUxA~Qhv)6IrJaz@0MX6NAZtpB1ap+k6L7Slmzy{Cj(Qml`PGw+XxTEdq`$^SAeU1JSFzIy+1jSMwqbipcN3SIW~1R<9L(?&3wWS6Zr zYvq37TS>zglrw1<2sIk^Vf%Jz!cG>2MHfJnYx}-Z=6tE_!^V50)UvW6a;LAn-2ear zbxA})RB339t|}=e0pNT%ymzCow3fEjCXnWZBe>wg4?K%5=gija+6Y07uKm6;N@-n- zH6`TAR>OCQZH{;EunFMyUSm*&deXcsp+x2P0C3n108C=JNcGiz={oMLrPjQ5y)jvC zWZv}K8^sM5%Sda}c&=V8^uG zdyD~C#B!0EMQUP60Q5XAD5-l1<_gjf&KRoXq0-SIc&VVy1_J^d?spiYTBDHae6qC4 z*>}A>Tbau13ed``F=SRt0mM49ckh|hm>kty=tUEgPGicA^KNzk diff --git a/tests/media/Burning's Video-loadScene.png b/tests/media/Burning's Video-loadScene.png index 00e08b11d0215497f4db291a18c121fc3bc96429..505e4cc7499faca70d7885c3b482a9a45b1c1e59 100644 GIT binary patch literal 25093 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 literal 24949 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