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", &param);
+	SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PPSet::IDsShaders::PS::CBG, "Param", &param);
 
-	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();