diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.sln b/proj/SkyXEngine/vs2013/SkyXEngine.sln index 608b0fefb1d672418d495187de13ac4457cb70a5..c2d99de57bc76fbafe22535b3abb5b7bd1113e54 100644 --- a/proj/SkyXEngine/vs2013/SkyXEngine.sln +++ b/proj/SkyXEngine/vs2013/SkyXEngine.sln @@ -438,7 +438,4 @@ Global {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC} = {BE976610-EE71-4D57-8733-2FE43BF602F5} {3A214E06-B95E-4D61-A291-1F8DF2EC10FD} = {BE976610-EE71-4D57-8733-2FE43BF602F5} EndGlobalSection - GlobalSection(Performance) = preSolution - HasPerformanceSessions = true - EndGlobalSection EndGlobal diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj b/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj index 6dd5ce2c48d04a0309b7b77601dca5922b673a28..0f5c461ba5204774a1ff780b950f3db867234bba 100644 --- a/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj +++ b/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj @@ -60,7 +60,7 @@ </PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_GAME;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> @@ -81,7 +81,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_GAME;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -93,39 +93,50 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClCompile Include="..\..\..\source\common\string.cpp" /> <ClCompile Include="..\..\..\source\managed_render\camera_update.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\managed_render\gdata.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\source\managed_render\handler_out_log.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> + <ClCompile Include="..\..\..\source\managed_render\handler_log.cpp" /> <ClCompile Include="..\..\..\source\managed_render\level.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\managed_render\model_sim.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> + <ClCompile Include="..\..\..\source\managed_render\redefined_func.cpp" /> <ClCompile Include="..\..\..\source\managed_render\render_func.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\source\render\sxrender.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> </ClCompile> + <ClCompile Include="..\..\..\source\skyxengine.cpp" /> <ClCompile Include="..\..\..\source\SkyXEngine_Build\SkyXEngine_Build.cpp" /> </ItemGroup> <ItemGroup> + <ClInclude Include="..\..\..\source\common\string.h" /> <ClInclude Include="..\..\..\source\gdefines.h" /> <ClInclude Include="..\..\..\source\managed_render\camera_update.h" /> <ClInclude Include="..\..\..\source\managed_render\gdata.h" /> + <ClInclude Include="..\..\..\source\managed_render\handler_log.h" /> <ClInclude Include="..\..\..\source\managed_render\level.h" /> - <ClInclude Include="..\..\..\source\managed_render\model_sim.h" /> + <ClInclude Include="..\..\..\source\managed_render\model_sim.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\source\managed_render\redefined_func.h" /> + <ClInclude Include="..\..\..\source\managed_render\render_def.h" /> <ClInclude Include="..\..\..\source\managed_render\render_func.h" /> + <ClInclude Include="..\..\..\source\render\sxrender.h" /> <ClInclude Include="..\..\..\source\SkyXEngine.h" /> <ClInclude Include="..\..\..\source\SkyXEngine_Build\resource.h" /> </ItemGroup> diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj.filters b/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj.filters index 2db1518fefeb113c7f1ac5a10a0055f1b80ae352..6f8c3b734d1838c2339af58c2a89391efe53f9aa 100644 --- a/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj.filters +++ b/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj.filters @@ -4,9 +4,6 @@ <ClCompile Include="..\..\..\source\managed_render\gdata.cpp"> <Filter>Source\managed_render</Filter> </ClCompile> - <ClCompile Include="..\..\..\source\managed_render\handler_out_log.cpp"> - <Filter>Source\managed_render</Filter> - </ClCompile> <ClCompile Include="..\..\..\source\managed_render\level.cpp"> <Filter>Source\managed_render</Filter> </ClCompile> @@ -22,6 +19,21 @@ <ClCompile Include="..\..\..\source\SkyXEngine_Build\SkyXEngine_Build.cpp"> <Filter>Source</Filter> </ClCompile> + <ClCompile Include="..\..\..\source\render\sxrender.cpp"> + <Filter>Source</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\common\string.cpp"> + <Filter>Source</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\managed_render\handler_log.cpp"> + <Filter>Source\managed_render</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\skyxengine.cpp"> + <Filter>Source</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\managed_render\redefined_func.cpp"> + <Filter>Source\managed_render</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <Filter Include="Header"> @@ -65,6 +77,21 @@ <ClInclude Include="..\..\..\source\SkyXEngine_Build\resource.h"> <Filter>Header</Filter> </ClInclude> + <ClInclude Include="..\..\..\source\render\sxrender.h"> + <Filter>Header</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\common\string.h"> + <Filter>Header</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\managed_render\handler_log.h"> + <Filter>Header\managed_render</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\managed_render\redefined_func.h"> + <Filter>Header\managed_render</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\managed_render\render_def.h"> + <Filter>Header\managed_render</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ResourceCompile Include="..\..\..\source\SkyXEngine_Build\SkyXEngine.rc"> diff --git a/proj/sxanim/vs2013/sxanim.vcxproj b/proj/sxanim/vs2013/sxanim.vcxproj index b4246424564e57fd587e0082bb9009ff316846fc..47740f1a0e2cbaa9566812bf623960bc537f55e2 100644 --- a/proj/sxanim/vs2013/sxanim.vcxproj +++ b/proj/sxanim/vs2013/sxanim.vcxproj @@ -61,7 +61,7 @@ </PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXANIM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXANIM_EXPORTS;SX_DLL%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> diff --git a/proj/sxdecals/vs2013/sxdecals.vcxproj b/proj/sxdecals/vs2013/sxdecals.vcxproj index 3e1a046f5cc0530b5359f61ce48a367db239f10c..b1a1789598c2844aba4769604dae7c9f64e0a000 100644 --- a/proj/sxdecals/vs2013/sxdecals.vcxproj +++ b/proj/sxdecals/vs2013/sxdecals.vcxproj @@ -66,7 +66,7 @@ </PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXDECALS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXDECALS_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> diff --git a/proj/sxgcore/vs2013/sxgcore.vcxproj b/proj/sxgcore/vs2013/sxgcore.vcxproj index b1e054e5b6c9377dd8f45721805db591f5575961..b791a2f9b512c5c5a3a855b3867e5aeff428da8f 100644 --- a/proj/sxgcore/vs2013/sxgcore.vcxproj +++ b/proj/sxgcore/vs2013/sxgcore.vcxproj @@ -81,7 +81,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SGCORE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SGCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -98,29 +98,29 @@ <ClCompile Include="..\..\..\source\gcore\bound.cpp" /> <ClCompile Include="..\..\..\source\gcore\camera.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\gcore\CreatorTextures.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\gcore\GeomOptimize.cpp" /> <ClCompile Include="..\..\..\source\gcore\LoaderTextures.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\gcore\loader_static.cpp" /> <ClCompile Include="..\..\..\source\gcore\shader.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\gcore\sky.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\gcore\sxgcore.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\gcore\sxgcore_dll.cpp" /> </ItemGroup> diff --git a/proj/sxgeom/vs2013/sxgeom.vcxproj b/proj/sxgeom/vs2013/sxgeom.vcxproj index 6f1529ff7c155a538071d2d4c2c59ac68e4d3398..c49173779347b2d238677e83b26f2541d3764d63 100644 --- a/proj/sxgeom/vs2013/sxgeom.vcxproj +++ b/proj/sxgeom/vs2013/sxgeom.vcxproj @@ -14,15 +14,15 @@ <ClCompile Include="..\..\..\source\common\string.cpp" /> <ClCompile Include="..\..\..\source\geom\green.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\geom\static_geom.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\geom\sxgeom.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\geom\sxgeom_dll.cpp" /> </ItemGroup> diff --git a/proj/sxinput/vs2013/sxinput.vcxproj b/proj/sxinput/vs2013/sxinput.vcxproj index 6cd810c014df9b26734e86e60bc3e7373c60b999..900a09aab2675fd410daae1821a7308dbf74bb6e 100644 --- a/proj/sxinput/vs2013/sxinput.vcxproj +++ b/proj/sxinput/vs2013/sxinput.vcxproj @@ -80,7 +80,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXINPUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXINPUT_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -95,11 +95,11 @@ <ItemGroup> <ClCompile Include="..\..\..\source\input\input.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\input\sxinput.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\input\sxinput_dll.cpp" /> </ItemGroup> diff --git a/proj/sxmtllight/vs2013/sxmtllight.vcxproj b/proj/sxmtllight/vs2013/sxmtllight.vcxproj index 05baca45ceafbcaba3803e35c8efd7e9f97ad2d9..862a03a0d357f25f926f4ddf0da786b6f988cc2f 100644 --- a/proj/sxmtllight/vs2013/sxmtllight.vcxproj +++ b/proj/sxmtllight/vs2013/sxmtllight.vcxproj @@ -80,7 +80,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXMTLLIGHT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXMTLLIGHT_EXPORTS;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -96,27 +96,27 @@ <ClCompile Include="..\..\..\source\common\string.cpp" /> <ClCompile Include="..\..\..\source\mtllight\light.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\mtllight\material.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\mtllight\ml_data.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\mtllight\reflection.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\mtllight\shadow.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\mtllight\sxmtllight.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\mtllight\sxmtllight_dll.cpp" /> </ItemGroup> diff --git a/proj/sxparticles/vs2013/sxparticles.vcxproj b/proj/sxparticles/vs2013/sxparticles.vcxproj index b7fb311b584746cae2a7fff3cd83aa9d12fa0eb1..83896542320f06e7a10573d87be6fecf4859979c 100644 --- a/proj/sxparticles/vs2013/sxparticles.vcxproj +++ b/proj/sxparticles/vs2013/sxparticles.vcxproj @@ -80,7 +80,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPARTICLES_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPARTICLES_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -96,16 +96,16 @@ <ClCompile Include="..\..\..\source\common\string.cpp" /> <ClCompile Include="..\..\..\source\particles\effect.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\particles\emitter.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\particles\PESet.cpp" /> <ClCompile Include="..\..\..\source\particles\sxparticles.cpp"> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild> </ClCompile> <ClCompile Include="..\..\..\source\particles\sxparticles_dll.cpp" /> </ItemGroup> diff --git a/proj/sxphysics/vs2013/sxphysics.vcxproj b/proj/sxphysics/vs2013/sxphysics.vcxproj index 4a3f4b62e18db674b4c78f53ddb3977ecb8b43f8..3abf267a1a4506497466c19687883cd07f6cdc4d 100644 --- a/proj/sxphysics/vs2013/sxphysics.vcxproj +++ b/proj/sxphysics/vs2013/sxphysics.vcxproj @@ -83,7 +83,7 @@ </ClCompile> <Link> <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> + <GenerateDebugInformation>false</GenerateDebugInformation> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary> diff --git a/proj/sxpp/vs2013/sxpp.vcxproj b/proj/sxpp/vs2013/sxpp.vcxproj index 2e4a398f0838b793712e64e7ca84e95187d94a9c..77c5ed4e235f38b92c21ce5cfac77e0af370eccc 100644 --- a/proj/sxpp/vs2013/sxpp.vcxproj +++ b/proj/sxpp/vs2013/sxpp.vcxproj @@ -81,7 +81,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPP_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> diff --git a/proj/sxscore/vs2013/sxscore.vcxproj b/proj/sxscore/vs2013/sxscore.vcxproj index 714364871a1e6ee53c9eaec03e7b6f35590848b7..d6f643decea0774df86bacba51cf463501b30e9d 100644 --- a/proj/sxscore/vs2013/sxscore.vcxproj +++ b/proj/sxscore/vs2013/sxscore.vcxproj @@ -89,7 +89,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> diff --git a/source/GRegisterIndex.h b/source/GRegisterIndex.h index bf00455b969735b1687b97606cbf015f3c0e845e..a1ca0704ab9d121e9156beb208db6b75bbfca19b 100644 --- a/source/GRegisterIndex.h +++ b/source/GRegisterIndex.h @@ -9,11 +9,12 @@ See the license in LICENSE Зарезервированные (именованые) номера регистров */ -#ifndef G_RI -#define G_RI +#ifndef __G_RI +#define __G_RI + +/*! \name float4x4 register +@{*/ -/*! @name float4x4 register */ -//! @{ #define G_RI_MATRIX_WORLD 0 /*!< текущая мировая матрица */ #define G_RI_MATRIX_VIEW 1 /*!< текущая видовая матрица */ #define G_RI_MATRIX_PROJECTION 2 /*!< текущая матрица проекции */ @@ -22,33 +23,49 @@ See the license in LICENSE #define G_RI_MATRIX_OBSERVER_VIEW 5 /*!< матрица вида камеры наблюдателя */ #define G_RI_MATRIX_OBSERVER_PROJ 6 /*!< матрица проекции камеры наблюдателя */ #define G_RI_MATRIX_LIGHT_PROJ 7 /*!< матрица проекции для света */ -//! @} -/*! @name bool register */ -//! @{ +//!@} + +//########################################################################## + +/*! \name bool register +@{*/ + #define G_RI_BOOL_CLIPPLANE0 0 /*!< использовать ли плоскость отсечения */ #define G_RI_BOOL_RENDER_WINDOWED 1 /*!< оконный рендер - true, полноэкранный - false */ -//! @} -/*! @name float register */ -//! @{ +//!@} + +//########################################################################## + +/*! \name float register +@{*/ + #define G_RI_FLOAT_OBSERVER_NEAR 0 /*!< ближняя плоскость отсечения наблюдателя */ #define G_RI_FLOAT_OBSERVER_FAR 1 /*!< дальняя плоскость отсечения наблюдателя или дальность видимости */ #define G_RI_FLOAT_OBSERVER_FOV 2 /*!< fov наблюдателя */ #define G_RI_FLOAT_WINSIZE_WIDTH 3 /*!< ширина окна рендера */ #define G_RI_FLOAT_WINSIZE_HEIGHT 4 /*!< высота окна рендера */ -//! @} -/*! @name float3 register */ -//! @{ +//!@} + +//########################################################################## + +/*! \name float3 register +@{*/ + #define G_RI_FLOAT3_CLIPPLANE0_NORMAL 0 /*!< нормаль плоскости отсечения */ #define G_RI_FLOAT3_CLIPPLANE0_POINT 1 /*!< точка на плоскости отсчения */ #define G_RI_FLOAT3_OBSERVER_POSITION 2 /*!< позиция наблюдателя */ #define G_RI_FLOAT3_OBSERVER_DIRECTION 3 /*!< направление взгляда наблюдателя */ + //! @} -/*! @name int register */ -//! @{ +//########################################################################## + +/*! \name int register +@{*/ + #define G_RI_INT_COUNT_POLY 0 /*!< общее количество полигонов */ #define G_RI_INT_COUNT_DIP 1 /*!< количество вызовов draw indexed primitive */ #define G_RI_INT_CURRIDLIGHT 2 /*!< текущий идентификатор источнкиа света */ @@ -58,10 +75,14 @@ See the license in LICENSE #define G_RI_INT_TIMER_GAME 5 /*!< время для игры */ #define G_RI_INT_TIME_DELTA 6 /*!< время рендера кадра */ + //! @} -/*! @name string register */ -//! @{ +//########################################################################## + +/*! \name string register +@{*/ + #define G_RI_STRING_PATH_EXE 0 /*!< путь до исполняемого файла */ #define G_RI_STRING_PATH_WORKTEX 1 /*!< путь до сохранения рабочих текстур */ #define G_RI_STRING_PATH_SCREENSHOTS 2 /*!< путь до скриншотов */ @@ -78,6 +99,6 @@ See the license in LICENSE #define G_RI_STRING_PATH_GS_MTRLS 12 /*!< путь до материалов */ #define G_RI_STRING_PATH_GS_GUI 13 /*!< путь до gui */ -//! @} +//!@} #endif diff --git a/source/SkyXEngine.h b/source/SkyXEngine.h index d2dc54f64bb1c0312fed13548c6190d08b96cb37..c782cdd5301fab74b7ea91a45e0cceed9a1ff210 100644 --- a/source/SkyXEngine.h +++ b/source/SkyXEngine.h @@ -223,11 +223,14 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот //############################################################################# +#ifndef __SKYXENGINE_H +#define __SKYXENGINE_H + #include <windows.h> #include <ctime> #include <gdefines.h> -#include <common\\array.h> -#include <common\\string.cpp> +#include <common/array.h> +#include <common/string.h> //ЗАГРУЗКА БИБЛИОТЕК //{ @@ -236,14 +239,14 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот #else #pragma comment(lib, "sxcore.lib") #endif -#include <core\\sxcore.h> +#include <core/sxcore.h> #if defined(_DEBUG) #pragma comment(lib, "sxinput_d.lib") #else #pragma comment(lib, "sxinput.lib") #endif -#include <input\\sxinput.h> +#include <input/sxinput.h> #if defined(_DEBUG) #pragma comment(lib, "sxscore_d.lib") @@ -257,35 +260,35 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот #else #pragma comment(lib, "sxgcore.lib") #endif -#include <gcore\\sxgcore.h> +#include <gcore/sxgcore.h> #if defined(_DEBUG) #pragma comment(lib, "sxgeom_d.lib") #else #pragma comment(lib, "sxgeom.lib") #endif -#include <geom\\sxgeom.h> +#include <geom/sxgeom.h> #if defined(_DEBUG) #pragma comment(lib, "sxmtllight_d.lib") #else #pragma comment(lib, "sxmtllight.lib") #endif -#include <mtllight\\sxmtllight.h> +#include <mtllight/sxmtllight.h> #if defined(_DEBUG) #pragma comment(lib, "sxparticles_d.lib") #else #pragma comment(lib, "sxparticles.lib") #endif -#include <particles\\sxparticles.h> +#include <particles/sxparticles.h> #if defined(_DEBUG) #pragma comment(lib, "sxpp_d.lib") #else #pragma comment(lib, "sxpp.lib") #endif -#include <pp\\sxpp.h> +#include <pp/sxpp.h> #if defined(_DEBUG) #pragma comment(lib, "sxanim_d.lib") @@ -328,43 +331,40 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот #else #pragma comment(lib, "sxguiwinapi.lib") #endif -#include <sxguiwinapi\\sxgui.h> +#include <sxguiwinapi/sxgui.h> #endif //} //############################################################################# -#include <managed_render\\handler_out_log.cpp> -#include <managed_render\\gdata.h> -#include <managed_render\\camera_update.h> -#include <managed_render\\render_func.h> -#include <managed_render\\level.h> +#include <managed_render/handler_log.h> +#include <managed_render/gdata.h> +#include <managed_render/camera_update.h> +#include <managed_render/render_func.h> +#include <managed_render/level.h> -#if defined(SX_GAME) +/*#if defined(SX_GAME) #include <SkyXEngine_Build/resource.h> -#endif +#endif*/ #if defined(SX_LEVEL_EDITOR) #include <SXLevelEditor/resource.h> -#include <SXLevelEditor\\level_editor.cpp> +#include <SXLevelEditor/level_editor.cpp> #endif #if defined(SX_MATERIAL_EDITOR) #include <sxmaterialeditor/resource.h> -#include <sxmaterialeditor\\material_editor.cpp> +#include <sxmaterialeditor/material_editor.cpp> #endif #if defined(SX_PARTICLES_EDITOR) #include <sxparticleseditor/resource.h> -#include <sxparticleseditor\\particles_editor.cpp> +#include <sxparticleseditor/particles_editor.cpp> #endif -#include <managed_render\\render_func.h> -#include <managed_render\\gdata.cpp> -#include <managed_render\\camera_update.cpp> -#include <managed_render\\render_func.cpp> -#include <managed_render\\level.cpp> +#include <managed_render/redefined_func.h> +#include <managed_render/render_func.h> //############################################################################# @@ -389,4 +389,6 @@ LRESULT CALLBACK SkyXEngine_PreviewWndProc(HWND hWnd, UINT message, WPARAM wPara void SkyXEngine_PreviewCreate(); //! уничтожение превью окна -void SkyXEngine_PreviewKill(); \ No newline at end of file +void SkyXEngine_PreviewKill(); + +#endif \ No newline at end of file diff --git a/source/SkyXEngine_Build/SkyXEngine_Build.cpp b/source/SkyXEngine_Build/SkyXEngine_Build.cpp index 7a3df0483496fde92290c5d6ffec1cd710a443a1..91c33d6255ce023a7d0413691bb84650b948e82b 100644 --- a/source/SkyXEngine_Build/SkyXEngine_Build.cpp +++ b/source/SkyXEngine_Build/SkyXEngine_Build.cpp @@ -10,7 +10,7 @@ See the license in LICENSE #define SX_EXE #define SX_GAME -#include <SkyXEngine.cpp> +#include <SkyXEngine.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { diff --git a/source/aigrid/aigrid.cpp b/source/aigrid/aigrid.cpp index 8f7ddd43995f79798d57476f96a564f471c69aaa..a30f76a105b44088b732d01d7d04b3b9d96d9ef9 100644 --- a/source/aigrid/aigrid.cpp +++ b/source/aigrid/aigrid.cpp @@ -951,8 +951,8 @@ void AIGrid::GraphicsInit() Tex_AIGrid = SGCore_LoadTexAddName("decal_aigrid1.dds", LoadTexType::ltt_const); - IDVS = SGCore_ShaderLoad(ShaderType::st_vertex, "aigrid_quad.vs", "aigrid_quad", ShaderCheckDouble::scd_path); - IDPS = SGCore_ShaderLoad(ShaderType::st_pixel, "aigrid_quad.ps", "aigrid_quad", ShaderCheckDouble::scd_path); + IDVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "aigrid_quad.vs", "aigrid_quad", ShaderCheckDouble::scd_path); + IDPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "aigrid_quad.ps", "aigrid_quad", ShaderCheckDouble::scd_path); IDirect3DTexture9* TexBB; @@ -2303,8 +2303,8 @@ void AIGrid::RenderQuads(const ISXFrustum * frustum, const float3 * viewpos, flo DXDevice->SetTexture(0, SGCore_LoadTexGetTex(Tex_AIGrid)); - SGCore_ShaderBind(ShaderType::st_vertex, IDVS); - SGCore_ShaderBind(ShaderType::st_pixel, IDPS); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, IDVS); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, IDPS); D3DXMATRIX tmpview, tmpproj; DXDevice->GetTransform(D3DTS_VIEW, &tmpview); @@ -2313,7 +2313,7 @@ void AIGrid::RenderQuads(const ISXFrustum * frustum, const float3 * viewpos, flo float4x4 wvp = SMMatrixIdentity() * float4x4(tmpview) * float4x4(tmpproj); wvp = SMMatrixTranspose(wvp); - SGCore_ShaderSetVRF(ShaderType::st_vertex, IDVS, "WorldViewProjection", &wvp); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, IDVS, "WorldViewProjection", &wvp); DXDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2); @@ -2400,8 +2400,8 @@ void AIGrid::RenderGraphPoints(const float3 * viewpos, float dist) DXDevice->SetTexture(0, SGCore_LoadTexGetTex(Tex_AIGrid)); - SGCore_ShaderBind(ShaderType::st_vertex, IDVS); - SGCore_ShaderBind(ShaderType::st_pixel, IDPS); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, IDVS); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, IDPS); D3DXMATRIX tmpview, tmpproj; DXDevice->GetTransform(D3DTS_VIEW, &tmpview); @@ -2410,7 +2410,7 @@ void AIGrid::RenderGraphPoints(const float3 * viewpos, float dist) float4x4 wvp = SMMatrixIdentity() * float4x4(tmpview) * float4x4(tmpproj); wvp = SMMatrixTranspose(wvp); - SGCore_ShaderSetVRF(ShaderType::st_vertex, IDVS, "WorldViewProjection", &wvp); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, IDVS, "WorldViewProjection", &wvp); DXDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2); diff --git a/source/aigrid/sxaigrid.h b/source/aigrid/sxaigrid.h index cf9d2f3954979c2180d4d35479663a30519d8f99..020e87523de7f252c3c57b5598d7ac107529a34a 100644 --- a/source/aigrid/sxaigrid.h +++ b/source/aigrid/sxaigrid.h @@ -18,8 +18,8 @@ AI сетка состоит из квадратов (квад), квады им @{ */ -#ifndef __sxaigrid -#define __sxaigrid +#ifndef __SXAIGRID_H +#define __SXAIGRID_H #include <gdefines.h> @@ -28,7 +28,13 @@ AI сетка состоит из квадратов (квад), квады им #else #pragma comment(lib, "sxgcore.lib") #endif -#include <gcore\\sxgcore.h> + +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <gcore/sxgcore.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif /*! \name Базовые функции библиотеки @{*/ diff --git a/source/anim/sxanim.h b/source/anim/sxanim.h index f6a5ccab047e9710108592341deb7f09d8308344..e9d8b7b0c72aa381ba16e395a9dca27d26a84450 100644 --- a/source/anim/sxanim.h +++ b/source/anim/sxanim.h @@ -14,9 +14,8 @@ See the license in LICENSE */ -#ifndef _SXANIM_H_ -#define _SXANIM_H_ - +#ifndef __SXANIM_H +#define __SXANIM_H #include "ModelFile.h" @@ -30,6 +29,13 @@ See the license in LICENSE #include <gdefines.h> +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <gcore/sxgcore.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + #ifdef _SERVER # define IDirect3DDevice9 void #else diff --git a/source/core/sxcore.cpp b/source/core/sxcore.cpp index 894364305f51eae0e6e9c8053bfef170b33ca99d..05b0678b69248d52fd292343073a3927a65f41ec 100644 --- a/source/core/sxcore.cpp +++ b/source/core/sxcore.cpp @@ -20,16 +20,23 @@ See the license in LICENSE #include "Time.h" +//########################################################################## + char g_szCoreName[CORE_NAME_MAX_LEN]; #if !defined(DEF_STD_REPORT) #define DEF_STD_REPORT report_func g_fnReportf = DefReport; #endif + +//************************************************************************** + CTaskManager* g_pTaskManager = 0; #define SXCORE_PRECOND(retval) if(!g_pTaskManager){g_fnReportf(-1, "%s - sxcore is not init", gen_msg_location); return retval;} +//************************************************************************** + //РЕГИСТРЫ bool g_aGRegistersBool[CORE_REGISTRY_SIZE]; int32_t g_aGRegistersInt[CORE_REGISTRY_SIZE]; @@ -42,10 +49,13 @@ String g_aGRegistersString[CORE_REGISTRY_SIZE]; if (!(id >= 0 && id < CORE_REGISTRY_SIZE))\ {g_fnReportf(REPORT_MSG_LEVEL_ERROR, "[CORE] %s - unresolved index '%d' of access for registry", gen_msg_location, id); return stdval; } +//************************************************************************** CTimeManager* g_pTimers = 0; #define CORE_TIME_PRECOND(retval) if(!g_pTimers){g_fnReportf(-1, "%s - sxcore is not init", gen_msg_location); return retval;} +//########################################################################## + //функции обертки long Core_0GetVersion() { @@ -69,8 +79,6 @@ bool Core_0FileExists(const char* fname) return false; } -//--------------------------------- - bool Core_0ClipBoardCopy(const char *str) { HGLOBAL hglb; @@ -153,7 +161,7 @@ void Core_AGetName(char* name) g_fnReportf(-1, "%s - invalid argument", gen_msg_location); } -//// +//########################################################################## IFile* Core_CrFile() { @@ -180,7 +188,7 @@ ISXConfig* Core_OpConfig(const char* path) return pConfig; } -//// +//########################################################################## void Core_MTaskAdd(THREAD_UPDATE_FUNCTION func, DWORD flag) { @@ -200,7 +208,7 @@ void Core_MTaskStop() g_pTaskManager->stop(); } -////////////// +//########################################################################## void Core_RBoolSet(int id, bool val) { @@ -284,8 +292,7 @@ const char* Core_RStringGet(int id) return g_aGRegistersString[id].c_str(); } -//// - +//########################################################################## ID Core_TimeAdd() { diff --git a/source/core/sxcore.h b/source/core/sxcore.h index ab9ab189e04af3bb74f4145c3f8a460bf81c09d0..82d9b497c8078dcba59534872e3a904e03eae3a7 100644 --- a/source/core/sxcore.h +++ b/source/core/sxcore.h @@ -13,12 +13,14 @@ See the license in LICENSE @{ */ -#ifndef __sxcore -#define __sxcore +#ifndef __SXCORE_H +#define __SXCORE_H #include <fstream> #include <gdefines.h> +#define SX_LIB_API extern "C" __declspec (dllexport) + #include <io.h> #include <fcntl.h> #include <tlhelp32.h> @@ -49,60 +51,109 @@ enum CORE_TASK_FLAG CORE_TASK_FLAG_ALL = ~0x0 }; -/*!@name Базовые функции ядра */ -//!@{ -SX_LIB_API long Core_0GetVersion(); //!< возвращает версию ядра -SX_LIB_API void Core_0Create(const char *szName, bool isUnic = true); //!< создание нового ядра, name - имя, is_unic - должно ли имя ядра быть уникальным -SX_LIB_API void Core_Dbg_Set(report_func rf); //!< установка своего обработчика вывода отладочной информации -SX_LIB_API bool Core_0FileExists(const char *szPath); //!< существует ли файл -SX_LIB_API bool Core_0ClipBoardCopy(const char *szStr); //!< копирует строку в буфер обмена -SX_LIB_API bool Core_0IsProcessRun(const char *szProcess); //!< запущен ли процесс - -SX_LIB_API void Core_AKill(); //!< уничтожить ядро -SX_LIB_API void Core_AGetName(char *szName); ///< получить имя ядра +/*! \name Базовые функции ядра +!@{*/ + +//! возвращает версию ядра +SX_LIB_API long Core_0GetVersion(); + +//! создание нового ядра, name - имя, is_unic - должно ли имя ядра быть уникальным +SX_LIB_API void Core_0Create(const char *szName, bool isUnic = true); + +//! установка своего обработчика вывода отладочной информации +SX_LIB_API void Core_Dbg_Set(report_func rf); + +//! существует ли файл +SX_LIB_API bool Core_0FileExists(const char *szPath); + +//! копирует строку в буфер обмена +SX_LIB_API bool Core_0ClipBoardCopy(const char *szStr); + +//! запущен ли процесс +SX_LIB_API bool Core_0IsProcessRun(const char *szProcess); + +//! уничтожить ядро +SX_LIB_API void Core_AKill(); + +//! получить имя ядра +SX_LIB_API void Core_AGetName(char *szName); + //!@} +//########################################################################## + /*! @name Менеджер задач создает потоки по количеству ядер -*/ -//! @{ +@{*/ //! добавить задачу SX_LIB_API void Core_MTaskAdd( THREAD_UPDATE_FUNCTION func, //!< функция обработки DWORD flag = CORE_TASK_FLAG_SINGLETHREADED_REPEATING //!< флаг из #CoreTaskFlag ); -SX_LIB_API void Core_MTaskStart(); //!< стартовать обрабатывать все задачи -SX_LIB_API void Core_MTaskStop(); //!< остановить все задачи + +//! стартовать обрабатывать все задачи +SX_LIB_API void Core_MTaskStart(); + +//! остановить все задачи +SX_LIB_API void Core_MTaskStop(); + //! @} +//########################################################################## + /*! @name Регистры Массивы данных, определенных типов, доступные в любой библиотеке включающей в себя ядро -*/ -//! @{ +@{*/ + +/*! размер массива регистров */ +#define CORE_REGISTRY_SIZE 64 + +//! установка значения в регистр bool типа +SX_LIB_API void Core_RBoolSet(int id, bool val); + +//! получение значения из регистра bool типа +SX_LIB_API bool Core_RBoolGet(int id); + + +//! установка значения в регистр int32_t типа +SX_LIB_API void Core_RIntSet(int id, int32_t val); + +//! получение значения из регистра int32_t типа +SX_LIB_API int32_t Core_RIntGet(int id); + + +//! установка значения в регистр float32_t типа +SX_LIB_API void Core_RFloatSet(int id, float32_t val); + +//! получение значения из регистра float32_t типа +SX_LIB_API float32_t Core_RFloatGet(int id); + + +//! установка значения в регистр float4x4 типа +SX_LIB_API void Core_RMatrixSet(int id, float4x4* val); -#define CORE_REGISTRY_SIZE 64 /*!< размер массива регистров */ +//! получение значения из регистра float4x4 типа +SX_LIB_API void Core_RMatrixGet(int id, float4x4* val); -SX_LIB_API void Core_RBoolSet(int id, bool val); //!< установка значения в регистр bool типа -SX_LIB_API bool Core_RBoolGet(int id); //!< получение значения из регистра bool типа -SX_LIB_API void Core_RIntSet(int id, int32_t val); //!< установка значения в регистр int32_t типа -SX_LIB_API int32_t Core_RIntGet(int id); //!< получение значения из регистра int32_t типа +//! установка значения в регистр float3 типа +SX_LIB_API void Core_RFloat3Set(int id, float3* val); -SX_LIB_API void Core_RFloatSet(int id, float32_t val); //!< установка значения в регистр float32_t типа -SX_LIB_API float32_t Core_RFloatGet(int id); //!< получение значения из регистра float32_t типа +//! получение значения из регистра float3 типа +SX_LIB_API void Core_RFloat3Get(int id, float3* val); -SX_LIB_API void Core_RMatrixSet(int id, float4x4* val); //!< установка значения в регистр float4x4 типа -SX_LIB_API void Core_RMatrixGet(int id, float4x4* val); //!< получение значения из регистра float4x4 типа -SX_LIB_API void Core_RFloat3Set(int id, float3* val); //!< установка значения в регистр float3 типа -SX_LIB_API void Core_RFloat3Get(int id, float3* val); //!< получение значения из регистра float3 типа +//! установка значения в регистр string типа +SX_LIB_API void Core_RStringSet(int id, const char *val); -SX_LIB_API void Core_RStringSet(int id, const char *val); //!< установка значения в регистр string типа -SX_LIB_API const char* Core_RStringGet(int id); //!< получение значения из регистра string типа +//! получение значения из регистра string типа +SX_LIB_API const char* Core_RStringGet(int id); //! @} +//########################################################################## + /*! \name Таймеры \note Для Unix даты рекомендуется использовать функции: - localtime или localtime_s (из структуры tm в общее количество секунд), @@ -113,43 +164,81 @@ SX_LIB_API const char* Core_RStringGet(int id); //!< получение зн @{ */ -SX_LIB_API ID Core_TimeAdd(); //!< добавление таймера +//! добавление таймера +SX_LIB_API ID Core_TimeAdd(); + +//! обновление всех таймеров +SX_LIB_API void Core_TimesUpdate(); + +//! установка скорости течения времени +SX_LIB_API void Core_TimeSpeedSet(ID id, float fSpeed); + +//!< возвращает скоротечность времени для таймера +SX_LIB_API float Core_TimeSpeedGet(ID id); + + +//! установка состояния запуска таймера +SX_LIB_API void Core_TimeWorkingSet(ID id, bool isWorking); + +//! запущен ли таймер +SX_LIB_API bool Core_TimeWorkingGet(ID id); + + +//! установить стартовую дату в Unix в секундах +SX_LIB_API void Core_TimeUnixStartSet(ID id, int64_t iStartTime); + +//! возвращает стартовую дату в Unix в секундах +SX_LIB_API int64_t Core_TimeUnixStartGet(ID id); + +//! возвращает текущюю дату в Unix в секундах +SX_LIB_API int64_t Core_TimeUnixCurrGet(ID id); + + +//! возвращает общее время работы таймера в микросекундах (требует обновления) +SX_LIB_API int64_t Core_TimeTotalMcsGet(ID id); + -SX_LIB_API void Core_TimesUpdate(); //!< обновление всех таймеров +//! возвращает общее время работы таймера в миллисекундах (требует обновления) +#define Core_TimeTotalMlsGet(id) Core_TimeTotalMcsGet(id)/1000 -SX_LIB_API void Core_TimeSpeedSet(ID id, float fSpeed); //!< установка скорости течения времени -SX_LIB_API float Core_TimeSpeedGet(ID id); //!< возвращает скоротечность времени для таймера -SX_LIB_API void Core_TimeWorkingSet(ID id, bool isWorking); //!< установка состояния запуска таймера -SX_LIB_API bool Core_TimeWorkingGet(ID id); //!< запущен ли таймер +//!< возвращает общее время работы таймера в миллисекундах (требует обновления) +#define TimeGetMls(id) Core_TimeTotalMlsGet(id) -SX_LIB_API void Core_TimeUnixStartSet(ID id, int64_t iStartTime); //!< установить стартовую дату в Unix в секундах -SX_LIB_API int64_t Core_TimeUnixStartGet(ID id); //!< возвращает стартовую дату в Unix в секундах -SX_LIB_API int64_t Core_TimeUnixCurrGet(ID id); //!< возвращает текущюю дату в Unix в секундах +//! возвращает общее время работы таймера в микросекундах (требует обновления) +#define TimeGetMcs Core_TimeTotalMcsGet -SX_LIB_API int64_t Core_TimeTotalMcsGet(ID id); //!< возвращает общее время работы таймера в микросекундах (требует обновления) -#define Core_TimeTotalMlsGet(id) Core_TimeTotalMcsGet(id)/1000 //!< возвращает общее время работы таймера в миллисекундах (требует обновления) +//! возвращает общее время работы таймера в микросекундах (независимо от обновления) +SX_LIB_API int64_t Core_TimeTotalMcsGetU(ID id); -#define TimeGetMls(id) Core_TimeTotalMlsGet(id) //!< возвращает общее время работы таймера в миллисекундах (требует обновления) -#define TimeGetMcs Core_TimeTotalMcsGet //!< возвращает общее время работы таймера в микросекундах (требует обновления) -SX_LIB_API int64_t Core_TimeTotalMcsGetU(ID id); //!< возвращает общее время работы таймера в микросекундах (независимо от обновления) +//! возвращает общее время работы таймера в микросекундах (независимо от обновления) +#define Core_TimeTotalMlsGetU(id) Core_TimeTotalMcsGetU(id)/1000 -#define Core_TimeTotalMlsGetU(id) Core_TimeTotalMcsGetU(id)/1000 //!< возвращает общее время работы таймера в микросекундах (независимо от обновления) +//! возвращает общее время работы таймера в миллисекундах (независимо от обновления) +#define TimeGetMlsU(id) Core_TimeTotalMlsGetU(id) -#define TimeGetMlsU(id) Core_TimeTotalMlsGetU(id) //!< возвращает общее время работы таймера в миллисекундах (независимо от обновления) -#define TimeGetMcsU Core_TimeTotalMcsGetU //!< возвращает общее время работы таймера в микросекундах (независимо от обновления) +//! возвращает общее время работы таймера в микросекундах (независимо от обновления) +#define TimeGetMcsU Core_TimeTotalMcsGetU //!@} -/*! @name Режимы открытия файлов */ -//! @{ -#define CORE_FILE_BIN 0 /*!< двоичный */ -#define CORE_FILE_TEXT 1 /*!< текстовый */ -//! @} +//########################################################################## + +/*! \name Режимы открытия файлов +@{*/ -#define CORE_FILE_EOF EOF /*!< конец файла */ +/*! двоичный */ +#define CORE_FILE_BIN 0 + +/*! текстовый */ +#define CORE_FILE_TEXT 1 + +//!@} + +/*! конец файла */ +#define CORE_FILE_EOF EOF /*! Интерфейс для записи/чтения файлов \note аргумент iType - режим отрытия файла @@ -173,12 +262,18 @@ struct IFile : public IBaseObject virtual bool isEOF() const = 0; //!< текущая позиция является концом файла? }; -/*! @name Создание экземпляров файлов */ -//!@{ -SX_LIB_API IFile* Core_CrFile(); //!< создать экземпляр класса IFile -SX_LIB_API IFile* Core_OpFile(const char* szPath, int iType); //!< открыть файл +/*! \name Создание экземпляров файлов +!@{*/ + +//! создать экземпляр класса IFile +SX_LIB_API IFile* Core_CrFile(); + +//! открыть файл +SX_LIB_API IFile* Core_OpFile(const char* szPath, int iType); + //!@} -//////// + +//########################################################################## /*! интерфейс для работы с файлами конфигурации (ini) \warning секции и ключи хранятся в виде дерева, и нет гарантии что может быть доступ по порядковому номеру, @@ -186,28 +281,33 @@ SX_LIB_API IFile* Core_OpFile(const char* szPath, int iType); //!< открыт struct ISXConfig : public IBaseObject { virtual ~ISXConfig(){}; - virtual void New(const char* path) = 0; //!< новый файл - virtual int open(const char* path) = 0; //!< открыть файл - virtual const char* getKey(const char* section, const char* key) = 0; //!< получить значения ключа key который в секции section - virtual const char* getKeyName(const char* section, int key) = 0; //!< получить имя ключа по номеру + virtual void New(const char *path) = 0; //!< новый файл + virtual int open(const char *path) = 0; //!< открыть файл + virtual const char* getKey(const char *section, const char *key) = 0; //!< получить значения ключа key который в секции section + virtual const char* getKeyName(const char *section, int key) = 0; //!< получить имя ключа по номеру virtual const char* getSectionName(int num) = 0; //!< получить имя секции по номеру - virtual void set(const char* section, const char* key, const char* val)=0; //!< установить значение val ключа key котор в секции section + virtual void set(const char* section, const char *key, const char * val)=0; //!< установить значение val ключа key котор в секции section virtual int save()=0; //!< сохранить файл virtual int getSectionCount()=0; //!< количество секций в файле virtual int getKeyCount()=0; //!< общее количество ключей - virtual int getKeyCount(const char* section) = 0; //!< общее количество ключей в секции - virtual bool sectionExists(const char* section) = 0; //!< существует ли секция section - virtual bool keyExists(const char* section, const char* key) = 0; //!< существует ли ключ key в секции section + virtual int getKeyCount(const char *section) = 0; //!< общее количество ключей в секции + virtual bool sectionExists(const char *section) = 0; //!< существует ли секция section + virtual bool keyExists(const char *section, const char *key) = 0; //!< существует ли ключ key в секции section }; -/*!@name Создание экземпляров конфигурацииных файлов */ -//!@{ -SX_LIB_API ISXConfig* Core_CrConfig(); //!< создать файл экземпляр класса ISXLConfig -SX_LIB_API ISXConfig* Core_OpConfig(const char* path); //!< открыть файл конфигов +/*! \name Создание экземпляров конфигурацииных файлов +@{*/ + +//! создать файл экземпляр класса ISXLConfig +SX_LIB_API ISXConfig* Core_CrConfig(); + +//! открыть файл конфигов +SX_LIB_API ISXConfig* Core_OpConfig(const char* path); + //!@} -/*!@name Работа с консолью */ -//!@{ +/*! \name Работа с консолью +!@{*/ typedef void(*SXCONCMD)(); /*!< Тип функции для регистрации команды без аргументов */ typedef void(*SXCONCMDARG)(int argc, const char ** argv); /*!< Тип функции для регистрации команды с аргументами */ @@ -247,8 +347,8 @@ __inline void Core_SetOutPtr() //!@} -/*!@name Работа с реестром конфигурации (cvars) */ -//!@{ +/*! \name Работа с реестром конфигурации (cvars) +!@{*/ //! Флаги кваров enum CVAR_FLAG diff --git a/source/decals/sxdecals.h b/source/decals/sxdecals.h index 6a9ecb9098f8dfd44812364c2fa122e757ea23dd..908e00ae1cddd8d6b227acb9e9c095163d86dcdb 100644 --- a/source/decals/sxdecals.h +++ b/source/decals/sxdecals.h @@ -14,8 +14,8 @@ See the license in LICENSE */ -#ifndef _SXDECALS_H_ -#define _SXDECALS_H_ +#ifndef __SXDECALS_H +#define __SXDECALS_H #include <gdefines.h> #include <common/SXMath.h> @@ -25,8 +25,15 @@ See the license in LICENSE #else #pragma comment(lib, "sxmtllight.lib") #endif + +#define SX_LIB_API extern "C" __declspec (dllimport) #include <mtllight\\sxmtllight.h> +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + + enum DECAL_TYPE { DECAL_TYPE_CUSTOM = -1, diff --git a/source/game/LightDirectional.cpp b/source/game/LightDirectional.cpp index 19d806a22d0f477930778b9ec4f4cdef7f3f1512..11955eb73c2cfa15e65b0a52ddfd766d50946576 100644 --- a/source/game/LightDirectional.cpp +++ b/source/game/LightDirectional.cpp @@ -76,7 +76,7 @@ void CLightDirectional::OnSync() SML_LigthsSetShadowLocalFar(m_idLight, m_fShadowDist); if (SML_LigthsGetTypeShadowed(m_idLight) != m_iShadowType) - SML_LigthsSetTypeShadowed(m_idLight, (LightsTypeShadow)m_iShadowType); + SML_LigthsSetTypeShadowed(m_idLight, (LTYPE_SHADOW)m_iShadowType); static SMQuaternion curr_rot; diff --git a/source/game/LightPoint.cpp b/source/game/LightPoint.cpp index 86c2c3cd91a7d77feb912353ccc24854a5884baf..11a61cb44c9b988cd0554347ee7e9122d0a25e11 100644 --- a/source/game/LightPoint.cpp +++ b/source/game/LightPoint.cpp @@ -70,7 +70,7 @@ void CLightPoint::OnSync() SML_LigthsSetShadowLocalFar(m_idLight, m_fShadowDist); if (SML_LigthsGetTypeShadowed(m_idLight) != m_iShadowType) - SML_LigthsSetTypeShadowed(m_idLight, (LightsTypeShadow)m_iShadowType); + SML_LigthsSetTypeShadowed(m_idLight, (LTYPE_SHADOW)m_iShadowType); } diff --git a/source/game/sxgame.h b/source/game/sxgame.h index 6068da45718f1ba2e3db51ed119fe46db6251406..6bf0f4c59b7e7530c96ac0ceae1db87af6b1f081 100644 --- a/source/game/sxgame.h +++ b/source/game/sxgame.h @@ -23,8 +23,13 @@ See the license in LICENSE #include <gdefines.h> +#define SX_LIB_API extern "C" __declspec (dllimport) #include <gcore/sxgcore.h> +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + #include "SXbaseEntity.h" diff --git a/source/gcore/shader.cpp b/source/gcore/shader.cpp index f9c4f74ae2bdf4c5b7eb1560f9208a71cbd91475..5920b78c32cdf961ba71cc4f2087c4ca97756600 100644 --- a/source/gcore/shader.cpp +++ b/source/gcore/shader.cpp @@ -244,18 +244,18 @@ void ShaderManager::ReloadAll() for (int i = 0; i<tmpArrVS.size(); i++) { - Load(ShaderType::st_vertex, tmpArrVS[i]->Path, tmpArrVS[i]->Name, ShaderCheckDouble::scd_none, tmpArrVS[i]->ArrMacro); + Load(SHADER_TYPE_VERTEX, tmpArrVS[i]->Path, tmpArrVS[i]->Name, ShaderCheckDouble::scd_none, tmpArrVS[i]->ArrMacro); } for (int i = 0; i<tmpArrPS.size(); i++) { - Load(ShaderType::st_pixel, tmpArrPS[i]->Path, tmpArrPS[i]->Name, ShaderCheckDouble::scd_none, tmpArrPS[i]->ArrMacro); + Load(SHADER_TYPE_PIXEL, tmpArrPS[i]->Path, tmpArrPS[i]->Name, ShaderCheckDouble::scd_none, tmpArrPS[i]->ArrMacro); } } -ID ShaderManager::IsExistPath(ShaderType type_shader, const char* path) +ID ShaderManager::IsExistPath(SHADER_TYPE type_shader, const char* path) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { for (int i = 0; i<ArrVS.size(); i++) { @@ -263,7 +263,7 @@ ID ShaderManager::IsExistPath(ShaderType type_shader, const char* path) return i; } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { for (int i = 0; i<ArrPS.size(); i++) { @@ -274,9 +274,9 @@ ID ShaderManager::IsExistPath(ShaderType type_shader, const char* path) return -1; } -ID ShaderManager::IsExistName(ShaderType type_shader, const char* name) +ID ShaderManager::IsExistName(SHADER_TYPE type_shader, const char* name) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { for (int i = 0; i<ArrVS.size(); i++) { @@ -284,7 +284,7 @@ ID ShaderManager::IsExistName(ShaderType type_shader, const char* name) return i; } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { for (int i = 0; i<ArrPS.size(); i++) { @@ -311,9 +311,9 @@ bool ShaderManager::FileExists(const char* path) return Core_0FileExists(tmppath); } -ID ShaderManager::Load(ShaderType type_shader, const char* path, const char* name, ShaderCheckDouble is_check_double, D3DXMACRO* macro) +ID ShaderManager::Load(SHADER_TYPE type_shader, const char* path, const char* name, ShaderCheckDouble is_check_double, D3DXMACRO* macro) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { ID id = -1; @@ -349,7 +349,7 @@ ID ShaderManager::Load(ShaderType type_shader, const char* path, const char* nam return id; } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { ID id = -1; if (is_check_double == ShaderCheckDouble::scd_path) @@ -383,10 +383,10 @@ ID ShaderManager::Load(ShaderType type_shader, const char* path, const char* nam return -1; } -void ShaderManager::Update(ShaderType type_shader, const char* name, D3DXMACRO* macro) +void ShaderManager::Update(SHADER_TYPE type_shader, const char* name, D3DXMACRO* macro) { bool isupdate = false; - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { for (int i = 0; i<ArrVS.size(); i++) { @@ -404,7 +404,7 @@ void ShaderManager::Update(ShaderType type_shader, const char* name, D3DXMACRO* } } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { for (int i = 0; i<ArrPS.size(); i++) { @@ -429,10 +429,10 @@ void ShaderManager::Update(ShaderType type_shader, const char* name, D3DXMACRO* g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sgcore: shader [%s] is update", name); } -void ShaderManager::Update(ShaderType type_shader, ID id, D3DXMACRO* macro) +void ShaderManager::Update(SHADER_TYPE type_shader, ID id, D3DXMACRO* macro) { bool isupdate = false; - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { if (ArrVS.size() > id && ArrVS[id]) { @@ -460,7 +460,7 @@ void ShaderManager::Update(ShaderType type_shader, ID id, D3DXMACRO* macro) isupdate = true; } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { if (ArrPS.size() > id && ArrVS[id]) { @@ -496,9 +496,9 @@ void ShaderManager::Update(ShaderType type_shader, ID id, D3DXMACRO* macro) g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sgcore: shader [%s] is update", ArrPS[id]->Name); } -ID ShaderManager::GetID(ShaderType type_shader, const char* shader) +ID ShaderManager::GetID(SHADER_TYPE type_shader, const char* shader) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { for (int i = 0; i<ArrVS.size(); i++) { @@ -508,7 +508,7 @@ ID ShaderManager::GetID(ShaderType type_shader, const char* shader) } } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { for (int i = 0; i<ArrPS.size(); i++) { @@ -521,10 +521,10 @@ ID ShaderManager::GetID(ShaderType type_shader, const char* shader) return -1; } -void ShaderManager::Bind(ShaderType type_shader, const char* shader) +void ShaderManager::Bind(SHADER_TYPE type_shader, const char* shader) { bool isbind = false; - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { for (int i = 0; i<ArrVS.size(); i++) { @@ -536,7 +536,7 @@ void ShaderManager::Bind(ShaderType type_shader, const char* shader) } } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { for (int i = 0; i<ArrPS.size(); i++) { @@ -553,10 +553,10 @@ void ShaderManager::Bind(ShaderType type_shader, const char* shader) g_fnReportf(REPORT_MSG_LEVEL_WARNING, "!!! sgcore: shader not bind, type [%d], name [%s]\n", type_shader, shader); } -void ShaderManager::Bind(ShaderType type_shader, ID shader) +void ShaderManager::Bind(SHADER_TYPE type_shader, ID shader) { bool isbind = false; - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { if (shader < ArrVS.size()) { @@ -564,7 +564,7 @@ void ShaderManager::Bind(ShaderType type_shader, ID shader) DXDevice->SetVertexShader(ArrVS[shader]->VertexShader); } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { if (shader < ArrPS.size()) { @@ -584,9 +584,9 @@ void ShaderManager::UnBind() } -void ShaderManager::SetValueRegisterF(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_float4) +void ShaderManager::SetValueRegisterF(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_float4) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { int num_shader = -1; int num_var = -1; @@ -618,7 +618,7 @@ void ShaderManager::SetValueRegisterF(ShaderType type_shader, const char* name_s g_fnReportf(REPORT_MSG_LEVEL_WARNING, "!!! sgcore: set shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", name_var, type_shader, name_shader); } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { int num_shader = -1; int num_var = -1; @@ -652,9 +652,9 @@ void ShaderManager::SetValueRegisterF(ShaderType type_shader, const char* name_s } } -void ShaderManager::SetValueRegisterI(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_int4) +void ShaderManager::SetValueRegisterI(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_int4) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { int num_shader = -1; int num_var = -1; @@ -686,7 +686,7 @@ void ShaderManager::SetValueRegisterI(ShaderType type_shader, const char* name_s g_fnReportf(REPORT_MSG_LEVEL_WARNING, "!!! sgcore: set shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", name_var, type_shader, name_shader); } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { int num_shader = -1; int num_var = -1; @@ -720,11 +720,11 @@ void ShaderManager::SetValueRegisterI(ShaderType type_shader, const char* name_s } } -void ShaderManager::SetValueRegisterI(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_int4) +void ShaderManager::SetValueRegisterI(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_int4) { if (IsValidate(type_shader, num_shader)) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { int num_var = -1; @@ -742,7 +742,7 @@ void ShaderManager::SetValueRegisterI(ShaderType type_shader, ID num_shader, con else if (num_var == -1) g_fnReportf(REPORT_MSG_LEVEL_WARNING, "!!! sgcore: set shader constant [%s] is failed, constant not found, type [%d], id [%d]\n", name_var, type_shader, num_shader); } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { int num_var = -1; @@ -766,11 +766,11 @@ void ShaderManager::SetValueRegisterI(ShaderType type_shader, ID num_shader, con } -void ShaderManager::SetValueRegisterF(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_float4) +void ShaderManager::SetValueRegisterF(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_float4) { if (IsValidate(type_shader, num_shader)) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { int num_var = -1; @@ -788,7 +788,7 @@ void ShaderManager::SetValueRegisterF(ShaderType type_shader, ID num_shader, con else if (num_var == -1) g_fnReportf(REPORT_MSG_LEVEL_WARNING, "!!! sgcore: set shader constant [%s] is failed, constant not found, type [%d], id [%d]\n", name_var, type_shader, num_shader); } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { int num_var = -1; @@ -811,9 +811,9 @@ void ShaderManager::SetValueRegisterF(ShaderType type_shader, ID num_shader, con g_fnReportf(REPORT_MSG_LEVEL_WARNING, "!!! sgcore: set shader constant [%s] is failed, shader not validate, type [%d], id [%d]\n", name_var, type_shader, num_shader); } -bool ShaderManager::IsValidate(ShaderType type_shader, ID id) +bool ShaderManager::IsValidate(SHADER_TYPE type_shader, ID id) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { if(id < ArrVS.size()) { @@ -821,7 +821,7 @@ bool ShaderManager::IsValidate(ShaderType type_shader, ID id) return true; } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { if (id < ArrPS.size()) { @@ -832,9 +832,9 @@ bool ShaderManager::IsValidate(ShaderType type_shader, ID id) return false; } -void ShaderManager::GetPath(ShaderType type_shader, ID id, char* path) +void ShaderManager::GetPath(SHADER_TYPE type_shader, ID id, char* path) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { if(id < ArrVS.size()) { @@ -842,7 +842,7 @@ void ShaderManager::GetPath(ShaderType type_shader, ID id, char* path) sprintf(path,"%s",ArrVS[id]->Path); } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { if(id < ArrPS.size()) { @@ -852,9 +852,9 @@ void ShaderManager::GetPath(ShaderType type_shader, ID id, char* path) } } -void ShaderManager::GetName(ShaderType type_shader, ID id, char* name) +void ShaderManager::GetName(SHADER_TYPE type_shader, ID id, char* name) { - if (type_shader == ShaderType::st_vertex) + if (type_shader == SHADER_TYPE_VERTEX) { if(id < ArrVS.size()) { @@ -862,7 +862,7 @@ void ShaderManager::GetName(ShaderType type_shader, ID id, char* name) sprintf(name,"%s",ArrVS[id]->Name); } } - else if (type_shader == ShaderType::st_pixel) + else if (type_shader == SHADER_TYPE_PIXEL) { if(id < ArrPS.size()) { diff --git a/source/gcore/shader.h b/source/gcore/shader.h index a9f3adfa46af0e4689a479708349f4144dd111da..ce954285e0c82a2d435d69623f4731dd2c266956 100644 --- a/source/gcore/shader.h +++ b/source/gcore/shader.h @@ -54,34 +54,34 @@ public: bool FileExists(const char* path); - ID Load(ShaderType type_shader, const char* path, const char* name, ShaderCheckDouble is_check_double, D3DXMACRO* macro = 0); - void Update(ShaderType type_shader, const char* name, D3DXMACRO macro[] = 0); - void Update(ShaderType type_shader, ID id, D3DXMACRO macro[] = 0); + ID Load(SHADER_TYPE type_shader, const char* path, const char* name, ShaderCheckDouble is_check_double, D3DXMACRO* macro = 0); + void Update(SHADER_TYPE type_shader, const char* name, D3DXMACRO macro[] = 0); + void Update(SHADER_TYPE type_shader, ID id, D3DXMACRO macro[] = 0); void ReloadAll(); - ID GetID(ShaderType type_shader, const char* shader); + ID GetID(SHADER_TYPE type_shader, const char* shader); - void Bind(ShaderType type_shader, const char* shader); - void Bind(ShaderType type_shader, ID shader); + void Bind(SHADER_TYPE type_shader, const char* shader); + void Bind(SHADER_TYPE type_shader, ID shader); void UnBind(); - void SetValueRegisterF(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_float4=0); - void SetValueRegisterF(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_float4 = 0); + void SetValueRegisterF(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_float4=0); + void SetValueRegisterF(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_float4 = 0); - void SetValueRegisterI(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_int4 = 0); - void SetValueRegisterI(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_int4 = 0); + void SetValueRegisterI(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_int4 = 0); + void SetValueRegisterI(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_int4 = 0); - void SetValueRegisterB(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_bool4 = 0); - void SetValueRegisterB(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_bool4 = 0); + void SetValueRegisterB(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_bool4 = 0); + void SetValueRegisterB(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_bool4 = 0); - ID IsExistPath(ShaderType type_shader, const char* path); - ID IsExistName(ShaderType type_shader, const char* name); - bool IsValidate(ShaderType type_shader, ID id); + ID IsExistPath(SHADER_TYPE type_shader, const char* path); + ID IsExistName(SHADER_TYPE type_shader, const char* name); + bool IsValidate(SHADER_TYPE type_shader, ID id); - void GetPath(ShaderType type_shader, ID id, char* path); - void GetName(ShaderType type_shader, ID id, char* name); + void GetPath(SHADER_TYPE type_shader, ID id, char* path); + void GetName(SHADER_TYPE type_shader, ID id, char* name); protected: Array<ShaderVS*> ArrVS; diff --git a/source/gcore/sky.cpp b/source/gcore/sky.cpp index 988fb19cc4ea0493b98113b33431d347e403200d..25448eee8d2877158620c177face94a27407634d 100644 --- a/source/gcore/sky.cpp +++ b/source/gcore/sky.cpp @@ -15,8 +15,8 @@ SkyBox::SkyBox() DXDevice->CreateVertexDeclaration(layoutskybox, &VertexDeclarationSkyBox); - VS_RenderSkyBox = SGCore_ShaderLoad(ShaderType::st_vertex, "sky_box.vs", "sky_box", ShaderCheckDouble::scd_name); - PS_RenderSkyBox = SGCore_ShaderLoad(ShaderType::st_pixel, "sky_box.ps", "sky_box", ShaderCheckDouble::scd_name); + VS_RenderSkyBox = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sky_box.vs", "sky_box", ShaderCheckDouble::scd_name); + PS_RenderSkyBox = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_box.ps", "sky_box", ShaderCheckDouble::scd_name); Color = float4(0,0,0,0); RotaionY = 0.f; @@ -218,11 +218,11 @@ void SkyBox::Render(float timeDelta,float3* pos,bool is_shadow) DXDevice->SetTexture(1,Tex2); } - SGCore_ShaderSetVRF(ShaderType::st_vertex, VS_RenderSkyBox, "WorldViewProjection", &WVP); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyBox, "Color", &Color); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyBox, "BlendFactor", &FactorBlend); - SGCore_ShaderBind(ShaderType::st_vertex, VS_RenderSkyBox); - SGCore_ShaderBind(ShaderType::st_pixel, PS_RenderSkyBox); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, VS_RenderSkyBox, "WorldViewProjection", &WVP); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyBox, "Color", &Color); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyBox, "BlendFactor", &FactorBlend); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, VS_RenderSkyBox); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PS_RenderSkyBox); DXDevice->SetStreamSource(0, Vertices, 0, sizeof(SkyBoxVertex)); DXDevice->SetIndices(Indeces); @@ -245,11 +245,11 @@ SkyClouds::SkyClouds() DXDevice->CreateVertexDeclaration(layoutclouds, &VertexDeclarationClouds); - VS_RenderSkyClouds = SGCore_ShaderLoad(ShaderType::st_vertex, "sky_clouds.vs", "sky_clouds", ShaderCheckDouble::scd_name); - PS_RenderSkyClouds = SGCore_ShaderLoad(ShaderType::st_pixel, "sky_clouds.ps", "sky_clouds", ShaderCheckDouble::scd_name); + VS_RenderSkyClouds = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sky_clouds.vs", "sky_clouds", ShaderCheckDouble::scd_name); + PS_RenderSkyClouds = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_clouds.ps", "sky_clouds", ShaderCheckDouble::scd_name); D3DXMACRO Defines_SHADOW[] = { { "SHADOW", "" }, { 0, 0 } }; - PS_RenderSkyCloudsShadow = SGCore_ShaderLoad(ShaderType::st_pixel, "sky_clouds.ps", "sky_clouds_shadow", ShaderCheckDouble::scd_name, Defines_SHADOW); + PS_RenderSkyCloudsShadow = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_clouds.ps", "sky_clouds_shadow", ShaderCheckDouble::scd_name, Defines_SHADOW); RotaionY = 0; Alpha = 1.f; @@ -471,12 +471,12 @@ void SkyClouds::Render(DWORD timeDelta,float3* pos,bool is_shadow) WVP = SMMatrixTranspose(WVP); - SGCore_ShaderSetVRF(ShaderType::st_vertex, VS_RenderSkyClouds, "WorldViewProjection", &WVP); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyClouds, "BlendFactorBias", &float2(FactorBlend, Bias)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyClouds, "Color", &Color); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyClouds, "Alpha", &Alpha); - SGCore_ShaderBind(ShaderType::st_vertex, VS_RenderSkyClouds); - SGCore_ShaderBind(ShaderType::st_pixel, PS_RenderSkyClouds); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, VS_RenderSkyClouds, "WorldViewProjection", &WVP); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyClouds, "BlendFactorBias", &float2(FactorBlend, Bias)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyClouds, "Color", &Color); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyClouds, "Alpha", &Alpha); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, VS_RenderSkyClouds); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PS_RenderSkyClouds); } else { @@ -488,12 +488,12 @@ void SkyClouds::Render(DWORD timeDelta,float3* pos,bool is_shadow) WVP = SMMatrixTranspose(WVP); - SGCore_ShaderSetVRF(ShaderType::st_vertex, VS_RenderSkyClouds, "WorldViewProjection", &WVP); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyCloudsShadow, "BlendFactorBias", &float2(FactorBlend, Bias)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, VS_RenderSkyClouds, "WorldViewProjection", &WVP); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyCloudsShadow, "BlendFactorBias", &float2(FactorBlend, Bias)); //SGCore_ShaderSetVRF(1, PS_RenderSkyCloudsShadow, "Color", &Color); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PS_RenderSkyCloudsShadow, "Alpha", &Alpha); - SGCore_ShaderBind(ShaderType::st_vertex, VS_RenderSkyClouds); - SGCore_ShaderBind(ShaderType::st_pixel, PS_RenderSkyCloudsShadow); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyCloudsShadow, "Alpha", &Alpha); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, VS_RenderSkyClouds); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PS_RenderSkyCloudsShadow); } DXDevice->SetStreamSource(0, SkyCloudsVertices, 0, sizeof(SkyCloudsVertex)); diff --git a/source/gcore/sxgcore.cpp b/source/gcore/sxgcore.cpp index 9434a916372b42981963f539c73f0997e24d5215..035734b5bfc50cb638d3eb316472dc2198d376b0 100644 --- a/source/gcore/sxgcore.cpp +++ b/source/gcore/sxgcore.cpp @@ -27,7 +27,7 @@ IDirect3D9* d3d9 = 0; ID3DXFont* FPSText = 0; -/// +//########################################################################## void StdDrawIndexedPrimitive(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count) { @@ -67,9 +67,8 @@ g_func_mtl_load FuncMtlLoad = StdMtlLoad; g_func_mtl_get_sort FuncMtlGetSort = StdMtlGetSort; g_func_mtl_get_physic_type FuncMtlGetPhysicType = StdMtlGetPhysicType; g_func_mtl_group_render_is_singly FuncMtlGroupRenderIsSingly = StdMtlGroupIsSyngly; -/// - +//########################################################################## IDirect3DVertexDeclaration9* StaticVertexDecl = 0; @@ -196,17 +195,17 @@ void GCoreInit(HWND hwnd, int width, int heigth, bool windowed, DWORD create_dev DXDevice->CreateVertexDeclaration(layoutstatic, &StaticVertexDecl); } -long SGCore_0GetVersion() +SX_LIB_API long SGCore_0GetVersion() { return SXGCORE_VERSION; } -void SGCore_Dbg_Set(report_func rf) +SX_LIB_API void SGCore_Dbg_Set(report_func rf) { g_fnReportf = rf; } -void SGCore_0Create(const char* name, HWND hwnd, int width, int heigth, bool windowed, DWORD create_device_flags, bool is_unic) +SX_LIB_API void SGCore_0Create(const char* name, HWND hwnd, int width, int heigth, bool windowed, DWORD create_device_flags, bool is_unic) { if (name && strlen(name) > 1) { @@ -226,7 +225,7 @@ void SGCore_0Create(const char* name, HWND hwnd, int width, int heigth, bool win g_fnReportf(-1, "%s - not init argument [name], sxgcore", gen_msg_location); } -void SGCore_AKill() +SX_LIB_API void SGCore_AKill() { mem_delete(MShaders); mem_delete(MRenderTargets); @@ -241,12 +240,12 @@ void SGCore_AKill() mem_release(d3d9); } -IDirect3DDevice9* SGCore_GetDXDevice() +SX_LIB_API IDirect3DDevice9* SGCore_GetDXDevice() { return DXDevice; } -void SGCore_DbgMsg(const char* format, ...) +SX_LIB_API void SGCore_DbgMsg(const char* format, ...) { SG_PRECOND(_VOID); @@ -267,7 +266,7 @@ void SGCore_DbgMsg(const char* format, ...) FPSText->DrawText(0, buf, -1, &rect, 0, 0xffffffff); } -void SGCore_OnLostDevice() +SX_LIB_API void SGCore_OnLostDevice() { SG_PRECOND(_VOID); @@ -275,7 +274,7 @@ void SGCore_OnLostDevice() MRenderTargets->OnLostDevice(); } -bool SGCore_OnDeviceReset(int width, int heigth, bool windowed) +SX_LIB_API bool SGCore_OnDeviceReset(int width, int heigth, bool windowed) { SG_PRECOND(false); D3DAPP.BackBufferWidth = width; @@ -289,7 +288,7 @@ bool SGCore_OnDeviceReset(int width, int heigth, bool windowed) return (FAILED(DXDevice->Reset(&D3DAPP))); } -void SGCore_OnResetDevice() +SX_LIB_API void SGCore_OnResetDevice() { SG_PRECOND(_VOID); @@ -317,7 +316,7 @@ void SGCore_OnResetDevice() } } -void SGCore_ScreenQuadDraw() +SX_LIB_API void SGCore_ScreenQuadDraw() { SG_PRECOND(_VOID); ScreenTexture->DrawSubset(0); @@ -401,21 +400,21 @@ void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is_singly fun //////////// -ID SGCore_ShaderLoad(ShaderType type_shader, const char* path, const char* name, ShaderCheckDouble is_check_double, D3DXMACRO* macro) +ID SGCore_ShaderLoad(SHADER_TYPE type_shader, const char* path, const char* name, ShaderCheckDouble is_check_double, D3DXMACRO* macro) { SG_PRECOND(-1); return MShaders->Load(type_shader, path, name, is_check_double, macro); } -void SGCore_ShaderUpdateN(ShaderType type_shader, const char* name, D3DXMACRO macro[]) +void SGCore_ShaderUpdateN(SHADER_TYPE type_shader, const char* name, D3DXMACRO macro[]) { SG_PRECOND(_VOID); MShaders->Update(type_shader, name, macro); } -void SGCore_ShaderUpdate(ShaderType type_shader, ID id, D3DXMACRO macro[]) +void SGCore_ShaderUpdate(SHADER_TYPE type_shader, ID id, D3DXMACRO macro[]) { SG_PRECOND(_VOID); @@ -429,21 +428,21 @@ void SGCore_ShaderReloadAll() MShaders->ReloadAll(); } -ID SGCore_ShaderGetID(ShaderType type_shader, const char* shader) +ID SGCore_ShaderGetID(SHADER_TYPE type_shader, const char* shader) { SG_PRECOND(-1); return MShaders->GetID(type_shader, shader); } -void SGCore_ShaderBindN(ShaderType type_shader, const char* shader) +void SGCore_ShaderBindN(SHADER_TYPE type_shader, const char* shader) { SG_PRECOND(_VOID); return MShaders->Bind(type_shader, shader); } -void SGCore_ShaderBind(ShaderType type_shader, ID shader) +void SGCore_ShaderBind(SHADER_TYPE type_shader, ID shader) { SG_PRECOND(_VOID); @@ -458,28 +457,28 @@ void SGCore_ShaderUnBind() return MShaders->UnBind(); } -void SGCore_ShaderSetVRFN(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_float4) +void SGCore_ShaderSetVRFN(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_float4) { SG_PRECOND(_VOID); return MShaders->SetValueRegisterF(type_shader, name_shader, name_var, data, count_float4); } -void SGCore_ShaderSetVRF(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_float4) +void SGCore_ShaderSetVRF(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_float4) { SG_PRECOND(_VOID); return MShaders->SetValueRegisterF(type_shader, num_shader, name_var, data, count_float4); } -void SGCore_ShaderSetVRIN(ShaderType type_shader, const char* name_shader, const char* name_var, void* data, int count_int4) +void SGCore_ShaderSetVRIN(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_int4) { SG_PRECOND(_VOID); return MShaders->SetValueRegisterI(type_shader, name_shader, name_var, data, count_int4); } -void SGCore_ShaderSetVRI(ShaderType type_shader, ID num_shader, const char* name_var, void* data, int count_int4) +void SGCore_ShaderSetVRI(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_int4) { SG_PRECOND(_VOID); @@ -487,35 +486,35 @@ void SGCore_ShaderSetVRI(ShaderType type_shader, ID num_shader, const char* name } -ID SGCore_ShaderIsExistName(ShaderType type_shader, const char* name) +ID SGCore_ShaderIsExistName(SHADER_TYPE type_shader, const char* name) { SG_PRECOND(-1); return MShaders->IsExistName(type_shader, name); } -ID SGCore_ShaderIsExistPath(ShaderType type_shader, const char* name) +ID SGCore_ShaderIsExistPath(SHADER_TYPE type_shader, const char* name) { SG_PRECOND(-1); return MShaders->IsExistName(type_shader, name); } -bool SGCore_ShaderIsValidate(ShaderType type_shader, ID id) +bool SGCore_ShaderIsValidate(SHADER_TYPE type_shader, ID id) { SG_PRECOND(0); return MShaders->IsValidate(type_shader, id); } -void SGCore_ShaderGetPath(ShaderType type_shader, ID id, char* path) +void SGCore_ShaderGetPath(SHADER_TYPE type_shader, ID id, char* path) { SG_PRECOND(_VOID); MShaders->GetPath(type_shader, id, path); } -void SGCore_ShaderGetName(ShaderType type_shader, ID id, char* name) +void SGCore_ShaderGetName(SHADER_TYPE type_shader, ID id, char* name) { SG_PRECOND(_VOID); diff --git a/source/gcore/sxgcore.h b/source/gcore/sxgcore.h index 9f41f13d4bcb32dd67a9d2f2ddd3a8e39eeaccac..f3f4b1f12baf0e4963a88f20396fef9f85c2e72a 100644 --- a/source/gcore/sxgcore.h +++ b/source/gcore/sxgcore.h @@ -13,10 +13,9 @@ See the license in LICENSE @{ */ -#ifndef __sxgcore -#define __sxgcore +#ifndef __SXGCORE_H +#define __SXGCORE_H -#include <gdefines.h> #include <GRegisterIndex.h> #include <d3d9.h> @@ -27,13 +26,21 @@ See the license in LICENSE #else #pragma comment(lib, "sxcore.lib") #endif -#include <core\\sxcore.h> + +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <core/sxcore.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + +#include <gdefines.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "DxErr9.lib") #pragma comment(lib, "d3dx9.lib") -#include <gcore\ModelFile.h> +#include <gcore/ModelFile.h> //флаги компиляции шейдеров #define SHADER_DEBUG D3DXSHADER_DEBUG | D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY | D3DXSHADER_AVOID_FLOW_CONTROL | D3DXSHADER_SKIPOPTIMIZATION @@ -52,23 +59,29 @@ See the license in LICENSE //! \name Базовые функции библиотеки //!@{ -SX_LIB_API long SGCore_0GetVersion(); //!< версия подсистемы -SX_LIB_API void SGCore_Dbg_Set(report_func rf); //!< установка функции вывода сообщений + +//! версия подсистемы +SX_LIB_API long SGCore_0GetVersion(); + +//! установка функции вывода сообщений +SX_LIB_API void SGCore_Dbg_Set(report_func rf); //! инициализация подсистемы SX_LIB_API void SGCore_0Create( - const char* name, //!< передваваемое имя подсистемы - HWND hwnd, //!< дескриптор окна в которое будет осуществляться рендер - int width, //!< ширина области рендера - int heigth, //!< высота области рендера - bool windowed, //!< оконный режим использовать ли? иначе полноэкранный - DWORD create_device_flags, //!< флаги создания устрайства (стандартные dx) - bool is_unic = true //!< должна ли подсистема быть уникальной на основе имени + const char *szName, //!< передваваемое имя подсистемы + HWND hWnd, //!< дескриптор окна в которое будет осуществляться рендер + int iWidth, //!< ширина области рендера + int iHeigth, //!< высота области рендера + bool isWindowed, //!< оконный режим использовать ли? иначе полноэкранный + DWORD dwFlags, //!< флаги создания устрайства (стандартные dx) + bool isUnic = true //!< должна ли подсистема быть уникальной на основе имени ); -SX_LIB_API void SGCore_AKill(); //!< уничтожение либы +//! уничтожение либы +SX_LIB_API void SGCore_AKill(); -SX_LIB_API IDirect3DDevice9* SGCore_GetDXDevice(); //!< возвращает dx устройство +//! возвращает dx устройство +SX_LIB_API IDirect3DDevice9* SGCore_GetDXDevice(); //!@} @@ -76,23 +89,26 @@ SX_LIB_API IDirect3DDevice9* SGCore_GetDXDevice(); //!< возвращает dx /*! \name Отладочное сообщение в окне рендера \note Графическое ядро предусматривает наличие текстового сообщения в окне рендера, которое формирует непосредственно сам программист и дает команду на его вывод -@{ -*/ -#define SXGC_STR_SIZE_DBG_MSG 4096 /*!< размер отладочного сообщения, выводимого в окно рендера */ +@{*/ + +/*!< размер отладочного сообщения, выводимого в окно рендера */ +#define SXGC_STR_SIZE_DBG_MSG 4096 + /*! Вывод отладочного сообщения в окно рендера. Аргументы аналогичны стандартным функциям типа printf. */ -SX_LIB_API void SGCore_DbgMsg(const char* format, ...); +SX_LIB_API void SGCore_DbgMsg(const char *szFormat, ...); + //!@} //############################################################################# /*! \name Обработка потери/восстановления устройства \warning Функции обработки потери/восстановления устройства обрабатывают ресурсы только в пределах данной библиотеки, другие библиотеки должны сами производить данную обработку! -*/ -//!@{ +!@{*/ -SX_LIB_API void SGCore_OnLostDevice(); //!< вызывать при потере устройства +//! вызывать при потере устройства +SX_LIB_API void SGCore_OnLostDevice(); //! вызывать при попытке сброса устройства SX_LIB_API bool SGCore_OnDeviceReset( @@ -101,7 +117,8 @@ SX_LIB_API bool SGCore_OnDeviceReset( bool windewed //!< true - оконный режим, false - полноэкранный ); -SX_LIB_API void SGCore_OnResetDevice(); //!< вызывать при сбросе устроства +//! вызывать при сбросе устроства +SX_LIB_API void SGCore_OnResetDevice(); //! отрисовка full screen quad (уже смещенного как надо чтобы не было размытия) SX_LIB_API void SGCore_ScreenQuadDraw(); @@ -113,31 +130,35 @@ SX_LIB_API void SGCore_ScreenQuadDraw(); /*! \name Базовые функции установки настроек выборки из текстуры id - идентификатор текстурного слота value - для Filter D3DTEXTUREFILTERTYPE, для Address D3DTEXTUREADDRESS -*/ -//!@{ +@{*/ + +//! установка фильтрации для конкретного слота +SX_LIB_API void SGCore_SetSamplerFilter(DWORD id, DWORD value); -SX_LIB_API void SGCore_SetSamplerFilter(DWORD id, DWORD value); //!< установка фильтрации для конкретного слота -SX_LIB_API void SGCore_SetSamplerFilter2(DWORD begin_id, DWORD end_id, DWORD value); //!< установка фильтрации для набора слотов от begin_id до end_id +//! установка фильтрации для набора слотов от begin_id до end_id +SX_LIB_API void SGCore_SetSamplerFilter2(DWORD begin_id, DWORD end_id, DWORD value); + + +//! установка адресации для конкретного слота +SX_LIB_API void SGCore_SetSamplerAddress(DWORD id, DWORD value); + +//! установка адресации для набора слотов от begin_id до end_id +SX_LIB_API void SGCore_SetSamplerAddress2(DWORD begin_id, DWORD end_id, DWORD value); -SX_LIB_API void SGCore_SetSamplerAddress(DWORD id, DWORD value); //!< установка адресации для конкретного слота -SX_LIB_API void SGCore_SetSamplerAddress2(DWORD begin_id, DWORD end_id, DWORD value); //!< установка адресации для набора слотов от begin_id до end_id //!@} //############################################################################# /*! \defgroup sxgcore_redefinition_func Переопределяемые функции \ingroup sxgcore - \note sxgcore содержит базовые и необходимые функции для переопределения их пользователем, которые будут доступны из графического ядра в других библиотеках зависимых от графического ядра, но в тоже время, эти функции могут быть переопределены функциями из других библиотек. \n Это обеспечивает централизованную обобщенную зависимость от самого графического ядра и исключает перекрестные зависимости библиотек между собой, позволяя программисту воздействовать на ценрт управления не из центра. \n Переопределяемые функции могут быть переопределены во внутреннем состоянии, то есть функция обертка так и останется функцией оберткой только будет вызывать уже переопределенную функцию. \n Переопределяемые функции изначально выполняют штатные действия исходя из их назначения, и могут вообще не переопределяться если так надо программисту, то есть необходимость в их переопределении исходит только от программиста. \n +@{*/ -@{ -*/ - -//! \name Прототипы переопределяемых функций -//!@{ +/*! \name Прототипы переопределяемых функций +@{*/ /*! draw indexed primitive, команда отрисовки. Аналогична DrawIndexedPrimitive, в дополнение к DIP инкрементирует счетчик DIPов в int регистрах по индексу #G_RI_INT_COUNT_DIP, обнуление данных только на стороне приложения @@ -158,45 +179,61 @@ typedef ID(*g_func_mtl_load) (const char* name, int mtl_type); //! получить сорт материала, по дефолту 0 typedef int(*g_func_mtl_get_sort) (ID id); + //! получить физический тип материала typedef int(*g_func_mtl_get_physic_type)(ID id); + //! рисовать ли подгруппы моделей данного материала раздельно? typedef bool(*g_func_mtl_group_render_is_singly) (ID id); + //!@} -//! \name Переопределяемые функции(переопределение реализации внутри) -//!@{ +/*! \name Переопределяемые функции(переопределение реализации внутри) +!@{*/ //! \copydoc g_func_dip SX_LIB_API void SGCore_DIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count); + //! \copydoc g_func_mtl_set SX_LIB_API void SGCore_MtlSet(ID id, float4x4* world); + //! \copydoc g_func_mtl_load SX_LIB_API ID SGCore_MtlLoad(const char* name, int mtl_type); + //! \copydoc g_func_mtl_get_sort SX_LIB_API int SGCore_MtlGetSort(ID id); + //! \copydoc g_func_mtl_get_physic_type SX_LIB_API int SGCore_MtlGetPhysicType(ID id); + //! \copydoc g_func_mtl_group_render_is_singly SX_LIB_API bool SGCore_MtlGroupRenderIsSingly(ID id); //!@} -//! \name Переопределение функций -//!@{ +//########################################################################## + +/*! \name Переопределение функций +!@{*/ //! переназначение g_func_dip SX_LIB_API void SGCore_SetFunc_DIP(g_func_dip func); + //! переназначение g_func_mtl_set SX_LIB_API void SGCore_SetFunc_MtlSet(g_func_mtl_set func); + //! переназначение g_func_mtl_load SX_LIB_API void SGCore_SetFunc_MtlLoad(g_func_mtl_load func); + //! переназначение g_func_mtl_get_sort SX_LIB_API void SGCore_SetFunc_MtlGetSort(g_func_mtl_get_sort func); + //! переназначение g_func_mtl_get_physic_type SX_LIB_API void SGCore_SetFunc_MtlGetPhysicType(g_func_mtl_get_physic_type func); + //! переназначение g_func_mtl_group_render_is_singly SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is_singly func); + //!@} //!@} group sxgcore_redefinition_func @@ -205,33 +242,36 @@ SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is /*! \defgroup sxgcore_shaders Шейдеры \ingroup sxgcore - \note Распознавание шейдеров (обращение через функции) происходит на основе идентификаторов представленных типом ID \n Если речь идет об идентификации на основе имени то имя в данном случае эта та строка name которая была передана SGCore_ShaderLoad \n Все шейдеры загружаются с версией 3.0 \n Если имя шейдер не содержит нижний пробел (_) то значит шейдера находится в корне директории \n Если шейдер содержит нижний пробел (_) то строка до первого нижнего проблема это имя папки в котором находится шейдер с целым именем \n Пример: pp_shader.vs - лежит по загружаемому пути: /pp/pp_shader.vs -@{ -*/ +@{*/ /*! \name Ограничения на размеры -@{ -*/ +@{*/ //! максимальный размер имени директории (до _) #define SXGC_SHADER_MAX_SIZE_DIR 64 + //! максимальный размер имени с расширением (после _) #define SXGC_SHADER_MAX_SIZE_NAME 64 + //! общий максимальный размер имени текстуры с расширением #define SXGC_SHADER_MAX_SIZE_DIRNAME SXGC_SHADER_MAX_SIZE_DIR + SXGC_SHADER_MAX_SIZE_NAME + //! максимальный размер пути до файла шейдера (без имени файла) #define SXGC_SHADER_MAX_SIZE_STDPATH 256 + //! максимальный размер полного пути до шейдера (включая имя шейдера) #define SXGC_SHADER_MAX_SIZE_FULLPATH SXGC_SHADER_MAX_SIZE_STDPATH + SXGC_SHADER_MAX_SIZE_DIRNAME + //! максимальная длина имени переменной в шейдере #define SXGC_SHADER_VAR_MAX_SIZE 64 + //! максимальное количество переменных в шейдере #define SXGC_SHADER_VAR_MAX_COUNT 64 @@ -240,11 +280,13 @@ SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is //!@} +//************************************************************************** + //! типы шейдеров (int type_shader) -enum ShaderType +enum SHADER_TYPE { - st_vertex, //!< вершинный - st_pixel //!< пиксельный + SHADER_TYPE_VERTEX, //!< вершинный + SHADER_TYPE_PIXEL //!< пиксельный }; //! типы проверок дубликатов шейдеров @@ -255,45 +297,73 @@ enum ShaderCheckDouble scd_name //!< проверка по пользовательскому имени }; +//************************************************************************** + //! загрузка шейдера SX_LIB_API ID SGCore_ShaderLoad( - ShaderType type_shader, //!< тип шейдера + SHADER_TYPE type_shader, //!< тип шейдера const char* path, //!< имя файла шейдера с расширением const char* name, //!< имя шейдера которое присвоится при загрузке ShaderCheckDouble is_check_double, //!< проверять ли на уникальность D3DXMACRO* macro = 0 //!< макросы ); -SX_LIB_API bool SGCore_ShaderFileExists(const char* name); //!< существует ли файл name в папке с шейдерами -SX_LIB_API void SGCore_ShaderGetName(ShaderType type_shader, ID id, char* name); //!< записывает пользовательское имя шейдера в name -SX_LIB_API void SGCore_ShaderGetPath(ShaderType type_shader, ID id, char* path); //!< записывает имя шейдер с расширением в path -SX_LIB_API ID SGCore_ShaderIsExistName(ShaderType type_shader, const char* name); //!< существует ли шейдер с пользовательским именем name, если да то возвращает id -SX_LIB_API ID SGCore_ShaderIsExistPath(ShaderType type_shader, const char* path); //!< существует ли шейдер с именем файла и расширением name, если да то возвращает id -SX_LIB_API bool SGCore_ShaderIsValidate(ShaderType type_shader, ID id); //!< загружен ли шейдер с данным id +//! существует ли файл name в папке с шейдерами +SX_LIB_API bool SGCore_ShaderFileExists(const char* name); + +//! записывает пользовательское имя шейдера в name +SX_LIB_API void SGCore_ShaderGetName(SHADER_TYPE type_shader, ID id, char* name); + +//! записывает имя шейдер с расширением в path +SX_LIB_API void SGCore_ShaderGetPath(SHADER_TYPE type_shader, ID id, char* path); + +//! существует ли шейдер с пользовательским именем name, если да то возвращает id +SX_LIB_API ID SGCore_ShaderIsExistName(SHADER_TYPE type_shader, const char* name); + +//! существует ли шейдер с именем файла и расширением name, если да то возвращает id +SX_LIB_API ID SGCore_ShaderIsExistPath(SHADER_TYPE type_shader, const char* path); + +//! загружен ли шейдер с данным id +SX_LIB_API bool SGCore_ShaderIsValidate(SHADER_TYPE type_shader, ID id); + + +//! бинд шейдера по имени +SX_LIB_API void SGCore_ShaderUpdateN(SHADER_TYPE type_shader, const char* name, D3DXMACRO macro[] = 0); + +//! бинд шейдера по id +SX_LIB_API void SGCore_ShaderUpdate(SHADER_TYPE type_shader, ID id, D3DXMACRO macro[] = 0); -SX_LIB_API void SGCore_ShaderUpdateN(ShaderType type_shader, const char* name, D3DXMACRO macro[] = 0); //!< бинд шейдера по имени -SX_LIB_API void SGCore_ShaderUpdate(ShaderType type_shader, ID id, D3DXMACRO macro[] = 0); //!< бинд шейдера по id +//! установить абсолютный путь откуда брать шейдеры +SX_LIB_API void SGCore_ShaderSetStdPath(const char* path); -SX_LIB_API void SGCore_ShaderSetStdPath(const char* path); //!< установить абсолютный путь откуда брать шейдеры -SX_LIB_API void SGCore_ShaderGetStdPath(char* path); //!< возвращает абсолютный путь откуда берутся шейдеры +//! возвращает абсолютный путь откуда берутся шейдеры +SX_LIB_API void SGCore_ShaderGetStdPath(char* path); //! перезагрузить все шейдеры, с учетом макросов SX_LIB_API void SGCore_ShaderReloadAll(); -SX_LIB_API ID SGCore_ShaderGetID(ShaderType type_shader, const char* name); //!< получить идентификатор шейдера по имени -SX_LIB_API void SGCore_ShaderBindN(ShaderType type_shader, const char* name); //!< бинд шейдера по имени -SX_LIB_API void SGCore_ShaderBind(ShaderType type_shader, ID id); //!< бинд шейдера по id +//! получить идентификатор шейдера по имени +SX_LIB_API ID SGCore_ShaderGetID(SHADER_TYPE type_shader, const char* name); -SX_LIB_API void SGCore_ShaderUnBind(); //!< обнуление биндов шейдеров +//! бинд шейдера по имени +SX_LIB_API void SGCore_ShaderBindN(SHADER_TYPE type_shader, const char* name); + +//! бинд шейдера по id +SX_LIB_API void SGCore_ShaderBind(SHADER_TYPE type_shader, ID id); + + +//! обнуление биндов шейдеров +SX_LIB_API void SGCore_ShaderUnBind(); + +//************************************************************************** /*! \name Передача данных в шейдер -@{ -*/ +@{*/ //! передача float значений в шейдер по имени SX_LIB_API void SGCore_ShaderSetVRFN( - ShaderType type_shader, //!< тип шейдера из #ShaderType + SHADER_TYPE type_shader, //!< тип шейдера из #SHADER_TYPE const char* name_shader,//!< пользовательское имя шейдера const char* name_var, //!< имя переменной которой присваивается значение void* data, //!< указатель на массив данных @@ -302,7 +372,7 @@ SX_LIB_API void SGCore_ShaderSetVRFN( //! передача float значений в шейдер по ID SX_LIB_API void SGCore_ShaderSetVRF( - ShaderType type_shader, //!< тип шейдера из #ShaderType + SHADER_TYPE type_shader, //!< тип шейдера из #SHADER_TYPE ID id, //!< идентификатор шейдера const char* name_var, //!< имя переменной которой присваивается значение void* data, //!< указатель на массив данных @@ -311,7 +381,7 @@ SX_LIB_API void SGCore_ShaderSetVRF( //! передача int значений в шейдер по имени SX_LIB_API void SGCore_ShaderSetVRIN( - ShaderType type_shader, //!< тип шейдера из #ShaderType + SHADER_TYPE type_shader, //!< тип шейдера из #SHADER_TYPE const char* name_shader,//!< пользовательское имя шейдера const char* name_var, //!< имя переменной которой присваивается значение void* data, //!< указатель на массив данных @@ -320,7 +390,7 @@ SX_LIB_API void SGCore_ShaderSetVRIN( //! передача int значений в шейдер по ID SX_LIB_API void SGCore_ShaderSetVRI( - ShaderType type_shader, //!< тип шейдера из #ShaderType + SHADER_TYPE type_shader, //!< тип шейдера из #SHADER_TYPE ID id, //!< идентификатор шейдера const char* name_var, //!< имя переменной которой присваивается значение void* data, //!< указатель на массив данных @@ -337,23 +407,27 @@ SX_LIB_API void SGCore_ShaderSetVRI( \note Распознавание текстур (обращение через функции) происходит на основе идентификаторов представленных типом ID. \n Имя текстуры обязательно долно содержать нижний пробел (_), строка до первого нижнего проблема это имя папки в котором находится текстура с целым именем. \n Например: mtl_tex.dds - лежит по загружаемому пути: /mtl/mtl_tex.dds -@{ -*/ +@{*/ -//! \name Ограничения на размеры -//!@{ +/*! \name Ограничения на размеры +@{*/ //! максимальный размер имени директории (до _) #define SXGC_LOADTEX_MAX_SIZE_DIR 64 + //! максимальный размер имени с расширением (после _) #define SXGC_LOADTEX_MAX_SIZE_NAME 64 + //! общий максимальный размер имени текстуры с расширением #define SXGC_LOADTEX_MAX_SIZE_DIRNAME SXGC_LOADTEX_MAX_SIZE_DIR + SXGC_LOADTEX_MAX_SIZE_NAME + //! максимальный размер пути до файла текстуры (без имени файла) #define SXGC_LOADTEX_MAX_SIZE_STDPATH 256 + //! максимальный размер полного пути до текстуры (включая имя текстуры) #define SXGC_LOADTEX_MAX_SIZE_FULLPATH SXGC_LOADTEX_MAX_SIZE_STDPATH + SXGC_LOADTEX_MAX_SIZE_DIRNAME + //! количество mipmap уровней в загружаемых текстурах #define SXGC_LOADTEX_COUNT_MIPMAP 5 @@ -364,8 +438,10 @@ SX_LIB_API void SGCore_ShaderSetVRI( //!@} -//! \name Типы материалов -//!@{ +//************************************************************************** + +/*! \name Типы материалов +!@{*/ #define MTL_TYPE_GEOM 0 /*!< статическая геометрия */ #define MTL_TYPE_GRASS 1 /*!< растительность - трава */ @@ -389,12 +465,26 @@ enum LoadTexType ltt_self, }; -SX_LIB_API bool SGCore_LoadTexFileExists(const char* name); //!< существует ил файл name в папке с текстурами -SX_LIB_API void SGCore_LoadTexClearLoaded(); //!< очистить список загружаемых текстур -SX_LIB_API void SGCore_LoadTexDelete(ID id); //!< удалить тектуру по id (независимо от типа) -SX_LIB_API ID SGCore_LoadTexAddName(const char* name, LoadTexType type);//!< добавляем имя текстуры, взамен получаем на нее ID (поставить в очередь) -SX_LIB_API ID SGCore_LoadTexGetID(const char* name); //!< получить id по имени -SX_LIB_API void SGCore_LoadTexGetName(ID id, char* name);//!< получить имя по id +//************************************************************************** + +//! существует ил файл name в папке с текстурами +SX_LIB_API bool SGCore_LoadTexFileExists(const char* name); + +//! очистить список загружаемых текстур +SX_LIB_API void SGCore_LoadTexClearLoaded(); + +//! удалить тектуру по id (независимо от типа) +SX_LIB_API void SGCore_LoadTexDelete(ID id); + +//! добавляем имя текстуры, взамен получаем на нее ID (поставить в очередь) +SX_LIB_API ID SGCore_LoadTexAddName(const char* name, LoadTexType type); + +//! получить id по имени +SX_LIB_API ID SGCore_LoadTexGetID(const char* name); + +//! получить имя по id +SX_LIB_API void SGCore_LoadTexGetName(ID id, char* name); + /*! создать место для текстуры tex и присвоить ей имя name, возвращает id \warning создавать текстур необходимо в managed pool (D3DPOOL_MANAGED) ибо обработка потери и восстановления устройства сюда не приходит @@ -406,9 +496,12 @@ SX_LIB_API ID SGCore_LoadTexCreate(const char* name, IDirect3DTexture9* tex); то можно использовать тип самоопределения ltt_self, тогда тип текстуры не изменится */ SX_LIB_API ID SGCore_LoadTexUpdateN(const char* name, LoadTexType type); -SX_LIB_API void SGCore_LoadTexUpdate(ID id);//!< обновить/перезагрузить текстуру -SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID id); //в!< озвращает текстуру по id +//! обновить/перезагрузить текстуру +SX_LIB_API void SGCore_LoadTexUpdate(ID id); + +//! возвращает текстуру по id +SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID id); //! загрузка всех текстур поставленных в очередь, если есть очередь SX_LIB_API void SGCore_LoadTexLoadTextures(); @@ -420,8 +513,7 @@ SX_LIB_API void SGCore_LoadTexLoadTextures(); /*! \defgroup sxgcore_rt Render targets \ingroup sxgcore \note Cброс и восстановление устройства сюда приходят -@{ -*/ +@{*/ //! добавить новый render target SX_LIB_API ID SGCore_RTAdd( @@ -439,13 +531,20 @@ SX_LIB_API ID SGCore_RTAdd( float coeffullscreen ); -SX_LIB_API void SGCore_RTDeleteN(const char* name); //!< удалить rt по имени -SX_LIB_API void SGCore_RTDelete(ID id); //!< удалить rt по id +//! удалить rt по имени +SX_LIB_API void SGCore_RTDeleteN(const char* name); + +//! удалить rt по id +SX_LIB_API void SGCore_RTDelete(ID id); -SX_LIB_API ID SGCore_RTGetNum(const char* name); //!< возвращает id по имени +//! возвращает id по имени +SX_LIB_API ID SGCore_RTGetNum(const char* name); -SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char* name); //!< возвращает текстуру по имени -SX_LIB_API IDirect3DTexture9* SGCore_RTGetTexture(ID id); //!< возвращает текстуру по id +//! возвращает текстуру по имени +SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char* name); + +//! возвращает текстуру по id +SX_LIB_API IDirect3DTexture9* SGCore_RTGetTexture(ID id); //!@} sxgcore_rt @@ -455,8 +554,7 @@ SX_LIB_API IDirect3DTexture9* SGCore_RTGetTexture(ID id); //!< возвращ \ingroup sxgcore \note sxgcore предоставляет возможность загрузки статических моделей, формат вершин которых представлен структурой #vertex_static, которая объявлена в файле ModelFile.h \todo Описать формат файла статической модели dse - @{ -*/ +@{*/ //! структура статической модели dse struct ISXDataStaticModel : public IBaseObject @@ -481,10 +579,17 @@ struct ISXDataStaticModel : public IBaseObject float3_t BBMax, BBMin; }; -SX_LIB_API ISXDataStaticModel* SGCore_StaticModelCr(); //!< создать статическую модель -SX_LIB_API void SGCore_StaticModelLoad(const char* file, ISXDataStaticModel** data); //!< загрузить статическую модель, data инициализируется внутри -SX_LIB_API void SGCore_StaticModelSave(const char* file, ISXDataStaticModel** data); //!< сохранить статическую модель -SX_LIB_API IDirect3DVertexDeclaration9* SGCore_StaticModelGetDecl(); //!< возвращает декларацию вершин статической модели +//! создать статическую модель +SX_LIB_API ISXDataStaticModel* SGCore_StaticModelCr(); + +//! загрузить статическую модель, data инициализируется внутри +SX_LIB_API void SGCore_StaticModelLoad(const char* file, ISXDataStaticModel** data); + +//! сохранить статическую модель +SX_LIB_API void SGCore_StaticModelSave(const char* file, ISXDataStaticModel** data); + +//! возвращает декларацию вершин статической модели +SX_LIB_API IDirect3DVertexDeclaration9* SGCore_StaticModelGetDecl(); //!@} sxgcore_dse_static @@ -492,8 +597,7 @@ SX_LIB_API IDirect3DVertexDeclaration9* SGCore_StaticModelGetDecl(); //!< воз /*! \defgroup sxgcore_bb Ограничивающий объем \ingroup sxgcore -@{ -*/ +@{*/ /*! Простой объект трансформаций с минимальным описанием. \note Для корректного использования необходимо сначала установить позицию/поворот/масштаб после чего CalculateWorld @@ -512,7 +616,8 @@ struct ISXTransObject : public IBaseObject float4x4 World; //!< мировая матрица на основе поворотов масштабирования и позиции }; -SX_LIB_API ISXTransObject* SGCore_CrTransObject(); //!< создать ISXTransObject +//! создать ISXTransObject +SX_LIB_API ISXTransObject* SGCore_CrTransObject(); //! структура описывающая ограничивающий квадрат (а точнее параллелепипед) в пространстве экрана struct SXPosBBScreen @@ -572,7 +677,8 @@ protected: float Radius; }; -SX_LIB_API ISXBound* SGCore_CrBound(); //!< создать ISXBound +//! создать ISXBound +SX_LIB_API ISXBound* SGCore_CrBound(); //!@} sxgcore_bb @@ -616,55 +722,69 @@ SX_LIB_API void SGCore_OptimizeIndecesInSubsetUint32( ); //!@} +//########################################################################## /*! \defgroup sxgcore_bb_intersect Функции просчета попаданий точек в объемы и деление объемов \ingroup sxgcore -@{ -*/ +@{*/ /*! \name Просчеты попадания точки/точек в объем \note 2d - на основании x и z координат \n 3d - на основании всех трех координат \n Abs - абсолютное нахождение внутри, не на границах, иное допускает нахождение на границах -@{ -*/ +@{*/ + +//! находится ли точка pos в пределах [min,max] по осям x z +SX_LIB_API bool SGCore_0InPos2D(float3* min, float3* max, float3* pos); + +//! находится ли точка pos в пределах (min,max) по осям x z +SX_LIB_API bool SGCore_0InPosAbs2D(float3* min, float3* max, float3* pos); -SX_LIB_API bool SGCore_0InPos2D(float3* min, float3* max, float3* pos); //!< находится ли точка pos в пределах [min,max] по осям x z -SX_LIB_API bool SGCore_0InPosAbs2D(float3* min, float3* max, float3* pos); //!< находится ли точка pos в пределах (min,max) по осям x z //! возвращает количество точек (p1,p2,p3) лежащих в пределах [min,max] по осям x z SX_LIB_API int SGCore_0CountPosPoints2D(float3* min, float3* max, float3* p1, float3* p2, float3* p3); + //! возвращает количество точек (p1,p2,p3) лежащих в пределах (min,max) по осям x z SX_LIB_API int SGCore_0CountPosPointsAbs2D(float3* min, float3* max, float3* p1, float3* p2, float3* p3); + //! лежит ли хотя бы одна точка абсолютно в (min,max) или хотя бы 2 точки в пределах [min,max], из числа трех точек p1,p2,p3, по осям x z SX_LIB_API bool SGCore_0InPosPoints2D(float3* min, float3* max, float3* p1, float3* p2, float3* p3); -SX_LIB_API bool SGCore_0InPos3D(float3* min, float3* max, float3* pos); //!< находится ли точка pos в пределах [min,max] -SX_LIB_API bool SGCore_0InPosAbs3D(float3* min, float3* max, float3* pos); //!< находится ли точка pos в пределах (min,max) +//! находится ли точка pos в пределах [min,max] +SX_LIB_API bool SGCore_0InPos3D(float3* min, float3* max, float3* pos); + +//! находится ли точка pos в пределах (min,max) +SX_LIB_API bool SGCore_0InPosAbs3D(float3* min, float3* max, float3* pos); + //! возвращает количество точек (p1,p2,p3) лежащих в пределах [min,max] SX_LIB_API int SGCore_0CountPosPoints3D(float3* min, float3* max, float3* p1, float3* p2, float3* p3); + //! возвращает количество точек (p1,p2,p3) лежащих в пределах (min,max) SX_LIB_API int SGCore_0CountPosPointsAbs3D(float3* min, float3* max, float3* p1, float3* p2, float3* p3); + //! лежит ли хотя бы одна точка абсолютно в (min,max) или хотя бы 2 точки в пределах [min,max], из числа трех точек p1,p2,p3 SX_LIB_API bool SGCore_0InPosPoints3D(float3* min, float3* max, float3* p1, float3* p2, float3* p3); //!@} +//************************************************************************** + /*! кубическое (octo) деление объема (по всем трем осям) \warning массивы и объекты должны быть заранее инициализированны */ SX_LIB_API void SGCore_0ComBoundBoxArr8(ISXBound* bound, ISXBound** bound_arr); + /*! квадратичное (quad) деление объема (по двум осям x и z) \warning массивы и объекты должны быть заранее инициализированны */ SX_LIB_API void SGCore_0ComBoundBoxArr4(ISXBound* bound, ISXBound** bound_arr); -//находит квадрат расстояния между лучем и точкой +//! находит квадрат расстояния между лучем и точкой SX_LIB_API float SGCore_0DistancePointBeam2(const float3 & p, const float3 & start, const float3 & dir); -//возвращает пересекаются ли боксы или нет +//! возвращает пересекаются ли боксы или нет SX_LIB_API bool SGCore_0InretsectBox(const float3 * min1, const float3 * max1, const float3 * min2, const float3 * max2); struct SXTriangle @@ -755,8 +875,10 @@ public: float3 Center; }; -SX_LIB_API ISXFrustum* SGCore_CrFrustum(); //!< создать ISXFrustum +//! создать ISXFrustum +SX_LIB_API ISXFrustum* SGCore_CrFrustum(); +//************************************************************************** //! камера class ISXCamera : public IBaseObject @@ -829,7 +951,8 @@ protected: float m_fFOV; }; -SX_LIB_API ISXCamera* SGCore_CrCamera(); //!< создать ISXCamera +//! создать ISXCamera +SX_LIB_API ISXCamera* SGCore_CrCamera(); //!@} sxgcore_camera @@ -837,29 +960,47 @@ SX_LIB_API ISXCamera* SGCore_CrCamera(); //!< создать ISXCamera /*! \defgroup sxgcore_sky Небо \ingroup sxgcore -@{ -*/ +@{*/ /*! \name SkyBox \note Используются кубические текстуры -@{ -*/ +@{*/ + +//! создание +SX_LIB_API void SGCore_SkyBoxCr(); -SX_LIB_API void SGCore_SkyBoxCr(); //!< создание -SX_LIB_API bool SGCore_SkyBoxIsCr();//!< инициализирован ли skybox -SX_LIB_API bool SGCore_SkyBoxIsLoadTex();//!< загружена ли текстура? +//! инициализирован ли skybox +SX_LIB_API bool SGCore_SkyBoxIsCr(); -SX_LIB_API void SGCore_SkyBoxLoadTex(const char *texture); //!< загрузка текстуры, texture - имя текстуры с расширением -SX_LIB_API void SGCore_SkyBoxChangeTex(const char *texture);//!< смена текстуры, texture - имя текстуры с расширением +//! загружена ли текстура? +SX_LIB_API bool SGCore_SkyBoxIsLoadTex(); + +//! загрузка текстуры, texture - имя текстуры с расширением +SX_LIB_API void SGCore_SkyBoxLoadTex(const char *texture); + +//! смена текстуры, texture - имя текстуры с расширением +SX_LIB_API void SGCore_SkyBoxChangeTex(const char *texture); + +//! в аргумент записывает путь до текущей активной текстуры SX_LIB_API void SGCore_SkyBoxGetActiveTex(char *texture); + +//! в аргумент записывает путь до следующей текстуры 9если включена смена) SX_LIB_API void SGCore_SkyBoxGetSecondTex(char *texture); -SX_LIB_API void SGCore_SkyBoxSetRot(float angle); //!< установка угла поворота angle по оси y, в радианах -SX_LIB_API float SGCore_SkyBoxGetRot(); //!< возвращает угол поворота по оси y, в радианах -SX_LIB_API void SGCore_SkyBoxSetColor(float4_t* color); //!< установка цвета окраски в пределах 0-1, альфа компонента (w) - на сколько будет окрашен -SX_LIB_API void SGCore_SkyBoxGetColor(float4_t* color); //!< в color записывает текущий цвет окраски +//! установка угла поворота angle по оси y, в радианах +SX_LIB_API void SGCore_SkyBoxSetRot(float angle); + +//! возвращает угол поворота по оси y, в радианах +SX_LIB_API float SGCore_SkyBoxGetRot(); + + +//! установка цвета окраски в пределах 0-1, альфа компонента (w) - на сколько будет окрашен +SX_LIB_API void SGCore_SkyBoxSetColor(float4_t* color); + +//! в color записывает текущий цвет окраски +SX_LIB_API void SGCore_SkyBoxGetColor(float4_t* color); //! рендер скайбокса SX_LIB_API void SGCore_SkyBoxRender( @@ -869,17 +1010,24 @@ SX_LIB_API void SGCore_SkyBoxRender( //!@} +//************************************************************************** + /*! \name SkyClouds \note Простая плоскость параллельная xz на которую зеркально (х2) натягивается текстура, в постоянном движении. Положение констатно. Используются обычные 2д текстуры. -@{ -*/ +@{*/ + +//! создание +SX_LIB_API void SGCore_SkyCloudsCr(); + +//! инициализирован ли sky clouds +SX_LIB_API bool SGCore_SkyCloudsIsCr(); + +//! загружена ли текстура +SX_LIB_API bool SGCore_SkyCloudsIsLoadTex(); -SX_LIB_API void SGCore_SkyCloudsCr(); //!< создание -SX_LIB_API bool SGCore_SkyCloudsIsCr(); //!< инициализирован ли sky clouds -SX_LIB_API bool SGCore_SkyCloudsIsLoadTex();//!< загружена ли текстура /*! установка размеров и позиции. Так как позиция облаков константна то чтобы была илюзия полного покрытия уровня, необходимо облакам указывать размер в несколько раз больше чем весь доступный уровень, к примеру x2 @@ -890,20 +1038,39 @@ SX_LIB_API void SGCore_SkyCloudsSetWidthHeightPos( float3* center //!< позиция центра ); -SX_LIB_API void SGCore_SkyCloudsLoadTex(const char *texture); //!< загрузка текстуры, texture - имя текстуры с расширением -SX_LIB_API void SGCore_SkyCloudsChangeTex(const char *texture); //!< загрузка текстуры, texture - имя текстуры с расширением +//! загрузка текстуры, texture - имя текстуры с расширением +SX_LIB_API void SGCore_SkyCloudsLoadTex(const char *texture); + +//! загрузка текстуры, texture - имя текстуры с расширением +SX_LIB_API void SGCore_SkyCloudsChangeTex(const char *texture); + + +//! установка угла поворота angle по оси y, в радианах +SX_LIB_API void SGCore_SkyCloudsSetRot(float angle); + +//! возвращает текущий угол поворота по оси y, в радианах +SX_LIB_API float SGCore_SkyCloudsGetRot(); + + +//! устанавливает коэфициент прозрачности, в пределах 0-1 +SX_LIB_API void SGCore_SkyCloudsSetAlpha(float alpha); + +//! возвращает текущий коэфициент прозрачности +SX_LIB_API float SGCore_SkyCloudsGetAlpha(); + + +//! устанавливает коэфициент скорости движения +SX_LIB_API void SGCore_SkyCloudsSetSpeed(float speed); -SX_LIB_API void SGCore_SkyCloudsSetRot(float angle);//!< установка угла поворота angle по оси y, в радианах -SX_LIB_API float SGCore_SkyCloudsGetRot(); //!< возвращает текущий угол поворота по оси y, в радианах +//! возвращает текущий коэфициент скорости движения +SX_LIB_API float SGCore_SkyCloudsGetSpeed(); -SX_LIB_API void SGCore_SkyCloudsSetAlpha(float alpha); //!< устанавливает коэфициент прозрачности, в пределах 0-1 -SX_LIB_API float SGCore_SkyCloudsGetAlpha(); //!< возвращает текущий коэфициент прозрачности -SX_LIB_API void SGCore_SkyCloudsSetSpeed(float speed); //!< устанавливает коэфициент скорости движения -SX_LIB_API float SGCore_SkyCloudsGetSpeed(); //!< возвращает текущий коэфициент скорости движения +//! установка цвета окраски в пределах 0-1, альфа компонента (w) - на сколько будет окрашен +SX_LIB_API void SGCore_SkyCloudsSetColor(float4_t* color); -SX_LIB_API void SGCore_SkyCloudsSetColor(float4_t* color);//!< установка цвета окраски в пределах 0-1, альфа компонента (w) - на сколько будет окрашен -SX_LIB_API void SGCore_SkyCloudsGetColor(float4_t* color);//!< в color записывает текущий цвет окраски +//! в color записывает текущий цвет окраски +SX_LIB_API void SGCore_SkyCloudsGetColor(float4_t* color); //! рендер облаков SX_LIB_API void SGCore_SkyCloudsRender( diff --git a/source/gdefines.h b/source/gdefines.h index e8e669a117abc9b00bd25acf71e9e9e315f90177..c178c52c97e472a41fde8d5c6b40d452fa6fe80f 100644 --- a/source/gdefines.h +++ b/source/gdefines.h @@ -80,19 +80,19 @@ struct IBaseObject Заголовочный файл для всех библиотек движка SkyXEngine */ -#ifndef gdefines_h -#define gdefines_h - //! макрос экспорта/импорта из библиотек -#if !defined(SX_LIB_API) - #if defined(SX_EXE) - #define SX_LIB_API extern "C" __declspec (dllimport) - #elif defined(SX_DLL) - #define SX_LIB_API extern "C" __declspec (dllexport) - #else - #define SX_LIB_API - #endif +/*#if !defined(SX_LIB_API) +#if defined(SX_EXE) +#define SX_LIB_API extern "C" __declspec (dllimport) +#elif defined(SX_DLL) +#define SX_LIB_API extern "C" __declspec (dllexport) +#else +#define SX_LIB_API extern #endif +#endif*/ + +#ifndef __GDEFINES_H +#define __GDEFINES_H #include <cstdlib> diff --git a/source/geom/sxgeom.h b/source/geom/sxgeom.h index 2c1b9f78e172c5646ac6787046e1ed3ed01b1760..f47714ff7ab161a4c9034f494c86f3b15ba915f3 100644 --- a/source/geom/sxgeom.h +++ b/source/geom/sxgeom.h @@ -18,8 +18,8 @@ See the license in LICENSE @{ */ -#ifndef __sxgeom -#define __sxgeom +#ifndef __SXGEOM_H +#define __SXGEOM_H #include <gdefines.h> @@ -28,28 +28,51 @@ See the license in LICENSE #else #pragma comment(lib, "sxgcore.lib") #endif -#include <gcore\\sxgcore.h> + +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <gcore/sxgcore.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + +//########################################################################## /*! \name Стандартные функции библиотеки @{*/ -SX_LIB_API long SGeom_0GetVersion(); //!< возвращает версию подсистемы геометрии -SX_LIB_API void SGeom_Dbg_Set(report_func rf); //!< установить новую функцию вывода сообщений -SX_LIB_API void SGeom_0Create( //!< инициализация подсистемы + +//! возвращает версию подсистемы геометрии +SX_LIB_API long SGeom_0GetVersion(); + +//! установить новую функцию вывода сообщений +SX_LIB_API void SGeom_Dbg_Set(report_func rf); + +//! инициализация подсистемы +SX_LIB_API void SGeom_0Create( const char* name, //!< имя bool is_unic = true //!< должна ли подсистема быть уникальной по имени ); -SX_LIB_API void SGeom_AKill(); //!< уничтожение подсистемы +//! уничтожение подсистемы +SX_LIB_API void SGeom_AKill(); + //!@} +//************************************************************************** + /*! \name Обработка потери/восстановления устройства @{*/ -SX_LIB_API void SGeom_OnLostDevice(); //!< обработка потери устройства -SX_LIB_API void SGeom_OnResetDevice(); //!< обработка восстановления устройства +//! обработка потери устройства +SX_LIB_API void SGeom_OnLostDevice(); + +//! обработка восстановления устройства +SX_LIB_API void SGeom_OnResetDevice(); //!@} +//########################################################################## + /*! \defgroup sxgeom_set Функции настроек, предварительная организация подсистемы необязательна \ingroup sxgeom @{*/ @@ -60,32 +83,56 @@ SX_LIB_API void SGeom_OnResetDevice(); //!< обработка восстано //SX_LIB_API void SGeom_0SettModelsSetSortFrontToBackModels(bool val); //unsupported //SX_LIB_API bool SGeom_0SettModelsGetSortFrontToBackModels(); //unsupported -SX_LIB_API void SGeom_0SettModelsSetSortFrontToBackSplits(bool val); //!< установка сортировки в моделях front to back по кускам деления -SX_LIB_API bool SGeom_0SettModelsGetSortFrontToBackSplits(); //!< установлена ли сортировка в моделях front to back по кускам деления +//! установка сортировки в моделях front to back по кускам деления +SX_LIB_API void SGeom_0SettModelsSetSortFrontToBackSplits(bool val); + +//! установлена ли сортировка в моделях front to back по кускам деления +SX_LIB_API bool SGeom_0SettModelsGetSortFrontToBackSplits(); //!@} /*! \name Растительность @{*/ -SX_LIB_API float SGeom_0SettGreenGetDistLods1(); //!< получить дистанцию окончания нулевого лода (лода травы) и начало первого лода -SX_LIB_API void SGeom_0SettGreenSetDistLods1(float val); //!< установить дистанцию окончания нулевого лода (лода травы) и начало первого лода +//! получить дистанцию окончания нулевого лода (лода травы) и начало первого лода +SX_LIB_API float SGeom_0SettGreenGetDistLods1(); + +//! установить дистанцию окончания нулевого лода (лода травы) и начало первого лода +SX_LIB_API void SGeom_0SettGreenSetDistLods1(float val); + + +//! получить дистанцию окончания первого лода и начало второго лода +SX_LIB_API float SGeom_0SettGreenGetDistLods2(); + +//!< установить дистанцию окончания первого лода и начало второго лода +SX_LIB_API void SGeom_0SettGreenSetDistLods2(float val); -SX_LIB_API float SGeom_0SettGreenGetDistLods2(); //!< получить дистанцию окончания первого лода и начало второго лода -SX_LIB_API void SGeom_0SettGreenSetDistLods2(float val); //!< установить дистанцию окончания первого лода и начало второго лода -SX_LIB_API int SGeom_0SettGreenGetFreqGrass(); //!< получить текущую частоту (густоту) травы, от 0 до 100 -SX_LIB_API void SGeom_0SettGreenSetFreqGrass(int val); //!< установить текущую частоту (густоту) травы, от 0 до 100 +//! получить текущую частоту (густоту) травы, от 0 до 100 +SX_LIB_API int SGeom_0SettGreenGetFreqGrass(); -SX_LIB_API float SGeom_0SettGreenGetBeginEndLessening(); //!< получить начало уменьшения травы, пределы от 0 до DistLods1 -SX_LIB_API void SGeom_0SettGreenSetBeginEndLessening(float val);//!< установить начало уменьшения травы, пределы от 0 до DistLods1 +//! установить текущую частоту (густоту) травы, от 0 до 100 +SX_LIB_API void SGeom_0SettGreenSetFreqGrass(int val); -SX_LIB_API bool SGeom_0SettGreenGetSortFrontToBackSplits(); //!< установлена ли сортировка front to back по кускам деления -SX_LIB_API void SGeom_0SettGreenSetSortFrontToBackSplits(bool val); //!< установить сортировку front to back по кускам деления + +//! получить начало уменьшения травы, пределы от 0 до DistLods1 +SX_LIB_API float SGeom_0SettGreenGetBeginEndLessening(); + +//! установить начало уменьшения травы, пределы от 0 до DistLods1 +SX_LIB_API void SGeom_0SettGreenSetBeginEndLessening(float val); + + +//! установлена ли сортировка front to back по кускам деления +SX_LIB_API bool SGeom_0SettGreenGetSortFrontToBackSplits(); + +//! установить сортировку front to back по кускам деления +SX_LIB_API void SGeom_0SettGreenSetSortFrontToBackSplits(bool val); //!@} //!@} sxgeom_set +//########################################################################## + /*! \defgroup sxgeom_models Статическая геометрия \ingroup sxgeom \note Вся геометрия состояит из набора подгрупп. То есть в данной реализации не существует отдельного понятия модель, но есть некоторая его интерпретация.\n\n @@ -106,6 +153,7 @@ SGeom_ModelsRender(timeDelta, type, id_arr_cam); SGeom_ModelsRender(timeDelta, type, id_arr_shadow); SGeom_ModelsRender(timeDelta, type, id_arr_light); \endcode + \note Лоды сохраняются в виде относительных путей, текстуры в виде имен \todo Описать формат файла с сохраненным списком моделей @{ */ @@ -119,14 +167,20 @@ SGeom_ModelsRender(timeDelta, type, id_arr_light); #define GEOM_MIN_POLYGONS_FOR_SEGMENTATION 5000 /*!< минимальнео количество полигонов в модели для деления */ #define GEOM_MIN_COUNT_POLY 500 /*!< минимальное количество полигонов в сплите */ #define GEOM_MAX_COUNT_POLY 1000 /*!< максимальное количество полигонов в сплите */ + +//************************************************************************** -SX_LIB_API void SGeom_ModelsClear(); //!< очистить список всех моделей +//! очистить список всех моделей +SX_LIB_API void SGeom_ModelsClear(); + +//! сохранить все модели в бинарный файл +SX_LIB_API void SGeom_ModelsSave(const char* path); -//лоды сохраняются в виде относительных путей, текстуры в виде имен -SX_LIB_API void SGeom_ModelsSave(const char* path); //!< сохранить все модели в бинарный файл -SX_LIB_API void SGeom_ModelsLoad(const char* path); //!< загрузить бинарный файл с моделями +//! загрузить бинарный файл с моделями +SX_LIB_API void SGeom_ModelsLoad(const char* path); -SX_LIB_API long SGeom_ModelsGetCount(); //!< количество моделей в текущем списке +//! количество моделей в текущем списке +SX_LIB_API long SGeom_ModelsGetCount(); //! просчитать видимость всех моделей для фрустума SX_LIB_API void SGeom_ModelsComVisible( @@ -173,7 +227,10 @@ SX_LIB_API ID SGeom_ModelsAddModel( */ SX_LIB_API void SGeom_ModelsDelModel(ID id); -SX_LIB_API void SGeom_ModelsGetMinMax(float3* min, float3* max); //!< получить общий ограничивающий объем всего списка моделей +//! получить общий ограничивающий объем всего списка моделей +SX_LIB_API void SGeom_ModelsGetMinMax(float3* min, float3* max); + +//************************************************************************** /*! \name Массивы просчетов видимости \warning Каждый вызов #SGeom_ModelsAddArrForCom создает новый элемент массива просчета, который занимает определенное количества памяти, которое зависит от объема текущего списка моделей и их делений.\n @@ -182,32 +239,57 @@ SX_LIB_API void SGeom_ModelsGetMinMax(float3* min, float3* max); //!< получ Идентификаторы возвращаемые #SGeom_ModelsAddArrForCom константны, и не будут удалены или сдвинуты пока сам программист этого не сделает, либо в случае перезагрузки @{*/ -SX_LIB_API ID SGeom_ModelsAddArrForCom(); //!< добавить массив просчетов, возвращает его идентификатор -SX_LIB_API void SGeom_ModelsDelArrForCom(ID id_arr); //!< удалить массив просчетов с номером id_arr +//! добавить массив просчетов, возвращает его идентификатор +SX_LIB_API ID SGeom_ModelsAddArrForCom(); + +//! удалить массив просчетов с номером id_arr +SX_LIB_API void SGeom_ModelsDelArrForCom(ID id_arr); //!@} +//************************************************************************** /*! \name Управление моделями по id - порядковым номерам моделей \note Функции #SGeom_ModelsMGetPosition #SGeom_ModelsMGetRotation #SGeom_ModelsMGetScale возвращают указатели, поэтому после получения вектора его уже можно менять, для того чтобы изменения вступили в силу надо вызывать #SGeom_ModelsMApplyTransform @{*/ -SX_LIB_API void SGeom_ModelsMGetMinMax(ID id, float3* min, float3* max); //!< получить минимум и максимум модели -SX_LIB_API char* SGeom_ModelsMGetName(ID id); //!< получить имя модели -SX_LIB_API const char* SGeom_ModelsMGetPathName(ID id); //!< получить путь до модели относительно стандартного пути -SX_LIB_API long SGeom_ModelsMGetCountPoly(ID id); //!< получить количество полигонов модели +//! получить минимум и максимум модели +SX_LIB_API void SGeom_ModelsMGetMinMax(ID id, float3* min, float3* max); + +//! получить имя модели +SX_LIB_API char* SGeom_ModelsMGetName(ID id); + +//! получить путь до модели относительно стандартного пути +SX_LIB_API const char* SGeom_ModelsMGetPathName(ID id); + +//! получить количество полигонов модели +SX_LIB_API long SGeom_ModelsMGetCountPoly(ID id); + + +//! получить позицию модели +SX_LIB_API float3* SGeom_ModelsMGetPosition(ID id); -SX_LIB_API float3* SGeom_ModelsMGetPosition(ID id); //!< получить позицию модели -SX_LIB_API float3* SGeom_ModelsMGetRotation(ID id); //!< получить повороты модели -SX_LIB_API float3* SGeom_ModelsMGetScale(ID id); //!< получить масштабирование модели +//! получить повороты модели +SX_LIB_API float3* SGeom_ModelsMGetRotation(ID id); -SX_LIB_API const char* SGeom_ModelsMGetLodPath(ID id); //!< получить путь до лода относительно стандартного пути -SX_LIB_API void SGeom_ModelsMSetLodPath(ID id, const char* path); //!< установить путь до лода относительно стандартного пути и загрузить +//! получить масштабирование модели +SX_LIB_API float3* SGeom_ModelsMGetScale(ID id); -SX_LIB_API void SGeom_ModelsMApplyTransform(ID id); //!< применить трансформации для модели + +//! получить путь до лода относительно стандартного пути +SX_LIB_API const char* SGeom_ModelsMGetLodPath(ID id); + +//! установить путь до лода относительно стандартного пути и загрузить +SX_LIB_API void SGeom_ModelsMSetLodPath(ID id, const char* path); + + +//! применить трансформации для модели +SX_LIB_API void SGeom_ModelsMApplyTransform(ID id); //!@} +//************************************************************************** + /*! сортировка front to back \note Рендер по этой сортировке возможен только индивидуально для каждой подгруппы модели. В данной версии сделано для поддержки полупрозрачных поверхностей. */ @@ -216,6 +298,8 @@ SX_LIB_API void SGeom_ModelsMSortGroups( int sort_mtl //!< сорт материала для которого будет произведена сортировка ); +//************************************************************************** + /*! \name Данные моделей \note id - идентификатор (порядковый номер) модели, который возвращается функцией #SGeom_ModelsAddModel\n Каждая подгруппа есть определнный материал и имеет: @@ -224,15 +308,28 @@ SX_LIB_API void SGeom_ModelsMSortGroups( - плоскость, которая строится по первому треугольнику в подгруппе @{*/ -SX_LIB_API ID SGeom_ModelsMGetCountGroups(ID id); //!< количество подгрупп в модели -SX_LIB_API ID SGeom_ModelsMGetGroupIDMat(ID id, ID group); //!< идентификатор материала подгруппы с номером group в модели -SX_LIB_API void SGeom_ModelsMGetGroupCenter(ID id, ID group, float3_t* center); //!< записвыает в center центр подгруппы group -SX_LIB_API void SGeom_ModelsMGetGroupMin(ID id, ID group, float3_t* min); //!< записвыает в min минимум (минимальную позицию) подгруппы group -SX_LIB_API void SGeom_ModelsMGetGroupMax(ID id, ID group, float3_t* max); //!< записвыает в max максимум (максимальную позицию) центр подгруппы group -SX_LIB_API void SGeom_ModelsMGetGroupPlane(ID id, ID group, D3DXPLANE* plane); //!< записвыает в plane плоскость подгруппы group +//! количество подгрупп в модели +SX_LIB_API ID SGeom_ModelsMGetCountGroups(ID id); + +//! идентификатор материала подгруппы с номером group в модели +SX_LIB_API ID SGeom_ModelsMGetGroupIDMat(ID id, ID group); + +//! записвыает в center центр подгруппы group +SX_LIB_API void SGeom_ModelsMGetGroupCenter(ID id, ID group, float3_t* center); + +//! записвыает в min минимум (минимальную позицию) подгруппы group +SX_LIB_API void SGeom_ModelsMGetGroupMin(ID id, ID group, float3_t* min); + +//! записвыает в max максимум (максимальную позицию) центр подгруппы group +SX_LIB_API void SGeom_ModelsMGetGroupMax(ID id, ID group, float3_t* max); + +//! записвыает в plane плоскость подгруппы group +SX_LIB_API void SGeom_ModelsMGetGroupPlane(ID id, ID group, D3DXPLANE* plane); //!@} +//************************************************************************** + /*! получить все данные о физических характеристиках для навигации из всего того что на данный момент содержится в списке моделей \note Функция сама инициализирует все данные, кроме count_models, в count_models функция только запишет число. Для очистки памяти - SGeom_ModelsClearArrBuffsGeom */ @@ -283,6 +380,7 @@ SX_LIB_API bool SGeom_ModelsTraceBeam(float3* start, float3* dir, float3* _res, SGeom_GreenRender(timeDelta, viewpos, type, id_arr_shadow); SGeom_GreenRender(timeDelta, viewpos, type, id_arr_light); \endcode + \note Модели, лоды, лоды навигации, сохраняются в виде относительных путей, маски и текстуры сохраняются в виде имен \todo Описать формат файла с сохраненным списком растительности \todo Добавить возможность единичного добавления в массив растительности (мышкой тыкаем в окне где должно быть дерево например и оно там появляется) \todo Добавить возможность единичного удаления из массива растительности @@ -312,6 +410,8 @@ struct GreenDataVertex float2_t SinCosRot; //!< синус и косинус (угол TexCoord.y) для поворота }; +//************************************************************************** + /*! добавить единицу растительности \note Теперь добавить растительность можно по пустой маске (то есть без маски вообще), указав в path_mask NULL, для добавления объектов растительности в элемент списка растительность можно воспользоваться #SGeom_GreenAddObject \note path, lod1, lod2 - пути относительно стандартного пути, до модели и лодов, @@ -385,7 +485,10 @@ SX_LIB_API void SGeom_GreenSetPosObject( float3_t* pos //!< пновая позиция объекта растительности ); -SX_LIB_API void SGeom_GreenDelGreen(ID id); //!< удалить единицу растительности +//! удалить единицу растительности +SX_LIB_API void SGeom_GreenDelGreen(ID id); + +//************************************************************************** /*! \name Массивы просчетов видимости \warning Каждый вызов #SGeom_GreenAddArrForCom создает новый элемент массива просчета, который занимает определенное количества памяти, которое зависит от объема текущего списка растительности и их делений.\n @@ -394,16 +497,24 @@ SX_LIB_API void SGeom_GreenDelGreen(ID id); //!< удалить единицу Идентификаторы возвращаемые #SGeom_GreenAddArrForCom константны, и не будут удалены или сдвинуты пока сам программист этого не сделает, либо в случае перезагрузки @{*/ -SX_LIB_API ID SGeom_GreenAddArrForCom(); //!< добавить массив просчетов, возвращает его идентификатор -SX_LIB_API void SGeom_GreenDelArrForCom(ID id_arr); //!< удалить массив просчетов +//! добавить массив просчетов, возвращает его идентификатор +SX_LIB_API ID SGeom_GreenAddArrForCom(); + +//! удалить массив просчетов +SX_LIB_API void SGeom_GreenDelArrForCom(ID id_arr); //!@} -//модели, лоды, лоды навигации, сохраняются в виде относительных путей, маски и текстуры сохраняются в виде имен -SX_LIB_API void SGeom_GreenSave(const char* path); //!< сохранить информацию о растительности в бинарный файл -SX_LIB_API void SGeom_GreenLoad(const char* path); //!< загрузить информацию о растительности из бинарного файла +//************************************************************************** + +//! сохранить информацию о растительности в бинарный файл +SX_LIB_API void SGeom_GreenSave(const char* path); -SX_LIB_API void SGeom_GreenClear(); //!< очистить список растительности +//! загрузить информацию о растительности из бинарного файла +SX_LIB_API void SGeom_GreenLoad(const char* path); + +//! очистить список растительности +SX_LIB_API void SGeom_GreenClear(); //! просчитать видимость всей растительности для фрустума SX_LIB_API void SGeom_GreenComVisible( @@ -438,21 +549,41 @@ SX_LIB_API void SGeom_GreenRenderObject( ID id_tex = -1 //!< идентификатор материала, который будет применен ко всем объектам и подгруппам растительности, -1 если надо использовать назначенные материалы ); -SX_LIB_API long SGeom_GreenGetCount(); //!< получить количество единиц растительности (по видам есесно) +//!< получить количество единиц растительности (по видам есесно) +SX_LIB_API long SGeom_GreenGetCount(); + +//************************************************************************** /*! \name Управление единицами растительности \note id - идентификатор (порядковый номер в массиве растительности) единицы растительности -@{ -*/ -SX_LIB_API char* SGeom_GreenMGetName(ID id); //!< получить имя -SX_LIB_API long SGeom_GreenMGetCountGen(ID id); //!< получить количество сгенерированных элементов -SX_LIB_API long SGeom_GreenMGetCountPoly(ID id); //!< получить количество в модели (0 лод) -SX_LIB_API int SGeom_GreenMGetTypeCountGen(ID id); //!< получить тип растительности -SX_LIB_API const char* SGeom_GreenMGetModel(ID id); //!< получить путь до модели относительно стандартного пути -SX_LIB_API const char* SGeom_GreenMGetLod1(ID id); //!< получить путь до первого лода модели относительно стандартного пути -SX_LIB_API const char* SGeom_GreenMGetLod2(ID id); //!< получить путь до второго лода модели относительно стандартного пути -SX_LIB_API const char* SGeom_GreenMGetMask(ID id); //!< получить путь до маски по которой сгенерирована растительность, относительно стандартного пути -SX_LIB_API const char* SGeom_GreenMGetNav(ID id); //!< получить путь до лода навигации относительно стандартного пути +@{*/ + +//! получить имя +SX_LIB_API char* SGeom_GreenMGetName(ID id); + +//! получить количество сгенерированных элементов +SX_LIB_API long SGeom_GreenMGetCountGen(ID id); + +//! получить количество в модели (0 лод) +SX_LIB_API long SGeom_GreenMGetCountPoly(ID id); + +//! получить тип растительности +SX_LIB_API int SGeom_GreenMGetTypeCountGen(ID id); + +//! получить путь до модели относительно стандартного пути +SX_LIB_API const char* SGeom_GreenMGetModel(ID id); + +//! получить путь до первого лода модели относительно стандартного пути +SX_LIB_API const char* SGeom_GreenMGetLod1(ID id); + +//! получить путь до второго лода модели относительно стандартного пути +SX_LIB_API const char* SGeom_GreenMGetLod2(ID id); + +//! получить путь до маски по которой сгенерирована растительность, относительно стандартного пути +SX_LIB_API const char* SGeom_GreenMGetMask(ID id); + +//! получить путь до лода навигации относительно стандартного пути +SX_LIB_API const char* SGeom_GreenMGetNav(ID id); //! установить лод (для рендера) SX_LIB_API void SGeom_GreenMSetLod( @@ -464,6 +595,8 @@ SX_LIB_API void SGeom_GreenMSetNav(ID id, const char* pathname); //!< устан //!@} +//************************************************************************** + /*! получить все данные о физических характеристиках для навигации из всего того что на данный момент содержит растительность и только того что иметт навигационные модели \note Все данные кроме arr_count_green функция инициализирует сама, в arr_count_green запишет число */ diff --git a/source/input/sxinput.h b/source/input/sxinput.h index 427ed38082293d6a113ce09710a37efd73d59bb3..581da461398e0aaedcef7efe7ff0ad676a52c4fe 100644 --- a/source/input/sxinput.h +++ b/source/input/sxinput.h @@ -26,6 +26,13 @@ See the license in LICENSE #endif #include <core\\sxcore.h> +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <core\\sxcore.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + /*! \defgroup sxinput_code_keyboard Коды клавиш клавиатуры \ingroup sxinput @{ @@ -270,18 +277,18 @@ namespace InputSymbol /*! \name Массивы букв и кодов для них @{*/ //! массив с кодами букв - InputCode KeyLetters[27] = { SIK_A, SIK_B, SIK_C, SIK_D, SIK_E, SIK_F, SIK_G, SIK_H, SIK_I, SIK_J, SIK_K, SIK_L, SIK_M, SIK_N, SIK_O, SIK_P, SIK_Q, SIK_R, SIK_S, SIK_T, SIK_U, SIK_V, SIK_W, SIK_X, SIK_Y, SIK_Z, SIK_SPACE }; + //InputCode KeyLetters[27] = { SIK_A, SIK_B, SIK_C, SIK_D, SIK_E, SIK_F, SIK_G, SIK_H, SIK_I, SIK_J, SIK_K, SIK_L, SIK_M, SIK_N, SIK_O, SIK_P, SIK_Q, SIK_R, SIK_S, SIK_T, SIK_U, SIK_V, SIK_W, SIK_X, SIK_Y, SIK_Z, SIK_SPACE }; //! массив с заглавными буквами - char BigLetters[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '}; + //char BigLetters[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '}; //!массив с прописными буквами - char SmallLetters[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '}; + //char SmallLetters[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '}; //!@} /*! \name Массивы цифр и коды для них, основнйо и цифровой клавиатуры @{*/ - InputCode KeyNumbers[10] = { SIK_1, SIK_2, SIK_3, SIK_4, SIK_5, SIK_6, SIK_7, SIK_8, SIK_9, SIK_0 }; - InputCode KeyNumbers2[10] = { SIK_NUMPAD1, SIK_NUMPAD2, SIK_NUMPAD3, SIK_NUMPAD4, SIK_NUMPAD5, SIK_NUMPAD6, SIK_NUMPAD7, SIK_NUMPAD8, SIK_NUMPAD9, SIK_NUMPAD0 }; - char NumbersStr[10] = {'1','2','3','4','5','6','7','8','9','0'}; + //InputCode KeyNumbers[10] = { SIK_1, SIK_2, SIK_3, SIK_4, SIK_5, SIK_6, SIK_7, SIK_8, SIK_9, SIK_0 }; + //InputCode KeyNumbers2[10] = { SIK_NUMPAD1, SIK_NUMPAD2, SIK_NUMPAD3, SIK_NUMPAD4, SIK_NUMPAD5, SIK_NUMPAD6, SIK_NUMPAD7, SIK_NUMPAD8, SIK_NUMPAD9, SIK_NUMPAD0 }; + //char NumbersStr[10] = {'1','2','3','4','5','6','7','8','9','0'}; //!@} }; #endif diff --git a/source/input/sxinput_dll.cpp b/source/input/sxinput_dll.cpp index 4030f098dc11f4148f9560ae3dab3262d8a90e3f..6bd158387722b85c5b9afe649b389ced8f304f3f 100644 --- a/source/input/sxinput_dll.cpp +++ b/source/input/sxinput_dll.cpp @@ -4,7 +4,6 @@ Copyright See the license in LICENSE ******************************************************/ -#pragma once #include <windows.h> BOOL APIENTRY DllMain(HMODULE hModule, diff --git a/source/managed_render/camera_update.cpp b/source/managed_render/camera_update.cpp index 656e4f8408f106ebf316cbd02df2a8a977311c47..40fcf3e1b66c2571567d768dc92ede162132c7ac 100644 --- a/source/managed_render/camera_update.cpp +++ b/source/managed_render/camera_update.cpp @@ -1,6 +1,5 @@ -#include <managed_render\\camera_update.h> - +#include "camera_update.h" //обработка вводы информации с клавиатуры void CameraUpdate::UpdateInputKeyBoard(DWORD timeDelta) diff --git a/source/managed_render/camera_update.h b/source/managed_render/camera_update.h index 5664a5cb52a50f4032619e927b422c97ef86ce22..563e9309326f648beb78d571c4e42929733b4237 100644 --- a/source/managed_render/camera_update.h +++ b/source/managed_render/camera_update.h @@ -13,8 +13,12 @@ See the license in LICENSE \ingroup managed_render @{*/ -#ifndef __camera_update -#define __camera_update +#ifndef __CAMERA_UPDATE +#define __CAMERA_UPDATE + +#include <windows.h> +#include <input/sxinput.h> +#include <managed_render/gdata.h> //! пространство имен для управления навигацией namespace CameraUpdate diff --git a/source/managed_render/editor/axes_helper.h b/source/managed_render/editor/axes_helper.h index c9f6901f7427e6b571b09cee6eec5e423b3f4618..1d86ff78d2018e6aace0b76fa41b2c203b3c85f7 100644 --- a/source/managed_render/editor/axes_helper.h +++ b/source/managed_render/editor/axes_helper.h @@ -2,7 +2,7 @@ #ifndef axes_helper_h #define axes_helper_h -bool line_intersect_triangle(const float3 &t1, const float3 &t2, const float3 &t3, +inline bool line_intersect_triangle(const float3 &t1, const float3 &t2, const float3 &t3, const float3 &l1, const float3 &l2, float3 &p) { float3 n = SMVector3Normalize(SMVector3Cross((t2 - t1), (t3 - t2))); diff --git a/source/managed_render/gdata.cpp b/source/managed_render/gdata.cpp index 4d800fab5062f26356eb511a359a33c2cc84c91f..a58b42d9b468ae65ee7024a12fd0f46223fadb64 100644 --- a/source/managed_render/gdata.cpp +++ b/source/managed_render/gdata.cpp @@ -1,5 +1,126 @@ -#include <managed_render/gdata.h> +#include "gdata.h" +/* +namespace GData +{ + IDirect3DDevice9* DXDevice = 0; //!< dx ���������� + + HWND HandlePreview = 0; //!< ����� ������ ���� + HWND HandleParent3D = 0;//!< ����� ���� �������� ���� �������, �� ������ ���������� + HWND Handle3D = 0; //!< ����� ���� ������� + + float2_t WinSize = float2_t(800, 600); //!< ������ ���� ������� (������� �������) + bool IsWindowed = true; //!<������������ �� ������� ����� �������? + + + DS_RT FinalImage = DS_RT::ds_rt_scene_light_com;//!< ��������� ����������� + ISXCamera* ObjCamera = 0; //!< ������ ��� ������� ����� ������ + ID IDSelectTex = -1; + int ReSize = 0; //!< 0 - ������ �� ������, 1 - ������, 2 - ������� ����� ��������� � ����� + + float2_t NearFar = float2_t(0.025, 400); //!< �������� ������� � ������� ���������� ��������� + float ProjFov = SM_PIDIV4; //!< fov ������ + + ID DefaultGeomIDArr = -1; + ID DefaultGreenIDArr = -1; + ID DefaultAnimIDArr = -1; + + //! ��������� ����������� ������ �� ��������� + float4_t CamWalkParamEditor = float4_t( + 10.f, //!< ������� �������� ������ + 5.f, //!< ���������� ��������� + 0.7f, //!< ���������� �� ��������� �������� � ������� + 0.5f //!< ���������� �� ��������� �������� ����� + ); +};*/ + +namespace GData +{ + IDirect3DDevice9* DXDevice = 0; //!< dx ���������� + + //! ������� ���������� ������� ��������� (���� �������) + LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + + //! ������������� ���� ������� + void InitWin( + const char* name, //!< ��� ���� (������ ��������) + const char* caption //!< �������� ���� + ); + + HWND HandlePreview = 0; //!< ����� ������ ���� + HWND HandleParent3D = 0;//!< ����� ���� �������� ���� �������, �� ������ ���������� + HWND Handle3D = 0; //!< ����� ���� ������� + + float2_t WinSize = float2_t(800, 600); //!< ������ ���� ������� (������� �������) + bool IsWindowed = true; //!<������������ �� ������� ����� �������? + + + DS_RT FinalImage = DS_RT::ds_rt_scene_light_com;//!< ��������� ����������� + ISXCamera* ObjCamera = 0; //!< ������ ��� ������� ����� ������ + ID IDSelectTex = -1; + int ReSize = 0; //!< 0 - ������ �� ������, 1 - ������, 2 - ������� ����� ��������� � ����� + + float2_t NearFar = float2_t(0.025, 400); //!< �������� ������� � ������� ���������� ��������� + float ProjFov = SM_PIDIV4; //!< fov ������ + + ID DefaultGeomIDArr = -1; + ID DefaultGreenIDArr = -1; + ID DefaultAnimIDArr = -1; + + float3 ConstCurrCamPos; //!< ������� ������ + float3 ConstCurrCamDir; //!< ����������� ������� ������ + + //! ��������� ����������� ������ �� ��������� + float4_t CamWalkParamEditor = float4_t( + 10.f, //!< ������� �������� ������ + 5.f, //!< ���������� ��������� + 0.7f, //!< ���������� �� ��������� �������� � ������� + 0.5f //!< ���������� �� ��������� �������� ����� + ); + + //������� + void InitAllMatrix(); //!< ������������� ������ + float4x4 MCamView; //!< ������� ���� ������ + float4x4 MCamProj; //!< ������� �������� ������ + float4x4 MLightProj; //!< ������� �������� ���������� ������, ������ �����त ��������� ������ + float4x4 MRefPlaneSkyProj; //!< ������� �������� �� ������� skybox � sky clouds, �� ������� ���������, ���������� MCamProj + float4x4 MRefCubeSkyProj; //!< ������� �������� �� ������� skybox � sky clouds, �� ���������� ��������� + + //********************************************************************** + + //! ������������ ���� � ���������������� �������� + namespace IDsShaders + { + //! �������� ���� ����������� �������� + void InitAllShaders(); + + //! ��������� ������� + namespace VS + { + ID ScreenOut; + ID ResPos; + }; + + //! ���������� ������� + namespace PS + { + ID ScreenOut; + ID ComLightingNonShadow; + ID ComLightingShadow; + + ID BlendAmbientSpecDiffColor; + + ID ToneMapping; + + ID StencilStr; + ID StencilColumn; + ID StencilStrColumn; + ID UnionAlpha; + }; + }; +}; + + void GData::InitAllMatrix() { @@ -55,27 +176,27 @@ void GData::Pathes::InitAllPathes() void GData::IDsShaders::InitAllShaders() { - GData::IDsShaders::VS::ScreenOut = SGCore_ShaderLoad(ShaderType::st_vertex, "pp_quad_render.vs", "pp_quad_render", ShaderCheckDouble::scd_path); - GData::IDsShaders::PS::ScreenOut = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_quad_render.ps", "pp_quad_render", ShaderCheckDouble::scd_path); + GData::IDsShaders::VS::ScreenOut = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_quad_render.vs", "pp_quad_render", ShaderCheckDouble::scd_path); + GData::IDsShaders::PS::ScreenOut = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_quad_render.ps", "pp_quad_render", ShaderCheckDouble::scd_path); - GData::IDsShaders::PS::ToneMapping = SGCore_ShaderLoad(ShaderType::st_pixel, "lighting_tone_mapping.ps", "lighting_tone_mapping", ShaderCheckDouble::scd_path); + GData::IDsShaders::PS::ToneMapping = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "lighting_tone_mapping.ps", "lighting_tone_mapping", ShaderCheckDouble::scd_path); - GData::IDsShaders::VS::ResPos = SGCore_ShaderLoad(ShaderType::st_vertex, "pp_res_pos.vs", "pp_quad_render_res_pos", ShaderCheckDouble::scd_path); + GData::IDsShaders::VS::ResPos = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_res_pos.vs", "pp_quad_render_res_pos", ShaderCheckDouble::scd_path); - GData::IDsShaders::PS::ComLightingNonShadow = SGCore_ShaderLoad(ShaderType::st_pixel, "lighting_com.ps", "lighting_com_nonshadow", ShaderCheckDouble::scd_name); + GData::IDsShaders::PS::ComLightingNonShadow = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "lighting_com.ps", "lighting_com_nonshadow", ShaderCheckDouble::scd_name); D3DXMACRO Defines_IS_SHADOWED[] = { { "IS_SHADOWED", "" }, { 0, 0 } }; - GData::IDsShaders::PS::ComLightingShadow = SGCore_ShaderLoad(ShaderType::st_pixel, "lighting_com.ps", "lighting_com_shadow", ShaderCheckDouble::scd_name, Defines_IS_SHADOWED); - GData::IDsShaders::PS::BlendAmbientSpecDiffColor = SGCore_ShaderLoad(ShaderType::st_pixel, "lighting_blend.ps", "lighting_blend", ShaderCheckDouble::scd_path); + GData::IDsShaders::PS::ComLightingShadow = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "lighting_com.ps", "lighting_com_shadow", ShaderCheckDouble::scd_name, Defines_IS_SHADOWED); + GData::IDsShaders::PS::BlendAmbientSpecDiffColor = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "lighting_blend.ps", "lighting_blend", ShaderCheckDouble::scd_path); - GData::IDsShaders::PS::UnionAlpha = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_union_alpha.ps", "pp_union_alpha", ShaderCheckDouble::scd_path); + GData::IDsShaders::PS::UnionAlpha = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_union_alpha.ps", "pp_union_alpha", ShaderCheckDouble::scd_path); D3DXMACRO Defines_STR[] = { { "_STR_", "" }, { 0, 0 } }; - GData::IDsShaders::PS::StencilStr = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_alpha_stencil_mark.ps", "pp_stencil_str", ShaderCheckDouble::scd_name, Defines_STR); + GData::IDsShaders::PS::StencilStr = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_alpha_stencil_mark.ps", "pp_stencil_str", ShaderCheckDouble::scd_name, Defines_STR); D3DXMACRO Defines_COLUMN[] = { { "_COLUMN_", "" }, { 0, 0 } }; - GData::IDsShaders::PS::StencilColumn = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_alpha_stencil_mark.ps", "pp_stencil_column", ShaderCheckDouble::scd_name, Defines_COLUMN); + GData::IDsShaders::PS::StencilColumn = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_alpha_stencil_mark.ps", "pp_stencil_column", ShaderCheckDouble::scd_name, Defines_COLUMN); D3DXMACRO Defines_COLUMN_STR[] = { { "_COLUMN_STR_", "" }, { 0, 0 } }; - GData::IDsShaders::PS::StencilStrColumn = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_alpha_stencil_mark.ps", "pp_stencil_str_column", ShaderCheckDouble::scd_name, Defines_COLUMN_STR); + GData::IDsShaders::PS::StencilStrColumn = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_alpha_stencil_mark.ps", "pp_stencil_str_column", ShaderCheckDouble::scd_name, Defines_COLUMN_STR); } LRESULT CALLBACK GData::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) diff --git a/source/managed_render/gdata.h b/source/managed_render/gdata.h index e9dc745abe567e06cd029bf7b40bb3f6b1397edc..e25d65be70c5c905b1f9fbf4eec79f70e12b4a3b 100644 --- a/source/managed_render/gdata.h +++ b/source/managed_render/gdata.h @@ -12,15 +12,22 @@ See the license in LICENSE /*! \defgroup managed_render managed_render - управляемый рендер @{*/ -#ifndef __gdata_h -#define __gdata_h +#ifndef __GDATA_H +#define __GDATA_H +class ModelSim; + +#include <input/sxinput.h> +#include <managed_render/render_def.h> #include <managed_render/model_sim.h> #include <managed_render/editor/grid.h> #include <managed_render/editor/axes_static.h> #include <managed_render/editor/axes_helper.h> -#define G_DATA_LIGHT_FAR 100000 /*!< дальняя плоскость отсечения наблюдателя для света */ +#if defined(SX_GAME) +#include <SkyXEngine_Build/resource.h> +#endif + /*! \defgroup managed_render_gdata gdata - пространство имен для хранения основных и необходимых данных для цикла рендера \ingroup managed_render @@ -65,13 +72,12 @@ See the license in LICENSE #define EDITORS_LEVEL_STATUSBAR_GREEN_POLY "Green poly: " #define EDITORS_LEVEL_STATUSBAR_GAME_COUNT "Count game object: " -//! цвет очистки цветового буфера сцены по умолчанию -#define RENDER_DEFAUL_BACKGROUND_COLOR D3DCOLOR_ARGB(0,128,128,128) +//########################################################################## //! пространство имен для хранения данных цикла рендера namespace GData { - IDirect3DDevice9* DXDevice = 0; //!< dx устройство + extern IDirect3DDevice9* DXDevice; //!< dx устройство //! функция обработчик оконных сообщений (окна рендера) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); @@ -82,70 +88,41 @@ namespace GData const char* caption //!< название окна ); - HWND HandlePreview = 0; //!< хэндл превью окна - HWND HandleParent3D = 0;//!< хэндл окна родителя окна рендера, на случай редакторов - HWND Handle3D = 0; //!< хэндл окна рендера + extern HWND HandlePreview; //!< хэндл превью окна + extern HWND HandleParent3D; //!< хэндл окна родителя окна рендера, на случай редакторов + extern HWND Handle3D; //!< хэндл окна рендера - float2_t WinSize = float2_t(800, 600); //!< размер окна рендера (области рендера) - bool IsWindowed = true; //!<использовать ли оконный режим рендера? + extern float2_t WinSize; //!< размер окна рендера (области рендера) + extern bool IsWindowed; //!<использовать ли оконный режим рендера? - DS_RT FinalImage = DS_RT::ds_rt_scene_light_com;//!< финальное изображение - ISXCamera* ObjCamera = 0; //!< камера для которой будет рендер - ID IDSelectTex = -1; - int ReSize = 0; //!< 0 - ничего не меняли, 1 - ресайз, 2 - переход между фуллскрин и окном + extern DS_RT FinalImage;//!< финальное изображение + extern ISXCamera* ObjCamera; //!< камера для которой будет рендер + extern ID IDSelectTex; + extern int ReSize; //!< 0 - ничего не меняли, 1 - ресайз, 2 - переход между фуллскрин и окном - float2_t NearFar = float2_t(0.025,400); //!< значение дальней и ближней плоскостей отсечения - float ProjFov = SM_PIDIV4; //!< fov камеры + extern float2_t NearFar; //!< значение дальней и ближней плоскостей отсечения + extern float ProjFov; //!< fov камеры - ID DefaultGeomIDArr = -1; - ID DefaultGreenIDArr = -1; - ID DefaultAnimIDArr = -1; + extern ID DefaultGeomIDArr; + extern ID DefaultGreenIDArr; + extern ID DefaultAnimIDArr; - float3 ConstCurrCamPos; //!< позиция камеры - float3 ConstCurrCamDir; //!< направление взгляда камеры + extern float3 ConstCurrCamPos; //!< позиция камеры + extern float3 ConstCurrCamDir; //!< направление взгляда камеры //! Параметры перемещения камеры по умолчанию - float4_t CamWalkParamEditor = float4_t( - 10.f, //!< простое движенеи вперед - 5.f, //!< коэфициент ускорения - 0.7f, //!< коэфициент от основного движения в стороны - 0.5f //!< коэфициент от основного движения назад - ); + extern float4_t CamWalkParamEditor; //матрицы void InitAllMatrix(); //!< инициализация матриц - float4x4 MCamView; //!< матрица вида камеры - float4x4 MCamProj; //!< матрица проекции камеры - float4x4 MLightProj; //!< матрица проекции аналогична¤ камере, только дальнत плоскость дальше - float4x4 MRefPlaneSkyProj; //!< матрица проекции дл¤ рендера skybox и sky clouds, дл¤ плоских отражений, аналогична MCamProj - float4x4 MRefCubeSkyProj; //!< матрица проекции дл¤ рендера skybox и sky clouds, дл¤ куибческих отражений + extern float4x4 MCamView; //!< матрица вида камеры + extern float4x4 MCamProj; //!< матрица проекции камеры + extern float4x4 MLightProj; //!< матрица проекции аналогична¤ камере, только дальнत плоскость дальше + extern float4x4 MRefPlaneSkyProj; //!< матрица проекции дл¤ рендера skybox и sky clouds, дл¤ плоских отражений, аналогична MCamProj + extern float4x4 MRefCubeSkyProj; //!< матрица проекции дл¤ рендера skybox и sky clouds, дл¤ куибческих отражений - ////// - - //! пространство имен с путями - /*namespace Pathes - { - void InitAllPathes(); //!< инициализация всех путей - - char ForExe[1024]; //!< путь до запущенного исполняемого файла - char WorkingTex[1024]; //!< путь до рабочих текстур (некоторые текстуры (render targets) предназначенные для рендера можно сохранить в сюда, для просмотра результатов) - char Screenshots[1024]; //!< путь до папки куда будут сохраняться скриншоты - char GameSource[1024]; //!< путь до папки с игровыми ресурсами - char Config[1024]; //!< путь до папки с конфигурациями - char ConfigWeather[1024]; //!< путь до папки с конфигурациями погоды - char Levels[1024]; //!< путь до папки с уровнями - char Meshes[1024]; //!< путь до папки со статическими моделями - char Models[1024]; //!< путь до папки со скелетными моделями - char Scripts[1024]; //!< путь до папки со скриптами - char Materials[1024]; //!< путь до папки с материалами - char GUIresources[1024];//!< путь до паки ресурсов gui - char Sounds[1024]; //!< путь до папки со звуками - char Shaders[1024]; //!< путь до папки с шейдерами - char Textures[1024]; //!< путь до папки с текстурами - char TexturesDetail[1024]; //!< путь до папки с детальными текстурами - char TexturesSkyBoxes[1024];//!< путь до папки с текстурами предназначенными для скайбоксов либо для облаков - };*/ + //********************************************************************** //! пространство имен с идентификаторами шейдеров namespace IDsShaders @@ -156,25 +133,25 @@ namespace GData //! вершинные шейдеры namespace VS { - ID ScreenOut; - ID ResPos; + extern ID ScreenOut; + extern ID ResPos; }; //! пиксельные шейдеры namespace PS { - ID ScreenOut; - ID ComLightingNonShadow; - ID ComLightingShadow; + extern ID ScreenOut; + extern ID ComLightingNonShadow; + extern ID ComLightingShadow; - ID BlendAmbientSpecDiffColor; + extern ID BlendAmbientSpecDiffColor; - ID ToneMapping; + extern ID ToneMapping; - ID StencilStr; - ID StencilColumn; - ID StencilStrColumn; - ID UnionAlpha; + extern ID StencilStr; + extern ID StencilColumn; + extern ID StencilStrColumn; + extern ID UnionAlpha; }; }; @@ -233,11 +210,6 @@ namespace GData //!@} managed_render_gdata -#include <managed_render/model_sim.cpp> -#include <managed_render/editor/grid.cpp> -#include <managed_render/editor/axes_static.cpp> -#include <managed_render/editor/axes_helper.cpp> - #endif //@} managed_render diff --git a/source/managed_render/handler_out_log.cpp b/source/managed_render/handler_log.cpp similarity index 74% rename from source/managed_render/handler_out_log.cpp rename to source/managed_render/handler_log.cpp index 99c89fa762d0c8f3095315d7e73317fc243f0732..34eaa423f9ce70fd5be29cfc0c6f3e94dfcdefd6 100644 --- a/source/managed_render/handler_out_log.cpp +++ b/source/managed_render/handler_log.cpp @@ -4,25 +4,10 @@ Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 See the license in LICENSE ******************************************************/ -/*! -\file -Файл логирования и обработки сообщений -*/ - -/*! \defgroup managed_render_out_log out_log - логирование и обработка сообщений - \ingroup managed_render -@{*/ - -#ifndef __handler_out_log_cpp -#define __handler_out_log_cpp - -#include <fstream> -#include <stdio.h> -#include <winuser.h> +#include "handler_log.h" FILE * FileOutLog = 0; //!< поток ведения лога -//! перебор всех окон процесса для их сворачивания BOOL CALLBACK HE_EnumWindowsProc(HWND hwnd, LPARAM lParam) { DWORD pid; @@ -32,7 +17,6 @@ BOOL CALLBACK HE_EnumWindowsProc(HWND hwnd, LPARAM lParam) return TRUE; } -//! обработка ошибки void HE_HandlerError(const char* format, ...) { va_list va; @@ -48,7 +32,6 @@ void HE_HandlerError(const char* format, ...) exit(0); } -//! инициализация потока ведения лога void InitOutLog() { AllocConsole(); @@ -80,8 +63,7 @@ void InitOutLog() } } -//! функция ведения лога и обработки сообщений -void printflog(int level, const char* format, ...) +void PrintfLog(int level, const char* format, ...) { va_list va; char buf[REPORT_MSG_MAX_LEN]; @@ -117,7 +99,3 @@ void printflog(int level, const char* format, ...) } } } - -#endif - -//!@} managed_render_out_log diff --git a/source/managed_render/handler_log.h b/source/managed_render/handler_log.h new file mode 100644 index 0000000000000000000000000000000000000000..2b2018af2f87d85d6378bb714e45ee85cbb1daa2 --- /dev/null +++ b/source/managed_render/handler_log.h @@ -0,0 +1,39 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Файл логирования и обработки сообщений +*/ + +/*! \defgroup managed_render_out_log out_log - логирование и обработка сообщений + \ingroup managed_render +@{*/ + +#ifndef __HANDLER_LOG_H +#define __HANDLER_LOG_H + +#include <fstream> +#include <stdio.h> +#include <windows.h> + +#include <gdefines.h> + +//! перебор всех окон процесса для их сворачивания +BOOL CALLBACK HE_EnumWindowsProc(HWND hwnd, LPARAM lParam); + +//! обработка ошибки +void HE_HandlerError(const char* format, ...); + +//! инициализация потока ведения лога +void InitOutLog(); + +//! функция ведения лога и обработки сообщений +void PrintfLog(int level, const char* format, ...); + +#endif + +//!@} managed_render_out_log diff --git a/source/managed_render/level.cpp b/source/managed_render/level.cpp index 6aff3d78eda04f562078cd7579d0b22457b7fe09..25eff144163672407f3950a61dacb89cd86ccd93 100644 --- a/source/managed_render/level.cpp +++ b/source/managed_render/level.cpp @@ -1,5 +1,13 @@ -#include <managed_render\\level.h> +#include "level.h" + +namespace Level +{ + char Name[OBJECT_NAME_MAX_LEN]; + String StrAmbientSounds; + String StrWeather; +}; + void Level::Clear() { diff --git a/source/managed_render/level.h b/source/managed_render/level.h index c423451834bfe0691b7b4fb86d471b8d6d268032..13a7c21c2c1ca140fcefa2cf3ebb7bea4b3b89d7 100644 --- a/source/managed_render/level.h +++ b/source/managed_render/level.h @@ -13,8 +13,17 @@ See the license in LICENSE \ingroup managed_render @{*/ -#ifndef level_h -#define level_h +#ifndef __LEVEL_H +#define __LEVEL_H + +#include <gdefines.h> +#include <common/string.h> +#include <geom/sxgeom.h> +#include <mtllight/sxmtllight.h> +#include <aigrid/sxaigrid.h> +#include <physics/sxphysics.h> +#include <game/sxgame.h> +#include <particles/sxparticles.h> //! пространство имен для управления уровнем namespace Level @@ -29,9 +38,9 @@ namespace Level загрузит геометрию уровня из файла с именем и расширением test_level.geom из той же директории уровня в котором находится заголовочный файл уровня \todo Расписать организацию конфигурационного файла загрузки/сохранения для уровня @{*/ - char Name[OBJECT_NAME_MAX_LEN]; //!< текущее имя уровня - String StrAmbientSounds; - String StrWeather; + extern char Name[OBJECT_NAME_MAX_LEN]; //!< текущее имя уровня + extern String StrAmbientSounds; + extern String StrWeather; void Clear(); //!< очистка уровня void Load(const char* name); //!< Загрузка уровня с именем name void Save(const char* name); //!< Сохранение уровня под именем name diff --git a/source/managed_render/model_sim.h b/source/managed_render/model_sim.h index 25b849fbc9f2ec41b62e93d2ab51c8a2b16f3036..a44b773c56f2e924f78b3f1229e2e776ec21a178 100644 --- a/source/managed_render/model_sim.h +++ b/source/managed_render/model_sim.h @@ -13,10 +13,16 @@ See the license in LICENSE \ingroup managed_render @{*/ -#ifndef model_sim_h -#define model_sim_h +#ifndef __MODELSIM_H +#define __MODELSIM_H -#include <common\array.h> +#include <common/array.h> + +#define SM_D3D_CONVERSIONS +#include <common/SXMath.h> +#include <mtllight/sxmtllight.h> +#include <anim/sxanim.h> +#include <managed_render/gdata.h> //симул¤ционна¤ модель всех возможных моделей материалов дл¤ редактора материалов diff --git a/source/managed_render/redefined_func.cpp b/source/managed_render/redefined_func.cpp new file mode 100644 index 0000000000000000000000000000000000000000..32efde6b0ed3866d63a89a8b146cc8c72de788db --- /dev/null +++ b/source/managed_render/redefined_func.cpp @@ -0,0 +1,116 @@ + +#include "redefined_func.h" + +void RFuncDIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count) +{ + +} + +void RFuncMtlSet(ID id, float4x4* world) +{ + switch (Core_RIntGet(G_RI_INT_RENDERSTATE)) + { + case RENDER_STATE_SHADOW: + SML_MtlSetMainTexture(0, id); + SML_LigthsShadowSetShaderOfTypeMat(Core_RIntGet(G_RI_INT_CURRIDLIGHT), SML_MtlGetTypeModel(id), world); + break; + + case RENDER_STATE_FREE: + SML_MtlSetMainTexture(0, id); + Core_RMatrixSet(G_RI_MATRIX_WORLD, &(world ? (*world) : SMMatrixIdentity())); + //SGCore_ShaderUnBind(); + SML_MtlRenderStd(SML_MtlGetTypeModel(id), world, 0, id); + break; + + case RENDER_STATE_MATERIAL: + SML_MtlRender(id, world); + break; + } +} + +ID RFuncMtlLoad(const char* name, int mtl_type) +{ + return SML_MtlLoad(name, (MtlTypeModel)mtl_type); +} + +bool RFuncAIQuadPhyNavigate(float3_t * pos) +{ + static btBoxShape boxfull(btVector3(AIGRID_QUAD_SIZEDIV2, AIGRID_ENTITY_MAX_HEIGHTDIV2, AIGRID_QUAD_SIZEDIV2)); + float3 start = (*pos); + start.y = pos->y + AIGRID_ENTITY_MAX_HEIGHT; + float3 end = (*pos); + //end.y = min->y - AIGRID_ENTITY_MAX_HEIGHT; + static btDiscreteDynamicsWorld::ClosestConvexResultCallback cb(F3_BTVEC(start), F3_BTVEC(end)); + cb = btDiscreteDynamicsWorld::ClosestConvexResultCallback(F3_BTVEC(start), F3_BTVEC(end)); + + static btTransform xForm; + xForm.setOrigin(F3_BTVEC(start)); + xForm.getBasis().setIdentity(); + static btTransform xForm2; + xForm2.setOrigin(F3_BTVEC(end)); + xForm2.getBasis().setIdentity(); + SXPhysics_GetDynWorld()->convexSweepTest(&boxfull, xForm, xForm2, cb); + + if (cb.hasHit()) + { + pos->y = cb.m_hitPointWorld[1]; + //quad->IsClose = false; + + static btBoxShape boxoff(btVector3(AIGRID_QUAD_SIZEDIV2, (AIGRID_ENTITY_MAX_HEIGHT - AIGRID_QUADS_CENTERS_MAXHEIGHT) * 0.5, AIGRID_QUAD_SIZEDIV2)); + + start = (*pos); + start.y = pos->y + AIGRID_ENTITY_MAX_HEIGHTDIV2 + AIGRID_QUADS_CENTERS_MAXHEIGHT; + static btVector3 vec; + vec = btVector3(F3_BTVEC(start)); + cb = btDiscreteDynamicsWorld::ClosestConvexResultCallback(vec, vec); + static btVector3 offs; + for (int x = -1; x <= 1; ++x) + { + for (int z = -1; z <= 1; ++z) + { + offs[0] = 0.5f*float(x) * 0.01f; + offs[1] = 1.f * 0.01f; + offs[2] = 0.5f*float(z) * 0.01f; + xForm.setOrigin(vec - offs); + xForm.getBasis().setIdentity(); + xForm2.setOrigin(vec + offs); + xForm2.getBasis().setIdentity(); + SXPhysics_GetDynWorld()->convexSweepTest(&boxoff, xForm, xForm2, cb); + + if (cb.hasHit()) + { + return true; + } + } + } + } + else + return true; + + return false; +} + +bool RFuncParticlesPhyCollision(const float3 * lastpos, const float3* nextpos, float3* coll_pos, float3* coll_nrm) +{ + if (!lastpos || !nextpos) + return false; + + if (lastpos->x == nextpos->x && lastpos->y == nextpos->y && lastpos->z == nextpos->z) + return false; + + btCollisionWorld::ClosestRayResultCallback cb(F3_BTVEC(*lastpos), F3_BTVEC(*nextpos)); + SXPhysics_GetDynWorld()->rayTest(F3_BTVEC(*lastpos), F3_BTVEC(*nextpos), cb); + + if (cb.hasHit()) + { + if (coll_pos) + *coll_pos = BTVEC_F3(cb.m_hitPointWorld); + + if (coll_nrm) + *coll_nrm = BTVEC_F3(cb.m_hitNormalWorld); + + return true; + } + + return false; +} \ No newline at end of file diff --git a/source/managed_render/redefined_func.h b/source/managed_render/redefined_func.h new file mode 100644 index 0000000000000000000000000000000000000000..947d51d4f54de170f8965ddb39578ccba22155ee --- /dev/null +++ b/source/managed_render/redefined_func.h @@ -0,0 +1,49 @@ + +/****************************************************** +Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +������������ ���� render_def - ������� �������, ��� �������� ������������ ���� ��� ������ ����������� +*/ + +#ifndef __REDEFINED_FUNC_H +#define __REDEFINED_FUNC_H + +#include <GRegisterIndex.h> + +#define SM_D3D_CONVERSIONS +#include <common/SXMath.h> + +#include <managed_render/render_def.h> + +#include <core/sxcore.h> +#include <mtllight/sxmtllight.h> + +#include <aigrid/sxaigrid.h> +#include <physics/sxphysics.h> + +/*! \defgroup managed_render_redefined_func redefined_func - ������� �������, ��� �������� ������������ ���� ��� ������ ����������� +\ingroup managed_render +@{*/ + +//! ������� ���������, � ������ ������ �� ����������� +void RFuncDIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count); + +//! ������� ��������� ��������� �� id, world - ������� ������� +void RFuncMtlSet(ID id, float4x4* world); + +//! ������� �������� ��������� +ID RFuncMtlLoad(const char* name, int mtl_type); + +//! ������� ������ ��� ����� �� ����� +bool RFuncAIQuadPhyNavigate(float3_t * pos); + +//! ������� ������������ ������� � ����� +bool RFuncParticlesPhyCollision(const float3 * lastpos, const float3* nextpos, float3* coll_pos, float3* coll_nrm); + +//!@} managed_render_redefined_func + +#endif \ No newline at end of file diff --git a/source/managed_render/render_def.h b/source/managed_render/render_def.h new file mode 100644 index 0000000000000000000000000000000000000000..2c1c280a99887c088584a89af82ce4194184be58 --- /dev/null +++ b/source/managed_render/render_def.h @@ -0,0 +1,55 @@ + +/****************************************************** +Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +������������ ���� render_def - �������/��������� ������� +*/ + +#ifndef __RENDER_DEF_H +#define __RENDER_DEF_H + +/*! \defgroup managed_render_render_def render_def - �������/��������� ������� +\ingroup managed_render +@{*/ + +/*! \name ��������� ������� +@{*/ + +#define RENDER_STATE_MATERIAL 0 /*!< ��������� ���������� */ +#define RENDER_STATE_SHADOW 1 /*!< ��������� ����� */ +#define RENDER_STATE_FREE 2 /*!< ������� ��������� (�� ������������) */ + +//!@} + +/*! \name �������������� ��� ����������� ���� ��������� ��������� +@{*/ + +#define RENDER_IDARRCOM_GEOM 0 /*!< ��������� */ +#define RENDER_IDARRCOM_GREEN 1 /*!< �������������� */ +#define RENDER_IDARRCOM_ANIM 2 /*!< �������� */ + +//!@} + +#define RENDER_PARTICLES_ALPHATEST_VALUE 16 /*!< ����������� �������� ��� ����� ����� */ + +/*! \name �������������� ��� ����������� ���� ��������� ��������� +@{*/ + +#define RENDER_LAYER_NULL 0 /*!< ������� (������ ����, ����� ����� � ������� ��������, ������ � �.�.) */ +#define RENDER_LAYER_UNTRANSPARENT 1 /*!< ������������ ���� */ +#define RENDER_LAYER_TRANSPARENT 2 /*!< ������ ���������� ����, ��������� ���� ����� ���� ����������� */ + +//!@} + +//! ���� ������� ��������� ������ ����� �� ��������� +#define RENDER_DEFAUL_BACKGROUND_COLOR D3DCOLOR_ARGB(0,128,128,128) + +#define G_DATA_LIGHT_FAR 100000 /*!< ������� ��������� ��������� ����������� ��� ����� */ + +//!@} managed_render_render_def + +#endif \ No newline at end of file diff --git a/source/managed_render/render_func.cpp b/source/managed_render/render_func.cpp index 979d6cc2fe1f7355cf19fccbaa214379d90b2fbd..1cda8afcf5e1124052fc126a0d6aae7f65a5ad70 100644 --- a/source/managed_render/render_func.cpp +++ b/source/managed_render/render_func.cpp @@ -1,5 +1,32 @@ -#include <managed_render\\render_func.h> +#include "render_func.h" + + +namespace SXRenderFunc +{ + namespace Delay + { + int64_t UpdateVisibleForCamera = 0; + int64_t UpdateVisibleForLight = 0; + int64_t UpdateVisibleForReflection = 0; + + int64_t UpdateShadow = 0; + int64_t UpdateParticles = 0; + int64_t RenderMRT = 0; + int64_t ComLighting = 0; + int64_t PostProcess = 0; + int64_t ComReflection = 0; + int64_t GeomSortGroup = 0; + + int64_t Present = 0; + + int64_t FreeVal = 0; + float FreeValF1 = 0; + float FreeValF2 = 0; + float FreeValF3 = 0; + }; +}; + inline void SXRenderFunc::SetSamplerFilter(DWORD id, DWORD value) { @@ -79,7 +106,7 @@ void SXRenderFunc::SetRenderSceneFilterUn() GData::DXDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 0); } -////// +//########################################################################## void SXRenderFunc::ComDeviceLost() { @@ -104,7 +131,7 @@ void SXRenderFunc::ComDeviceLost() if (bf) { //если всетаки функция зашла сюда значит чтото было неосвобождено - printflog(REPORT_MSG_LEVEL_ERROR, "reset device is failed ... \n"); + PrintfLog(REPORT_MSG_LEVEL_ERROR, "reset device is failed ... \n"); } else { @@ -139,7 +166,7 @@ void SXRenderFunc::UpdateDataCVar() if (pssm_shadowed && pssm_shadowed_old != (*pssm_shadowed) && GlobalLight >= 0) { pssm_shadowed_old = (*pssm_shadowed); - SML_LigthsSetTypeShadowed(GlobalLight, (pssm_shadowed_old ? LightsTypeShadow::lts_dynamic : LightsTypeShadow::lts_none)); + SML_LigthsSetTypeShadowed(GlobalLight, (pssm_shadowed_old ? LTYPE_SHADOW_DYNAMIC : LTYPE_SHADOW_NONE)); } static const float * pssm_q = GET_PCVAR_FLOAT("pssm_q"); @@ -286,7 +313,7 @@ void SXRenderFunc::ComVisibleForLight() long tmpid = SML_LigthsGetIDByKey(i); if (SML_LigthsGetShadowed(tmpid) && (SML_LigthsComVisibleForFrustum(tmpid, GData::ObjCamera->ObjFrustum) && SML_LigthsGetEnable(tmpid)) /*|| (Data::Level::LightManager->Arr[i]->ShadowCube && Data::Level::LightManager->Arr[i]->ShadowCube->GetStatic() && !Data::Level::LightManager->Arr[i]->ShadowCube->GetUpdate())*/) { - if (SML_LigthsGetType(tmpid) == LightsTypeLight::ltl_global) + if (SML_LigthsGetType(tmpid) == LTYPE_LIGHT_GLOBAL) { for (int k = 0; k<4; k++) { @@ -308,9 +335,9 @@ void SXRenderFunc::ComVisibleForLight() } } } - else if (SML_LigthsGetType(tmpid) == LightsTypeLight::ltl_direction) + else if (SML_LigthsGetType(tmpid) == LTYPE_LIGHT_DIR) { - if (SML_LigthsGetTypeShadowed(tmpid) == LightsTypeShadow::lts_dynamic) + if (SML_LigthsGetTypeShadowed(tmpid) == LTYPE_SHADOW_DYNAMIC) { if (SML_LigthsGetIDArr(tmpid, RENDER_IDARRCOM_GEOM, 0) <= -1) SML_LigthsSetIDArr(tmpid, RENDER_IDARRCOM_GEOM, 0, SGeom_ModelsAddArrForCom()); @@ -326,9 +353,9 @@ void SXRenderFunc::ComVisibleForLight() SXAnim_ModelsComVisible(SML_LigthsGetFrustum(tmpid, 0), &GData::ConstCurrCamPos, SML_LigthsGetIDArr(tmpid, RENDER_IDARRCOM_ANIM, 0)); } } - else if (SML_LigthsGetType(tmpid) == LightsTypeLight::ltl_point) + else if (SML_LigthsGetType(tmpid) == LTYPE_LIGHT_POINT) { - if (SML_LigthsGetTypeShadowed(tmpid) == LightsTypeShadow::lts_dynamic) + if (SML_LigthsGetTypeShadowed(tmpid) == LTYPE_SHADOW_DYNAMIC) { for (int k = 0; k < 6; k++) { @@ -356,7 +383,7 @@ void SXRenderFunc::ComVisibleForLight() long tmpidarr = -1; for (long i = 0; i < SML_LigthsDelGetCount(); ++i) { - if (SML_LigthsDelGetType(i) == LightsTypeLight::ltl_global) + if (SML_LigthsDelGetType(i) == LTYPE_LIGHT_GLOBAL) { for (int k = 0; k<4; k++) { @@ -370,7 +397,7 @@ void SXRenderFunc::ComVisibleForLight() SXAnim_ModelsDelArrForCom(tmpidarr); } } - else if (SML_LigthsDelGetType(i) == LightsTypeLight::ltl_direction) + else if (SML_LigthsDelGetType(i) == LTYPE_LIGHT_DIR) { if ((tmpidarr = SML_LigthsDelGetIDArr(i, RENDER_IDARRCOM_GEOM, 0)) >= 0) SGeom_ModelsDelArrForCom(tmpidarr); @@ -382,7 +409,7 @@ void SXRenderFunc::ComVisibleForLight() SXAnim_ModelsDelArrForCom(tmpidarr); } - else if (SML_LigthsDelGetType(i) == LightsTypeLight::ltl_point) + else if (SML_LigthsDelGetType(i) == LTYPE_LIGHT_POINT) { for (int k = 0; k<6; k++) { @@ -540,7 +567,7 @@ void SXRenderFunc::ChangeModeWindow() GData::ReSize = 2; } -///// +//########################################################################## void SXRenderFunc::UpdateView() { @@ -616,7 +643,7 @@ void SXRenderFunc::OutputDebugInfo(DWORD timeDelta) sprintf(debugstr + strlen(debugstr), "Pos camera : [%.2f, %.2f, %.2f]\n", GData::ConstCurrCamPos.x, GData::ConstCurrCamPos.y, GData::ConstCurrCamPos.z); sprintf(debugstr + strlen(debugstr), "Dir camera : [%.2f, %.2f, %.2f]\n", GData::ConstCurrCamDir.x, GData::ConstCurrCamDir.y, GData::ConstCurrCamDir.z); - sprintf(debugstr + strlen(debugstr), "\nDELAY:\n"); + /*sprintf(debugstr + strlen(debugstr), "\nDELAY:\n"); sprintf(debugstr + strlen(debugstr), "\tUpdateShadow : %.3f\n", float(SXRenderFunc::Delay::UpdateShadow) / float(FrameCount) * 0.001f); sprintf(debugstr + strlen(debugstr), "\tRenderMRT : %.3f\n", float(SXRenderFunc::Delay::RenderMRT) / float(FrameCount) * 0.001f); sprintf(debugstr + strlen(debugstr), "\tComLighting : %.3f\n", float(SXRenderFunc::Delay::ComLighting) / float(FrameCount) * 0.001f); @@ -635,7 +662,7 @@ void SXRenderFunc::OutputDebugInfo(DWORD timeDelta) sprintf(debugstr + strlen(debugstr), "\nFreeVal : %d\n", SXRenderFunc::Delay::FreeVal); sprintf(debugstr + strlen(debugstr), "\nFreeValF1 : %f\n", SXRenderFunc::Delay::FreeValF1); sprintf(debugstr + strlen(debugstr), "\nFreeValF2 : %f\n", SXRenderFunc::Delay::FreeValF2); - sprintf(debugstr + strlen(debugstr), "\nFreeValF3 : %f\n", SXRenderFunc::Delay::FreeValF3); + sprintf(debugstr + strlen(debugstr), "\nFreeValF3 : %f\n", SXRenderFunc::Delay::FreeValF3);*/ } Core_RIntSet(G_RI_INT_COUNT_POLY, 0); @@ -659,9 +686,9 @@ void SXRenderFunc::OutputDebugInfo(DWORD timeDelta) SGCore_DbgMsg(debugstr); } -//////// +//########################################################################## -void SXRenderFunc::RenderInMRT(DWORD timeDelta) +void SXRenderFunc::BuildMRT(DWORD timeDelta) { SGCore_ShaderUnBind(); @@ -738,8 +765,8 @@ void SXRenderFunc::RenderInMRT(DWORD timeDelta) GData::DXDevice->SetTexture(0, SML_DSGetRT(DS_RT::ds_rt_depth)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ScreenOut); SGCore_ScreenQuadDraw(); @@ -789,27 +816,27 @@ void SXRenderFunc::RenderInMRT(DWORD timeDelta) GData::DXDevice->SetRenderState(D3DRS_STENCILMASK, 0xFFFFFFFF); GData::DXDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xFFFFFFFF); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::StencilStr); - SGCore_ShaderSetVRF(ShaderType::st_pixel, GData::IDsShaders::PS::StencilStr, "WinSize", &GData::WinSize); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::StencilStr); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::StencilStr, "WinSize", &GData::WinSize); SGCore_ScreenQuadDraw(); GData::DXDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE); GData::DXDevice->SetRenderState(D3DRS_STENCILREF, 2); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::StencilColumn); - SGCore_ShaderSetVRF(ShaderType::st_pixel, GData::IDsShaders::PS::StencilColumn, "WinSize", &GData::WinSize); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::StencilColumn); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::StencilColumn, "WinSize", &GData::WinSize); SGCore_ScreenQuadDraw(); GData::DXDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE); GData::DXDevice->SetRenderState(D3DRS_STENCILREF, 3); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::StencilStrColumn); - SGCore_ShaderSetVRF(ShaderType::st_pixel, GData::IDsShaders::PS::StencilStrColumn, "WinSize", &GData::WinSize); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::StencilStrColumn); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::StencilStrColumn, "WinSize", &GData::WinSize); SGCore_ScreenQuadDraw(); @@ -836,9 +863,6 @@ void SXRenderFunc::RenderInMRT(DWORD timeDelta) SML_MtlSetIsIncrCountSurf(true); SML_MtlSetCurrCountSurf(RENDER_LAYER_TRANSPARENT); - /*if (GData::Editors::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GEOM) - SGeom_ModelsRender(timeDelta, MtlTypeTransparency::mtt_alpha_lighting, 0, true, GData::Editors::ActiveElement); - else*/ SGeom_ModelsRender(timeDelta, MtlTypeTransparency::mtt_alpha_lighting, 0, true); } @@ -900,7 +924,7 @@ void SXRenderFunc::UpdateShadow(DWORD timeDelta) Core_RIntSet(G_RI_INT_CURRIDLIGHT, tmpid); if (SML_LigthsGetShadowed(tmpid) && (SML_LigthsComVisibleForFrustum(tmpid, GData::ObjCamera->ObjFrustum) && SML_LigthsGetEnable(tmpid)) /*|| (Data::Level::LightManager->Arr[i]->ShadowCube && Data::Level::LightManager->Arr[i]->ShadowCube->GetStatic() && !Data::Level::LightManager->Arr[i]->ShadowCube->GetUpdate())*/) { - if (SML_LigthsGetType(tmpid) == LightsTypeLight::ltl_global) + if (SML_LigthsGetType(tmpid) == LTYPE_LIGHT_GLOBAL) { SML_LigthsShadowRenderBegin(tmpid); int countsplits = (SML_LigthsGet4Or3SplitsG(tmpid) ? 4 : 3); @@ -939,13 +963,13 @@ void SXRenderFunc::UpdateShadow(DWORD timeDelta) } SML_LigthsShadowRenderEnd(tmpid); } - else if (SML_LigthsGetType(tmpid) == LightsTypeLight::ltl_direction) + else if (SML_LigthsGetType(tmpid) == LTYPE_LIGHT_DIR) { if (SML_LigthsCountUpdateUpdate(tmpid, &GData::ConstCurrCamPos)) { SML_LigthsShadowRenderBegin(tmpid); - if (SML_LigthsGetTypeShadowed(tmpid) == LightsTypeShadow::lts_dynamic) + if (SML_LigthsGetTypeShadowed(tmpid) == LTYPE_SHADOW_DYNAMIC) { if (SML_LigthsGetIDArr(tmpid, RENDER_IDARRCOM_GEOM, 0) > -1) SGeom_ModelsRender(timeDelta, MtlTypeTransparency::mtt_none, SML_LigthsGetIDArr(tmpid, RENDER_IDARRCOM_GEOM, 0)); @@ -966,9 +990,9 @@ void SXRenderFunc::UpdateShadow(DWORD timeDelta) SML_LigthsShadowRenderEnd(tmpid); } } - else if (SML_LigthsGetType(tmpid) == LightsTypeLight::ltl_point) + else if (SML_LigthsGetType(tmpid) == LTYPE_LIGHT_POINT) { - if (SML_LigthsGetTypeShadowed(tmpid) != LightsTypeShadow::lts_none && SML_LigthsCountUpdateUpdate(tmpid, &GData::ConstCurrCamPos)) + if (SML_LigthsGetTypeShadowed(tmpid) != LTYPE_SHADOW_NONE && SML_LigthsCountUpdateUpdate(tmpid, &GData::ConstCurrCamPos)) { SML_LigthsShadowRenderBegin(tmpid); @@ -978,7 +1002,7 @@ void SXRenderFunc::UpdateShadow(DWORD timeDelta) { SML_LigthsShadowRenderPre(tmpid, k); - if (SML_LigthsGetTypeShadowed(tmpid) == LightsTypeShadow::lts_dynamic) + if (SML_LigthsGetTypeShadowed(tmpid) == LTYPE_SHADOW_DYNAMIC) { if (SML_LigthsGetIDArr(tmpid, RENDER_IDARRCOM_GEOM, k) > -1) SGeom_ModelsRender(timeDelta, MtlTypeTransparency::mtt_none, SML_LigthsGetIDArr(tmpid, RENDER_IDARRCOM_GEOM, k)); @@ -1046,8 +1070,8 @@ void SXRenderFunc::RenderSky(DWORD timeDelta) GData::DXDevice->SetTexture(0, SML_DSGetRT(DS_RT::ds_rt_scene_light_com2)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ScreenOut); SGCore_ScreenQuadDraw(); @@ -1101,7 +1125,7 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) ID idshader = GData::IDsShaders::PS::ComLightingNonShadow; //если не глобальный источник - if (SML_LigthsGetType(tmpid) != LightsTypeLight::ltl_global) + if (SML_LigthsGetType(tmpid) != LTYPE_LIGHT_GLOBAL) { //помечаем в стенсил буфере пиксели которые входят в ограничивающий объем света, чтобы их осветить @@ -1215,16 +1239,16 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) //теперь когда будем считать освещение надо сбросить значения в стенсил буфере, чтобы каждый кадр не чистить //если стенсил тест прошел успешно, устанавливаем значнеие в нуль - if (SML_LigthsGetType(tmpid) != LightsTypeLight::ltl_global) + if (SML_LigthsGetType(tmpid) != LTYPE_LIGHT_GLOBAL) GData::DXDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_ZERO); float determ = 0; float4x4 ViewInv = SMMatrixInverse(&determ, GData::MCamView); ViewInv = SMMatrixTranspose(ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, GData::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, GData::IDsShaders::VS::ResPos, "NearFar", &GData::NearFar); - SGCore_ShaderSetVRF(ShaderType::st_vertex, GData::IDsShaders::VS::ResPos, "ParamProj", &float3_t(GData::WinSize.x, GData::WinSize.y, GData::ProjFov)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "NearFar", &GData::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "ParamProj", &float3_t(GData::WinSize.x, GData::WinSize.y, GData::ProjFov)); float3 tmpPosition; float2 tmpPowerDist; @@ -1234,7 +1258,7 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) tmpPowerDist.x = SML_LigthsGetPower(tmpid); tmpPowerDist.y = SML_LigthsGetDist(tmpid); - if (SML_LigthsGetType(tmpid) != LightsTypeLight::ltl_global) + if (SML_LigthsGetType(tmpid) != LTYPE_LIGHT_GLOBAL) { tmpColor.w = 0.f; ID gl_id = -1; @@ -1252,14 +1276,14 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) else tmpColor.w = 1.f; - SGCore_ShaderSetVRF(ShaderType::st_pixel, idshader, "ViewPos", &GData::ConstCurrCamPos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idshader, "LightPos", &(tmpPosition)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idshader, "LightPowerDist", &(tmpPowerDist)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idshader, "LightColor", &tmpColor); - //SGCore_ShaderSetVRF(ShaderType::st_pixel, idshader, "NearFar", &GData::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idshader, "ViewPos", &GData::ConstCurrCamPos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idshader, "LightPos", &(tmpPosition)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idshader, "LightPowerDist", &(tmpPowerDist)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idshader, "LightColor", &tmpColor); + //SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idshader, "NearFar", &GData::NearFar); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ResPos); - SGCore_ShaderBind(ShaderType::st_pixel, idshader); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, idshader); SetSamplerFilter(0, 5, D3DTEXF_NONE); SetSamplerAddress(0, 5, D3DTADDRESS_CLAMP); @@ -1293,10 +1317,6 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_FALSE); - - /*//обработка tone mapping - static const float * hdr_adapted_coef = GET_PCVAR_FLOAT("hdr_adapted_coef"); - SML_LigthsToneMappingCom(timeDelta, (hdr_adapted_coef ? (*hdr_adapted_coef) : 0.03f));*/ //теперь необходимо все смешать чтобы получить итоговую освещенную картинку //{{ @@ -1319,22 +1339,33 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) GData::DXDevice->SetTexture(4, SML_DSGetRT(DS_RT::ds_rt_adapted_lum_curr)); GData::DXDevice->SetTexture(5, SML_DSGetRT(DS_RT::ds_rt_param)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::BlendAmbientSpecDiffColor); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::BlendAmbientSpecDiffColor); SGCore_ScreenQuadDraw(); mem_release(ComLightSurf); //}} - //теперь надо смешать все полупрозрачные слои (если есть) с непрозрачными - //{{ + SGCore_ShaderUnBind(); + + GData::DXDevice->SetRenderTarget(0, BackBuf); + mem_release(BackBuf); +} + +void SXRenderFunc::UnionLayers() +{ + LPDIRECT3DSURFACE9 BackBuf, ComLightSurf; + GData::DXDevice->GetRenderTarget(0, &BackBuf); + static int CurrCountTransparencySurf; + #if defined(SXMATERIAL_EDITOR) CurrCountTransparencySurf = 3; #else CurrCountTransparencySurf = SML_MtlGetCurrCountSurf(); #endif + if (CurrCountTransparencySurf >= RENDER_LAYER_TRANSPARENT) { LPDIRECT3DSURFACE9 ColorSurf, Color2Surf, DepthSurf; @@ -1351,9 +1382,9 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) GData::DXDevice->SetTexture(3, SML_DSGetRT(DS_RT::ds_rt_normal)); GData::DXDevice->SetTexture(4, SML_DSGetRT(DS_RT::ds_rt_param)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::UnionAlpha); - SGCore_ShaderSetVRF(ShaderType::st_pixel, GData::IDsShaders::PS::UnionAlpha, "WinSize", &float4_t(GData::WinSize.x, GData::WinSize.y, 1.f / GData::WinSize.x, 1.f / GData::WinSize.y)); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::UnionAlpha); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::UnionAlpha, "WinSize", &float4_t(GData::WinSize.x, GData::WinSize.y, 1.f / GData::WinSize.x, 1.f / GData::WinSize.y)); SGCore_ScreenQuadDraw(); @@ -1376,8 +1407,8 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) GData::DXDevice->SetTexture(0, SML_DSGetRT(DS_RT::ds_rt_depth)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ScreenOut); SGCore_ScreenQuadDraw(); @@ -1391,25 +1422,22 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) GData::DXDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1.0f, 0); GData::DXDevice->SetTexture(0, SML_DSGetRT((CurrCountTransparencySurf >= RENDER_LAYER_TRANSPARENT ? DS_RT::ds_rt_scene_light_com2 : DS_RT::ds_rt_scene_light_com))); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ScreenOut); SGCore_ScreenQuadDraw(); mem_release(ComLightSurf); - //}} - SGCore_ShaderUnBind(); GData::DXDevice->SetRenderTarget(0, BackBuf); mem_release(BackBuf); +} - //если надо то рисуем небо - if (render_sky && SGCore_SkyBoxIsCr()) - SXRenderFunc::RenderSky(timeDelta); - - +void SXRenderFunc::ApplyToneMapping() +{ + LPDIRECT3DSURFACE9 BackBuf, ComLightSurf; SML_DSGetRT(DS_RT::ds_rt_scene_light_com2)->GetSurfaceLevel(0, &ComLightSurf); GData::DXDevice->GetRenderTarget(0, &BackBuf); GData::DXDevice->SetRenderTarget(0, ComLightSurf); @@ -1422,8 +1450,8 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) GData::DXDevice->SetTexture(0, SML_DSGetRT(DS_RT::ds_rt_scene_light_com)); GData::DXDevice->SetTexture(1, SML_DSGetRT(DS_RT::ds_rt_adapted_lum_curr)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ToneMapping); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ToneMapping); SGCore_ScreenQuadDraw(); @@ -1431,15 +1459,15 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) mem_release(ComLightSurf); - - + + SML_DSGetRT(DS_RT::ds_rt_scene_light_com)->GetSurfaceLevel(0, &ComLightSurf); GData::DXDevice->SetRenderTarget(0, ComLightSurf); GData::DXDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1.0f, 0); GData::DXDevice->SetTexture(0, SML_DSGetRT(DS_RT::ds_rt_scene_light_com2)); - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ScreenOut); SGCore_ScreenQuadDraw(); @@ -1450,59 +1478,21 @@ void SXRenderFunc::ComLighting(DWORD timeDelta, bool render_sky) SGCore_ShaderUnBind(); +} +void SXRenderFunc::ComToneMapping(DWORD timeDelta) +{ //обработка tone mapping static const float * hdr_adapted_coef = GET_PCVAR_FLOAT("hdr_adapted_coef"); SML_LigthsToneMappingCom(timeDelta, (hdr_adapted_coef ? (*hdr_adapted_coef) : 0.03f)); } + + void SXRenderFunc::RenderParticles(DWORD timeDelta) { GData::DXDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); -#if defined(SX_PARTICLES_EDITOR) - //GData::DXDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 128, 128, 128), 1.0f, 0); - - if (GData::Editors::RenderBound && SXParticlesEditor::SelEffID != -1 && SXParticlesEditor::SelEmitterID != -1 && SPE_EmitterGet(SXParticlesEditor::SelEffID, SXParticlesEditor::SelEmitterID, BoundType) != ParticlesBoundType::pbt_none) - { - GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); - GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); - - ParticlesData* pdata = SPE_EmitterGetData(SXParticlesEditor::SelEffID, SXParticlesEditor::SelEmitterID); - GData::DXDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); - - if (pdata->BoundType == ParticlesBoundType::pbt_box) - { - GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)(SMMatrixScaling(float3(pdata->BoundVec2 - pdata->BoundVec1)) * SMMatrixTranslation(float3(pdata->BoundVec2 + pdata->BoundVec1)*0.5f))); - GData::Editors::FigureBox->DrawSubset(0); - } - else if (pdata->BoundType == ParticlesBoundType::pbt_sphere) - { - GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)(SMMatrixScaling(pdata->BoundVec1.w, pdata->BoundVec1.w, pdata->BoundVec1.w) * SMMatrixTranslation(float3(pdata->BoundVec1)))); - GData::Editors::FigureSphere->DrawSubset(0); - } - else if (pdata->BoundType == ParticlesBoundType::pbt_cone) - { - if(GData::Editors::FigureConeParam.x != pdata->BoundVec2.w || GData::Editors::FigureConeParam.y != pdata->BoundVec1.w || GData::Editors::FigureConeParam.z != pdata->BoundVec2.y - pdata->BoundVec1.y) - { - GData::Editors::FigureConeParam.x = pdata->BoundVec2.w; - GData::Editors::FigureConeParam.y = pdata->BoundVec1.w; - GData::Editors::FigureConeParam.z = pdata->BoundVec2.y - pdata->BoundVec1.y; - - SGCore_FCreateCone(GData::Editors::FigureConeParam.x, GData::Editors::FigureConeParam.y, GData::Editors::FigureConeParam.z, &GData::Editors::FigureCone, 20); - } - - GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)SMMatrixTranslation(pdata->BoundVec1.x, pdata->BoundVec2.y, pdata->BoundVec1.z)); - GData::Editors::FigureCone->DrawSubset(0); - } - - GData::DXDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); - GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)SMMatrixIdentity()); - } - -#endif - - GData::DXDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); GData::DXDevice->SetRenderState(D3DRS_ALPHAREF, RENDER_PARTICLES_ALPHATEST_VALUE); GData::DXDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL); @@ -1590,22 +1580,14 @@ void SXRenderFunc::RenderPostProcess(DWORD timeDelta) void SXRenderFunc::ShaderRegisterData() { static float4_t tmpnull[256]; + memset(tmpnull, 0, sizeof(float4_t)* 256); GData::DXDevice->SetVertexShaderConstantF(0, (float*)&tmpnull, 256); GData::DXDevice->SetPixelShaderConstantF(0, (float*)&tmpnull, 256); } -void SXRenderFunc::UpdateReflection(DWORD timeDelta) -{ - Core_RIntSet(G_RI_INT_RENDERSTATE, RENDER_STATE_FREE); - Core_RMatrixSet(G_RI_MATRIX_WORLD, &SMMatrixIdentity()); - Core_RMatrixSet(G_RI_MATRIX_VIEW, &GData::MCamView); - GData::DXDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); - GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); - GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); - -//если не объявлен флаг редактора материалов (для него немного другой рендер) -#if !defined(SX_MATERIAL_EDITOR) +void SXRenderFunc::UpdateReflectionScene(DWORD timeDelta) +{ for (int i = 0; i < SGeom_ModelsGetCount(); ++i) { for (int k = 0; k < SGeom_ModelsMGetCountGroups(i); ++k) @@ -1628,7 +1610,7 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) SetSamplerFilter(0, 16, D3DTEXF_LINEAR); SetSamplerAddress(0, 16, D3DTADDRESS_WRAP); - + Core_RBoolSet(G_RI_BOOL_CLIPPLANE0, true); Core_RFloat3Set(G_RI_FLOAT3_CLIPPLANE0_NORMAL, &float3(plane.a, plane.b, plane.c)); @@ -1636,12 +1618,12 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) if (SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GEOM, 0) >= 0) SGeom_ModelsRender(timeDelta, MtlTypeTransparency::mtt_none, SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GEOM, 0), false, i, k); - + if (SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GREEN, 0) >= 0) SGeom_GreenRender(timeDelta, &float3(center), GeomGreenType::ggtr_all, SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GREEN, 0)); SXAnim_Render(); - + SGCore_ShaderUnBind(); @@ -1701,7 +1683,7 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) { if (SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GEOM, k) >= 0) SGeom_ModelsRender(timeDelta, MtlTypeTransparency::mtt_none, SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GEOM, k), false, i, k); - + if (SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GREEN, k) >= 0) SGeom_GreenRender(timeDelta, &GData::ConstCurrCamPos, GeomGreenType::ggtr_all, SML_MtlRefGetIDArr(idmat, RENDER_IDARRCOM_GREEN, k)); @@ -1736,7 +1718,11 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) } } } -#else +} + +void SXRenderFunc::UpdateRflectionSimModel(DWORD timeDelta) +{ +#if defined(SX_MATERIAL_EDITOR) ID idmat = GData::Editors::SimModel->GetIDMtl(); MtlTypeReflect typeref = SML_MtlGetTypeReflection(idmat); D3DXPLANE plane; @@ -1759,7 +1745,7 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) SGCore_SkyBoxRender(timeDelta, &float3(center)); GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); - + SML_MtlRefPostRenderPlane(idmat); } else if (typeref == MtlTypeReflect::mtr_cube_static || typeref == MtlTypeReflect::mtr_cube_dynamic) @@ -1778,7 +1764,7 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_FALSE); Core_RMatrixSet(G_RI_MATRIX_PROJECTION, &GData::MRefCubeSkyProj); SGCore_SkyBoxRender(timeDelta, &float3(center)); - + GData::DXDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_FALSE); @@ -1791,7 +1777,25 @@ void SXRenderFunc::UpdateReflection(DWORD timeDelta) #endif } -//////// +void SXRenderFunc::UpdateReflection(DWORD timeDelta) +{ + Core_RIntSet(G_RI_INT_RENDERSTATE, RENDER_STATE_FREE); + Core_RMatrixSet(G_RI_MATRIX_WORLD, &SMMatrixIdentity()); + Core_RMatrixSet(G_RI_MATRIX_VIEW, &GData::MCamView); + + GData::DXDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); + GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); + GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); + +//если не объявлен флаг редактора материалов (для него немного другой рендер) +#if !defined(SX_MATERIAL_EDITOR) + SXRenderFunc::UpdateReflectionScene(timeDelta); +#else + SXRenderFunc::UpdateRflectionSimModel(timeDelta); +#endif +} + +//########################################################################## void SXRenderFunc::RenderEditorMain() { @@ -1941,118 +1945,47 @@ void SXRenderFunc::RenderEditorLE(DWORD timeDelta) #endif } -/////// - -void SXRenderFunc::RFuncDIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count) +void SXRenderFunc::RenderEditorPE(DWORD timeDelta) { + GData::DXDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); -} - -void SXRenderFunc::RFuncMtlSet(ID id, float4x4* world) -{ - switch(Core_RIntGet(G_RI_INT_RENDERSTATE)) +#if defined(SX_PARTICLES_EDITOR) + if (GData::Editors::RenderBound && SXParticlesEditor::SelEffID != -1 && SXParticlesEditor::SelEmitterID != -1 && SPE_EmitterGet(SXParticlesEditor::SelEffID, SXParticlesEditor::SelEmitterID, BoundType) != ParticlesBoundType::pbt_none) { - case RENDER_STATE_SHADOW: - SML_MtlSetMainTexture(0, id); - SML_LigthsShadowSetShaderOfTypeMat(Core_RIntGet(G_RI_INT_CURRIDLIGHT), SML_MtlGetTypeModel(id), world); - break; - - case RENDER_STATE_FREE: - SML_MtlSetMainTexture(0, id); - Core_RMatrixSet(G_RI_MATRIX_WORLD, &(world ? (*world) : SMMatrixIdentity())); - //SGCore_ShaderUnBind(); - SML_MtlRenderStd(SML_MtlGetTypeModel(id), world, 0, id); - break; - - case RENDER_STATE_MATERIAL: - SML_MtlRender(id, world); - break; - } -} + GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); + GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); -ID SXRenderFunc::RFuncMtlLoad(const char* name, int mtl_type) -{ - return SML_MtlLoad(name, (MtlTypeModel)mtl_type); -} + ParticlesData* pdata = SPE_EmitterGetData(SXParticlesEditor::SelEffID, SXParticlesEditor::SelEmitterID); + GData::DXDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); -bool SXRenderFunc::AIQuadPhyNavigate(float3_t * pos) -{ - static btBoxShape boxfull(btVector3(AIGRID_QUAD_SIZEDIV2, AIGRID_ENTITY_MAX_HEIGHTDIV2, AIGRID_QUAD_SIZEDIV2)); - float3 start = (*pos); - start.y = pos->y + AIGRID_ENTITY_MAX_HEIGHT; - float3 end = (*pos); - //end.y = min->y - AIGRID_ENTITY_MAX_HEIGHT; - static btDiscreteDynamicsWorld::ClosestConvexResultCallback cb(F3_BTVEC(start), F3_BTVEC(end)); - cb = btDiscreteDynamicsWorld::ClosestConvexResultCallback(F3_BTVEC(start), F3_BTVEC(end)); - - static btTransform xForm; - xForm.setOrigin(F3_BTVEC(start)); - xForm.getBasis().setIdentity(); - static btTransform xForm2; - xForm2.setOrigin(F3_BTVEC(end)); - xForm2.getBasis().setIdentity(); - SXPhysics_GetDynWorld()->convexSweepTest(&boxfull, xForm, xForm2, cb); - - if (cb.hasHit()) - { - pos->y = cb.m_hitPointWorld[1]; - //quad->IsClose = false; - - static btBoxShape boxoff(btVector3(AIGRID_QUAD_SIZEDIV2, (AIGRID_ENTITY_MAX_HEIGHT - AIGRID_QUADS_CENTERS_MAXHEIGHT) * 0.5, AIGRID_QUAD_SIZEDIV2)); - - start = (*pos); - start.y = pos->y + AIGRID_ENTITY_MAX_HEIGHTDIV2 + AIGRID_QUADS_CENTERS_MAXHEIGHT; - static btVector3 vec; - vec = btVector3(F3_BTVEC(start)); - cb = btDiscreteDynamicsWorld::ClosestConvexResultCallback(vec, vec); - static btVector3 offs; - for (int x = -1; x <= 1; ++x) + if (pdata->BoundType == ParticlesBoundType::pbt_box) { - for (int z = -1; z <= 1; ++z) - { - offs[0] = 0.5f*float(x) * 0.01f; - offs[1] = 1.f * 0.01f; - offs[2] = 0.5f*float(z) * 0.01f; - xForm.setOrigin(vec - offs); - xForm.getBasis().setIdentity(); - xForm2.setOrigin(vec + offs); - xForm2.getBasis().setIdentity(); - SXPhysics_GetDynWorld()->convexSweepTest(&boxoff, xForm, xForm2, cb); - - if (cb.hasHit()) - { - return true; - } - } + GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)(SMMatrixScaling(float3(pdata->BoundVec2 - pdata->BoundVec1)) * SMMatrixTranslation(float3(pdata->BoundVec2 + pdata->BoundVec1)*0.5f))); + GData::Editors::FigureBox->DrawSubset(0); } - } - else - return true; - - return false; -} - -bool SXRenderFunc::ParticlesPhyCollision(const float3 * lastpos, const float3* nextpos, float3* coll_pos, float3* coll_nrm) -{ - if (!lastpos || !nextpos) - return false; - - if (lastpos->x == nextpos->x && lastpos->y == nextpos->y && lastpos->z == nextpos->z) - return false; - - btCollisionWorld::ClosestRayResultCallback cb(F3_BTVEC(*lastpos), F3_BTVEC(*nextpos)); - SXPhysics_GetDynWorld()->rayTest(F3_BTVEC(*lastpos), F3_BTVEC(*nextpos), cb); + else if (pdata->BoundType == ParticlesBoundType::pbt_sphere) + { + GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)(SMMatrixScaling(pdata->BoundVec1.w, pdata->BoundVec1.w, pdata->BoundVec1.w) * SMMatrixTranslation(float3(pdata->BoundVec1)))); + GData::Editors::FigureSphere->DrawSubset(0); + } + else if (pdata->BoundType == ParticlesBoundType::pbt_cone) + { + if (GData::Editors::FigureConeParam.x != pdata->BoundVec2.w || GData::Editors::FigureConeParam.y != pdata->BoundVec1.w || GData::Editors::FigureConeParam.z != pdata->BoundVec2.y - pdata->BoundVec1.y) + { + GData::Editors::FigureConeParam.x = pdata->BoundVec2.w; + GData::Editors::FigureConeParam.y = pdata->BoundVec1.w; + GData::Editors::FigureConeParam.z = pdata->BoundVec2.y - pdata->BoundVec1.y; - if (cb.hasHit()) - { - if (coll_pos) - *coll_pos = BTVEC_F3(cb.m_hitPointWorld); + SGCore_FCreateCone(GData::Editors::FigureConeParam.x, GData::Editors::FigureConeParam.y, GData::Editors::FigureConeParam.z, &GData::Editors::FigureCone, 20); + } - if (coll_nrm) - *coll_nrm = BTVEC_F3(cb.m_hitNormalWorld); + GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)SMMatrixTranslation(pdata->BoundVec1.x, pdata->BoundVec2.y, pdata->BoundVec1.z)); + GData::Editors::FigureCone->DrawSubset(0); + } - return true; + GData::DXDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); + GData::DXDevice->SetTransform(D3DTS_WORLD, &(D3DXMATRIX)SMMatrixIdentity()); } - return false; -} \ No newline at end of file +#endif +} diff --git a/source/managed_render/render_func.h b/source/managed_render/render_func.h index 0a55054ce2bf8e1baf8060bc0b82bdae7edb92d4..48ca92dee804e96aafb26aabf2b143497bec494f 100644 --- a/source/managed_render/render_func.h +++ b/source/managed_render/render_func.h @@ -6,45 +6,36 @@ See the license in LICENSE /*! \file -Заголовочный файл render_func - пространства имен с орагнизацией рендера*/ +Заголовочный файл render_func - пространства имен с орагнизацией рендера +*/ /*! \defgroup managed_render_render_func render_func - пространство имен с орагнизацией рендера \ingroup managed_render @{*/ -#ifndef __render_func -#define __render_func +#ifndef __RENDER_FUNC_H +#define __RENDER_FUNC_H #include <GRegisterIndex.h> +#include <windows.h> +#include <common/sxtypes.h> -/*! \name Состояния рендера -@{*/ - -#define RENDER_STATE_MATERIAL 0 /*!< отрисовка материалов */ -#define RENDER_STATE_SHADOW 1 /*!< отрисовка теней */ -#define RENDER_STATE_FREE 2 /*!< простая отрисовка (не материальная) */ - -//!@} - -/*! \name Идентификаторы для определяния типа просчетов видимости -@{*/ +#define SM_D3D_CONVERSIONS +#include <common/SXMath.h> -#define RENDER_IDARRCOM_GEOM 0 /*!< геометрия */ -#define RENDER_IDARRCOM_GREEN 1 /*!< растительность */ -#define RENDER_IDARRCOM_ANIM 2 /*!< анимации */ +#include <managed_render/gdata.h> +#include <managed_render/handler_log.h> +#include <managed_render/render_def.h> -//!@} +#include <geom/sxgeom.h> +#include <mtllight/sxmtllight.h> +#include <aigrid/sxaigrid.h> +#include <physics/sxphysics.h> +#include <game/sxgame.h> +#include <particles/sxparticles.h> +#include <pp/sxpp.h> +#include <decals/sxdecals.h> -#define RENDER_PARTICLES_ALPHATEST_VALUE 16 /*!< минимальное значение для альфа теста */ - -/*! \name Идентификаторы для определяния типа просчетов видимости -@{*/ - -#define RENDER_LAYER_NULL 0 /*!< нулевой (пустой слой, здесь будут к примеру скайбокс, облака и т.д.) */ -#define RENDER_LAYER_UNTRANSPARENT 1 /*!< непрозрачный слой */ -#define RENDER_LAYER_TRANSPARENT 2 /*!< первый прозрачный слой, следующие слои могут быть прозрачными */ - -//!@} //! пространство имен с орагнизацией рендера namespace SXRenderFunc @@ -63,6 +54,8 @@ namespace SXRenderFunc void SetRenderSceneFilterUn(); //} + //********************************************************************** + //! обработка потери и восстановление устройства void ComDeviceLost(); @@ -75,33 +68,38 @@ namespace SXRenderFunc void ComVisibleForCamera(); //!< обработка видимости для камеры void ComVisibleReflection(); //!< обработка видимости для отражений - void RenderInMRT(DWORD timeDelta); //!< построение G буфера, то есть рендер всей сцены + void BuildMRT(DWORD timeDelta); //!< построение G буфера, то есть рендер всей сцены + void UpdateShadow(DWORD timeDelta); //!< обновление информации о тенях (рендер всего того что отбрасывает тени в буферы глубин источников света) + void UpdateReflection(DWORD timeDelta); //!< обработка/обновление отражений + void UpdateReflectionScene(DWORD timeDelta); + void UpdateRflectionSimModel(DWORD timeDelta); void RenderSky(DWORD timeDelta); //!< отрисовка скайбокса и облаков void ComLighting(DWORD timeDelta, bool render_sky); //!< обработка освещения, render_sky - рисовать ли небо + + //! объединение слоев прозрачности + void UnionLayers(); + + //! применение тонмаппинга к рт + void ApplyToneMapping(); + + //! просчет тонмаппинга + void ComToneMapping(DWORD timeDelta); + void RenderParticles(DWORD timeDelta); //!< отрисовка партиклов (эффектов) void RenderPostProcess(DWORD timeDelta); //!< отрисовка постпроцесса + void ShaderRegisterData(); + //********************************************************************** + void RenderEditorMain(); //!< рендер основных элементов для редакторов void RenderEditorLE(DWORD timeDelta); //!< рендер элементов для редактора уровней - - /*! \name Функции обертки, для передачи графическому ядру для замены стандартных - @{*/ - - //! функция отрисовки, в данной версии не назначается - void RFuncDIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count); - //! функция установки материала по id, world - мировая матрица - void RFuncMtlSet(ID id, float4x4* world); - //! функция загрузки материала - ID RFuncMtlLoad(const char* name, int mtl_type); - - //!@} + void RenderEditorPE(DWORD timeDelta); - bool AIQuadPhyNavigate(float3_t * pos); - bool ParticlesPhyCollision(const float3 * lastpos, const float3* nextpos, float3* coll_pos, float3* coll_nrm); + //********************************************************************** void SaveScreenShot(); //!< сохранить скриншот void SaveWorkTex(); //!< сохранить рабочие текстуры (г-буфер и что к нему прилагается) @@ -110,24 +108,24 @@ namespace SXRenderFunc //! время задержек/ожидания выполнения некоторых функций рендера namespace Delay { - int64_t UpdateVisibleForCamera = 0; - int64_t UpdateVisibleForLight = 0; - int64_t UpdateVisibleForReflection = 0; - - int64_t UpdateShadow = 0; - int64_t UpdateParticles = 0; - int64_t RenderMRT = 0; - int64_t ComLighting = 0; - int64_t PostProcess = 0; - int64_t ComReflection = 0; - int64_t GeomSortGroup = 0; - - int64_t Present = 0; - - int64_t FreeVal = 0; - float FreeValF1 = 0; - float FreeValF2 = 0; - float FreeValF3 = 0; + extern int64_t UpdateVisibleForCamera; + extern int64_t UpdateVisibleForLight; + extern int64_t UpdateVisibleForReflection; + + extern int64_t UpdateShadow; + extern int64_t UpdateParticles; + extern int64_t RenderMRT; + extern int64_t ComLighting; + extern int64_t PostProcess; + extern int64_t ComReflection; + extern int64_t GeomSortGroup; + + extern int64_t Present; + + extern int64_t FreeVal; + extern float FreeValF1; + extern float FreeValF2; + extern float FreeValF3; }; }; diff --git a/source/mtllight/light.cpp b/source/mtllight/light.cpp index bc08665362b73efd8c8f8d6800ab95c496d2462d..0c6b2db9a062ea3874ece9c387f3387616491a82 100644 --- a/source/mtllight/light.cpp +++ b/source/mtllight/light.cpp @@ -112,13 +112,13 @@ ID Lights::CreateCopy(ID id) Lights::Light::Light() { - TypeLight = LightsTypeLight::ltl_none; + TypeLight = LTYPE_LIGHT_NONE; Name[0] = 0; Id = -1; Key = -1; - TypeShadowed = LightsTypeShadow::lts_static; + TypeShadowed = LTYPE_SHADOW_STATIC; CountUpdate = 0; IsVisible = IsEnable = IsGlobal = false; @@ -282,7 +282,7 @@ ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* co tmplight->Dist = dist; } - tmplight->TypeLight = (isglobal ? LightsTypeLight::ltl_global : LightsTypeLight::ltl_point); + tmplight->TypeLight = (isglobal ? LTYPE_LIGHT_GLOBAL : LTYPE_LIGHT_POINT); if(StrValidate(bound_volume)) { @@ -308,9 +308,9 @@ ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* co } if (is_shadow) - tmplight->TypeShadowed = LightsTypeShadow::lts_dynamic; + tmplight->TypeShadowed = LTYPE_SHADOW_DYNAMIC; else - tmplight->TypeShadowed = LightsTypeShadow::lts_none; + tmplight->TypeShadowed = LTYPE_SHADOW_NONE; ID tmpid = id; @@ -349,7 +349,7 @@ ID Lights::CreateDirection(ID id, const float3* pos, float dist, const float3* c } tmplight->IsGlobal = false; - tmplight->TypeLight = LightsTypeLight::ltl_direction; + tmplight->TypeLight = LTYPE_LIGHT_DIR; tmplight->Angle = angle; float bottom_radius = top_radius + dist * tanf(angle / 2.f); tmplight->TopBottomRadius.x = top_radius; @@ -386,9 +386,9 @@ ID Lights::CreateDirection(ID id, const float3* pos, float dist, const float3* c } if (is_shadow) - tmplight->TypeShadowed = LightsTypeShadow::lts_dynamic; + tmplight->TypeShadowed = LTYPE_SHADOW_DYNAMIC; else - tmplight->TypeShadowed = LightsTypeShadow::lts_none; + tmplight->TypeShadowed = LTYPE_SHADOW_NONE; tmplight->BoundVolume = SGCore_CrBound(); IDirect3DVertexBuffer9* vertexbuf; @@ -483,7 +483,7 @@ void Lights::SetLightDist(ID id, float radius_height, bool is_create) LIGHTS_PRE_COND_ID(id); ArrIDLights[id]->Dist = radius_height; - if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_direction && is_create) + if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_DIR && is_create) { ArrIDLights[id]->TopBottomRadius.y = ArrIDLights[id]->TopBottomRadius.x + radius_height * tanf(ArrIDLights[id]->Angle / 2.f); mem_release_del(ArrIDLights[id]->Mesh); @@ -493,7 +493,7 @@ void Lights::SetLightDist(ID id, float radius_height, bool is_create) if (ArrIDLights[id]->ShadowSM) ArrIDLights[id]->ShadowSM->SetAngleNearFar(&float3(ArrIDLights[id]->Angle, 0.1, ArrIDLights[id]->Dist)); - if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_point && is_create) + if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_POINT && is_create) { mem_release_del(ArrIDLights[id]->Mesh); D3DXCreateSphere(MLSet::DXDevice, radius_height, 20, 20, &ArrIDLights[id]->Mesh, 0); @@ -694,12 +694,12 @@ bool Lights::GetLightShadowed(ID id) const { LIGHTS_PRE_COND_ID(id, false); - return (ArrIDLights[id]->TypeShadowed != LightsTypeShadow::lts_none); + return (ArrIDLights[id]->TypeShadowed != LTYPE_SHADOW_NONE); } -LightsTypeLight Lights::GetLightType(ID id) const +LTYPE_LIGHT Lights::GetLightType(ID id) const { - LIGHTS_PRE_COND_ID(id, LightsTypeLight::ltl_none); + LIGHTS_PRE_COND_ID(id, LTYPE_LIGHT_NONE); return ArrIDLights[id]->TypeLight; } @@ -758,62 +758,62 @@ void Lights::InitShaderOfTypeMaterial(ID id, int typemat, float4x4* wmat) { if (typemat == MTL_TYPE_GEOM) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &tmpmat); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &tmpmat); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect); } else if (typemat == MTL_TYPE_GRASS) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGrassPSSMDirect, "WorldViewProjection", &tmpmat); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGrassPSSMDirect); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGreenPSSMDirect); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGrassPSSMDirect, "WorldViewProjection", &tmpmat); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGrassPSSMDirect); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGreenPSSMDirect); } else if (typemat == MTL_TYPE_TREE) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthTreePSSMDirect, "WorldViewProjection", &tmpmat); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthTreePSSMDirect); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGreenPSSMDirect); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthTreePSSMDirect, "WorldViewProjection", &tmpmat); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthTreePSSMDirect); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGreenPSSMDirect); } else if (typemat == MTL_TYPE_SKIN) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthSkinPSSMDirect, "WorldViewProjection", &tmpmat); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthSkinPSSMDirect); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthSkinPSSMDirect); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthSkinPSSMDirect, "WorldViewProjection", &tmpmat); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthSkinPSSMDirect); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthSkinPSSMDirect); } } else if (ArrIDLights[id]->ShadowCube) { if (typemat == MTL_TYPE_GEOM) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube, "WorldViewProjection", &tmpmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube, "World", &tmpwmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube, "LightPos", &ArrIDLights[id]->Position); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGeomCube); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube, "WorldViewProjection", &tmpmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube, "World", &tmpwmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube, "LightPos", &ArrIDLights[id]->Position); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGeomCube); } else if (typemat == MTL_TYPE_GRASS) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGrassCube, "WorldViewProjection", &tmpmat); - //SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGrassCube, "World", &tmpwmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGrassCube, "LightPos", &ArrIDLights[id]->Position); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGrassCube); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGreenCube); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGrassCube, "WorldViewProjection", &tmpmat); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGrassCube, "World", &tmpwmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGrassCube, "LightPos", &ArrIDLights[id]->Position); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGrassCube); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGreenCube); } else if (typemat == MTL_TYPE_TREE) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthTreeCube, "WorldViewProjection", &tmpmat); - //SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthTreeCube, "World", &tmpwmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthTreeCube, "LightPos", &ArrIDLights[id]->Position); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthTreeCube); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGreenCube); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthTreeCube, "WorldViewProjection", &tmpmat); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthTreeCube, "World", &tmpwmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthTreeCube, "LightPos", &ArrIDLights[id]->Position); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthTreeCube); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGreenCube); } else if (typemat == MTL_TYPE_SKIN) { - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthSkinCube, "WorldViewProjection", &tmpmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthSkinCube, "World", &tmpwmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthSkinCube, "LightPos", &ArrIDLights[id]->Position); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthSkinCube); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthSkinCube); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthSkinCube, "WorldViewProjection", &tmpmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthSkinCube, "World", &tmpwmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthSkinCube, "LightPos", &ArrIDLights[id]->Position); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthSkinCube); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthSkinCube); } } } @@ -894,7 +894,7 @@ void Lights::SetLightAngle(ID id, float angle, bool is_create) LIGHTS_PRE_COND_ID(id); ArrIDLights[id]->Angle = angle; - if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_direction && is_create) + if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_DIR && is_create) { mem_release_del(ArrIDLights[id]->Mesh); ArrIDLights[id]->TopBottomRadius.y = ArrIDLights[id]->TopBottomRadius.x + ArrIDLights[id]->Dist * tanf(angle / 2.f); @@ -910,7 +910,7 @@ void Lights::SetLightAngle(ID id, float angle, bool is_create) mem_release(vertexbuf); } - if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_direction && ArrIDLights[id]->ShadowSM) + if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_DIR && ArrIDLights[id]->ShadowSM) ArrIDLights[id]->ShadowSM->SetAngleNearFar(&float3(angle, 0.1, ArrIDLights[id]->Dist)); LightCountUpdateNull(id); @@ -1083,13 +1083,13 @@ void Lights::SetLightIDArr(ID id, ID inid, int how, ID id_arr) } } -void Lights::SetLightTypeShadowed(ID id, LightsTypeShadow type) +void Lights::SetLightTypeShadowed(ID id, LTYPE_SHADOW type) { LIGHTS_PRE_COND_ID(id); ArrIDLights[id]->TypeShadowed = type; - if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_direction) + if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_DIR) { if (!ArrIDLights[id]->ShadowSM) { @@ -1100,7 +1100,7 @@ void Lights::SetLightTypeShadowed(ID id, LightsTypeShadow type) ArrIDLights[id]->ShadowSM->SetAngleNearFar(&float3(ArrIDLights[id]->Angle, 0.1, ArrIDLights[id]->Dist)); } } - else if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_global) + else if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_GLOBAL) { if (ArrIDLights[id]->IsGlobal) { @@ -1112,7 +1112,7 @@ void Lights::SetLightTypeShadowed(ID id, LightsTypeShadow type) } } } - else if (ArrIDLights[id]->TypeLight == LightsTypeLight::ltl_point) + else if (ArrIDLights[id]->TypeLight == LTYPE_LIGHT_POINT) { if (!ArrIDLights[id]->ShadowCube) { @@ -1126,9 +1126,9 @@ void Lights::SetLightTypeShadowed(ID id, LightsTypeShadow type) LightCountUpdateNull(id); } -LightsTypeShadow Lights::GetLightTypeShadowed(ID id) const +LTYPE_SHADOW Lights::GetLightTypeShadowed(ID id) const { - LIGHTS_PRE_COND_ID(id, LightsTypeShadow::lts_none); + LIGHTS_PRE_COND_ID(id, LTYPE_SHADOW_NONE); return ArrIDLights[id]->TypeShadowed; } @@ -1161,7 +1161,7 @@ bool Lights::LightCountUpdateUpdate(ID id, const float3* viewpos, int ghow) } } - else if (ArrIDLights[id]->TypeShadowed == LightsTypeShadow::lts_static) + else if (ArrIDLights[id]->TypeShadowed == LTYPE_SHADOW_STATIC) { if (ArrIDLights[id]->CountUpdate < LIGHTS_UPDATE_MAX_COUNT_FOR_STATIC) { @@ -1215,7 +1215,7 @@ bool Lights::LightCountUpdateAllowed(ID id, int ghow) const return (ArrIDLights[id]->ShadowPSSM->IsUpdate[ghow] == 0); } } - else if (ArrIDLights[id]->TypeShadowed == LightsTypeShadow::lts_static) + else if (ArrIDLights[id]->TypeShadowed == LTYPE_SHADOW_STATIC) { if (ArrIDLights[id]->CountUpdate >= LIGHTS_UPDATE_MAX_COUNT_FOR_STATIC) return false; @@ -1265,27 +1265,27 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst) else MLSet::DXDevice->SetTexture(1, SGCore_RTGetTexture(ShadowMap2)); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ScreenOut); if(randomsam) { SGCore_SetSamplerFilter(2, D3DTEXF_POINT); SGCore_SetSamplerAddress(2, D3DTADDRESS_WRAP); MLSet::DXDevice->SetTexture(2, SGCore_LoadTexGetTex(MLSet::IDsTexs::Tex_NoiseTex)); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise); } else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::PPBlurDepthBased); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased); if(randomsam) { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "PixelSize", &float2_t(size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "PixelSize", &float2_t(size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); } else { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PPBlurDepthBased, "PixelSize", &float2_t(size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PPBlurDepthBased, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "PixelSize", &float2_t(size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), size / Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); } @@ -1315,9 +1315,9 @@ void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted) MLSet::DXDevice->GetRenderTarget(0, &BackBuf); MLSet::DXDevice->SetRenderTarget(0, SurfSceneScale); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SampleLumIterative); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::SampleLumIterative, "ArrOffsets", &(MLSet::HDRSampleOffsets)); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SampleLumIterative); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SampleLumIterative, "ArrOffsets", &(MLSet::HDRSampleOffsets)); MLSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(MLSet::IDsRenderTargets::LigthCom)); SGCore_ScreenQuadDraw(); @@ -1349,9 +1349,9 @@ void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted) MLSet::DXDevice->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); MLSet::DXDevice->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SampleLumInit); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::SampleLumInit, "ArrOffsets", &(MLSet::HDRSampleOffsets)); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SampleLumInit); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SampleLumInit, "ArrOffsets", &(MLSet::HDRSampleOffsets)); SGCore_ScreenQuadDraw(); @@ -1371,9 +1371,9 @@ void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted) MLSet::DXDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); MLSet::DXDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SampleLumIterative); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::SampleLumIterative, "ArrOffsets", &(MLSet::HDRSampleOffsets)); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SampleLumIterative); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SampleLumIterative, "ArrOffsets", &(MLSet::HDRSampleOffsets)); MLSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(MLSet::IDsRenderTargets::ToneMaps[CurrTexture + 1])); SGCore_ScreenQuadDraw(); @@ -1404,11 +1404,11 @@ void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted) MLSet::DXDevice->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_POINT); MLSet::DXDevice->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_POINT); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::CalcAdaptedLum); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::CalcAdaptedLum); float ElapsedTime = float(timeDelta) * 0.001f * (factor_adapted * 1000.f); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::CalcAdaptedLum, "ElapsedTime", &(ElapsedTime)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::CalcAdaptedLum, "ElapsedTime", &(ElapsedTime)); SGCore_ScreenQuadDraw(); @@ -1455,9 +1455,9 @@ int Lights::DelGetCount() return ArrKeyDelLights.size(); } -LightsTypeLight Lights::DelGetType(ID key) +LTYPE_LIGHT Lights::DelGetType(ID key) { - LIGHTS_PRE_COND_KEY_DEL(key, LightsTypeLight::ltl_none); + LIGHTS_PRE_COND_KEY_DEL(key, LTYPE_LIGHT_NONE); return ArrKeyDelLights[key]->TypeLight; } diff --git a/source/mtllight/light.h b/source/mtllight/light.h index 5352a4781779dab7ade5db0cff4004fd04077581..0e40d6dee5f46808cfc3a884ce5742a24c95e126 100644 --- a/source/mtllight/light.h +++ b/source/mtllight/light.h @@ -114,9 +114,9 @@ public: bool GetLightEnable(ID id) const; void SetLightEnable(ID id, bool val); bool GetLightShadowed(ID id) const; - LightsTypeLight GetLightType(ID id) const; - void SetLightTypeShadowed(ID id, LightsTypeShadow type); - LightsTypeShadow GetLightTypeShadowed(ID id) const; + LTYPE_LIGHT GetLightType(ID id) const; + void SetLightTypeShadowed(ID id, LTYPE_SHADOW type); + LTYPE_SHADOW GetLightTypeShadowed(ID id) const; //----------------------------------------------------------------------------- @@ -168,7 +168,7 @@ public: //----------------------------------------------------------------------------- int DelGetCount(); - LightsTypeLight DelGetType(ID key); + LTYPE_LIGHT DelGetType(ID key); void DelDel(ID key); ID DelGetIDArr(ID key, ID inid, int how); @@ -184,14 +184,14 @@ public: ID Id; int Key; - LightsTypeLight TypeLight; + LTYPE_LIGHT TypeLight; char Name[OBJECT_NAME_MAX_LEN]; bool IsVisible; bool IsEnable; bool IsGlobal; - LightsTypeShadow TypeShadowed; + LTYPE_SHADOW TypeShadowed; int CountUpdate; ID3DXMesh* Mesh; diff --git a/source/mtllight/material.cpp b/source/mtllight/material.cpp index e17ee1fb834228b5ccf8669d9487a823d58a2e77..fea8fc3180cc7457fec41ac9adc62508c41ded3d 100644 --- a/source/mtllight/material.cpp +++ b/source/mtllight/material.cpp @@ -6,17 +6,17 @@ Materials::Materials() CurrFirstFree = -1; CountTimeDelta = 0; IsForceblyAlphaTest = false; - SGCore_ShaderLoad(ShaderType::st_vertex, "mtrlgeom_base.vs", "mtrlgeom_base", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_pixel, "mtrlgeom_base.ps", "mtrlgeom_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "mtrlgeom_base.vs", "mtrlgeom_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "mtrlgeom_base.ps", "mtrlgeom_base", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_vertex, "mtrlgreen_tree_base.vs", "mtrlgreen_tree_base", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_vertex, "mtrlgreen_grass_base.vs", "mtrlgreen_grass_base", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_pixel, "mtrlgreen_base.ps", "mtrlgreen_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "mtrlgreen_tree_base.vs", "mtrlgreen_tree_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "mtrlgreen_grass_base.vs", "mtrlgreen_grass_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "mtrlgreen_base.ps", "mtrlgreen_base", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_pixel, "mtrlgeom_light.ps", "mtrlgeom_light", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "mtrlgeom_light.ps", "mtrlgeom_light", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_vertex, "mtrlskin_base.vs", "mtrlskin_base", ShaderCheckDouble::scd_path); - SGCore_ShaderLoad(ShaderType::st_pixel, "mtrlskin_base.ps", "mtrlskin_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "mtrlskin_base.vs", "mtrlskin_base", ShaderCheckDouble::scd_path); + SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "mtrlskin_base.ps", "mtrlskin_base", ShaderCheckDouble::scd_path); IsIncrCountSurf = false; CurrIdSurf = 0; @@ -26,8 +26,8 @@ Materials::Materials() AddMaterial(tmpMtlDefaultLight); tmpumtl->mtl = tmpMtlDefaultLight; sprintf(tmpMtlDefaultLight->Name, "%s_%s", MTL_VIRTUAL_DIR_STD_MTL, "light"); - tmpMtlDefaultLight->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgeom_base"); - tmpMtlDefaultLight->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgeom_light"); + tmpMtlDefaultLight->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgeom_base"); + tmpMtlDefaultLight->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgeom_light"); tmpMtlDefaultLight->MainTexture = -1; tmpMtlDefaultLight->VS.IsTransWorldViewProjection = true; @@ -42,8 +42,8 @@ Materials::Materials() AddMaterial(tmpMtlDefaultLight); tmpumtl->mtl = tmpMtlDefaultLight; sprintf(tmpMtlDefaultLight->Name, "%s_%s", MTL_VIRTUAL_DIR_STD_MTL, "base"); - tmpumtl->mtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgeom_base"); - tmpumtl->mtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgeom_base"); + tmpumtl->mtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgeom_base"); + tmpumtl->mtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgeom_base"); tmpumtl->mtl->VS.IsTransWorld = true; tmpumtl->mtl->MainTexture = -1; @@ -58,8 +58,8 @@ Materials::Materials() AddMaterial(tmpMtlDefaultLight); tmpumtl->mtl = tmpMtlDefaultLight; sprintf(tmpMtlDefaultLight->Name, "%s_%s", MTL_VIRTUAL_DIR_STD_MTL, "tree"); - tmpumtl->mtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgreen_tree_base"); - tmpumtl->mtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgreen_base"); + tmpumtl->mtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgreen_tree_base"); + tmpumtl->mtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgreen_base"); tmpumtl->mtl->MainTexture = -1; tmpumtl->mtl->VS.IsTransWorldViewProjection = true; @@ -73,8 +73,8 @@ Materials::Materials() AddMaterial(tmpMtlDefaultLight); tmpumtl->mtl = tmpMtlDefaultLight; sprintf(tmpMtlDefaultLight->Name, "%s_%s", MTL_VIRTUAL_DIR_STD_MTL, "grass"); - tmpumtl->mtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgreen_grass_base"); - tmpumtl->mtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgreen_base"); + tmpumtl->mtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgreen_grass_base"); + tmpumtl->mtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgreen_base"); tmpumtl->mtl->MainTexture = -1; tmpumtl->mtl->VS.IsTransWorldViewProjection = true; @@ -565,25 +565,25 @@ ID Materials::MtlGetTextureID(ID id) void Materials::MtlSetVS(ID id, const char* path_vs) { MTL_PRE_COND_ID(id); - ArrMaterials[id]->mtl->PreShaderVS = SGCore_ShaderLoad(ShaderType::st_vertex, path_vs, path_vs, ShaderCheckDouble::scd_path); + ArrMaterials[id]->mtl->PreShaderVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, path_vs, path_vs, ShaderCheckDouble::scd_path); } void Materials::MtlGetVS(ID id, char* name) { MTL_PRE_COND_ID(id); - SGCore_ShaderGetPath(ShaderType::st_vertex, ArrMaterials[id]->mtl->PreShaderVS, name); + SGCore_ShaderGetPath(SHADER_TYPE_VERTEX, ArrMaterials[id]->mtl->PreShaderVS, name); } void Materials::MtlSetPS(ID id, const char* path_ps) { MTL_PRE_COND_ID(id); - ArrMaterials[id]->mtl->PreShaderPS = SGCore_ShaderLoad(ShaderType::st_pixel, path_ps, path_ps, ShaderCheckDouble::scd_path); + ArrMaterials[id]->mtl->PreShaderPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, path_ps, path_ps, ShaderCheckDouble::scd_path); } void Materials::MtlGetPS(ID id, char* name) { MTL_PRE_COND_ID(id); - SGCore_ShaderGetPath(ShaderType::st_pixel, ArrMaterials[id]->mtl->PreShaderPS, name); + SGCore_ShaderGetPath(SHADER_TYPE_PIXEL, ArrMaterials[id]->mtl->PreShaderPS, name); } @@ -1151,14 +1151,14 @@ bool Materials::LoadMtl(const char* name, Material** mtl) if (def_str_validate(tmpVS)) - tmpMtl->PreShaderVS = SGCore_ShaderLoad(ShaderType::st_vertex, tmpVS, "main", ShaderCheckDouble::scd_path); + tmpMtl->PreShaderVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, tmpVS, "main", ShaderCheckDouble::scd_path); else - tmpMtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgeom_base"); + tmpMtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgeom_base"); if (def_str_validate(tmpPS)) - tmpMtl->PreShaderPS = SGCore_ShaderLoad(ShaderType::st_pixel, tmpPS, "main", ShaderCheckDouble::scd_path); + tmpMtl->PreShaderPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, tmpPS, "main", ShaderCheckDouble::scd_path); else - tmpMtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgeom_base"); + tmpMtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgeom_base"); tmpMicroDiff[0][0] = 0; if (config->keyExists(tmp_name, "mirco_diff_r")) @@ -1431,29 +1431,29 @@ void Materials::CreateMtl(const char* name, Material** mtl, MtlTypeModel type) //обычна¤ геометри¤ if (type == MtlTypeModel::tms_static) { - tmpMtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgeom_base"); - tmpMtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgeom_base"); + tmpMtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgeom_base"); + tmpMtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgeom_base"); tmpMtl->VS.IsTransWorld = true; } //деревь¤ else if (type == MtlTypeModel::tms_tree) { - tmpMtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgreen_tree_base"); - tmpMtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgreen_base"); + tmpMtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgreen_tree_base"); + tmpMtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgreen_base"); //tmpMtl->RenderStates.IsAlphaTest = true; } //трава else if (type == MtlTypeModel::tms_grass) { - tmpMtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlgreen_grass_base"); - tmpMtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlgreen_base"); + tmpMtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgreen_grass_base"); + tmpMtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgreen_base"); //tmpMtl->RenderStates.IsAlphaTest = true; } //анимационная модель else if (type == MtlTypeModel::tms_skin) { - tmpMtl->PreShaderVS = SGCore_ShaderGetID(ShaderType::st_vertex, "mtrlskin_base"); - tmpMtl->PreShaderPS = SGCore_ShaderGetID(ShaderType::st_pixel, "mtrlskin_base"); + tmpMtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlskin_base"); + tmpMtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlskin_base"); tmpMtl->VS.IsTransWorld = true; } //источник света @@ -1616,8 +1616,8 @@ void Materials::MtlSave(ID id) char tmpPathMaskName[1024]; - SGCore_ShaderGetPath(ShaderType::st_vertex, mtrl->PreShaderVS, tmpPathVSName); - SGCore_ShaderGetPath(ShaderType::st_pixel, mtrl->PreShaderPS, tmpPathPSName); + SGCore_ShaderGetPath(SHADER_TYPE_VERTEX, mtrl->PreShaderVS, tmpPathVSName); + SGCore_ShaderGetPath(SHADER_TYPE_PIXEL, mtrl->PreShaderPS, tmpPathPSName); fprintf(file, "type = %d\n", mtrl->Type); fprintf(file, "is_unlit = %d\n", mtrl->IsUnlit); @@ -1803,7 +1803,7 @@ void Materials::RenderStd(MtlTypeModel type, float4x4* world, ID slot, ID id_mtl if (type == MtlTypeModel::tms_static) { - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::StdGeom); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::StdGeom); float4x4 wmat = (world ? (*world) : SMMatrixIdentity()); float4x4 wvpmat; @@ -1811,28 +1811,28 @@ void Materials::RenderStd(MtlTypeModel type, float4x4* world, ID slot, ID id_mtl wvpmat = SMMatrixTranspose(wmat * wvpmat); wmat = SMMatrixTranspose(wmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::StdGeom, "WorldViewProjection", &wvpmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::StdGeom, "World", &wmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::StdGeom, "WorldViewProjection", &wvpmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::StdGeom, "World", &wmat); if (Core_RBoolGet(G_RI_BOOL_CLIPPLANE0)) { - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGeomCP); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGeomCP); float3 tmpnormal, tmppoint; Core_RFloat3Get(G_RI_FLOAT3_CLIPPLANE0_NORMAL, &tmpnormal); Core_RFloat3Get(G_RI_FLOAT3_CLIPPLANE0_POINT, &tmppoint); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGeomCP, "PlaneNormal", &tmpnormal); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGeomCP, "PlanePoint", &tmppoint); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGeomCP, "PlaneNormal", &tmpnormal); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGeomCP, "PlanePoint", &tmppoint); } else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGeom); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGeom); } else if (type == MtlTypeModel::tms_grass || type == MtlTypeModel::tms_tree) { ID tmpvs = (type == MtlTypeModel::tms_grass ? MLSet::IDsShaders::VS::StdGrass : MLSet::IDsShaders::VS::StdTree); - SGCore_ShaderBind(ShaderType::st_vertex, tmpvs); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, tmpvs); float4x4 wmat = (world ? (*world) : SMMatrixIdentity()); float4x4 wvpmat; @@ -1840,27 +1840,27 @@ void Materials::RenderStd(MtlTypeModel type, float4x4* world, ID slot, ID id_mtl wvpmat = SMMatrixTranspose(wmat * wvpmat); wmat = SMMatrixTranspose(wmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpvs, "WorldViewProjection", &wvpmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpvs, "World", &wmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpvs, "WorldViewProjection", &wvpmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpvs, "World", &wmat); if (Core_RBoolGet(G_RI_BOOL_CLIPPLANE0)) { - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGreenCP); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGreenCP); float3 tmpnormal, tmppoint; Core_RFloat3Get(G_RI_FLOAT3_CLIPPLANE0_NORMAL, &tmpnormal); Core_RFloat3Get(G_RI_FLOAT3_CLIPPLANE0_POINT, &tmppoint); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGreenCP, "PlaneNormal", &tmpnormal); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGreenCP, "PlanePoint", &tmppoint); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGreenCP, "PlaneNormal", &tmpnormal); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGreenCP, "PlanePoint", &tmppoint); } else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdGreen); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdGreen); } else if (type == MtlTypeModel::tms_skin) { - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::StdSkin); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::StdSkin); float4x4 wmat = (world ? (*world) : SMMatrixIdentity()); float4x4 wvpmat; @@ -1868,23 +1868,23 @@ void Materials::RenderStd(MtlTypeModel type, float4x4* world, ID slot, ID id_mtl wvpmat = SMMatrixTranspose(wmat * wvpmat); wmat = SMMatrixTranspose(wmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::StdSkin, "WorldViewProjection", &wvpmat); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::StdSkin, "World", &wmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::StdSkin, "WorldViewProjection", &wvpmat); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::StdSkin, "World", &wmat); if (Core_RBoolGet(G_RI_BOOL_CLIPPLANE0)) { - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdSkinCP); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdSkinCP); float3 tmpnormal, tmppoint; Core_RFloat3Get(G_RI_FLOAT3_CLIPPLANE0_NORMAL, &tmpnormal); Core_RFloat3Get(G_RI_FLOAT3_CLIPPLANE0_POINT, &tmppoint); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdSkinCP, "PlaneNormal", &tmpnormal); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdSkinCP, "PlanePoint", &tmppoint); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdSkinCP, "PlaneNormal", &tmpnormal); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdSkinCP, "PlanePoint", &tmppoint); } else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::StdSkin); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::StdSkin); } } @@ -1967,10 +1967,10 @@ void Materials::Render(ID id, float4x4* world) if (tmpmaterial->PreShaderVS != -1) - SGCore_ShaderBind(ShaderType::st_vertex, tmpmaterial->PreShaderVS); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS); if (tmpmaterial->PreShaderPS != -1) - SGCore_ShaderBind(ShaderType::st_pixel, tmpmaterial->PreShaderPS); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS); if (tmpmaterial->VS.IsTransWorld || tmpmaterial->PS.IsTransWorld || tmpmaterial->VS.IsTransWorldView || tmpmaterial->PS.IsTransWorldView || tmpmaterial->VS.IsTransWorldViewProjection || tmpmaterial->PS.IsTransWorldViewProjection) worldtrans = SMMatrixTranspose(*world); @@ -1991,22 +1991,22 @@ void Materials::Render(ID id, float4x4* world) } if (tmpmaterial->VS.IsTransWorld) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "World", &worldtrans); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "World", &worldtrans); if (tmpmaterial->PS.IsTransWorld) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "World", &worldtrans); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "World", &worldtrans); if (tmpmaterial->VS.IsTransView) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "View", &viewtrans); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "View", &viewtrans); if (tmpmaterial->PS.IsTransView) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "View", &viewtrans); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "View", &viewtrans); if (tmpmaterial->VS.IsTransProjection) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "Projection", &projtrans); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "Projection", &projtrans); if (tmpmaterial->PS.IsTransProjection) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "Projection", &projtrans); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "Projection", &projtrans); if (tmpmaterial->VS.IsTransWorldView || tmpmaterial->PS.IsTransWorldView) @@ -2014,10 +2014,10 @@ void Materials::Render(ID id, float4x4* world) float4x4 wv = viewtrans * worldtrans; if (tmpmaterial->VS.IsTransWorldView) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "WorldView", &wv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WorldView", &wv); if (tmpmaterial->PS.IsTransWorldView) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "WorldView", &wv); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WorldView", &wv); } if (tmpmaterial->VS.IsTransWorldViewProjection || tmpmaterial->PS.IsTransWorldViewProjection) @@ -2030,10 +2030,10 @@ void Materials::Render(ID id, float4x4* world) wvp = SMMatrixTranspose(wvp); if (tmpmaterial->VS.IsTransWorldViewProjection) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "WorldViewProjection", &wvp); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WorldViewProjection", &wvp); if (tmpmaterial->PS.IsTransWorldViewProjection) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "WorldViewProjection", &wvp); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WorldViewProjection", &wvp); } if (tmpmaterial->VS.IsTransPosCam || tmpmaterial->PS.IsTransPosCam) @@ -2042,36 +2042,36 @@ void Materials::Render(ID id, float4x4* world) Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &observerpos); if (tmpmaterial->VS.IsTransPosCam) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "PosCam", &observerpos); if (tmpmaterial->PS.IsTransPosCam) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "PosCam", &observerpos); } if (tmpmaterial->VS.IsTransUserData) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "Param", &(tmpmaterial->VS.Param)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "Param", &(tmpmaterial->VS.Param)); if (tmpmaterial->TransVSDataInPS) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "ParamVS", &(tmpmaterial->VS.Param)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "ParamVS", &(tmpmaterial->VS.Param)); if (tmpmaterial->PS.IsTransUserData) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "Param", &(tmpmaterial->PS.Param)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "Param", &(tmpmaterial->PS.Param)); if (tmpmaterial->TransPSDataInVS) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "ParamPS", &(tmpmaterial->PS.Param)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "ParamPS", &(tmpmaterial->PS.Param)); if (tmpmaterial->VS.IsTransTimeDelta) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "TimeDelta", &float2(CountTimeDelta, float(CurrTimeDelta) * 0.001f)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "TimeDelta", &float2(CountTimeDelta, float(CurrTimeDelta) * 0.001f)); if (tmpmaterial->PS.IsTransTimeDelta) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "TimeDelta", &float2(CountTimeDelta, float(CurrTimeDelta) * 0.001f)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "TimeDelta", &float2(CountTimeDelta, float(CurrTimeDelta) * 0.001f)); if (tmpmaterial->VS.IsTransWinSize) - SGCore_ShaderSetVRF(ShaderType::st_vertex, tmpmaterial->PreShaderVS, "WinSize", &float2_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WinSize", &float2_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); if (tmpmaterial->PS.IsTransWinSize) - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "WinSize", &float2_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WinSize", &float2_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT))); //если материалом назначен альфа тест и не включен принудительный if (tmpmaterial->IsAlphaTest && !IsForceblyAlphaTest) @@ -2119,7 +2119,7 @@ void Materials::Render(ID id, float4x4* world) if (tmpmaterial->LightParam.TypeRefraction == mtt_alpha_lighting) ++(CurrIdSurf); - SGCore_ShaderSetVRF(ShaderType::st_pixel, tmpmaterial->PreShaderPS, "NearFarIsUnlit", &float4_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR), zz, float(CurrIdSurf) / 255.f)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "NearFarIsUnlit", &float4_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR), zz, float(CurrIdSurf) / 255.f)); } } diff --git a/source/mtllight/ml_data.cpp b/source/mtllight/ml_data.cpp index cbe47615237c370d1a145b602919b45aa821b7f5..7cb807d084106ecdc2b8654c71985e265c83b157 100644 --- a/source/mtllight/ml_data.cpp +++ b/source/mtllight/ml_data.cpp @@ -237,79 +237,79 @@ void MLSet::MLInit() MLSet::IDsTexs::NullingTex = SGCore_LoadTexCreate("nulling_tex__", NullingTex); - MLSet::IDsShaders::VS::SMDepthSkinPSSMDirect = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_skin_pssm_direct.vs", "sm_depth_skin_pssm_direct", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::SMDepthSkinPSSMDirect = SGCore_ShaderLoad(ShaderType::st_pixel, "sm_depth_skin_pssm_direct.ps", "sm_depth_skin_pssm_direct", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::VS::SMDepthSkinPSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_skin_pssm_direct.vs", "sm_depth_skin_pssm_direct", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SMDepthSkinPSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sm_depth_skin_pssm_direct.ps", "sm_depth_skin_pssm_direct", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_geom_pssm_direct.vs", "sm_depth_geom_pssm_direct", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect = SGCore_ShaderLoad(ShaderType::st_pixel, "sm_depth_geom_pssm_direct.ps", "sm_depth_geom_pssm_direct", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_geom_pssm_direct.vs", "sm_depth_geom_pssm_direct", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sm_depth_geom_pssm_direct.ps", "sm_depth_geom_pssm_direct", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::SMDepthGeomCube = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_geom_cube.vs", "sm_depth_geom_cube", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::SMDepthGeomCube = SGCore_ShaderLoad(ShaderType::st_pixel, "sm_depth_geom_cube.ps", "sm_depth_geom_cube", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::VS::SMDepthGeomCube = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_geom_cube.vs", "sm_depth_geom_cube", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SMDepthGeomCube = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sm_depth_geom_cube.ps", "sm_depth_geom_cube", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::SMDepthSkinCube = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_skin_cube.vs", "sm_depth_skin_cube", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::SMDepthSkinCube = SGCore_ShaderLoad(ShaderType::st_pixel, "sm_depth_skin_cube.ps", "sm_depth_skin_cube", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::VS::SMDepthSkinCube = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_skin_cube.vs", "sm_depth_skin_cube", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SMDepthSkinCube = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sm_depth_skin_cube.ps", "sm_depth_skin_cube", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::SMDepthTreePSSMDirect = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_green_pssm_direct.vs", "sm_depth_tree_pssm_direct", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::VS::SMDepthTreePSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_green_pssm_direct.vs", "sm_depth_tree_pssm_direct", ShaderCheckDouble::scd_name); D3DXMACRO Defines_GRASS[] = { { "_GRASS_", "" }, { 0, 0 } }; - MLSet::IDsShaders::VS::SMDepthGrassPSSMDirect = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_green_pssm_direct.vs", "sm_depth_grass_pssm_direct", ShaderCheckDouble::scd_name, Defines_GRASS); + MLSet::IDsShaders::VS::SMDepthGrassPSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_green_pssm_direct.vs", "sm_depth_grass_pssm_direct", ShaderCheckDouble::scd_name, Defines_GRASS); - MLSet::IDsShaders::PS::SMDepthGreenPSSMDirect = SGCore_ShaderLoad(ShaderType::st_pixel, "sm_depth_green_pssm_direct.ps", "sm_depth_green_pssm_direct", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SMDepthGreenPSSMDirect = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sm_depth_green_pssm_direct.ps", "sm_depth_green_pssm_direct", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::SMDepthTreeCube = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_green_cube.vs", "sm_depth_tree_cube", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::VS::SMDepthTreeCube = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_green_cube.vs", "sm_depth_tree_cube", ShaderCheckDouble::scd_name); - MLSet::IDsShaders::VS::SMDepthGrassCube = SGCore_ShaderLoad(ShaderType::st_vertex, "sm_depth_green_cube.vs", "sm_depth_green_cube", ShaderCheckDouble::scd_name, Defines_GRASS); + MLSet::IDsShaders::VS::SMDepthGrassCube = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sm_depth_green_cube.vs", "sm_depth_green_cube", ShaderCheckDouble::scd_name, Defines_GRASS); - MLSet::IDsShaders::PS::SMDepthGreenCube = SGCore_ShaderLoad(ShaderType::st_pixel, "sm_depth_green_cube.ps", "sm_depth_green_cube", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SMDepthGreenCube = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sm_depth_green_cube.ps", "sm_depth_green_cube", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::ResPosDepth = SGCore_ShaderLoad(ShaderType::st_vertex, "pp_res_pos.vs", "pp_quad_render_res_pos", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::VS::ResPosDepth = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_res_pos.vs", "pp_quad_render_res_pos", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::PSSM4 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppgensm_pssm.ps", "ppgensm_pssm", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::PS::PSSM4 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppgensm_pssm.ps", "ppgensm_pssm", ShaderCheckDouble::scd_name); D3DXMACRO Defines_SPLITS3[] = { { "SPLITS3", "" }, { 0, 0 } }; - MLSet::IDsShaders::PS::PSSM3 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppgensm_pssm.ps", "ppgensm_pssm3split", ShaderCheckDouble::scd_name, Defines_SPLITS3); + MLSet::IDsShaders::PS::PSSM3 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppgensm_pssm.ps", "ppgensm_pssm3split", ShaderCheckDouble::scd_name, Defines_SPLITS3); - MLSet::IDsShaders::PS::GenShadowDirect4 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppgensm_direct.ps", "ppgensm_direct", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::PS::GenShadowDirect4 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppgensm_direct.ps", "ppgensm_direct", ShaderCheckDouble::scd_name); D3DXMACRO Defines_GSD_9[] = { { "GSD_9", "" }, { 0, 0 } }; - MLSet::IDsShaders::PS::GenShadowDirect9 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppgensm_direct.ps", "ppgensm_direct_9", ShaderCheckDouble::scd_name, Defines_GSD_9); - MLSet::IDsShaders::PS::GenShadowCube1 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppgensm_point.ps", "ppgensm_point", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::PS::GenShadowDirect9 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppgensm_direct.ps", "ppgensm_direct_9", ShaderCheckDouble::scd_name, Defines_GSD_9); + MLSet::IDsShaders::PS::GenShadowCube1 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppgensm_point.ps", "ppgensm_point", ShaderCheckDouble::scd_name); D3DXMACRO Defines_GSC_9[] = { { "GSC_9", "" }, { 0, 0 } }; - MLSet::IDsShaders::PS::GenShadowCube6 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppgensm_point.ps", "ppgensm_point_9", ShaderCheckDouble::scd_name, Defines_GSC_9); + MLSet::IDsShaders::PS::GenShadowCube6 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppgensm_point.ps", "ppgensm_point_9", ShaderCheckDouble::scd_name, Defines_GSC_9); - MLSet::IDsShaders::PS::PPBlurDepthBased = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_blur_depth_based.ps", "pp_blur_depth_based", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::PPBlurDepthBasedNoise = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_blur_depth_based_noise.ps", "pp_blur_depth_based_noise", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::PPBlurDepthBased = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_blur_depth_based.ps", "pp_blur_depth_based", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::PPBlurDepthBasedNoise = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_blur_depth_based_noise.ps", "pp_blur_depth_based_noise", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::CalcAdaptedLum = SGCore_ShaderLoad(ShaderType::st_pixel, "pptm_calc_adapted_lum.ps", "pptm_calc_adapted_lum", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::SampleLumInit = SGCore_ShaderLoad(ShaderType::st_pixel, "pptm_lum_init.ps", "pptm_lum_init", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::SampleLumIterative = SGCore_ShaderLoad(ShaderType::st_pixel, "pptm_lum_iterative.ps", "pptm_lum_iterative", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::CalcAdaptedLum = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pptm_calc_adapted_lum.ps", "pptm_calc_adapted_lum", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SampleLumInit = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pptm_lum_init.ps", "pptm_lum_init", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::SampleLumIterative = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pptm_lum_iterative.ps", "pptm_lum_iterative", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::ScreenOut = SGCore_ShaderLoad(ShaderType::st_vertex, "pp_quad_render.vs", "pp_quad_render", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::PS::ScreenOut = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_quad_render.ps", "pp_quad_render", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::VS::ScreenOut = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_quad_render.vs", "pp_quad_render", ShaderCheckDouble::scd_path); + MLSet::IDsShaders::PS::ScreenOut = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_quad_render.ps", "pp_quad_render", ShaderCheckDouble::scd_path); - MLSet::IDsShaders::VS::StdGeom = SGCore_ShaderLoad(ShaderType::st_vertex, "stdr_geom.vs", "stdr_geom", ShaderCheckDouble::scd_name); - MLSet::IDsShaders::PS::StdGeom = SGCore_ShaderLoad(ShaderType::st_pixel, "stdr_geom.ps", "stdr_geom", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::VS::StdGeom = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_geom.vs", "stdr_geom", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::PS::StdGeom = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_geom.ps", "stdr_geom", ShaderCheckDouble::scd_name); D3DXMACRO Defines_CP[] = { { "_CLIP_PLANE_", "" }, { 0, 0 } }; - MLSet::IDsShaders::PS::StdGeomCP = SGCore_ShaderLoad(ShaderType::st_pixel, "stdr_geom.ps", "stdr_geom_cp", ShaderCheckDouble::scd_name, Defines_CP); + MLSet::IDsShaders::PS::StdGeomCP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_geom.ps", "stdr_geom_cp", ShaderCheckDouble::scd_name, Defines_CP); //D3DXMACRO Defines_GRASS[] = { { "_GRASS_", "" }, { 0, 0 } }; - MLSet::IDsShaders::VS::StdGrass = SGCore_ShaderLoad(ShaderType::st_vertex, "stdr_green.vs", "stdr_grass", ShaderCheckDouble::scd_name, Defines_GRASS); - MLSet::IDsShaders::VS::StdTree = SGCore_ShaderLoad(ShaderType::st_vertex, "stdr_green.vs", "stdr_tree", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::VS::StdGrass = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_green.vs", "stdr_grass", ShaderCheckDouble::scd_name, Defines_GRASS); + MLSet::IDsShaders::VS::StdTree = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_green.vs", "stdr_tree", ShaderCheckDouble::scd_name); - MLSet::IDsShaders::PS::StdGreen = SGCore_ShaderLoad(ShaderType::st_pixel, "stdr_green.ps", "stdr_green", ShaderCheckDouble::scd_name); - MLSet::IDsShaders::PS::StdGreenCP = SGCore_ShaderLoad(ShaderType::st_pixel, "stdr_green.ps", "stdr_green_cp", ShaderCheckDouble::scd_name, Defines_CP); + MLSet::IDsShaders::PS::StdGreen = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_green.ps", "stdr_green", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::PS::StdGreenCP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_green.ps", "stdr_green_cp", ShaderCheckDouble::scd_name, Defines_CP); - MLSet::IDsShaders::VS::StdSkin = SGCore_ShaderLoad(ShaderType::st_vertex, "stdr_skin.vs", "stdr_skin", ShaderCheckDouble::scd_name); - MLSet::IDsShaders::PS::StdSkin = SGCore_ShaderLoad(ShaderType::st_pixel, "stdr_skin.ps", "stdr_skin", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::VS::StdSkin = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_skin.vs", "stdr_skin", ShaderCheckDouble::scd_name); + MLSet::IDsShaders::PS::StdSkin = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_skin.ps", "stdr_skin", ShaderCheckDouble::scd_name); - MLSet::IDsShaders::PS::StdSkinCP = SGCore_ShaderLoad(ShaderType::st_pixel, "stdr_skin.ps", "stdr_skin_cp", ShaderCheckDouble::scd_name, Defines_CP); + MLSet::IDsShaders::PS::StdSkinCP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_skin.ps", "stdr_skin_cp", ShaderCheckDouble::scd_name, Defines_CP); ////////// diff --git a/source/mtllight/ml_data.h b/source/mtllight/ml_data.h index b536d9a969d314713b4c99714f5e64026114e656..dff658de2884d938df2e84882f47c8f89a2fab43 100644 --- a/source/mtllight/ml_data.h +++ b/source/mtllight/ml_data.h @@ -2,25 +2,21 @@ #ifndef __ML_DATA_H #define __ML_DATA_H -#pragma once - #include <gdefines.h> #define SM_D3D_CONVERSIONS #include <common/SXMath.h> #include <common\array.h> + #include <GRegisterIndex.h> + #include "sxmtllight.h" namespace MLSet { void MLInit(); + extern IDirect3DDevice9* DXDevice; - //float3 ConstCurrCamPos; - //float2_t WinSize = float2_t(1024, 768); - //DWORD CountTimeDelta = 0; - //char StdPathMaterial[1024]; - //char StdPathMesh[1024]; //размер текстуры глубины дл¤ локальных источников света extern float2_t SizeTexDepthGlobal; @@ -43,14 +39,6 @@ namespace MLSet void GetArrDownScale4x4(DWORD width, DWORD height, float2 arr[]); - //fov and ration esesno - //float ProjFov = SM_PI * 0.25f; - //float ProjRatio = WinSize.x / WinSize.y; - - //ближн¤¤ и дальн¤¤ плоскости - //float2_t NearFar = float2_t(0.25f, 400.f); - - //float4x4 MCamView; extern bool IsHalfGenPCFShadowLocal; diff --git a/source/mtllight/reflection.cpp b/source/mtllight/reflection.cpp index 73e05403d6776c02469ea28393446cee1f84a010..dc653c38f6c92bcc62a6b2a054ceee4795e2fc43 100644 --- a/source/mtllight/reflection.cpp +++ b/source/mtllight/reflection.cpp @@ -307,8 +307,8 @@ void Reflection::PostRenderRefCube(int cube) MLSet::DXDevice->SetRenderTarget(0, CubeReflectSurface[cube]); //MLSet::DXDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 255, 0, 0), 1, 0); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::ScreenOut); MLSet::DXDevice->SetTexture(0, TextureReflect); SGCore_ScreenQuadDraw(); diff --git a/source/mtllight/shadow.cpp b/source/mtllight/shadow.cpp index e53ef5f3b8ffb93e169b8397aab14be0a09466b9..bc9faf60d9ee51a01e9e25356e06430a7ba566c2 100644 --- a/source/mtllight/shadow.cpp +++ b/source/mtllight/shadow.cpp @@ -307,9 +307,9 @@ void PSSM::PreRender(int split) Core_RMatrixSet(G_RI_MATRIX_PROJECTION, &Projs[split]); Core_RMatrixSet(G_RI_MATRIX_VIEWPROJ, &ViewProj[split]); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &SMMatrixTranspose(ViewProj[split])); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &SMMatrixTranspose(ViewProj[split])); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect); mem_release_del(DepthSurfaces[split]); DepthMaps[split]->GetSurfaceLevel(0, &(DepthSurfaces[split])); @@ -418,16 +418,16 @@ void PSSM::GenShadow2(IDirect3DTexture9* shadowmap) MatrixTexture = ViewProj[i] * ScaleBiasMat; MatrixTexture = SMMatrixTranspose(MatrixTexture); if (Generating4Slits) - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM4, mattex, &MatrixTexture); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, mattex, &MatrixTexture); else if (i != 3) - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM3, mattex, &MatrixTexture); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, mattex, &MatrixTexture); } - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth); if (Generating4Slits) - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM4); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4); else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM3); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3); float4x4 camview; Core_RMatrixGet(G_RI_MATRIX_OBSERVER_VIEW, &camview); @@ -439,24 +439,24 @@ void PSSM::GenShadow2(IDirect3DTexture9* shadowmap) float3 observerpos; Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FOV))); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FOV))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); if (Generating4Slits) { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM4, "PosCam", &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM4, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthGlobal.x, BlurPixel / MLSet::SizeTexDepthGlobal.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM4, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM4, "DistSplit", &float4(NearFar[0].y, NearFar[1].y, NearFar[2].y, NearFar[3].y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthGlobal.x, BlurPixel / MLSet::SizeTexDepthGlobal.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "DistSplit", &float4(NearFar[0].y, NearFar[1].y, NearFar[2].y, NearFar[3].y)); } else { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM3, "PosCam", &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM3, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthGlobal.x, BlurPixel / MLSet::SizeTexDepthGlobal.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM3, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::PSSM3, "DistSplit", &float4(NearFar[0].y, NearFar[1].y, NearFar[2].y, NearFar[3].y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthGlobal.x, BlurPixel / MLSet::SizeTexDepthGlobal.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "DistSplit", &float4(NearFar[0].y, NearFar[1].y, NearFar[2].y, NearFar[3].y)); } SGCore_ScreenQuadDraw(); @@ -666,9 +666,9 @@ void ShadowMapTech::Begin() Frustum->Update(&(View),&(Proj)); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &SMMatrixTranspose(View * Proj)); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &SMMatrixTranspose(View * Proj)); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGeomPSSMDirect); mem_release_del(DepthSurface); DepthMap->GetSurfaceLevel(0, &(DepthSurface)); @@ -722,34 +722,34 @@ void ShadowMapTech::GenShadow2(IDirect3DTexture9* shadowmap) MatrixTexture = SMMatrixTranspose(MatrixTexture); if (MLSet::IsHalfGenPCFShadowLocal) - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect4, "MatrixTexture", &MatrixTexture); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect4, "MatrixTexture", &MatrixTexture); else - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect9, "MatrixTexture", &MatrixTexture); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect9, "MatrixTexture", &MatrixTexture); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth); if (MLSet::IsHalfGenPCFShadowLocal) - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect4); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect4); else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect9); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect9); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FOV))); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FOV))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); float3 observerpos; Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &observerpos); if (MLSet::IsHalfGenPCFShadowLocal) { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect4, "PosCam", &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect4, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthLocal.x, BlurPixel / MLSet::SizeTexDepthLocal.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect4, "SizeMapBias", &float3(MLSet::SizeTexDepthLocal.x, MLSet::SizeTexDepthLocal.y, Bias)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect4, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect4, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthLocal.x, BlurPixel / MLSet::SizeTexDepthLocal.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect4, "SizeMapBias", &float3(MLSet::SizeTexDepthLocal.x, MLSet::SizeTexDepthLocal.y, Bias)); } else { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect9, "PosCam", &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect9, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthLocal.x, BlurPixel / MLSet::SizeTexDepthLocal.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowDirect9, "SizeMapBias", &float3(MLSet::SizeTexDepthLocal.x, MLSet::SizeTexDepthLocal.y, Bias)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect9, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect9, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthLocal.x, BlurPixel / MLSet::SizeTexDepthLocal.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect9, "SizeMapBias", &float3(MLSet::SizeTexDepthLocal.x, MLSet::SizeTexDepthLocal.y, Bias)); } float4x4 camview; @@ -759,7 +759,7 @@ void ShadowMapTech::GenShadow2(IDirect3DTexture9* shadowmap) float4x4 ViewInv = SMMatrixInverse(&determ, camview); ViewInv = SMMatrixTranspose(ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); SGCore_ScreenQuadDraw(); @@ -993,11 +993,11 @@ void ShadowMapCubeTech::Pre(int cube) MLSet::DXDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(255,255,255,255), 1.0f, 0); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube); - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::SMDepthGeomCube); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::SMDepthGeomCube); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube, "LightPos", &Position); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::SMDepthGeomCube, "WorldViewProjection", &vp); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube, "LightPos", &Position); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomCube, "WorldViewProjection", &vp); } void ShadowMapCubeTech::Post(int cube) @@ -1049,14 +1049,14 @@ void ShadowMapCubeTech::GenShadow2(IDirect3DTexture9* shadowmap) MLSet::DXDevice->SetTexture(1, DepthMap); MLSet::DXDevice->SetTexture(2, SGCore_LoadTexGetTex(MLSet::IDsTexs::Tex_NoiseTex)); - SGCore_ShaderBind(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth); if (MLSet::IsHalfGenPCFShadowLocal) - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube1); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube1); else - SGCore_ShaderBind(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube6); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FOV))); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH), Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FOV))); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(Core_RFloatGet(G_RI_FLOAT_OBSERVER_NEAR), Core_RFloatGet(G_RI_FLOAT_OBSERVER_FAR))); float pixel_size = BlurPixel / MLSet::SizeTexDepthLocal.x; float3 observerpos; @@ -1064,19 +1064,19 @@ void ShadowMapCubeTech::GenShadow2(IDirect3DTexture9* shadowmap) if (MLSet::IsHalfGenPCFShadowLocal) { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube1, "PosCam", &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube1, "LightPos", &Position); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube1, "SizeMapBias", &float2(MLSet::SizeTexDepthLocal.x, Bias)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube1, "PixelSize", &pixel_size); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube1, "LightPos", &Position); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube1, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube1, "LightPos", &Position); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube1, "SizeMapBias", &float2(MLSet::SizeTexDepthLocal.x, Bias)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube1, "PixelSize", &pixel_size); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube1, "LightPos", &Position); } else { - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube6, "PosCam", &observerpos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube6, "LightPos", &Position); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube6, "SizeMapBias", &float2(MLSet::SizeTexDepthLocal.x, Bias)); - //SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube6, "PixelSize", &pixel_size); - SGCore_ShaderSetVRF(ShaderType::st_pixel, MLSet::IDsShaders::PS::GenShadowCube6, "LightPos", &Position); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6, "PosCam", &observerpos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6, "LightPos", &Position); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6, "SizeMapBias", &float2(MLSet::SizeTexDepthLocal.x, Bias)); + //SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6, "PixelSize", &pixel_size); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6, "LightPos", &Position); } float4x4 camview; @@ -1086,7 +1086,7 @@ void ShadowMapCubeTech::GenShadow2(IDirect3DTexture9* shadowmap) float4x4 ViewInv = SMMatrixInverse(&determ, camview); ViewInv = SMMatrixTranspose(ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); SGCore_ScreenQuadDraw(); diff --git a/source/mtllight/sxmtllight.cpp b/source/mtllight/sxmtllight.cpp index eb28654ecb7009d9ad95cad51cb02eaa12b09690..d685e499bd5ae48dec3ab372535e7de115401e3d 100644 --- a/source/mtllight/sxmtllight.cpp +++ b/source/mtllight/sxmtllight.cpp @@ -275,9 +275,9 @@ void SML_LigthsSetDir(ID id, const float3* vec) } */ -LightsTypeLight SML_LigthsGetType(ID id) +LTYPE_LIGHT SML_LigthsGetType(ID id) { - ML_PRECOND(LightsTypeLight::ltl_none); + ML_PRECOND(LTYPE_LIGHT_NONE); return ArrLights->GetLightType(id); } @@ -532,15 +532,15 @@ void SML_LigthsSetIDArr(ID id, ID inid, int how, ID id_arr) ArrLights->SetLightIDArr(id, inid, how, id_arr); } -void SML_LigthsSetTypeShadowed(ID id, LightsTypeShadow type) +void SML_LigthsSetTypeShadowed(ID id, LTYPE_SHADOW type) { ML_PRECOND(); ArrLights->SetLightTypeShadowed(id, type); } -LightsTypeShadow SML_LigthsGetTypeShadowed(ID id) +LTYPE_SHADOW SML_LigthsGetTypeShadowed(ID id) { - ML_PRECOND(LightsTypeShadow::lts_none); + ML_PRECOND(LTYPE_SHADOW_NONE); return ArrLights->GetLightTypeShadowed(id); } @@ -574,9 +574,9 @@ int SML_LigthsDelGetCount() return ArrLights->DelGetCount(); } -LightsTypeLight SML_LigthsDelGetType(ID key) +LTYPE_LIGHT SML_LigthsDelGetType(ID key) { - ML_PRECOND(LightsTypeLight::ltl_none); + ML_PRECOND(LTYPE_LIGHT_NONE); return ArrLights->DelGetType(key); } diff --git a/source/mtllight/sxmtllight.h b/source/mtllight/sxmtllight.h index 92956b46545096f00d69d94355d6b08efb83ee4f..38bcf97a3f4076433322284d3a225ceb4a4f398d 100644 --- a/source/mtllight/sxmtllight.h +++ b/source/mtllight/sxmtllight.h @@ -13,17 +13,23 @@ See the license in LICENSE @{ */ -#ifndef __sxmtlight -#define __sxmtlight - -#include <gdefines.h> +#ifndef __SXMTLLIGHT_H +#define __SXMTLLIGHT_H #if defined(_DEBUG) #pragma comment(lib, "sxgcore_d.lib") #else #pragma comment(lib, "sxgcore.lib") #endif -#include <gcore\\sxgcore.h> + +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <gcore/sxgcore.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + +#include <gdefines.h> /*! \name Базовые функции библиотеки @{*/ @@ -99,20 +105,20 @@ Cчитается: LIGHTS_UPDATE_PSSM_SPLIT*number_split #define LIGHTS_DIR_BASE float3(0, -1, 0) /*!< базовое направление направленноого источника света */ //! типы источников света -enum LightsTypeLight +enum LTYPE_LIGHT { - ltl_none = -1, //!< не установленный - ltl_global, //!< глобальный - ltl_point, //!< точечный - ltl_direction //!< направленный + LTYPE_LIGHT_NONE = -1, //!< не установленный + LTYPE_LIGHT_GLOBAL, //!< глобальный + LTYPE_LIGHT_POINT, //!< точечный + LTYPE_LIGHT_DIR //!< направленный }; //! типы теней источников света -enum LightsTypeShadow +enum LTYPE_SHADOW { - lts_none = -1, //!< без теней - lts_static, //!< статичные тени, тень обновляется первые несколько кадров (для корректности), далее не обновляется - lts_dynamic, //!< полностью динамические тени + LTYPE_SHADOW_NONE = -1, //!< без теней + LTYPE_SHADOW_STATIC, //!< статичные тени, тень обновляется первые несколько кадров (для корректности), далее не обновляется + LTYPE_SHADOW_DYNAMIC, //!< полностью динамические тени }; /*! \name Настройки размеров для теней @@ -152,7 +158,7 @@ SX_LIB_API ID SML_LigthsCreateDirection( bool is_shadow //!< отбрасвыает ли тени свет ); -SX_LIB_API LightsTypeLight SML_LigthsGetType(ID id); //!< возвращает тип света +SX_LIB_API LTYPE_LIGHT SML_LigthsGetType(ID id); //!< возвращает тип света SX_LIB_API ID SML_LigthsCreateCopy(ID id); //!< создать копию объекта и вернуть на нее id SX_LIB_API void SML_LigthsDeleteLight(ID id); //!< удаление света @@ -284,10 +290,10 @@ SX_LIB_API void SML_LigthsShadowSetShaderOfTypeMat(ID id, int typemat, float4x4* //! установка динамики обработки теней SX_LIB_API void SML_LigthsSetTypeShadowed( ID id, //!< идентификатор света - LightsTypeShadow type //!< значение из перечисления #LightsTypeShadow + LTYPE_SHADOW type //!< значение из перечисления #LightsTypeShadow ); -SX_LIB_API LightsTypeShadow SML_LigthsGetTypeShadowed(ID id); //!< возвращает тип динамики теней (одно из значений #LightsTypeShadow) +SX_LIB_API LTYPE_SHADOW SML_LigthsGetTypeShadowed(ID id); //!< возвращает тип динамики теней (одно из значений #LightsTypeShadow) //! производит обработку данных затем возвращает разрешено ли обновлять тени, увеличивает внутрений счетчик, поэтому необходимо вызывать только когда надо SX_LIB_API bool SML_LigthsCountUpdateUpdate( @@ -434,7 +440,7 @@ SX_LIB_API void SML_LigthsToneMappingCom( @{*/ SX_LIB_API int SML_LigthsDelGetCount(); //!< возвращает количество удаленных объектов света которые требуют удаления -SX_LIB_API LightsTypeLight SML_LigthsDelGetType(ID key); //!< возвращает тип удаленного объекта света, значения из #LightsTypeLight +SX_LIB_API LTYPE_LIGHT SML_LigthsDelGetType(ID key); //!< возвращает тип удаленного объекта света, значения из #LightsTypeLight SX_LIB_API void SML_LigthsDelDel(ID key); //!< удаляет (окончательно) удаленный объект света //! возвращает идентификатор, если был передан, иначе <0 diff --git a/source/mtllight/sxmtllight_dll.cpp b/source/mtllight/sxmtllight_dll.cpp index 4030f098dc11f4148f9560ae3dab3262d8a90e3f..6bd158387722b85c5b9afe649b389ced8f304f3f 100644 --- a/source/mtllight/sxmtllight_dll.cpp +++ b/source/mtllight/sxmtllight_dll.cpp @@ -4,7 +4,6 @@ Copyright See the license in LICENSE ******************************************************/ -#pragma once #include <windows.h> BOOL APIENTRY DllMain(HMODULE hModule, diff --git a/source/particles/PESet.cpp b/source/particles/PESet.cpp index dfc2d6de657b91bc068745f26e1532feec563cec..a0470a2f85c52feb2f547793d67631bfa6a8d9c6 100644 --- a/source/particles/PESet.cpp +++ b/source/particles/PESet.cpp @@ -36,9 +36,9 @@ namespace PESet }; }; -void PESet::Init(IDirect3DDevice9* device) +void PESet::Init() { - PESet::DXDevice = device; + PESet::DXDevice = SGCore_GetDXDevice(); D3DVERTEXELEMENT9 InstanceParticles[] = { @@ -57,30 +57,30 @@ void PESet::Init(IDirect3DDevice9* device) PESet::DXDevice->CreateVertexDeclaration(InstanceParticles, &PESet::VertexDeclarationParticles); - PESet::IDsShaders::VS::ParticlesTrack = SGCore_ShaderLoad(ShaderType::st_vertex, "particles_track.vs", "particles_track", ShaderCheckDouble::scd_path); - PESet::IDsShaders::PS::ParticlesTrack = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_track.ps", "particles_track", ShaderCheckDouble::scd_path); + PESet::IDsShaders::VS::ParticlesTrack = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "particles_track.vs", "particles_track", ShaderCheckDouble::scd_path); + PESet::IDsShaders::PS::ParticlesTrack = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_track.ps", "particles_track", ShaderCheckDouble::scd_path); - PESet::IDsShaders::VS::Particles = SGCore_ShaderLoad(ShaderType::st_vertex, "particles_main.vs", "particles", ShaderCheckDouble::scd_path); - PESet::IDsShaders::PS::Particles = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles", ShaderCheckDouble::scd_name); + PESet::IDsShaders::VS::Particles = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "particles_main.vs", "particles", ShaderCheckDouble::scd_path); + PESet::IDsShaders::PS::Particles = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles", ShaderCheckDouble::scd_name); D3DXMACRO Defines_PART_SOFT[] = { { "PART_SOFT", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesSoft = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_soft", ShaderCheckDouble::scd_name, Defines_PART_SOFT); + PESet::IDsShaders::PS::ParticlesSoft = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_soft", ShaderCheckDouble::scd_name, Defines_PART_SOFT); D3DXMACRO Defines_PART_REFRACTION[] = { { "PART_REFRACTION", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesRefraction = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_refraction", ShaderCheckDouble::scd_name, Defines_PART_REFRACTION); + PESet::IDsShaders::PS::ParticlesRefraction = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_refraction", ShaderCheckDouble::scd_name, Defines_PART_REFRACTION); D3DXMACRO Defines_PART_LIGHT[] = { { "PART_LIGHT", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesLight = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_light", ShaderCheckDouble::scd_name, Defines_PART_LIGHT); + PESet::IDsShaders::PS::ParticlesLight = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_light", ShaderCheckDouble::scd_name, Defines_PART_LIGHT); D3DXMACRO Defines_PART_SOFT_REFRACTION[] = { { "PART_SOFT", "" }, { "PART_REFRACTION", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesSoftRefraction = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_soft_refraction", ShaderCheckDouble::scd_name, Defines_PART_SOFT_REFRACTION); + PESet::IDsShaders::PS::ParticlesSoftRefraction = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_soft_refraction", ShaderCheckDouble::scd_name, Defines_PART_SOFT_REFRACTION); D3DXMACRO Defines_PART_SOFT_LIGHT[] = { { "PART_SOFT", "" }, { "PART_LIGHT", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesSoftLight = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_soft_light", ShaderCheckDouble::scd_name, Defines_PART_SOFT_LIGHT); + PESet::IDsShaders::PS::ParticlesSoftLight = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_soft_light", ShaderCheckDouble::scd_name, Defines_PART_SOFT_LIGHT); D3DXMACRO Defines_PART_REFRACTION_LIGHT[] = { { "PART_REFRACTION", "" }, { "PART_LIGHT", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesRefractionLight = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_refraction_light", ShaderCheckDouble::scd_name, Defines_PART_REFRACTION_LIGHT); + PESet::IDsShaders::PS::ParticlesRefractionLight = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_refraction_light", ShaderCheckDouble::scd_name, Defines_PART_REFRACTION_LIGHT); D3DXMACRO Defines_PART_SOFT_REFRACTION_LIGHT[] = { { "PART_SOFT", "" }, { "PART_REFRACTION", "" }, { "PART_LIGHT", "" }, { 0, 0 } }; - PESet::IDsShaders::PS::ParticlesSoftRefractionLight = SGCore_ShaderLoad(ShaderType::st_pixel, "particles_main.ps", "particles_soft_refraction_light", ShaderCheckDouble::scd_name, Defines_PART_SOFT_REFRACTION_LIGHT); + PESet::IDsShaders::PS::ParticlesSoftRefractionLight = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "particles_main.ps", "particles_soft_refraction_light", ShaderCheckDouble::scd_name, Defines_PART_SOFT_REFRACTION_LIGHT); } diff --git a/source/particles/PESet.h b/source/particles/PESet.h index b89c0fec5c78cbf197f6b68dabf8215000b8b357..3de967ea4cba6a2a0170a11380bf965902146303 100644 --- a/source/particles/PESet.h +++ b/source/particles/PESet.h @@ -11,7 +11,7 @@ namespace PESet extern IDirect3DDevice9* DXDevice; extern IDirect3DVertexDeclaration9* VertexDeclarationParticles; - void Init(IDirect3DDevice9* device); + void Init(); namespace IDsRenderTargets { diff --git a/source/particles/emitter.cpp b/source/particles/emitter.cpp index 21b708742d563206df1dd39a5f866e06adc4ff05..a118cbb5ca9ea31c8621f2c25d8fa7524f59472e 100644 --- a/source/particles/emitter.cpp +++ b/source/particles/emitter.cpp @@ -215,7 +215,7 @@ void Emitter::ComputeLighting() float intens = 1; - if (SML_LigthsGetType(tmpid) != LightsTypeLight::ltl_global) + if (SML_LigthsGetType(tmpid) != LTYPE_LIGHT_GLOBAL) { SML_LigthsGetPos(tmpid, &tmpPosition, true); @@ -1286,73 +1286,73 @@ void Emitter::Render(DWORD timeDelta, float4x4* matrot, float4x4* matpos) g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxparticles - not init depth map\n"); } - SGCore_ShaderBind(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles); static ID psid = -1; if (Data.Soft && !Data.Refraction && !Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesSoft; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoft); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoft, "SoftCoef", &Data.SoftCoef); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoft, "NearFar", &NearFar); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoft); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoft, "SoftCoef", &Data.SoftCoef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoft, "NearFar", &NearFar); } else if (Data.Soft && Data.Refraction && !Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesSoftRefraction; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefraction); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefraction, "SoftCoef", &Data.SoftCoef); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefraction, "NearFar", &NearFar); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefraction, "RefractCoef", &Data.RefractionCoef); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefraction); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefraction, "SoftCoef", &Data.SoftCoef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefraction, "NearFar", &NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefraction, "RefractCoef", &Data.RefractionCoef); } else if (Data.Soft && Data.Refraction && Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesSoftRefractionLight; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefractionLight); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefractionLight, "SoftCoef", &Data.SoftCoef); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefractionLight, "NearFar", &NearFar); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftRefractionLight, "RefractCoef", &Data.RefractionCoef); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefractionLight); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefractionLight, "SoftCoef", &Data.SoftCoef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefractionLight, "NearFar", &NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftRefractionLight, "RefractCoef", &Data.RefractionCoef); } else if (Data.Soft && !Data.Refraction && Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesSoftLight; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftLight); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftLight, "SoftCoef", &Data.SoftCoef); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftLight, "NearFar", &NearFar); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesSoftLight, "RefractCoef", &Data.RefractionCoef); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftLight); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftLight, "SoftCoef", &Data.SoftCoef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftLight, "NearFar", &NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesSoftLight, "RefractCoef", &Data.RefractionCoef); } else if (!Data.Soft && Data.Refraction && Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesRefractionLight; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesRefractionLight); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesRefractionLight, "RefractCoef", &Data.RefractionCoef); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesRefractionLight); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesRefractionLight, "RefractCoef", &Data.RefractionCoef); } else if (!Data.Soft && !Data.Refraction && Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesLight; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesLight); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesLight); } else if (!Data.Soft && Data.Refraction && !Data.Lighting) { psid = PESet::IDsShaders::PS::ParticlesRefraction; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesRefraction); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesRefraction, "RefractCoef", &Data.RefractionCoef); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesRefraction); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesRefraction, "RefractCoef", &Data.RefractionCoef); } else { psid = PESet::IDsShaders::PS::Particles; - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::Particles); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::Particles); } - //SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "ViewProjection", &SMMatrixTranspose(vp)); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "WorldViewProjection", &SMMatrixTranspose(worldmat * vp)); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "CamRot", &SMMatrixTranspose(cammat)); - //SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "World", &SMMatrixTranspose(world)); - //SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "MatRot", &SMMatrixTranspose(tmpmatrot)); - //SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "MatPos", &SMMatrixTranspose(tmpmatpos)); - //SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::Particles, "PosCam", &ConstCamPos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, psid, "ColorCoef", &Data.ColorCoef); - SGCore_ShaderSetVRF(ShaderType::st_pixel, psid, "Color", &Data.Color); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "ViewProjection", &SMMatrixTranspose(vp)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "WorldViewProjection", &SMMatrixTranspose(worldmat * vp)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "CamRot", &SMMatrixTranspose(cammat)); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "World", &SMMatrixTranspose(world)); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "MatRot", &SMMatrixTranspose(tmpmatrot)); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "MatPos", &SMMatrixTranspose(tmpmatpos)); + //SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles, "PosCam", &ConstCamPos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, psid, "ColorCoef", &Data.ColorCoef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, psid, "Color", &Data.Color); PESet::DXDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); @@ -1434,8 +1434,8 @@ void Emitter::Render(DWORD timeDelta, float4x4* matrot, float4x4* matpos) PESet::DXDevice->SetStreamSource(0, VertexBuffQuad, 0, sizeof(CommonParticleDecl)); PESet::DXDevice->SetIndices(IndexBuffQuad); - SGCore_ShaderBind(ShaderType::st_vertex, PESet::IDsShaders::VS::ParticlesTrack); - SGCore_ShaderBind(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesTrack); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::ParticlesTrack); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesTrack); PESet::DXDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); @@ -1453,9 +1453,9 @@ void Emitter::Render(DWORD timeDelta, float4x4* matrot, float4x4* matpos) float4x4 vp = MCamView * MCamProj; PESet::DXDevice->SetTexture(0, SGCore_LoadTexGetTex(IDTexTrack)); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PESet::IDsShaders::VS::ParticlesTrack, "WorldViewProjection", &SMMatrixTranspose(vp)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesTrack, "Color", &Data.Color); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PESet::IDsShaders::PS::ParticlesTrack, "ColorCoef", &Data.ColorCoef); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::ParticlesTrack, "WorldViewProjection", &SMMatrixTranspose(vp)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesTrack, "Color", &Data.Color); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PESet::IDsShaders::PS::ParticlesTrack, "ColorCoef", &Data.ColorCoef); PESet::DXDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2); diff --git a/source/particles/sxparticles.cpp b/source/particles/sxparticles.cpp index 937f80a35918cdab14a6aa66e44960836e8b6c16..b40ce48b8cc3dc1952cefc073dd993eba0109af3 100644 --- a/source/particles/sxparticles.cpp +++ b/source/particles/sxparticles.cpp @@ -50,13 +50,13 @@ void SPE_0Create(const char* name, bool is_unic) } else { - PESet::Init(SGCore_GetDXDevice()); + PESet::Init(); ArrEffects = new Effects(); } } else { - PESet::Init(SGCore_GetDXDevice()); + PESet::Init(); ArrEffects = new Effects(); } } diff --git a/source/particles/sxparticles.h b/source/particles/sxparticles.h index f600b40b5262302453cfb359ba5ecec381a5e1ff..37ff253693d67a64efad9bcc1cf8f2b5c95edc50 100644 --- a/source/particles/sxparticles.h +++ b/source/particles/sxparticles.h @@ -19,8 +19,8 @@ See the license in LICENSE \note Часицы эмиттера могут быть мягкими (soft), для этого надо после инициализации библиотеки необходимо передать идентификатор render target глубины сцены #SPE_RTDepthSet @{*/ -#ifndef __sxparticles -#define __sxparticles +#ifndef __SXPARTICLES_H +#define __SXPARTICLES_H #include <gdefines.h> @@ -29,20 +29,32 @@ See the license in LICENSE #else #pragma comment(lib, "sxgcore.lib") #endif -#include <gcore\\sxgcore.h> + +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <gcore/sxgcore.h> #if defined(_DEBUG) #pragma comment(lib, "sxmtllight_d.lib") #else #pragma comment(lib, "sxmtllight.lib") #endif -#include <mtllight\\sxmtllight.h> + +#include <mtllight/sxmtllight.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + +//########################################################################## /*! \name Базовые функции библиотеки @{*/ -SX_LIB_API long SPE_0GetVersion(); //!< версия подсистемы -SX_LIB_API void SPE_Dbg_Set(report_func rf);//!< установить функцию обработки сообщений +//! версия подсистемы +SX_LIB_API long SPE_0GetVersion(); + +//! установить функцию обработки сообщений +SX_LIB_API void SPE_Dbg_Set(report_func rf); //! инициализция подсистемы SX_LIB_API void SPE_0Create( @@ -50,25 +62,32 @@ SX_LIB_API void SPE_0Create( bool is_unic = true //!< должна ли подсистема быть уникальной по имени ); -SX_LIB_API void SPE_RTDepthSet(ID id); //!< установка илентификатора render target глубины сцены (для маягких/soft частиц) +//! установка илентификатора render target глубины сцены (для маягких/soft частиц) +SX_LIB_API void SPE_RTDepthSet(ID id); -SX_LIB_API void SPE_AKill(); //!< уничтожить подсистему +//! уничтожить подсистему +SX_LIB_API void SPE_AKill(); //!@} +//************************************************************************** + //! тип функции для определения пересечения, на вход идет предыдущая и будущая позиции цачицы, возвращает true в случае пересечения, иначе false typedef bool(*g_particles_phy_collision) (const float3 * lastpos, const float3* nextpos, float3* coll_pos, float3* coll_nrm); /*! переназначение g_aiquad_phy_navigate, обязательное действие для работы с сеткой */ SX_LIB_API void SPE_SetFunc_ParticlesPhyCollision(g_particles_phy_collision func); -//############################################################################# +//************************************************************************** /*! \name Обработка потери/восстановления устройства @{*/ -SX_LIB_API void SPE_OnLostDevice(); //!< вызывать при потрете устройства -SX_LIB_API void SPE_OnResetDevice();//!< вызывать при восстановлении устройства +//! вызывать при потрете устройства +SX_LIB_API void SPE_OnLostDevice(); + +//! вызывать при восстановлении устройства +SX_LIB_API void SPE_OnResetDevice(); //!@} @@ -175,13 +194,12 @@ struct ParticlesData SX_ALIGNED_OP_MEM - //////////////////////////////////////////// + //************************************************************************** /*! \name Ограничивающий объем \note Box: Vector1 x y z – минимум, Vector2 x y z – максимум \n Sphere: Vector1 x y z – центр сферы, w – радиус \n Cone: Vector1 x y z – нижняя точка конуса, w – радиус нижней точки, Vector2 y координата Y верхней точки конуса, w – радиус верхней точки \n - @{*/ ParticlesBoundType BoundType; //!< тип ограничивающего объема, для уничтожения партикла при выходе за пределы @@ -190,7 +208,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Параметры создания частиц \note Возможна привязка рандомного создания частиц к осям, для ограничивающих объемов (SpawnBoundBindCreate) @@ -213,7 +231,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Анимированная текстура @{*/ @@ -228,7 +246,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Время жизни частицы, временные зависимости, размеры @{*/ @@ -245,7 +263,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Скорость @{*/ @@ -259,7 +277,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Ускорение @{*/ @@ -274,7 +292,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Характер: круговое движение @{*/ @@ -287,7 +305,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Характер вращение @{*/ @@ -299,7 +317,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** /*! \name Характер: отклонения при движении @{*/ @@ -320,7 +338,7 @@ struct ParticlesData //!@} - //////////////////////////////////////////// + //************************************************************************** ParticlesFigureType FigureType; //!< тип фигуры партикла int FigureCountQuads; //!< количество квадаратов в случае ParticlesFigureType::pft_quad_composite @@ -329,14 +347,14 @@ struct ParticlesData bool FigureTapY; //!< поворачивать ли по оси Y bool FigureTapZ; //!< поворачивать ли по оси Z - //////////////////////////////////////////// + //************************************************************************** //! отрисовка следа от столкновения, только для эмиттеров у которых CollisionDelete == true, рисуется квад и альфа канал уменьшатсья с течением времени bool Track; float TrackSize; //!< размер следа, в метрах DWORD TrackTime; //!< время исчезновения в млсек - //////////////////////////////////////////// + //************************************************************************** ParticlesAlphaBlendType AlphaBlendType; //!< тип смешивания float ColorCoef; //!< коэфициент на который будет домножен цвет @@ -365,34 +383,79 @@ struct ParticlesData передав этот ключ #SPE_EffectIdOfKey, которая в случае успеха вернет идентификатор эффекта. @{*/ -SX_LIB_API void SPE_EffectLoad(const char* path); //!< загрузка информации об эффектах и эмиттерах из файла -SX_LIB_API void SPE_EffectSave(const char* path); //!< сохранение информации об эффектах и эмиттерах в файл -SX_LIB_API void SPE_EffectsClear(); //!< очистка всего списка эффектов и эмиттеров +//! загрузка информации об эффектах и эмиттерах из файла +SX_LIB_API void SPE_EffectLoad(const char* path); + +//! сохранение информации об эффектах и эмиттерах в файл +SX_LIB_API void SPE_EffectSave(const char* path); + +//! очистка всего списка эффектов и эмиттеров +SX_LIB_API void SPE_EffectsClear(); + -SX_LIB_API ID SPE_EffectInstanceByName(const char* name); //!< получить копию эффекта по имени -SX_LIB_API ID SPE_EffectInstanceByID(ID id); //!< получить копию эффекта по его идентификатору -SX_LIB_API ID SPE_EffectGetByName(const char* name); //!< получить эффект по имени (первый найденый) +//! получить копию эффекта по имени +SX_LIB_API ID SPE_EffectInstanceByName(const char* name); -SX_LIB_API ID SPE_EffectAdd(const char* name); //!< добавить эффект и установить ему имя -SX_LIB_API int SPE_EffectCountGet(); //!< возвращает количество эффектов -SX_LIB_API ID SPE_EffectIdOfKey(ID key); //!< возвращает идентификатор эффекта по порядковому номеру key -SX_LIB_API void SPE_EffectDelete(ID id); //!< удаляет эффект -SX_LIB_API void SPE_EffectNameSet(ID id, const char* name); //!< установка имени -SX_LIB_API void SPE_EffectNameGet(ID id, char* name); //!< в name записывает имя эффекта +//! получить копию эффекта по его идентификатору +SX_LIB_API ID SPE_EffectInstanceByID(ID id); + +//!< получить эффект по имени (первый найденый) +SX_LIB_API ID SPE_EffectGetByName(const char* name); + + +//! добавить эффект и установить ему имя +SX_LIB_API ID SPE_EffectAdd(const char* name); + +//! возвращает количество эффектов +SX_LIB_API int SPE_EffectCountGet(); + +//!< возвращает идентификатор эффекта по порядковому номеру key +SX_LIB_API ID SPE_EffectIdOfKey(ID key); + + +//! удаляет эффект +SX_LIB_API void SPE_EffectDelete(ID id); + +//! установка имени +SX_LIB_API void SPE_EffectNameSet(ID id, const char* name); + +//! в name записывает имя эффекта +SX_LIB_API void SPE_EffectNameGet(ID id, char* name); + + +//! просчет и обновление всех партиклов в эффекте +SX_LIB_API void SPE_EffectCompute(ID id); + +//! просчет света для все частиц эффекта +SX_LIB_API void SPE_EffectComputeLighting(ID id); -SX_LIB_API void SPE_EffectCompute(ID id); //!< просчет и обновление всех партиклов в эффекте -SX_LIB_API void SPE_EffectComputeLighting(ID id); //!< просчет света для все частиц эффекта -SX_LIB_API void SPE_EffectRender(ID id, DWORD timeDelta); //!< рендер эффекта, timeDelta - время рендера кадра +//! рендер эффекта, timeDelta - время рендера кадра +SX_LIB_API void SPE_EffectRender(ID id, DWORD timeDelta); -SX_LIB_API void SPE_EffectComputeAll(); //!< просчет и обновление всех партиклов во всех эффектах -SX_LIB_API void SPE_EffectComputeLightingAll(); //!< просчет света для все частиц во всех эффектах -SX_LIB_API void SPE_EffectRenderAll(DWORD timeDelta); //!< отрисовка всех эффектов -SX_LIB_API bool SPE_EffectAlifeGet(ID id); //<! жив ли эффект, или все частицы в нем уже умерли? -SX_LIB_API void SPE_EffectAlifeSet(ID id, bool alife); //<! установка состояния жизни (время затухания #SXPARTICLES_DEADTH_TIME) +//! просчет и обновление всех партиклов во всех эффектах +SX_LIB_API void SPE_EffectComputeAll(); + +//! просчет света для все частиц во всех эффектах +SX_LIB_API void SPE_EffectComputeLightingAll(); + +//!< отрисовка всех эффектов +SX_LIB_API void SPE_EffectRenderAll(DWORD timeDelta); + + +//! жив ли эффект, или все частицы в нем уже умерли? +SX_LIB_API bool SPE_EffectAlifeGet(ID id); + +//<! установка состояния жизни (время затухания #SXPARTICLES_DEADTH_TIME) +SX_LIB_API void SPE_EffectAlifeSet(ID id, bool alife); + + +//! включен ли эффект +SX_LIB_API bool SPE_EffectEnableGet(ID id); + +//! устанавливает состяние включен/выключен для эффекта +SX_LIB_API void SPE_EffectEnableSet(ID id, bool enable); -SX_LIB_API bool SPE_EffectEnableGet(ID id); //<! включен ли эффект -SX_LIB_API void SPE_EffectEnableSet(ID id, bool enable);//<! устанавливает состяние включен/выключен для эффекта //! воспроизвести эффект используя при этом копию эффекта с идентификатором id SX_LIB_API void SPE_EffectPlayByID( @@ -408,14 +471,29 @@ SX_LIB_API void SPE_EffectPlayByName( float3* dir //!< направление взгляда эффекта ); -SX_LIB_API void SPE_EffectPosSet(ID id, float3* pos); //<! установка позиции эффекту -SX_LIB_API void SPE_EffectDirSet(ID id, float3* dir); //<! установка направления взгляда эффекта -SX_LIB_API void SPE_EffectRotSet(ID id, float3* rot); //<! установка поворотов эффекта (в радианах) -SX_LIB_API void SPE_EffectRotSetQ(ID id, const SMQuaternion & rot); //<! установка поворотов эффекта -SX_LIB_API void SPE_EffectPosGet(ID id, float3* pos); //<! в pos записывает позицию эффекта -SX_LIB_API void SPE_EffectDirGet(ID id, float3* dir); //<! в dir записывает направление взгляда эффекта -SX_LIB_API void SPE_EffectRotGet(ID id, float3* rot); //<! в rot записывает повороты эффекта (в радианах) +//! установка позиции эффекту +SX_LIB_API void SPE_EffectPosSet(ID id, float3* pos); + +//! установка направления взгляда эффекта +SX_LIB_API void SPE_EffectDirSet(ID id, float3* dir); + +//! установка поворотов эффекта (в радианах) +SX_LIB_API void SPE_EffectRotSet(ID id, float3* rot); + +//! установка поворотов эффекта +SX_LIB_API void SPE_EffectRotSetQ(ID id, const SMQuaternion & rot); + + +//! в pos записывает позицию эффекта +SX_LIB_API void SPE_EffectPosGet(ID id, float3* pos); + +//! в dir записывает направление взгляда эффекта +SX_LIB_API void SPE_EffectDirGet(ID id, float3* dir); + +//! в rot записывает повороты эффекта (в радианах) +SX_LIB_API void SPE_EffectRotGet(ID id, float3* rot); + //! просчет видимости эффекта для фрустума frustum, и расчет расстояния от позиции наблюдателя view до эффекта, возвращает виден ли фруустуму эффект SX_LIB_API bool SPE_EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view); @@ -423,8 +501,12 @@ SX_LIB_API bool SPE_EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view); //! просчет видимости всех эффектов для фрустума frustum, и расчет расстояний от позиции наблюдателя view до всех эффектов SX_LIB_API void SPE_EffectVisibleComAll(ISXFrustum* frustum, float3* view); -SX_LIB_API bool SPE_EffectVisibleGet(ID id); //!< виден ли эффект? по результатам просчетов #SPE_EffectVisibleComAll -SX_LIB_API float SPE_EffectDistToViewGet(ID id); //!< возвращает расстояние от наблюдателя до эффекта, по результатам просчетов #SPE_EffectVisibleComAll + +//! виден ли эффект? по результатам просчетов #SPE_EffectVisibleComAll +SX_LIB_API bool SPE_EffectVisibleGet(ID id); + +//! возвращает расстояние от наблюдателя до эффекта, по результатам просчетов #SPE_EffectVisibleComAll +SX_LIB_API float SPE_EffectDistToViewGet(ID id); //!@} sxparticles_eff @@ -455,10 +537,20 @@ SX_LIB_API float SPE_EffectDistToViewGet(ID id); //!< возвращает ра //!@} -SX_LIB_API ID SPE_EmitterAdd(ID id, ParticlesData* data); //!< добавляет систему партиклов к эффекту -SX_LIB_API int SPE_EmitterSCountGet(ID id); //!< возвращает количество систем партиклов у эффекта -SX_LIB_API void SPE_EmitterDelete(ID id, ID id_part); //!< удаляет из эффекта id систему частиц id_part -SX_LIB_API ParticlesData* SPE_EmitterGetData(ID id, ID id_part);//!< возвращает структуру данных системы частиц id_part из эффекта id +//************************************************************************** + +//! добавляет систему партиклов к эффекту +SX_LIB_API ID SPE_EmitterAdd(ID id, ParticlesData* data); + +//! возвращает количество систем партиклов у эффекта +SX_LIB_API int SPE_EmitterSCountGet(ID id); + +//! удаляет из эффекта id систему частиц id_part +SX_LIB_API void SPE_EmitterDelete(ID id, ID id_part); + +//! возвращает структуру данных системы частиц id_part из эффекта id +SX_LIB_API ParticlesData* SPE_EmitterGetData(ID id, ID id_part); + //! переустановка структуры данных data для системы частиц id_part у эффекта id, в data можно отправить 0 в случае если необходимо обновить состояния оффлайн данных SX_LIB_API void SPE_EmitterReInit(ID id, ID id_part, ParticlesData* data); @@ -484,13 +576,17 @@ SX_LIB_API void SPE_EmitterTextureSetID(ID id, ID id_part, ID tex); SX_LIB_API ID SPE_EmitterTextureGetID(ID id, ID id_part); SX_LIB_API void SPE_EmitterTextureGet(ID id, ID id_part, char* tex); + SX_LIB_API void SPE_EmitterTextureTrackSet(ID id, ID id_part, const char* tex); SX_LIB_API void SPE_EmitterTextureTrackSetID(ID id, ID id_part, ID tex); SX_LIB_API ID SPE_EmitterTextureTrackGetID(ID id, ID id_part); SX_LIB_API void SPE_EmitterTextureTrackGet(ID id, ID id_part, char* tex); -SX_LIB_API void SPE_EmitterNameSet(ID id, ID id_part, const char* name); //!< установка имени системе частиц -SX_LIB_API void SPE_EmitterNameGet(ID id, ID id_part, char* name); //!< в name записывает имя системы частиц +//! установка имени системе частиц +SX_LIB_API void SPE_EmitterNameSet(ID id, ID id_part, const char* name); + +//! в name записывает имя системы частиц +SX_LIB_API void SPE_EmitterNameGet(ID id, ID id_part, char* name); SX_LIB_API int SPE_EmitterTrackCountGet(ID id, ID id_part); SX_LIB_API int SPE_EmitterTrackPosGet(ID id, ID id_part, float3** arr, int count); diff --git a/source/physics/sxphysics.h b/source/physics/sxphysics.h index 2537591b2864e11bd9f5af81f8c0a579a4ac4458..8787dfcfddd6e15e8aebdc8af054bdf52d9aedb1 100644 --- a/source/physics/sxphysics.h +++ b/source/physics/sxphysics.h @@ -14,10 +14,16 @@ See the license in LICENSE */ -#ifndef _SXPHYSICS_H_ -#define _SXPHYSICS_H_ +#ifndef __SXPHYSICS_H +#define __SXPHYSICS_H #include <gdefines.h> +#define SX_LIB_API extern "C" __declspec (dllimport) +//#include <mtllight\\sxmtllight.h> + +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif //#ifdef lerp //#undef lerp diff --git a/source/pp/sxpp.cpp b/source/pp/sxpp.cpp index f28c7f2f64ef32257e072804576d2a8a1d1bc3ad..adc94e3d7425e97c6eb8c7755b73d388f48ac104 100644 --- a/source/pp/sxpp.cpp +++ b/source/pp/sxpp.cpp @@ -111,51 +111,51 @@ void PPSet::Init() PPSet::WinSize.x = Core_RFloatGet(G_RI_FLOAT_WINSIZE_WIDTH); PPSet::WinSize.y = Core_RFloatGet(G_RI_FLOAT_WINSIZE_HEIGHT); Core_SetOutPtr(); - PPSet::IDsShaders::VS::ResPos = SGCore_ShaderLoad(ShaderType::st_vertex, "pp_res_pos.vs", "pp_quad_render_res_pos", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::VS::ResPos = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_res_pos.vs", "pp_quad_render_res_pos", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::VS::ScreenOut = SGCore_ShaderLoad(ShaderType::st_vertex, "pp_quad_render.vs", "pp_quad_render", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::ScreenOut = SGCore_ShaderLoad(ShaderType::st_pixel, "pp_quad_render.ps", "pp_quad_render", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::VS::ScreenOut = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_quad_render.vs", "pp_quad_render", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::ScreenOut = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_quad_render.ps", "pp_quad_render", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::FogLinear = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_fog_linear.ps", "ppe_fog_linear", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::FogLinear = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_fog_linear.ps", "ppe_fog_linear", ShaderCheckDouble::scd_path); D3DXMACRO Defines_SSAO_Q_3[] = { { "SSAO_Q_3", "" }, { 0, 0 } }; - PPSet::IDsShaders::PS::SSAO_Q_3 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_ssao.ps", "ppe_ssao_q_3", ShaderCheckDouble::scd_name, Defines_SSAO_Q_3); + PPSet::IDsShaders::PS::SSAO_Q_3 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_ssao.ps", "ppe_ssao_q_3", ShaderCheckDouble::scd_name, Defines_SSAO_Q_3); D3DXMACRO Defines_SSAO_Q_2[] = { { "SSAO_Q_2", "" }, { 0, 0 } }; - PPSet::IDsShaders::PS::SSAO_Q_2 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_ssao.ps", "ppe_ssao_q_2", ShaderCheckDouble::scd_name, Defines_SSAO_Q_2); + PPSet::IDsShaders::PS::SSAO_Q_2 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_ssao.ps", "ppe_ssao_q_2", ShaderCheckDouble::scd_name, Defines_SSAO_Q_2); D3DXMACRO Defines_SSAO_Q_1[] = { { "SSAO_Q_1", "" }, { 0, 0 } }; - PPSet::IDsShaders::PS::SSAO_Q_1 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_ssao.ps", "ppe_ssao_q_1", ShaderCheckDouble::scd_name, Defines_SSAO_Q_1); + PPSet::IDsShaders::PS::SSAO_Q_1 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_ssao.ps", "ppe_ssao_q_1", ShaderCheckDouble::scd_name, Defines_SSAO_Q_1); - PPSet::IDsShaders::PS::SSAOBlur1 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_ssao_blur.ps", "ppe_ssao_blur", ShaderCheckDouble::scd_name); + PPSet::IDsShaders::PS::SSAOBlur1 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_ssao_blur.ps", "ppe_ssao_blur", ShaderCheckDouble::scd_name); D3DXMACRO Defines_SSAO_BLEND_COLOR[] = { { "_BLEND_COLOR_", "" }, { 0, 0 } }; - PPSet::IDsShaders::PS::SSAOBlur2 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_ssao_blur.ps", "ppe_ssao_blur_color", ShaderCheckDouble::scd_name, Defines_SSAO_BLEND_COLOR); + PPSet::IDsShaders::PS::SSAOBlur2 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_ssao_blur.ps", "ppe_ssao_blur_color", ShaderCheckDouble::scd_name, Defines_SSAO_BLEND_COLOR); - PPSet::IDsShaders::PS::WhiteBlack = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_black_white.ps", "ppe_black_white", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::Sepia = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_sepia.ps", "ppe_sepia", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::CBG = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_count_cbg.ps", "ppe_count_cbg", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::WhiteBlack = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_black_white.ps", "ppe_black_white", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::Sepia = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_sepia.ps", "ppe_sepia", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::CBG = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_count_cbg.ps", "ppe_count_cbg", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::SunRender = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_sun_render.ps", "ppe_sun_render", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::SunRender = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_sun_render.ps", "ppe_sun_render", ShaderCheckDouble::scd_path); D3DXMACRO Defines_GaussBlur_H[] = { { "_H_", "" }, { 0, 0 } }; - PPSet::IDsShaders::PS::GaussBlurH = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_gauss_blur.ps", "ppe_gauss_blur_h", ShaderCheckDouble::scd_name, Defines_GaussBlur_H); - PPSet::IDsShaders::PS::GaussBlurW = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_gauss_blur.ps", "ppe_gauss_blur_w", ShaderCheckDouble::scd_name); - PPSet::IDsShaders::PS::FreeBlur3x3 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_free_blur_3x3.ps", "ppe_free_blur_3x3", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::GaussBlurH = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_gauss_blur.ps", "ppe_gauss_blur_h", ShaderCheckDouble::scd_name, Defines_GaussBlur_H); + PPSet::IDsShaders::PS::GaussBlurW = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_gauss_blur.ps", "ppe_gauss_blur_w", ShaderCheckDouble::scd_name); + PPSet::IDsShaders::PS::FreeBlur3x3 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_free_blur_3x3.ps", "ppe_free_blur_3x3", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::DOF = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_depth_of_field.ps", "ppe_depth_of_field", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::DOF = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_depth_of_field.ps", "ppe_depth_of_field", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::BloomBP = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_bloom_bp.ps", "ppe_bloom_bp", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::BloomFinal = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_bloom_final.ps", "ppe_bloom_final", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::BloomBP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_bloom_bp.ps", "ppe_bloom_bp", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::BloomFinal = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_bloom_final.ps", "ppe_bloom_final", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::LensFlare0 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_lens_flare0.ps", "ppe_lens_flare0", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::LensFlare2 = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_lens_flare2.ps", "ppe_lens_flare2", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::LensFlare0 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_lens_flare0.ps", "ppe_lens_flare0", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::LensFlare2 = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_lens_flare2.ps", "ppe_lens_flare2", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::MotionBlur = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_motion_blur.ps", "ppe_motion_blur", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::MotionBlur = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_motion_blur.ps", "ppe_motion_blur", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::NFAA = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_nfaa.ps", "ppe_nfaa", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::NFAA = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_nfaa.ps", "ppe_nfaa", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::DLAA_Small = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_dlaa_small.ps", "ppe_dlaa_small", ShaderCheckDouble::scd_path); - PPSet::IDsShaders::PS::DLAA_Long = SGCore_ShaderLoad(ShaderType::st_pixel, "ppe_dlaa_long.ps", "ppe_dlaa_long", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::DLAA_Small = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_dlaa_small.ps", "ppe_dlaa_small", ShaderCheckDouble::scd_path); + PPSet::IDsShaders::PS::DLAA_Long = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_dlaa_long.ps", "ppe_dlaa_long", ShaderCheckDouble::scd_path); PPSet::IDsTexs::Noise = SGCore_LoadTexAddName("noise_rottex.dds", LoadTexType::ltt_const); PPSet::IDsTexs::Sun = -1; @@ -333,12 +333,12 @@ void SPP_RenderFogLinear(float3_t* color, float4_t* param) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::Depth0)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::FogLinear, "FogColor", color); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::FogLinear, "Param", param); - //SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::FogLinear, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::FogLinear, "FogColor", color); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::FogLinear, "Param", param); + //SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::FogLinear, "NearFar", &PPSet::NearFar); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::FogLinear); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::FogLinear); SGCore_ScreenQuadDraw(); @@ -382,26 +382,26 @@ void SPP_RenderSSAO(float4_t* param, int quality) else if (quality == 2) idpsshader = PPSet::IDsShaders::PS::SSAO_Q_2; - SGCore_ShaderSetVRF(ShaderType::st_pixel, idpsshader, "NearFar", &PPSet::NearFar); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idpsshader, "Params", &float4(param->x, param->y, param->z, param->w)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idpsshader, "ArrRndVecSSAO", &PPSet::ArrRndVecSSAO); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idpsshader, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idpsshader, "Params", &float4(param->x, param->y, param->z, param->w)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idpsshader, "ArrRndVecSSAO", &PPSet::ArrRndVecSSAO); //float scale_rnd = PPSet::WinSize.x * 0.25f; - SGCore_ShaderSetVRF(ShaderType::st_pixel, idpsshader, "Ratio", &float2_t(PPSet::WinSize.x / PPSet::WinSize.y, 1)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idpsshader, "Ratio", &float2_t(PPSet::WinSize.x / PPSet::WinSize.y, 1)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idpsshader, "ViewPos", &PPSet::ConstCurrCamPos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, idpsshader, "ViewProj", &SMMatrixTranspose(PPSet::MCamView * PPSet::MCamProj)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idpsshader, "ViewPos", &PPSet::ConstCurrCamPos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, idpsshader, "ViewProj", &SMMatrixTranspose(PPSet::MCamView * PPSet::MCamProj)); float determ = 0; float4x4 ViewInv = SMMatrixInverse(&determ, PPSet::MCamView); ViewInv = SMMatrixTranspose(ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos, "NearFar", &PPSet::NearFar); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos, "ParamProj", &float3_t(PPSet::WinSize.x, PPSet::WinSize.y, PPSet::ProjFov)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos, "ParamProj", &float3_t(PPSet::WinSize.x, PPSet::WinSize.y, PPSet::ProjFov)); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos); - SGCore_ShaderBind(ShaderType::st_pixel, idpsshader); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, idpsshader); SGCore_ScreenQuadDraw(); @@ -422,11 +422,11 @@ void SPP_RenderSSAO(float4_t* param, int quality) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::Depth1)); PPSet::DXDevice->SetTexture(1, SGCore_RTGetTexture(PPSet::IDsRenderTargets::IntermediateWinSize)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SSAOBlur1, "PixelSize", &float2_t(2.0f / PPSet::WinSize.x, 2.0f / PPSet::WinSize.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SSAOBlur1, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SSAOBlur1, "PixelSize", &float2_t(2.0f / PPSet::WinSize.x, 2.0f / PPSet::WinSize.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SSAOBlur1, "NearFar", &PPSet::NearFar); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::SSAOBlur1); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SSAOBlur1); SGCore_ScreenQuadDraw(); @@ -446,11 +446,11 @@ void SPP_RenderSSAO(float4_t* param, int quality) PPSet::DXDevice->SetTexture(1, SGCore_RTGetTexture(PPSet::IDsRenderTargets::IntermediateWinSize2)); PPSet::DXDevice->SetTexture(2, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SSAOBlur2, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SSAOBlur2, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SSAOBlur2, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SSAOBlur2, "NearFar", &PPSet::NearFar); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::SSAOBlur2); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SSAOBlur2); SGCore_ScreenQuadDraw(); @@ -480,10 +480,10 @@ void SPP_RenderWhiteBlack(float coef) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::WhiteBlack, "CountPassWB", &coef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::WhiteBlack, "CountPassWB", &coef); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::WhiteBlack); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::WhiteBlack); SGCore_ScreenQuadDraw(); @@ -510,14 +510,14 @@ void SPP_RenderSepia(float coef) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::Sepia, "CountSepia", &coef); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::Sepia, "CountSepia", &coef); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::Sepia, "LightColor", &PP_SEPIA_LIGHT_COLOR); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::Sepia, "DarkColor", &PP_SEPIA_DARK_COLOR); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::Sepia, "LumWeights", &PP_SEPIA_WEIGHTS_COLOR); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::Sepia, "LightColor", &PP_SEPIA_LIGHT_COLOR); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::Sepia, "DarkColor", &PP_SEPIA_DARK_COLOR); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::Sepia, "LumWeights", &PP_SEPIA_WEIGHTS_COLOR); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::Sepia); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::Sepia); SGCore_ScreenQuadDraw(); @@ -544,10 +544,10 @@ void SPP_RenderCBG(float3_t* param) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::CBG, "Param", ¶m); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::CBG, "Param", ¶m); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::CBG); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::CBG); SGCore_ScreenQuadDraw(); @@ -580,11 +580,11 @@ void SPP_RenderDOF(float4_t* param, float sky_blur) float2_t tmpSizeMap = float2_t(desc.Width, desc.Height); float tmpcoefblurbloom = 1.f; - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurH, "CoefBlur", &tmpcoefblurbloom); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurH, "SizeMap", &tmpSizeMap); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurH, "CoefBlur", &tmpcoefblurbloom); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurH, "SizeMap", &tmpSizeMap); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurH); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurH); SGCore_ScreenQuadDraw(); @@ -605,11 +605,11 @@ void SPP_RenderDOF(float4_t* param, float sky_blur) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetRenderRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurW, "CoefBlur", &tmpcoefblurbloom); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurW, "SizeMap", &tmpSizeMap); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurW, "CoefBlur", &tmpcoefblurbloom); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurW, "SizeMap", &tmpSizeMap); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurW); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurW); SGCore_ScreenQuadDraw(); @@ -633,12 +633,12 @@ void SPP_RenderDOF(float4_t* param, float sky_blur) PPSet::DXDevice->SetTexture(2, SGCore_RTGetTexture(PPSet::IDsRenderTargets::IntermediateWinSize)); float tmpskyblur = 0.0f; - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::DOF, "Param", param); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::DOF, "SkyBlur", &sky_blur); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::DOF, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DOF, "Param", param); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DOF, "SkyBlur", &sky_blur); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DOF, "NearFar", &PPSet::NearFar); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::DOF); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DOF); SGCore_ScreenQuadDraw(); @@ -728,8 +728,8 @@ void SPP_RenderSun(float4_t* sun_color) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::ScreenOut); SGCore_ScreenQuadDraw(); @@ -754,16 +754,16 @@ void SPP_RenderSun(float4_t* sun_color) PPSet::DXDevice->SetScissorRect(&rectscissor); PPSet::DXDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "Color", sun_color); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "LightPos", &PPSet::SunPos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "SizeMap", &(PPSet::WinSize)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "SizeTexSun", &SizeMapSun); - //SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "LightColor", sun_color); - //SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "Color", sun_color); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "LightPos", &PPSet::SunPos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "SizeMap", &(PPSet::WinSize)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "SizeTexSun", &SizeMapSun); + //SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "LightColor", sun_color); + //SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender, "NearFar", &PPSet::NearFar); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::SunRender); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::SunRender); SGCore_ScreenQuadDraw(); @@ -808,12 +808,12 @@ void SPP_RenderLensFlare(float3_t* param, float4_t* sun_color, bool use_bloom) float2_t tmpSizeMap = float2_t(desc.Width, desc.Height); float LensFlareSunRadius = PP_SUN_RADIUS; - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare0, "LightPos", &PPSet::SunPos); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare0, "SizeMap", &tmpSizeMap); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare0, "RadiusSun", &LensFlareSunRadius); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare0, "Color", &sun_color); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare0); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare0, "LightPos", &PPSet::SunPos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare0, "SizeMap", &tmpSizeMap); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare0, "RadiusSun", &LensFlareSunRadius); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare0, "Color", &sun_color); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare0); SGCore_ScreenQuadDraw(); @@ -846,10 +846,10 @@ void SPP_RenderLensFlare(float3_t* param, float4_t* sun_color, bool use_bloom) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::Bright)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare2, "LensFlareParam", param); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare2, "LensFlareParam", param); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::LensFlare2); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::LensFlare2); SGCore_ScreenQuadDraw(); @@ -875,9 +875,9 @@ void SPP_RenderBloom(float3_t* param) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::BloomBP, "Param", param); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::BloomBP); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::BloomBP, "Param", param); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::BloomBP); SGCore_ScreenQuadDraw(); @@ -909,11 +909,11 @@ void SPP_RenderBloom(float3_t* param) float2_t tmpSizeMap = float2_t(desc.Width, desc.Height); float tmpcoefblurbloom = 2.f; - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurH, "CoefBlur", &tmpcoefblurbloom); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurH, "SizeMap", &tmpSizeMap); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurH, "CoefBlur", &tmpcoefblurbloom); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurH, "SizeMap", &tmpSizeMap); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurH); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurH); SGCore_ScreenQuadDraw(); @@ -932,11 +932,11 @@ void SPP_RenderBloom(float3_t* param) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::Bright2)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurW, "CoefBlur", &tmpcoefblurbloom); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurW, "SizeMap", &tmpSizeMap); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurW, "CoefBlur", &tmpcoefblurbloom); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurW, "SizeMap", &tmpSizeMap); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::GaussBlurW); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::GaussBlurW); SGCore_ScreenQuadDraw(); @@ -968,8 +968,8 @@ void SPP_RenderBloom(float3_t* param) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::Bright)); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::BloomFinal); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::BloomFinal); SGCore_ScreenQuadDraw(); @@ -997,11 +997,11 @@ void SPP_RenderNFAA(float3_t* param) PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::NFAA, "Param", param); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::NFAA, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::NFAA, "Param", param); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::NFAA, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::NFAA); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::NFAA); SGCore_ScreenQuadDraw(); @@ -1032,10 +1032,10 @@ void SPP_RenderDLAA() PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetSendRT())); //PPSet::DXDevice->SetTexture(1, SGCore_RTGetTexture(PPSet::IDsRenderTargets::Depth1)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::DLAA_Long, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DLAA_Long, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::DLAA_Long); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DLAA_Long); SGCore_ScreenQuadDraw(); @@ -1052,10 +1052,10 @@ void SPP_RenderDLAA() PPSet::DXDevice->SetTexture(0, SGCore_RTGetTexture(PPSet::IDsRenderTargets::GetRenderRT())); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::DLAA_Small, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DLAA_Small, "PixelSize", &float2_t(1.f / PPSet::WinSize.x, 1.f / PPSet::WinSize.y)); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::DLAA_Small); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::DLAA_Small); SGCore_ScreenQuadDraw(); @@ -1092,19 +1092,19 @@ void SPP_RenderMotionBlur(float coef, DWORD timeDelta) float4x4 tmpProj = SMMatrixTranspose(PPSet::MCamView*PPSet::MCamProj); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos, "NearFar", &PPSet::NearFar); - SGCore_ShaderSetVRF(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos, "ParamProj", &float3_t(PPSet::WinSize.x, PPSet::WinSize.y, D3DX_PI / 4.0f)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos, "ParamProj", &float3_t(PPSet::WinSize.x, PPSet::WinSize.y, D3DX_PI / 4.0f)); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::MotionBlur, "ViewPos", &PPSet::ConstCurrCamPos); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::MotionBlur, "ViewPos", &PPSet::ConstCurrCamPos); float tmpcoefblur = float(timeDelta) * 0.001f * ((coef)*10.f);// 0.3f;// *(float(timeDelta) * 0.001f); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::MotionBlur, "CoefBlur", &tmpcoefblur); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::MotionBlur, "NearFar", &PPSet::NearFar); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::MotionBlur, "CoefBlur", &tmpcoefblur); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::MotionBlur, "NearFar", &PPSet::NearFar); - SGCore_ShaderSetVRF(ShaderType::st_pixel, PPSet::IDsShaders::PS::MotionBlur, "ViewProjectionPrev", &ViewProjPrevInv); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::MotionBlur, "ViewProjectionPrev", &ViewProjPrevInv); - SGCore_ShaderBind(ShaderType::st_vertex, PPSet::IDsShaders::VS::ResPos); - SGCore_ShaderBind(ShaderType::st_pixel, PPSet::IDsShaders::PS::MotionBlur); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, PPSet::IDsShaders::VS::ResPos); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::MotionBlur); SGCore_ScreenQuadDraw(); diff --git a/source/pp/sxpp.h b/source/pp/sxpp.h index 6bd3bbcbe7f2962793206482d04303080a70fa61..c42d23ec16b3f8cb369a3aac6adbae4e97c50431 100644 --- a/source/pp/sxpp.h +++ b/source/pp/sxpp.h @@ -12,8 +12,8 @@ See the license in LICENSE /*! \defgroup sxpp sxpp - библиотека постпроцесса @{ */ -#ifndef __sxpostprocess -#define __sxpostprocess +#ifndef __SXPP_H +#define __SXPP_H #include <gdefines.h> @@ -22,8 +22,16 @@ See the license in LICENSE #else #pragma comment(lib, "sxgcore.lib") #endif + +#define SX_LIB_API extern "C" __declspec (dllimport) #include <gcore\\sxgcore.h> +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + +//########################################################################## + /*! \name Значения цветов для создания эффекта sepia @{*/ @@ -33,24 +41,38 @@ See the license in LICENSE //!@} -#define PP_SUN_RADIUS 30 /*!< радиус солнца в пикселях для lens flare */ -#define PP_MAX_ANGLE_VISIBLE_SUN 1.57 /*!< максимальный угол между взглядом наблюдателя и позицией источнкиа света при котором еще видно солнце, больше этого солнце уже не видно */ +//************************************************************************** + +/*! радиус солнца в пикселях для lens flare */ +#define PP_SUN_RADIUS 30 + +/*! максимальный угол между взглядом наблюдателя и позицией источнкиа света при котором еще видно солнце, больше этого солнце уже не видно */ +#define PP_MAX_ANGLE_VISIBLE_SUN 1.57 + +//########################################################################## /*! \name Базовые функции библиотеки @{*/ -SX_LIB_API long SPP_0GetVersion(); //!< возвращает версию подсистемы -SX_LIB_API void SPP_Dbg_Set(report_func rf); //!< установка функции обработки сообщений + +//! возвращает версию подсистемы +SX_LIB_API long SPP_0GetVersion(); + +//! установка функции обработки сообщений +SX_LIB_API void SPP_Dbg_Set(report_func rf); //! инициализация подсистемы SX_LIB_API void SPP_0Create( - const char* name, //имя подсистемы - bool is_unic //должно ли быть имя подсистемы уникальным + const char* name, //!< имя подсистемы + bool is_unic //!< должно ли быть имя подсистемы уникальным ); -SX_LIB_API void SPP_0Kill(); //!< уничтожение подсистемы +//! уничтожение подсистемы +SX_LIB_API void SPP_0Kill(); //!@} +//************************************************************************** + /*! \name Установка основных render targets \warning Глубина должна быть линейная, от 0 до 1, где 0 это возле камеры, а 1 это максимальная удаленность от камеры. Причем линейность в пространстве камеры. @@ -59,27 +81,47 @@ depth = (z + near)/far \n где near и far ближняя и дальняя плоскости отсечения соответственно (к примеру 0.25 и 400), z - z компонента трехмерного вектора отрансформированного wordview projection матрицей и интерпалированного в пиксельный шейдер @{*/ -SX_LIB_API void SPP_RTSetInput(ID rt); //!< входное изображение которое будет модифицироваться -SX_LIB_API void SPP_RTSetOutput(ID rt); //!< дополнительное изображение для внутренних нужд -SX_LIB_API void SPP_RTSetDepth0(ID rt); //!< глубина (линейная 0-1), абсолютно непрозрачные пиксели +//! входное изображение которое будет модифицироваться +SX_LIB_API void SPP_RTSetInput(ID rt); + +//! дополнительное изображение для внутренних нужд +SX_LIB_API void SPP_RTSetOutput(ID rt); + + +//! глубина (линейная 0-1), абсолютно непрозрачные пиксели +SX_LIB_API void SPP_RTSetDepth0(ID rt); + /*! глубина (линейная 0-1), непрозрачные и прозрачные пиксели, однако прозрачные (если есть) будут перекрывать непрозрачные, и в этом случае их глубина будет 1 то есть максимальной (для идентификации)*/ SX_LIB_API void SPP_RTSetDepth1(ID rt); -SX_LIB_API void SPP_RTSetNormal(ID rt); //!< нормали (в том числе и микрорейльеф) + +//! нормали (в том числе и микрорейльеф) +SX_LIB_API void SPP_RTSetNormal(ID rt); //!@} +//************************************************************************** + /*! \name Переключение очереди и получением текущих rt @{*/ -SX_LIB_API ID SPP_RTGetCurrRender(); //!< поулчить текущий rt для рендера в него -SX_LIB_API ID SPP_RTGetCurrSend(); //!< получить текущий rt для отправки в шейдер -SX_LIB_API void SPP_RTIncr(); //!< переключить очередь между ке в который рисуем и который отправляем -SX_LIB_API void SPP_RTNull(); //!< обнулить очередь rt, то есть после вызова rt рендера станет input, а дополнительной output +//! поулчить текущий rt для рендера в него +SX_LIB_API ID SPP_RTGetCurrRender(); + +//! получить текущий rt для отправки в шейдер +SX_LIB_API ID SPP_RTGetCurrSend(); + +//! переключить очередь между ке в который рисуем и который отправляем +SX_LIB_API void SPP_RTIncr(); + +//! обнулить очередь rt, то есть после вызова rt рендера станет input, а дополнительной output +SX_LIB_API void SPP_RTNull(); //!@} +//************************************************************************** + /*! обновление данных постпроцессорной подсистемы, необходимо вызывать перед началом рендера постпроцесса*/ SX_LIB_API void SPP_Update( float3_t* viewpos, //!< позиция наблюдателя @@ -90,9 +132,14 @@ SX_LIB_API void SPP_Update( float2_t* nearfar, //!< ближняя и дальняя плоскости отсечения float projfov //!< угол обзора в радианах ); -SX_LIB_API void SPP_UpdateSun(float3* sunpos); //!< обвновление позиции солнца, если sunpos == 0 тогда солнца в сцене нет -SX_LIB_API void SPP_ChangeTexSun(const char* str); //!< сменить текстуру солнца на str +//! обвновление позиции солнца, если sunpos == 0 тогда солнца в сцене нет +SX_LIB_API void SPP_UpdateSun(float3* sunpos); + +//! сменить текстуру солнца на str +SX_LIB_API void SPP_ChangeTexSun(const char* str); + +//########################################################################## /*! \defgroup sxpp_eff Эффекты \ingroup sxpp @@ -158,12 +205,16 @@ coef - коэфициент размытия, 0 - 1 \n timeDelta - время рендера текущего кадра в млсек*/ SX_LIB_API void SPP_RenderMotionBlur(float coef, DWORD timeDelta); +//########################################################################## /*! \name Стандартные эффекты @{*/ -SX_LIB_API void SPP_RenderWhiteBlack(float coef); //!< черно-белое изображение, coef - коэфициент перехода от цветного к черное-белому (0-1) -SX_LIB_API void SPP_RenderSepia(float coef); //!< эффект сепия, , coef - коэфициент перехода от цветного к сепии (0-1) +//! черно-белое изображение, coef - коэфициент перехода от цветного к черное-белому (0-1) +SX_LIB_API void SPP_RenderWhiteBlack(float coef); + +//! эффект сепия, , coef - коэфициент перехода от цветного к сепии (0-1) +SX_LIB_API void SPP_RenderSepia(float coef); /*! коррекция изображения \n param.x - contrast/контраст \n @@ -174,6 +225,7 @@ SX_LIB_API void SPP_RenderCBG(float3_t* param); //!@} +//########################################################################## /*! \name Anti Aliasing @{*/ @@ -185,7 +237,8 @@ param.z - notmal map, вывести сформированные нормали рекомендуемые параметры: 2, 1, 0*/ SX_LIB_API void SPP_RenderNFAA(float3_t* param); -SX_LIB_API void SPP_RenderDLAA(); //!< dlaa (Directionally Localized Anti Aliasing) +//! dlaa (Directionally Localized Anti Aliasing) +SX_LIB_API void SPP_RenderDLAA(); //!@} diff --git a/source/render/sxrender.cpp b/source/render/sxrender.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5bf31e126d5e95dd87e89403fd366448dc88f428 --- /dev/null +++ b/source/render/sxrender.cpp @@ -0,0 +1,139 @@ + +#include "sxrender.h" + +//########################################################################## + +//! ������������ ���� ��� �������� ������ ����� ������� +namespace GData +{ + IDirect3DDevice9* DXDevice = 0; //!< dx ���������� + + //! ������� ���������� ������� ��������� (���� �������) + LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + + //! ������������� ���� ������� + void InitWin( + const char* name, //!< ��� ���� (������ ��������) + const char* caption //!< �������� ���� + ); + + HWND HandlePreview = 0; //!< ����� ������ ���� + HWND HandleParent3D = 0;//!< ����� ���� �������� ���� �������, �� ������ ���������� + HWND Handle3D = 0; //!< ����� ���� ������� + + float2_t WinSize = float2_t(800, 600); //!< ������ ���� ������� (������� �������) + bool IsWindowed = true; //!<������������ �� ������� ����� �������? + + + DS_RT FinalImage = DS_RT::ds_rt_scene_light_com;//!< ��������� ����������� + ISXCamera* ObjCamera = 0; //!< ������ ��� ������� ����� ������ + ID IDSelectTex = -1; + int ReSize = 0; //!< 0 - ������ �� ������, 1 - ������, 2 - ������� ����� ��������� � ����� + + float2_t NearFar = float2_t(0.025, 400); //!< �������� ������� � ������� ���������� ��������� + float ProjFov = SM_PIDIV4; //!< fov ������ + + ID DefaultGeomIDArr = -1; + ID DefaultGreenIDArr = -1; + ID DefaultAnimIDArr = -1; + + float3 ConstCurrCamPos; //!< ������� ������ + float3 ConstCurrCamDir; //!< ����������� ������� ������ + + //! ��������� ����������� ������ �� ��������� + float4_t CamWalkParamEditor = float4_t( + 10.f, //!< ������� �������� ������ + 5.f, //!< ���������� ��������� + 0.7f, //!< ���������� �� ��������� �������� � ������� + 0.5f //!< ���������� �� ��������� �������� ����� + ); + + //������� + void InitAllMatrix(); //!< ������������� ������ + float4x4 MCamView; //!< ������� ���� ������ + float4x4 MCamProj; //!< ������� �������� ������ + float4x4 MLightProj; //!< ������� �������� ���������� ������, ������ �����त ��������� ������ + float4x4 MRefPlaneSkyProj; //!< ������� �������� �� ������� skybox � sky clouds, �� ������� ���������, ���������� MCamProj + float4x4 MRefCubeSkyProj; //!< ������� �������� �� ������� skybox � sky clouds, �� ���������� ��������� + + ////// + + //! ������������ ���� � ���������������� �������� + namespace IDsShaders + { + //! �������� ���� ����������� �������� + void InitAllShaders(); + + //! ��������� ������� + namespace VS + { + ID ScreenOut; + ID ResPos; + }; + + //! ���������� ������� + namespace PS + { + ID ScreenOut; + ID ComLightingNonShadow; + ID ComLightingShadow; + + ID BlendAmbientSpecDiffColor; + + ID ToneMapping; + + ID StencilStr; + ID StencilColumn; + ID StencilStrColumn; + ID UnionAlpha; + }; + }; +}; + +//######################################################################### + +#if !defined(DEF_STD_REPORT) +#define DEF_STD_REPORT +report_func g_fnReportf = DefReport; +#endif + +//########################################################################## + +SX_LIB_API void ComDeviceLost() +{ + if (GData::ReSize != 2) + { + //�������� ������� ������ ���� � ������� �������� + RECT rect_scene; + GetClientRect(GData::Handle3D, &rect_scene); + + + GData::WinSize.x = rect_scene.right; + GData::WinSize.y = rect_scene.bottom; + } + + //���������� ��� ��� ���������� ��� �������������� ���������� + SGCore_OnLostDevice(); + SGeom_OnLostDevice(); + SML_OnLostDevice(); + SPE_OnLostDevice(); + + bool bf = SGCore_OnDeviceReset(GData::WinSize.x, GData::WinSize.y, GData::IsWindowed); + if (bf) + { + //���� ���-���� ������� ����� ���� ������ ����� ���� ������������� + g_fnReportf(REPORT_MSG_LEVEL_ERROR, "reset device is failed ... \n"); + } + else + { + GData::InitAllMatrix(); + GData::ReSize = 0; + SGCore_OnResetDevice(); + SML_OnResetDevice(); + SGeom_OnResetDevice(); + SPE_OnResetDevice(); + + + GData::DXDevice->SetRenderState(D3DRS_LIGHTING, FALSE); + } +} \ No newline at end of file diff --git a/source/render/sxrender.h b/source/render/sxrender.h new file mode 100644 index 0000000000000000000000000000000000000000..2dbbffa9cff7c599a08d08ecc60ca4a20242fa7a --- /dev/null +++ b/source/render/sxrender.h @@ -0,0 +1,117 @@ + +/****************************************************** +Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +������������ ���� sxrender - ���������� ������� ������� +*/ + +#ifndef __SXRENDER_H +#define __SXRENDER_H + +#include <gdefines.h> + +#if defined(_DEBUG) +#pragma comment(lib, "sxgcore_d.lib") +#else +#pragma comment(lib, "sxgcore.lib") +#endif + +#if defined(_DEBUG) +#pragma comment(lib, "sxgeom_d.lib") +#else +#pragma comment(lib, "sxgeom.lib") +#endif + +#if defined(_DEBUG) +#pragma comment(lib, "sxmtllight_d.lib") +#else +#pragma comment(lib, "sxmtllight.lib") +#endif + +#if defined(_DEBUG) +#pragma comment(lib, "sxparticles_d.lib") +#else +#pragma comment(lib, "sxparticles.lib") +#endif + +#if defined(_DEBUG) +#pragma comment(lib, "sxpp_d.lib") +#else +#pragma comment(lib, "sxpp.lib") +#endif + +#if defined(_DEBUG) +#pragma comment(lib, "sxanim_d.lib") +#else +#pragma comment(lib, "sxanim.lib") +#endif + + +#define SX_LIB_API extern "C" __declspec (dllimport) +#include <gcore/sxgcore.h> +#include <geom/sxgeom.h> +#include <mtllight/sxmtllight.h> +#include <anim/sxanim.h> +#include <pp/sxpp.h> +#include <particles/sxparticles.h> + +/*#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif*/ + +#define SX_LIB_API +/* +//������� ���������� ���������� � ��������� +//{ +//������������� ��� �������� +inline void SetSamplerFilter(DWORD id, DWORD value); +inline void SetSamplerAddress(DWORD id, DWORD value); + +//��� ���������� ���������� ����� ��������� +inline void SetSamplerFilter(DWORD begin_id, DWORD end_id, DWORD value); +inline void SetSamplerAddress(DWORD begin_id, DWORD end_id, DWORD value); + +void SetRenderSceneFilter(); +void SetRenderSceneFilterUn(); +//} +*/ + +//! ��������� ������ � �������������� ���������� +SX_LIB_API void ComDeviceLost(); + +//! ��������� ��������� ��� ���������� ����� +SX_LIB_API void ComVisibleForLight(); + +//! ��������� ��������� ��� ������ +SX_LIB_API void ComVisibleForCamera(); + +//! ��������� ��������� ��� ��������� +SX_LIB_API void ComVisibleReflection(); + + +SX_LIB_API void UpdateDataCVar(); + +SX_LIB_API void UpdateView(); //!< ��������� � ��������� �������� ������, ��������� ���������� ��������� +SX_LIB_API void OutputDebugInfo(DWORD timeDelta); //!< ����� ���������� ��������� ���������� � ���� ������� + + + +SX_LIB_API void BuildMRT(DWORD timeDelta); //!< ���������� G ������, �� ���� ������ ���� ����� +SX_LIB_API void UpdateShadow(DWORD timeDelta); //!< ���������� ���������� � ����� (������ ����� ���� ��� ����������� ���� � ������ ������ ���������� �����) +SX_LIB_API void UpdateReflection(DWORD timeDelta); //!< ���������/���������� ��������� + +void RenderSky(DWORD timeDelta); //!< ��������� ��������� � ������� +void ComLighting(DWORD timeDelta, bool render_sky); //!< ��������� ���������, render_sky - �������� �� ���� +void RenderParticles(DWORD timeDelta); //!< ��������� ��������� (��������) +void RenderPostProcess(DWORD timeDelta); //!< ��������� ������������ +void ShaderRegisterData(); +/* +void SaveScreenShot(); //!< ��������� �������� +void SaveWorkTex(); //!< ��������� ������� �������� (�-����� � ��� � ���� �����������) +void ChangeModeWindow(); //!< �������� ����� ������� (�������/�������������) +*/ +#endif \ No newline at end of file diff --git a/source/score/sxscore.h b/source/score/sxscore.h index e801f13c910d445b08cb47fc2c1ccbb7ada33b40..d6b7e17e863e05ed167c0377e9a456f9809e5e15 100644 --- a/source/score/sxscore.h +++ b/source/score/sxscore.h @@ -21,8 +21,8 @@ See the license in LICENSE \note Идентификация звука происходит на основании его числового идентификатора выдаваемого создаваемыми функциями (#SSCore_SndCreate2d/#SSCore_SndCreate2dInst #SSCore_SndCreate3d/#SSCore_SndCreate3dInst) и является константной, идентификатор является порядковым номером @{*/ -#ifndef __sxsound -#define __sxsound +#ifndef __SXSCORE_H +#define __SXSCORE_H #include <gdefines.h> #include <GRegisterIndex.h> @@ -32,19 +32,35 @@ See the license in LICENSE #else #pragma comment(lib, "sxcore.lib") #endif + +#define SX_LIB_API extern "C" __declspec (dllimport) #include <core\\sxcore.h> +#ifdef SX_DLL +#define SX_LIB_API extern "C" __declspec (dllexport) +#endif + +//########################################################################## + /*! \name Стандартные функции библиотеки @{*/ -SX_LIB_API long SSCore_0GetVersion(); //!< возвращает версию подсистемы геометрии -SX_LIB_API void SSCore_Dbg_Set(report_func rf); //!< установить новую функцию вывода сообщений -SX_LIB_API void SSCore_0Create( //!< инициализация подсистемы + +//! возвращает версию подсистемы геометрии +SX_LIB_API long SSCore_0GetVersion(); + +//! установить новую функцию вывода сообщений +SX_LIB_API void SSCore_Dbg_Set(report_func rf); + +//! инициализация подсистемы +SX_LIB_API void SSCore_0Create( const char* name, //!< имя HWND hwnd, bool is_unic = true //!< должна ли подсистема быть уникальной по имени ); -SX_LIB_API void SSCore_AKill(); //!< уничтожение подсистемы +//! уничтожение подсистемы +SX_LIB_API void SSCore_AKill(); + //!@} //############################################################################# @@ -54,6 +70,8 @@ SX_LIB_API void SSCore_AKill(); //!< уничтожение подсистемы #define SOUND_MIN_SIZE_STREAM 1024*64 /*!< минимально возможный размер потока для воспроизведения */ +//************************************************************************** + /*! \name Данные для первичного буфера @{*/ @@ -63,6 +81,8 @@ SX_LIB_API void SSCore_AKill(); //!< уничтожение подсистемы //!@} +//************************************************************************** + #define SOUND_OGG_BITS_PER_SAMPLE 16 /*!< количество бит на сэмпл для ogg, возможно 8 или 16 */ /*! тип количества бит на сэмпл для ogg, 1 - для 8 бит, 2 - для 16 */ @@ -99,7 +119,8 @@ enum SoundObjState //############################################################################# -SX_LIB_API void SSCore_Clear(); //!< очистка всего списка звуков (полное их удаление) +//! очистка всего списка звуков (полное их удаление) +SX_LIB_API void SSCore_Clear(); //! обновление состояний всех звуков SX_LIB_API void SSCore_Update( @@ -107,8 +128,11 @@ SX_LIB_API void SSCore_Update( float3* viewdir //!< текущее направление взгляда ); -SX_LIB_API int SSCore_SndsPlayCountGet(); //!< количество проигрываемых на данный момент звуков -SX_LIB_API int SSCore_SndsLoadCountGet(); //!< количество загруженных на данный момент звуков +//! количество проигрываемых на данный момент звуков +SX_LIB_API int SSCore_SndsPlayCountGet(); + +//! количество загруженных на данный момент звуков +SX_LIB_API int SSCore_SndsLoadCountGet(); //! загрузка 2d (фонового) звука SX_LIB_API ID SSCore_SndCreate2d( @@ -151,15 +175,29 @@ SX_LIB_API ID SSCore_SndFind2dInst(const char * file); //! поиск 3d звука (выдающего инстансы) по относительному пути загрузки,возвращает его ID (в случае успеха) иначе <0 SX_LIB_API ID SSCore_SndFind3dInst(const char * file); -SX_LIB_API bool SSCore_SndIsInit(ID id); //!< инициализирован ли звук с идентификатором id -SX_LIB_API void SSCore_SndDelete(ID id); //!< удалить звук по его id -SX_LIB_API void SSCore_SndPlay(ID id, int looping = -1); //!< воспроизвести звук, looping зацикливать ли воспроизведение, 0 - нет, >0 да, <0 не учитывать данное значение -SX_LIB_API void SSCore_SndPause(ID id); //!< приостановить -SX_LIB_API void SSCore_SndStop(ID id); //!< остановить +//! инициализирован ли звук с идентификатором id +SX_LIB_API bool SSCore_SndIsInit(ID id); + +//! удалить звук по его id +SX_LIB_API void SSCore_SndDelete(ID id); + + +//! воспроизвести звук, looping зацикливать ли воспроизведение, 0 - нет, >0 да, <0 не учитывать данное значение +SX_LIB_API void SSCore_SndPlay(ID id, int looping = -1); + +//! приостановить +SX_LIB_API void SSCore_SndPause(ID id); -SX_LIB_API void SSCore_SndStateSet(ID id, SoundObjState state); //!< устанавливает состояние проигрывания звука -SX_LIB_API SoundObjState SSCore_SndStateGet(ID id); //!< возвращает состояние проигрывания звука на данный момент +//! остановить +SX_LIB_API void SSCore_SndStop(ID id); + + +//! устанавливает состояние проигрывания звука +SX_LIB_API void SSCore_SndStateSet(ID id, SoundObjState state); + +//! возвращает состояние проигрывания звука на данный момент +SX_LIB_API SoundObjState SSCore_SndStateGet(ID id); //! устанавить позицию проигрывания SX_LIB_API void SSCore_SndPosCurrSet( @@ -200,20 +238,42 @@ SX_LIB_API long SSCore_SndPanGet( int type = SOUND_VOL_PCT //!< тип возвращаемого значения, SOUND_VOL_ ); -SX_LIB_API void SSCore_SndFreqCurrSet(ID id, DWORD value); //!< установка частоты воспроизведения -SX_LIB_API DWORD SSCore_SndFreqCurrGet(ID id); //!< возвращает текущую частоту воспроизведения -SX_LIB_API DWORD SSCore_SndFreqOriginGet(ID id); //!< возвращает оригинальную частоту воспроизведения -SX_LIB_API void SSCore_SndPosWSet(ID id, float3* pos); //!< установка мировой позиции звука (только для 3d звуков) -SX_LIB_API void SSCore_SndPosWGet(ID id, float3* pos); //!< возвращает мировую позицию звука (только для 3d звуков) +//! установка частоты воспроизведения +SX_LIB_API void SSCore_SndFreqCurrSet(ID id, DWORD value); + +//! возвращает текущую частоту воспроизведения +SX_LIB_API DWORD SSCore_SndFreqCurrGet(ID id); + +//! возвращает оригинальную частоту воспроизведения +SX_LIB_API DWORD SSCore_SndFreqOriginGet(ID id); + + +//! установка мировой позиции звука (только для 3d звуков) +SX_LIB_API void SSCore_SndPosWSet(ID id, float3* pos); + +//! возвращает мировую позицию звука (только для 3d звуков) +SX_LIB_API void SSCore_SndPosWGet(ID id, float3* pos); + + +//! длина в секундах +SX_LIB_API int SSCore_SndLengthSecGet(ID id); + +//! количество байт в секунде +SX_LIB_API DWORD SSCore_SndBytesPerSecGet(ID id); + +//! размер в байтах PCM данных +SX_LIB_API DWORD SSCore_SndSizeGet(ID id); + +//! относительный путь до звукового файла +SX_LIB_API void SSCore_SndFileGet(ID id, char* path); + -SX_LIB_API int SSCore_SndLengthSecGet(ID id); //!< длина в секундах -SX_LIB_API DWORD SSCore_SndBytesPerSecGet(ID id); //!< количество байт в секунде -SX_LIB_API DWORD SSCore_SndSizeGet(ID id); //!< размер в байтах PCM данных -SX_LIB_API void SSCore_SndFileGet(ID id, char* path); //!< относительный путь до звукового файла +//! возвращает дистанцию слышимости +SX_LIB_API float SSCore_SndDistAudibleGet(ID id); -SX_LIB_API float SSCore_SndDistAudibleGet(ID id); //!< возвращает дистанцию слышимости -SX_LIB_API void SSCore_SndDistAudibleSet(ID id, float value); //!< установка дистанции слышимости в метрах +//! установка дистанции слышимости в метрах +SX_LIB_API void SSCore_SndDistAudibleSet(ID id, float value); //!@} diff --git a/source/skyxengine.cpp b/source/skyxengine.cpp index 049b1467ab1c3e5d49ac7e6756ce9fc571967513..57097222e8f85f6c68ecc96b185ae7072a724e82 100644 --- a/source/skyxengine.cpp +++ b/source/skyxengine.cpp @@ -1,5 +1,5 @@ -#include <SkyXEngine.h> +#include "SkyXEngine.h" void SkyXEngine_Init() { @@ -15,10 +15,10 @@ void SkyXEngine_Init() #endif Level::Name[0] = 0; SSInput_0Create("sxinput", GData::Handle3D, false); - SSInput_Dbg_Set(printflog); + SSInput_Dbg_Set(PrintfLog); Core_0Create("sxcore", false); - Core_Dbg_Set(printflog); + Core_Dbg_Set(PrintfLog); Core_SetOutPtr(); ID idTimerRender = Core_TimeAdd(); @@ -35,13 +35,13 @@ void SkyXEngine_Init() Core_TimeSpeedSet(idTimerGame, 100); SSCore_0Create("sxsound", GData::Handle3D, false); - SSCore_Dbg_Set(printflog); + SSCore_Dbg_Set(PrintfLog); SGCore_0Create("sxgcore", GData::Handle3D, GData::WinSize.x, GData::WinSize.y, GData::IsWindowed, 0, false); - SGCore_Dbg_Set(printflog); + SGCore_Dbg_Set(PrintfLog); - SGCore_SetFunc_MtlSet(SXRenderFunc::RFuncMtlSet); - SGCore_SetFunc_MtlLoad(SXRenderFunc::RFuncMtlLoad); + SGCore_SetFunc_MtlSet(RFuncMtlSet); + SGCore_SetFunc_MtlLoad(RFuncMtlLoad); SGCore_SetFunc_MtlGetSort((g_func_mtl_get_sort)SML_MtlGetTypeTransparency); SGCore_SetFunc_MtlGroupRenderIsSingly((g_func_mtl_group_render_is_singly)SML_MtlGetTypeReflection); SGCore_SetFunc_MtlGetPhysicType((g_func_mtl_get_physic_type)SML_MtlGetPhysicMaterial); @@ -58,19 +58,19 @@ void SkyXEngine_Init() #endif SGeom_0Create("sxgeom", false); - SGeom_Dbg_Set(printflog); + SGeom_Dbg_Set(PrintfLog); SML_0Create("sxml", false); - SML_Dbg_Set(printflog); + SML_Dbg_Set(PrintfLog); SPE_0Create("sxparticles", false); - SPE_Dbg_Set(printflog); - SPE_SetFunc_ParticlesPhyCollision(SXRenderFunc::ParticlesPhyCollision); + SPE_Dbg_Set(PrintfLog); + SPE_SetFunc_ParticlesPhyCollision(RFuncParticlesPhyCollision); SPE_RTDepthSet(SML_DSGetRT_ID(DS_RT::ds_rt_depth)); Level::LoadParticles(); SPP_0Create("sxpp", false); - SPP_Dbg_Set(printflog); + SPP_Dbg_Set(PrintfLog); #if defined(SX_GAME) SPP_ChangeTexSun("fx_sun.dds"); @@ -82,13 +82,13 @@ void SkyXEngine_Init() SPP_RTSetNormal(SML_DSGetRT_ID(DS_RT::ds_rt_normal)); SXAnim_0Create(); - SXAnim_Dbg_Set(printflog); + SXAnim_Dbg_Set(PrintfLog); SXPhysics_0Create(); - SXPhysics_Dbg_Set(printflog); + SXPhysics_Dbg_Set(PrintfLog); SXDecals_0Create(); - SXDecals_Dbg_Set(printflog); + SXDecals_Dbg_Set(PrintfLog); #if defined(SX_LEVEL_EDITOR) SAIG_0Create("sxaigrid", true, false); @@ -96,12 +96,12 @@ void SkyXEngine_Init() #else SAIG_0Create("sxaigrid", true, false); #endif - SAIG_Dbg_Set(printflog); - SAIG_SetFunc_QuadPhyNavigate(SXRenderFunc::AIQuadPhyNavigate); + SAIG_Dbg_Set(PrintfLog); + SAIG_SetFunc_QuadPhyNavigate(RFuncAIQuadPhyNavigate); #ifndef SX_PARTICLES_EDITOR SXGame_0Create(); - SXGame_Dbg_Set(printflog); + SXGame_Dbg_Set(PrintfLog); #endif #ifdef SX_GAME @@ -222,6 +222,8 @@ void SkyXEngine_Init() pl->Play("reload");*/ } +//************************************************************************** + void SkyXEngine_InitPaths() { char tmppath[MAX_PATH]; @@ -355,7 +357,7 @@ void SkyXEngine_Render(DWORD timeDelta) //������ ����� � ��������� mrt ������� ttime = TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)); - SXRenderFunc::RenderInMRT(timeDelta); + SXRenderFunc::BuildMRT(timeDelta); SXRenderFunc::Delay::RenderMRT += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime; if (GData::FinalImage == DS_RT::ds_rt_ambient_diff || GData::FinalImage == DS_RT::ds_rt_specular || GData::FinalImage == DS_RT::ds_rt_scene_light_com) @@ -363,6 +365,12 @@ void SkyXEngine_Render(DWORD timeDelta) //�������� ����� ttime = TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)); SXRenderFunc::ComLighting(timeDelta, true); + SXRenderFunc::UnionLayers(); + if (SGCore_SkyBoxIsCr()) + SXRenderFunc::RenderSky(timeDelta); + SXRenderFunc::ApplyToneMapping(); + SXRenderFunc::ComToneMapping(timeDelta); + SXRenderFunc::Delay::ComLighting += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime; } @@ -375,8 +383,8 @@ void SkyXEngine_Render(DWORD timeDelta) SXRenderFunc::Delay::PostProcess += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime; #endif - SGCore_ShaderBind(ShaderType::st_vertex, GData::IDsShaders::VS::ScreenOut); - SGCore_ShaderBind(ShaderType::st_pixel, GData::IDsShaders::PS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); + SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::ScreenOut); GData::DXDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); @@ -397,7 +405,11 @@ void SkyXEngine_Render(DWORD timeDelta) GData::DXDevice->SetTransform(D3DTS_PROJECTION, &((D3DXMATRIX)GData::MLightProj)); SXRenderFunc::RenderEditorMain(); SXRenderFunc::RenderEditorLE(timeDelta); + SXRenderFunc::RenderEditorPE(timeDelta); + +#ifdef _DEBUG SAIG_RenderQuads(GData::ObjCamera->ObjFrustum, &GData::ConstCurrCamPos, GData::NearFar.y); +#endif #if defined(SX_GAME) SXGame_RenderHUD();