Преглед изворни кода

+ Added renderization control to the file loading system (scenes control the whole renderization)

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
Alexis Maiquez пре 8 година
родитељ
комит
f5b3bd86d0

+ 384 - 385
.idea/workspace.xml

@@ -1,8 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="BookmarkManager">
-    <bookmark url="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h" line="23" mnemonic="9" />
-  </component>
   <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true" buildAllGenerated="true">
     <generated>
       <config projectName="wallengine" targetName="wallengine" />
@@ -16,14 +13,26 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="18bb2960-e23f-4286-86eb-946e53957973" name="Default" comment="">
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/nier_test.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/nier_test.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wallpaperengine/camera.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/wallpaperengine/camera.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wallpaperengine/camera.h" beforeDir="false" afterPath="$PROJECT_DIR$/wallpaperengine/camera.h" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wallpaperengine/project.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/wallpaperengine/project.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wallpaperengine/project.h" beforeDir="false" afterPath="$PROJECT_DIR$/wallpaperengine/project.h" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wallpaperengine/scene.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/wallpaperengine/scene.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wallpaperengine/scene.h" beforeDir="false" afterPath="$PROJECT_DIR$/wallpaperengine/scene.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change beforePath="$PROJECT_DIR$/CMakeLists.txt" afterPath="$PROJECT_DIR$/CMakeLists.txt" />
+      <change beforePath="$PROJECT_DIR$/nier_test.cpp" afterPath="$PROJECT_DIR$/nier_test.cpp" />
+      <change beforePath="$PROJECT_DIR$/nier_test.h" afterPath="$PROJECT_DIR$/nier_test.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h" afterPath="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/image.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/image.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/image.h" afterPath="$PROJECT_DIR$/wallpaperengine/image.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/irrlicht.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/irrlicht.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/irrlicht.h" afterPath="$PROJECT_DIR$/wallpaperengine/irrlicht.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/material.cpp" afterPath="" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/material.h" afterPath="" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/object.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/object.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/object.h" afterPath="$PROJECT_DIR$/wallpaperengine/object.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/object3d.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/object3d.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/object3d.h" afterPath="$PROJECT_DIR$/wallpaperengine/object3d.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/scene.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/scene.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/scene.h" afterPath="$PROJECT_DIR$/wallpaperengine/scene.h" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/shaders/compiler.cpp" afterPath="$PROJECT_DIR$/wallpaperengine/shaders/compiler.cpp" />
+      <change beforePath="$PROJECT_DIR$/wallpaperengine/shaders/compiler.h" afterPath="$PROJECT_DIR$/wallpaperengine/shaders/compiler.h" />
     </list>
     <ignored path="$PROJECT_DIR$/cmake-build-debug/" />
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@@ -36,11 +45,11 @@
   <component name="ExecutionTargetManager" SELECTED_TARGET="CMakeBuildProfile:Debug" />
   <component name="FileEditorManager">
     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="project.cpp" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/project.cpp">
+      <file leaf-file-name="nier_test.cpp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/nier_test.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="591">
-              <caret line="44" column="29" selection-start-line="44" selection-start-column="29" selection-end-line="44" selection-end-column="29" />
+            <state relative-caret-position="124">
+              <caret line="62" column="0" lean-forward="false" selection-start-line="62" selection-start-column="0" selection-end-line="62" selection-end-column="0" />
               <folding>
                 <element signature="e#0#30#0" expanded="true" />
               </folding>
@@ -48,110 +57,74 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="project.h" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/project.h">
+      <file leaf-file-name="CMakeLists.txt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/CMakeLists.txt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="240">
-              <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
-              <folding>
-                <element signature="e#59#89#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="fileResolver.cpp" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="1620">
-              <caret line="108" column="61" selection-start-line="108" selection-start-column="61" selection-end-line="108" selection-end-column="61" />
-              <folding>
-                <element signature="e#0#21#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="180">
+              <caret line="15" column="984" lean-forward="false" selection-start-line="15" selection-start-column="984" selection-end-line="15" selection-end-column="984" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="scene.cpp" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.cpp">
+      <file leaf-file-name="nier_test.h" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/nier_test.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="576">
-              <caret line="60" column="30" selection-start-line="60" selection-start-column="30" selection-end-line="60" selection-end-column="30" />
-              <folding>
-                <element signature="e#0#30#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="84">
+              <caret line="7" column="22" lean-forward="false" selection-start-line="7" selection-start-column="22" selection-end-line="7" selection-end-column="22" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="camera.h" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/camera.h">
+      <file leaf-file-name="texture.h" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wallpaperengine/texture.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="210">
-              <caret line="14" lean-forward="true" selection-start-line="14" selection-end-line="17" selection-end-column="38" />
-              <folding>
-                <element signature="e#57#87#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="132">
+              <caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="0" selection-end-line="12" selection-end-column="47" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="camera.cpp" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/camera.cpp">
+      <file leaf-file-name="texture.cpp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wallpaperengine/texture.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="576">
-              <caret line="44" column="33" selection-start-line="44" selection-start-column="33" selection-end-line="44" selection-end-column="33" />
-              <folding>
-                <element signature="e#0#19#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="156">
+              <caret line="13" column="23" lean-forward="false" selection-start-line="13" selection-start-column="23" selection-end-line="13" selection-end-column="23" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="image.cpp" pinned="false" current-in-tab="false">
+      <file leaf-file-name="image.cpp" pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/wallpaperengine/image.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="285">
-              <caret line="19" selection-start-line="19" selection-end-line="19" />
-              <folding>
-                <element signature="e#0#26#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="scene.h" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.h">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="285">
-              <caret line="19" column="8" selection-start-line="19" selection-start-column="8" selection-end-line="19" selection-end-column="29" />
+            <state relative-caret-position="392">
+              <caret line="136" column="5" lean-forward="true" selection-start-line="136" selection-start-column="5" selection-end-line="136" selection-end-column="5" />
               <folding>
-                <element signature="e#55#74#0" expanded="true" />
+                <element signature="e#0#30#0" expanded="true" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="effect.cpp" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wallpaperengine/effect.cpp">
+      <file leaf-file-name="fileResolver.cpp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="165">
-              <caret line="11" column="9" selection-start-line="11" selection-start-column="9" selection-end-line="11" selection-end-column="9" />
-              <folding>
-                <element signature="e#0#44#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="580">
+              <caret line="107" column="101" lean-forward="false" selection-start-line="107" selection-start-column="101" selection-end-line="107" selection-end-column="101" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="nier_test.cpp" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/nier_test.cpp">
+      <file leaf-file-name="scene.cpp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="306">
-              <caret line="225" column="6" selection-start-line="225" selection-start-column="6" selection-end-line="225" selection-end-column="6" />
-              <folding>
-                <element signature="e#0#30#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="544">
+              <caret line="104" column="0" lean-forward="false" selection-start-line="104" selection-start-column="0" selection-end-line="104" selection-end-column="0" />
+              <folding />
             </state>
           </provider>
         </entry>
@@ -160,11 +133,6 @@
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>_window3</find>
-      <find>_window</find>
-      <find>WinID</find>
-      <find>video_init</find>
-      <find>mDisplay =</find>
       <find>GLSL</find>
       <find>WGL_CONTEXT_MA</find>
       <find>glui</find>
@@ -190,6 +158,11 @@
       <find>Compiled shader output for</find>
       <find>getFileSystem</find>
       <find>string</find>
+      <find>::resolve</find>
+      <find>append</find>
+      <find>new wp::image</find>
+      <find>new wp::object</find>
+      <find>mater</find>
     </findStrings>
   </component>
   <component name="Git.Settings">
@@ -198,57 +171,57 @@
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/CMakeLists.txt" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Scene.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Project.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Object.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Core.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Camera.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Camera.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Core.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Object.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Project.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/Scene.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/model.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/core.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/core.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/model.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/object3d.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/object3d.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/material.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/material.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/resolver.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/resolver.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/baseResolver.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/shaderResolver.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/shaderResolver.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/baseResolver.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/resolvers.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/resolvers.cpp" />
-        <option value="$PROJECT_DIR$/BasicShaderLoader.cpp" />
         <option value="$PROJECT_DIR$/compiler.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/irrlicht.cpp" />
+        <option value="$PROJECT_DIR$/main.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/camera.h" />
         <option value="$PROJECT_DIR$/wallpaperengine/irrlicht.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/render/render.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/render/render.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/render/node.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/render/node.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/render/material.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/render.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/node.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/render.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/fs/pkg.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/fs/pkg.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/material.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/material.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/node.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/renderer.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/video/renderer.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/camera.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/config.cpp" />
         <option value="$PROJECT_DIR$/wallpaperengine/config.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/core.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/core.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/effect.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/irrlicht.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/project.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/project.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/effect.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/fs/file.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/fs/file.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/material.cpp" />
         <option value="$PROJECT_DIR$/wallpaperengine/shaders/compiler.h" />
         <option value="$PROJECT_DIR$/wallpaperengine/shaders/compiler.cpp" />
-        <option value="$PROJECT_DIR$/main.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/material.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/object3d.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/scene.cpp" />
+        <option value="$PROJECT_DIR$/CMakeLists.txt" />
+        <option value="$PROJECT_DIR$/wallpaperengine/object3d.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/scene.h" />
         <option value="$PROJECT_DIR$/wallpaperengine/object.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/image.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/image.cpp" />
         <option value="$PROJECT_DIR$/wallpaperengine/object.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/effect.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/config.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/texture.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/image.h" />
+        <option value="$PROJECT_DIR$/wallpaperengine/texture.cpp" />
         <option value="$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/effect.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/project.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/project.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/scene.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/scene.cpp" />
-        <option value="$PROJECT_DIR$/wallpaperengine/camera.h" />
-        <option value="$PROJECT_DIR$/wallpaperengine/camera.cpp" />
+        <option value="$PROJECT_DIR$/nier_test.h" />
         <option value="$PROJECT_DIR$/nier_test.cpp" />
+        <option value="$PROJECT_DIR$/s3tc.cpp" />
+        <option value="$PROJECT_DIR$/wallpaperengine/image.cpp" />
       </list>
     </option>
   </component>
@@ -263,13 +236,23 @@
   </component>
   <component name="OCFindUsagesOptions" text="false" ivars="false" properties="true" derivedClasses="false" />
   <component name="ProjectFrameBounds">
-    <option name="x" value="4" />
-    <option name="y" value="14" />
-    <option name="width" value="954" />
-    <option name="height" value="1062" />
+    <option name="x" value="1099" />
+    <option name="y" value="469" />
+    <option name="width" value="1882" />
+    <option name="height" value="1032" />
   </component>
   <component name="ProjectView">
-    <navigator proportions="" version="1">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
@@ -277,31 +260,13 @@
         <subPane>
           <expand>
             <path>
-              <item name="wallengine" type="b2602c69:ProjectViewProjectNode" />
-              <item name="linux-wallpaper-engine" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="wallengine" type="b2602c69:ProjectViewProjectNode" />
-              <item name="linux-wallpaper-engine" type="462c0819:PsiDirectoryNode" />
-              <item name="wallpaperengine" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="wallengine" type="b2602c69:ProjectViewProjectNode" />
-              <item name="linux-wallpaper-engine" type="462c0819:PsiDirectoryNode" />
-              <item name="wallpaperengine" type="462c0819:PsiDirectoryNode" />
-              <item name="fs" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="wallengine" type="b2602c69:ProjectViewProjectNode" />
-              <item name="linux-wallpaper-engine" type="462c0819:PsiDirectoryNode" />
-              <item name="wallpaperengine" type="462c0819:PsiDirectoryNode" />
-              <item name="shaders" type="462c0819:PsiDirectoryNode" />
+              <item name="wallengine" type="dad4c3:CidrFilesViewHelper$MyProjectTreeStructure$1" />
+              <item name="temp" type="462c0819:PsiDirectoryNode" />
             </path>
           </expand>
           <select />
         </subPane>
       </pane>
-      <pane id="Scope" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -337,7 +302,12 @@
     </option>
   </component>
   <component name="RunManager">
-    <configuration name="Unnamed" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="wallengine" TARGET_NAME="wallengine" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="wallengine" RUN_TARGET_NAME="wallengine" />
+    <configuration name="Unnamed" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="wallengine" TARGET_NAME="wallengine" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="wallengine" RUN_TARGET_NAME="wallengine">
+      <envs />
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
   </component>
   <component name="SvnConfiguration">
     <configuration />
@@ -360,35 +330,57 @@
       <workItem from="1530808421701" duration="4380000" />
       <workItem from="1530835045303" duration="119000" />
       <workItem from="1530857868147" duration="24030000" />
+      <workItem from="1530906949920" duration="14611000" />
+      <workItem from="1531002668909" duration="7171000" />
+      <workItem from="1531833563019" duration="18910000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="84877000" />
+    <option name="totallyTimeSpent" value="125569000" />
   </component>
   <component name="ToolWindowManager">
-    <frame x="4" y="14" width="1912" height="1062" extended-state="0" />
-    <editor active="true" />
+    <frame x="1099" y="469" width="1882" height="1032" extended-state="0" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.13778484" />
-      <window_info anchor="bottom" id="TODO" order="6" />
-      <window_info anchor="bottom" id="Messages" order="7" weight="0.3258786" />
-      <window_info anchor="bottom" id="CMake" order="11" weight="0.32861805" />
-      <window_info anchor="bottom" id="Event Log" order="8" side_tool="true" />
-      <window_info anchor="bottom" id="Find" order="1" weight="0.32800853" />
-      <window_info anchor="bottom" id="Version Control" order="9" />
-      <window_info anchor="bottom" id="Run" order="2" weight="0.33949944" />
-      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
-      <window_info anchor="bottom" id="Terminal" order="10" weight="0.3297062" />
-      <window_info id="Favorites" order="2" side_tool="true" />
-      <window_info active="true" anchor="bottom" id="Debug" order="3" visible="true" weight="0.26517573" />
-      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
-      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
-      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
-      <window_info anchor="bottom" id="Message" order="0" />
-      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17839871" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3242655" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="CMake" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32861805" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="true" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32752994" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33841133" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3297062" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.27364865" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
     </layout>
+    <layout-to-restore>
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32535365" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="CMake" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32861805" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="true" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33949944" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3297062" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17839871" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32752994" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.26441786" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+    </layout-to-restore>
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="1" />
@@ -420,428 +412,435 @@
           <option name="timeStamp" value="45" />
         </line-breakpoint>
       </breakpoints>
-      <option name="time" value="114" />
+      <option name="time" value="130" />
     </breakpoint-manager>
+    <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/res/shaders/common.h">
+    <entry file="file:///usr/include/irrlicht/matrix4.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="468">
-          <caret line="39" column="1" selection-start-line="39" selection-start-column="1" selection-end-line="39" selection-end-column="1" />
+        <state relative-caret-position="277">
+          <caret line="988" column="8" lean-forward="true" selection-start-line="988" selection-start-column="8" selection-end-line="988" selection-end-column="8" />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/c++/8.1.1/bits/basic_string.h">
+    <entry file="file:///usr/include/irrlicht/irrList.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="227">
-          <caret line="6032" selection-start-line="6032" selection-end-line="6032" />
+        <state relative-caret-position="204">
+          <caret line="19" column="6" lean-forward="false" selection-start-line="19" selection-start-column="6" selection-end-line="19" selection-end-column="6" />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/c++/8.1.1/bits/stl_iterator.h">
+    <entry file="file:///usr/include/irrlicht/SMaterial.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="220">
-          <caret line="845" selection-start-line="845" selection-end-line="845" />
+        <state relative-caret-position="262">
+          <caret line="491" column="53" lean-forward="false" selection-start-line="491" selection-start-column="48" selection-end-line="491" selection-end-column="53" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/res/shaders/effects/waterripple_opengl.frag">
+    <entry file="file:///usr/include/irrlicht/ISceneNode.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="468">
-          <caret line="39" selection-start-line="39" selection-end-line="39" />
+        <state relative-caret-position="298">
+          <caret line="447" column="60" lean-forward="false" selection-start-line="447" selection-start-column="13" selection-end-line="447" selection-end-column="60" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/res/shaders/effects/waterripple_opengl.vert">
+    <entry file="file:///usr/include/irrlicht/IReferenceCounted.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="228">
-          <caret line="19" column="21" selection-start-line="19" selection-start-column="18" selection-end-line="19" selection-end-column="21" />
+        <state relative-caret-position="298">
+          <caret line="115" column="13" lean-forward="false" selection-start-line="115" selection-start-column="13" selection-end-line="115" selection-end-column="13" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/../lib/json-develop/include/nlohmann/json.hpp" />
-    <entry file="file:///usr/include/irrlicht/IQ3Shader.h">
+    <entry file="file:///usr/include/irrlicht/irrString.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="192">
-          <caret line="20" selection-start-line="20" selection-end-line="20" />
+        <state relative-caret-position="198">
+          <caret line="377" column="23" lean-forward="false" selection-start-line="377" selection-start-column="23" selection-end-line="377" selection-end-column="23" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/../lib/json-develop/include/nlohmann/detail/conversions/from_json.hpp" />
-    <entry file="file://$PROJECT_DIR$/CMakeLists.txt">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/pkg.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="195">
-          <caret line="13" column="64" selection-start-line="13" selection-start-column="64" selection-end-line="13" selection-end-column="64" />
+        <state relative-caret-position="1316">
+          <caret line="130" column="8" lean-forward="false" selection-start-line="130" selection-start-column="8" selection-end-line="130" selection-end-column="8" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/irrlicht/ITimer.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/pkg.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="145">
-          <caret line="13" column="47" lean-forward="true" selection-start-line="13" selection-start-column="47" selection-end-line="13" selection-end-column="47" />
+        <state relative-caret-position="108">
+          <caret line="9" column="36" lean-forward="false" selection-start-line="9" selection-start-column="36" selection-end-line="9" selection-end-column="36" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/irrlicht/fast_atof.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/video/node.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="122">
-          <caret line="308" column="19" selection-start-line="308" selection-start-column="19" selection-end-line="308" selection-end-column="19" />
+        <state relative-caret-position="0">
+          <caret line="0" column="39" lean-forward="false" selection-start-line="0" selection-start-column="39" selection-end-line="0" selection-end-column="39" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/core.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/video/renderer.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="285">
-          <caret line="19" column="34" selection-start-line="19" selection-start-column="34" selection-end-line="19" selection-end-column="34" />
+        <state relative-caret-position="60">
+          <caret line="5" column="39" lean-forward="false" selection-start-line="5" selection-start-column="39" selection-end-line="5" selection-end-column="39" />
           <folding>
-            <element signature="e#0#31#0" expanded="true" />
+            <element signature="e#57#74#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/core.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/video/renderer.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="210">
-          <caret line="14" column="8" selection-start-line="14" selection-start-column="8" selection-end-line="14" selection-end-column="61" />
+        <state relative-caret-position="12">
+          <caret line="1" column="43" lean-forward="false" selection-start-line="1" selection-start-column="43" selection-end-line="1" selection-end-column="43" />
           <folding>
-            <element signature="e#53#72#0" expanded="true" />
+            <element signature="e#0#37#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/object3d.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/camera.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="225">
-          <caret line="15" column="38" selection-start-line="15" selection-start-column="38" selection-end-line="15" selection-end-column="38" />
+        <state relative-caret-position="168">
+          <caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="17" selection-end-column="38" />
           <folding>
-            <element signature="e#40#61#0" expanded="true" />
-            <element signature="e#182#194#0" expanded="true" />
-            <element signature="e#267#276#0" expanded="true" />
-            <element signature="e#260#262#0" expanded="true" />
+            <element signature="e#57#87#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/object3d.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/config.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="30">
-          <caret line="2" selection-start-line="2" selection-end-line="2" />
-          <folding>
-            <element signature="e#354#366#0" expanded="true" />
-            <element signature="e#410#419#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="0">
+          <caret line="0" column="35" lean-forward="false" selection-start-line="0" selection-start-column="35" selection-end-line="0" selection-end-column="35" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/shaderResolver.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/config.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="135">
-          <caret line="9" column="18" selection-start-line="9" selection-start-column="18" selection-end-line="9" selection-end-column="18" />
+        <state relative-caret-position="48">
+          <caret line="4" column="27" lean-forward="false" selection-start-line="4" selection-start-column="27" selection-end-line="4" selection-end-column="27" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/shaderResolver.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/core.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="180">
-          <caret line="12" column="1" selection-start-line="12" selection-start-column="1" selection-end-line="12" selection-end-column="1" />
+        <state relative-caret-position="252">
+          <caret line="21" column="1" lean-forward="true" selection-start-line="21" selection-start-column="1" selection-end-line="21" selection-end-column="1" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/core.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="48">
+          <caret line="4" column="30" lean-forward="false" selection-start-line="4" selection-start-column="30" selection-end-line="4" selection-end-column="30" />
           <folding>
-            <element signature="e#40#61#0" expanded="true" />
+            <element signature="e#53#72#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/material.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/irrlicht.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="120">
-          <caret line="8" column="38" selection-start-line="8" selection-start-column="38" selection-end-line="8" selection-end-column="38" />
+        <state relative-caret-position="0">
+          <caret line="0" column="37" lean-forward="false" selection-start-line="0" selection-start-column="37" selection-end-line="0" selection-end-column="37" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/material.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/irrlicht.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="150">
-          <caret line="10" column="5" selection-start-line="10" selection-start-column="5" selection-end-line="11" selection-end-column="33" />
+        <state relative-caret-position="132">
+          <caret line="11" column="43" lean-forward="false" selection-start-line="11" selection-start-column="43" selection-end-line="12" selection-end-column="52" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/resolvers.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/project.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="150">
-          <caret line="10" column="9" lean-forward="true" selection-start-line="10" selection-start-column="9" selection-end-line="10" selection-end-column="9" />
+        <state relative-caret-position="60">
+          <caret line="5" column="34" lean-forward="false" selection-start-line="5" selection-start-column="34" selection-end-line="5" selection-end-column="34" />
+          <folding>
+            <element signature="e#59#89#0" expanded="false" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/resolvers.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/effect.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="135">
-          <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" selection-end-column="34" />
+        <state relative-caret-position="72">
+          <caret line="6" column="12" lean-forward="false" selection-start-line="6" selection-start-column="12" selection-end-line="6" selection-end-column="12" />
           <folding>
-            <element signature="e#0#25#0" expanded="true" />
+            <element signature="e#57#85#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/nier_test.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/effect.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="105">
-          <caret line="7" column="42" selection-start-line="7" selection-start-column="42" selection-end-line="7" selection-end-column="42" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <element signature="e#0#44#0" expanded="false" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/irrlicht/IrrlichtDevice.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/file.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="201">
-          <caret line="91" column="26" lean-forward="true" selection-start-line="91" selection-start-column="26" selection-end-line="91" selection-end-column="26" />
+        <state relative-caret-position="144">
+          <caret line="12" column="49" lean-forward="false" selection-start-line="12" selection-start-column="49" selection-end-line="12" selection-end-column="49" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/irrlicht/IFileSystem.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/file.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="213">
-          <caret line="280" column="22" selection-start-line="280" selection-start-column="17" selection-end-line="280" selection-end-column="22" />
+        <state relative-caret-position="144">
+          <caret line="12" column="64" lean-forward="false" selection-start-line="12" selection-start-column="64" selection-end-line="12" selection-end-column="64" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/irrlicht.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/shaders/compiler.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="75">
-          <caret line="5" column="35" selection-start-line="5" selection-start-column="35" selection-end-line="5" selection-end-column="35" />
+        <state relative-caret-position="432">
+          <caret line="41" column="35" lean-forward="false" selection-start-line="41" selection-start-column="35" selection-end-line="41" selection-end-column="35" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/irrlicht.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/shaders/compiler.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="45">
-          <caret line="3" column="19" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
+        <state relative-caret-position="72">
+          <caret line="9" column="0" lean-forward="false" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/config.h">
+    <entry file="file://$PROJECT_DIR$/main.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="180">
-          <caret line="12" column="15" lean-forward="true" selection-start-line="12" selection-start-column="15" selection-end-line="15" selection-end-column="41" />
-          <folding>
-            <element signature="e#57#74#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="530">
+          <caret line="79" column="0" lean-forward="false" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/shaders/compiler.h">
+    <entry file="file://$PROJECT_DIR$/nlohmann/detail/input/json_sax.hpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="422">
-          <caret line="59" column="26" selection-start-line="59" selection-start-column="26" selection-end-line="59" selection-end-column="26" />
-          <folding>
-            <element signature="e#69#99#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="208">
+          <caret line="246" column="0" lean-forward="false" selection-start-line="246" selection-start-column="0" selection-end-line="246" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/nlohmann/detail/input/json_sax.hpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="220">
-          <caret line="246" selection-start-line="246" selection-end-line="246" />
+        <state relative-caret-position="420">
+          <caret line="38" column="15" lean-forward="false" selection-start-line="38" selection-start-column="15" selection-end-line="38" selection-end-column="15" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/shaders/compiler.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/project.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="435">
-          <caret line="187" column="29" selection-start-line="187" selection-start-column="20" selection-end-line="187" selection-end-column="29" />
-          <folding>
-            <element signature="e#0#30#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="96">
+          <caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/irrlicht/irrAllocator.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/material.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="330">
-          <caret line="24" selection-start-line="24" selection-end-line="24" />
+        <state relative-caret-position="48">
+          <caret line="4" column="30" lean-forward="false" selection-start-line="4" selection-start-column="30" selection-end-line="4" selection-end-column="30" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/main.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/material.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="501">
-          <caret line="68" selection-start-line="68" selection-end-line="68" />
-          <folding>
-            <element signature="e#0#19#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="60">
+          <caret line="10" column="5" lean-forward="true" selection-start-line="10" selection-start-column="5" selection-end-line="47" selection-end-column="9" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/irrlicht/irrString.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/video/material.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="265">
-          <caret line="89" selection-start-line="89" selection-end-line="89" />
+        <state relative-caret-position="576">
+          <caret line="49" column="9" lean-forward="true" selection-start-line="49" selection-start-column="9" selection-end-line="60" selection-end-column="9" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/nlohmann/json.hpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/object3d.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="173">
-          <caret line="1080" column="130" selection-start-line="1080" selection-start-column="124" selection-end-line="1080" selection-end-column="130" />
+        <state relative-caret-position="312">
+          <caret line="26" column="0" lean-forward="false" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
+          <folding>
+            <element signature="e#61#100#0" expanded="false" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/object.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="255">
-          <caret line="17" column="30" selection-start-line="17" selection-start-column="30" selection-end-line="17" selection-end-column="30" />
+        <state relative-caret-position="168">
+          <caret line="14" column="17" lean-forward="false" selection-start-line="14" selection-start-column="17" selection-end-line="14" selection-end-column="17" />
           <folding>
-            <element signature="e#57#76#0" expanded="true" />
+            <element signature="e#55#74#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/image.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/object.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="195">
-          <caret line="13" column="28" selection-start-line="13" selection-start-column="28" selection-end-line="13" selection-end-column="28" />
+        <state relative-caret-position="336">
+          <caret line="28" column="27" lean-forward="false" selection-start-line="28" selection-start-column="27" selection-end-line="28" selection-end-column="27" />
           <folding>
-            <element signature="e#55#83#0" expanded="true" />
+            <element signature="e#57#76#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/config.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/camera.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="180">
-          <caret line="12" column="8" selection-start-line="12" selection-start-column="8" selection-end-line="12" selection-end-column="8" />
+        <state relative-caret-position="156">
+          <caret line="14" column="12" lean-forward="false" selection-start-line="14" selection-start-column="12" selection-end-line="14" selection-end-column="44" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.h">
+    <entry file="file:///usr/include/c++/8.1.1/bits/stl_iterator.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="330">
-          <caret line="27" column="12" selection-start-line="27" selection-start-column="12" selection-end-line="27" selection-end-column="12" />
-          <folding>
-            <element signature="e#61#78#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="217">
+          <caret line="793" column="0" lean-forward="false" selection-start-line="793" selection-start-column="0" selection-end-line="793" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/wallpaperengine/object.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="309">
-          <caret line="105" column="59" selection-start-line="105" selection-start-column="59" selection-end-line="105" selection-end-column="59" />
+        <state relative-caret-position="530">
+          <caret line="124" column="0" lean-forward="false" selection-start-line="124" selection-start-column="0" selection-end-line="124" selection-end-column="0" />
           <folding>
-            <element signature="e#0#30#0" expanded="true" />
+            <element signature="e#0#30#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file:///usr/include/c++/8.1.1/ext/new_allocator.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/video/material.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="212">
-          <caret line="110" selection-start-line="110" selection-end-line="110" />
+        <state relative-caret-position="156">
+          <caret line="15" column="69" lean-forward="true" selection-start-line="15" selection-start-column="69" selection-end-line="16" selection-end-column="27" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/effect.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/video/node.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="195">
-          <caret line="13" column="30" selection-start-line="13" selection-start-column="30" selection-end-line="13" selection-end-column="30" />
-          <folding>
-            <element signature="e#57#85#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/image.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/object3d.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="285">
-          <caret line="19" selection-start-line="19" selection-end-line="19" />
-          <folding>
-            <element signature="e#0#26#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="12">
+          <caret line="1" column="0" lean-forward="false" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/image.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1620">
-          <caret line="108" column="61" selection-start-line="108" selection-start-column="61" selection-end-line="108" selection-end-column="61" />
-          <folding>
-            <element signature="e#0#21#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="72">
+          <caret line="6" column="44" lean-forward="false" selection-start-line="6" selection-start-column="44" selection-end-line="6" selection-end-column="44" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/effect.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/texture.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="165">
-          <caret line="11" column="9" selection-start-line="11" selection-start-column="9" selection-end-line="11" selection-end-column="9" />
-          <folding>
-            <element signature="e#0#44#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="132">
+          <caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="0" selection-end-line="12" selection-end-column="47" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/project.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/texture.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="240">
-          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
-          <folding>
-            <element signature="e#59#89#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="156">
+          <caret line="13" column="23" lean-forward="false" selection-start-line="13" selection-start-column="23" selection-end-line="13" selection-end-column="23" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.h">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="285">
-          <caret line="19" column="8" selection-start-line="19" selection-start-column="8" selection-end-line="19" selection-end-column="29" />
-          <folding>
-            <element signature="e#55#74#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="544">
+          <caret line="104" column="0" lean-forward="false" selection-start-line="104" selection-start-column="0" selection-end-line="104" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/scene.cpp">
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/fs/fileResolver.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="576">
-          <caret line="60" column="30" selection-start-line="60" selection-start-column="30" selection-end-line="60" selection-end-column="30" />
-          <folding>
-            <element signature="e#0#30#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="580">
+          <caret line="107" column="101" lean-forward="false" selection-start-line="107" selection-start-column="101" selection-end-line="107" selection-end-column="101" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/camera.h">
+    <entry file="file://$PROJECT_DIR$/nier_test.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="210">
-          <caret line="14" lean-forward="true" selection-start-line="14" selection-end-line="17" selection-end-column="38" />
-          <folding>
-            <element signature="e#57#87#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="84">
+          <caret line="7" column="22" lean-forward="false" selection-start-line="7" selection-start-column="22" selection-end-line="7" selection-end-column="22" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/camera.cpp">
+    <entry file="file://$PROJECT_DIR$/CMakeLists.txt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="576">
-          <caret line="44" column="33" selection-start-line="44" selection-start-column="33" selection-end-line="44" selection-end-column="33" />
-          <folding>
-            <element signature="e#0#19#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="180">
+          <caret line="15" column="984" lean-forward="false" selection-start-line="15" selection-start-column="984" selection-end-line="15" selection-end-column="984" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wallpaperengine/project.cpp">
+    <entry file="file://$PROJECT_DIR$/nier_test.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="591">
-          <caret line="44" column="29" selection-start-line="44" selection-start-column="29" selection-end-line="44" selection-end-column="29" />
+        <state relative-caret-position="124">
+          <caret line="62" column="0" lean-forward="false" selection-start-line="62" selection-start-column="0" selection-end-line="62" selection-end-column="0" />
           <folding>
             <element signature="e#0#30#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/nier_test.cpp">
+    <entry file="file://$PROJECT_DIR$/s3tc.cpp">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1592">
+          <caret line="505" column="28" lean-forward="true" selection-start-line="505" selection-start-column="28" selection-end-line="505" selection-end-column="28" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/wallpaperengine/image.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="306">
-          <caret line="225" column="6" selection-start-line="225" selection-start-column="6" selection-end-line="225" selection-end-column="6" />
+        <state relative-caret-position="392">
+          <caret line="136" column="5" lean-forward="true" selection-start-line="136" selection-start-column="5" selection-end-line="136" selection-end-column="5" />
           <folding>
             <element signature="e#0#30#0" expanded="true" />
           </folding>

+ 1 - 1
CMakeLists.txt

@@ -13,6 +13,6 @@ find_package(Irrlicht REQUIRED)
 
 include_directories(${X11_INCLUDE_DIR} ${IRRLICHT_INCLUDE_DIR} .)
 
-add_executable(wallengine main.cpp common.h nier_test.cpp wallpaperengine/shaders/compiler.h wallpaperengine/shaders/compiler.cpp nier_test.h wallpaperengine/project.cpp wallpaperengine/project.h wallpaperengine/scene.cpp wallpaperengine/scene.h wallpaperengine/object.cpp wallpaperengine/object.h wallpaperengine/camera.cpp wallpaperengine/camera.h wallpaperengine/core.cpp wallpaperengine/core.h wallpaperengine/image.cpp wallpaperengine/image.h wallpaperengine/object3d.cpp wallpaperengine/object3d.h wallpaperengine/effect.cpp wallpaperengine/effect.h wallpaperengine/material.cpp wallpaperengine/material.h wallpaperengine/fs/fileResolver.cpp wallpaperengine/fs/fileResolver.h wallpaperengine/irrlicht.cpp wallpaperengine/irrlicht.h wallpaperengine/config.cpp wallpaperengine/config.h)
+add_executable(wallengine main.cpp common.h nier_test.cpp wallpaperengine/shaders/compiler.h wallpaperengine/shaders/compiler.cpp nier_test.h wallpaperengine/project.cpp wallpaperengine/project.h wallpaperengine/scene.cpp wallpaperengine/scene.h wallpaperengine/object.cpp wallpaperengine/object.h wallpaperengine/camera.cpp wallpaperengine/camera.h wallpaperengine/core.cpp wallpaperengine/core.h wallpaperengine/image.cpp wallpaperengine/image.h wallpaperengine/object3d.cpp wallpaperengine/object3d.h wallpaperengine/effect.cpp wallpaperengine/effect.h wallpaperengine/fs/fileResolver.cpp wallpaperengine/fs/fileResolver.h wallpaperengine/irrlicht.cpp wallpaperengine/irrlicht.h wallpaperengine/config.cpp wallpaperengine/config.h wallpaperengine/video/renderer.cpp wallpaperengine/video/renderer.h wallpaperengine/video/node.cpp wallpaperengine/video/node.h wallpaperengine/video/material.cpp wallpaperengine/video/material.h wallpaperengine/texture.cpp wallpaperengine/texture.h)
 
 target_link_libraries(wallengine ${X11_LIBRARIES} ${X11_Xxf86vm_LIB} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${ZLIB_LIBRARIES} ${IRRLICHT_LIBRARY})

+ 42 - 116
nier_test.cpp

@@ -2,14 +2,15 @@
 #include <cstdint>
 #include <iostream>
 #include <wallpaperengine/config.h>
+#include <wallpaperengine/video/renderer.h>
+#include <wallpaperengine/video/material.h>
 
 #include "common.h"
 #include "wallpaperengine/shaders/compiler.h"
-#include "wallpaperengine/fs/fileResolver.h"
 #include "wallpaperengine/project.h"
 #include "wallpaperengine/irrlicht.h"
+#include "nier_test.h"
 
-irr::io::path _example_base_folder = "../res/";
 irr::f32 g_AnimationSpeed = 0.1f;
 irr::f32 g_Scale = 2.5f;
 irr::f32 g_ScrollSpeed = 0.0f;
@@ -23,7 +24,6 @@ irr::f32 g_Texture0 = 0;
 irr::f32 g_Texture1 = 1;
 irr::f32 g_Texture2 = 2;
 irr::f32 g_Time = 0;
-irr::core::vector3df _map_size = irr::core::vector3df (21, 11.5f, 16);
 
 class MyShaderCallback : public irr::video::IShaderConstantSetCallBack
 {
@@ -57,98 +57,15 @@ class MyShaderCallback : public irr::video::IShaderConstantSetCallBack
     }
 };
 
-class QuadSceneNode : public irr::scene::ISceneNode
-{
-    irr::core::aabbox3d <irr::f32> m_box;
-    irr::video::S3DVertex m_vertices [4];
-    irr::video::SMaterial m_material;
-
-public:
-    QuadSceneNode (irr::scene::ISceneNode* parent, irr::scene::ISceneManager* sceneManager, int32_t id)
-            : irr::scene::ISceneNode (parent, sceneManager, id)
-    {
-        m_material.Wireframe = false;
-        m_material.Lighting = false;
-
-        /*m_vertices[0].Pos = irr::core::vector3df ( _map_size.X,  _map_size.Y, 0.0f); // bottom right
-        m_vertices[1].Pos = irr::core::vector3df ( _map_size.X, -_map_size.Y, 0.0f); // top right
-        m_vertices[2].Pos = irr::core::vector3df (-_map_size.X, -_map_size.Y, 0.0f); // top left
-        m_vertices[3].Pos = irr::core::vector3df (-_map_size.X,  _map_size.Y, 0.0f); // bottom left
-
-        m_vertices[0].TCoords = irr::core::vector2df (1.0f, 0.0f);
-        m_vertices[1].TCoords = irr::core::vector2df (1.0f, 1.0f);
-        m_vertices[2].TCoords = irr::core::vector2df (0.0f, 1.0f);
-        m_vertices[3].TCoords = irr::core::vector2df (0.0f, 0.0f);
-
-        m_vertices[0].Color = irr::video::SColor (255, 255, 255, 255);
-        m_vertices[1].Color = irr::video::SColor (255, 255, 255, 255);
-        m_vertices[2].Color = irr::video::SColor (255, 255, 255, 255);
-        m_vertices[3].Color = irr::video::SColor (255, 255, 255, 255);
-
-        m_box.reset (m_vertices[0].Pos);
-        for (int32_t i = 1; i < 4; i ++)
-        {
-            m_box.addInternalPoint (m_vertices [i].Pos);
-        }*/
-        irr::video::SColor color; color.set (255, 255, 255, 255);
-        irr::f32 xright = 1920.0f / 2.0f;
-        irr::f32 xleft = -xright;
-        irr::f32 ztop = 1080.0f / 2.0f;
-        irr::f32 zbottom = -xright;
-
-        this->m_vertices [0] = irr::video::S3DVertex (xleft,    ztop,0, 0, 0,0, color,1,0);
-        this->m_vertices [1] = irr::video::S3DVertex(xright,   ztop,0, 0, 0,0, color,0,0);
-        this->m_vertices [2] = irr::video::S3DVertex(xright,zbottom,0, 0, 0,0, color,0,1);
-        this->m_vertices [3] = irr::video::S3DVertex(xleft, zbottom,0, 0, 0,0, color,1,1);
-    }
-
-    virtual void OnRegisterSceneNode ()
-    {
-        if (IsVisible)
-            SceneManager->registerNodeForRendering (this);
-
-        ISceneNode::OnRegisterSceneNode ();
-    }
-
-    virtual void render ()
-    {
-        /*uint16_t indices[] = {
-                0, 1, 2, 3
-        };*/
-
-        uint16_t indices[] = {   0,2,3, 2,1,3, 1,0,3, 2,0,1   };
-        irr::video::IVideoDriver* driver = SceneManager->getVideoDriver ();
-
-        driver->setMaterial (m_material);
-        driver->setTransform(irr::video::ETS_WORLD, AbsoluteTransformation);
-        // driver->drawVertexPrimitiveList (m_vertices, 4, indices, 1, irr::video::EVT_STANDARD, irr::scene::EPT_QUADS, irr::video::EIT_16BIT);
-        driver->drawVertexPrimitiveList(&this->m_vertices[0], 4, &indices[0], 4, irr::video::EVT_STANDARD, irr::scene::EPT_TRIANGLES, irr::video::EIT_16BIT);
-    }
-
-    virtual const irr::core::aabbox3d <irr::f32>& getBoundingBox () const
-    {
-        return m_box;
-    }
-
-    virtual uint32_t getMaterialCount () const
-    {
-        return 1;
-    }
-
-    virtual irr::video::SMaterial& getMaterial (uint32_t i)
-    {
-        return m_material;
-    }
-};
-
 int nier_test ()
 {
-    irr::io::path _wp_engine_folder = "/home/almamu/Downloads/nier__automata_-_become_as_gods_edition/";
+    do_decompress ();
+    irr::io::path _wp_engine_folder = "/home/almamu/Development/tmp/nier__automata_-_become_as_gods_edition/";
 
     // set our working directory
     wp::fs::resolver.changeWorkingDirectory (_wp_engine_folder);
     wp::project* wp_project = new wp::project ();
-    wp::fs::resolver.changeWorkingDirectory (wp::config::path::resources);
+    /*wp::fs::resolver.changeWorkingDirectory (wp::config::path::resources);
 
     irr::io::path _water_example = wp::fs::resolver.resolve ("materials/water-intact.png");
     irr::io::path _mud_example = wp::fs::resolver.resolve ("materials/plant-on-water.png");
@@ -199,36 +116,48 @@ int nier_test ()
     irr::video::ITexture*	whiteTexture = wp::irrlicht::driver->getTexture (_white.c_str ());
 
     // get scene manager
-    irr::scene::ISceneManager* sceneManager = wp::irrlicht::device->getSceneManager ();
-
-    _map_size = wp_project->getScene ()->getCamera ()->getCenter ();
-    sceneManager->addCameraSceneNode (0, wp_project->getScene ()->getCamera ()->getCenter (), wp_project->getScene ()->getCamera ()->getEye ());
-    // sceneManager->addCameraSceneNode (0, irr::core::vector3df (0.0f, 0.0f, -_map_size.Z), irr::core::vector3df (0.0f, 0.0f, _map_size.Z));
+    irr::scene::ISceneManager* sceneManager = wp::irrlicht::device->getSceneManager ();*/
 
-    QuadSceneNode* backgroundNode = new QuadSceneNode (sceneManager->getRootSceneNode (), sceneManager, 666);
-    QuadSceneNode* waterNode = new QuadSceneNode (sceneManager->getRootSceneNode (), sceneManager, 667);
-    QuadSceneNode* mudNode = new QuadSceneNode (sceneManager->getRootSceneNode (), sceneManager, 668);
+    if (wp_project->getScene ()->isOrthogonal() == true)
+    {
+        wp::video::renderer::setupOrthographicCamera (
+                wp_project->getScene ()->getProjectionWidth (),
+                wp_project->getScene ()->getProjectionHeight (),
+                wp_project->getScene ()->getCamera ()->getCenter (),
+                wp_project->getScene ()->getCamera ()->getEye (),
+                wp_project->getScene ()->getCamera ()->getUp ().X,
+                wp_project->getScene ()->getCamera ()->getUp ().Y
+        );
+    }
+    else
+    {
+        wp::irrlicht::device->getLogger ()->log ("Non-orthogonal cameras not supported yet!!");
+        return 0;
+    }
 
-    backgroundNode->getMaterial (0).setTexture (0, backgroundExample);
-    backgroundNode->setMaterialType (irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
+/*    wp::video::material* waterNode = new wp::video::material (irr::core::vector3df (960.0f, 540.0f, 0.0f), wp_project->getScene ());
+    wp::video::material* backgroundNode = new wp::video::material (irr::core::vector3df (960.0f, 540.0f, 0.0f), wp_project->getScene ());
+    wp::video::material* mudNode = new wp::video::material (irr::core::vector3df (960.0f, 540.0f, 0.0f), wp_project->getScene ());
 
-    mudNode->getMaterial (0).setTexture (0, mudTexture);
-    mudNode->setMaterialType (irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
+    backgroundNode->getMaterial ().setTexture (0, backgroundExample);
+    backgroundNode->setType (irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
 
-    waterNode->setMaterialFlag(irr::video::EMF_LIGHTING, false);
-    waterNode->setMaterialFlag(irr::video::EMF_BLEND_OPERATION, true);
+    mudNode->getMaterial ().setTexture (0, mudTexture);
+    mudNode->setType (irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
 
-    waterNode->getMaterial (0).setTexture (0, waterTexture);
-    waterNode->getMaterial (0).setTexture (1, waterRippleNormalTexture);
-    waterNode->getMaterial (0).setTexture (2, whiteTexture);
-    waterNode->setMaterialType ( (irr::video::E_MATERIAL_TYPE) materialType1);
+    waterNode->setFlag (irr::video::EMF_LIGHTING, false);
+    waterNode->setFlag (irr::video::EMF_BLEND_OPERATION, true);
 
-    /*irr::core::matrix4 identity; identity.makeIdentity ();
-    irr::core::matrix4 orthoProjection; orthoProjection.buildProjectionMatrixOrthoLH (wp_project->getScene ()->getCamera ()->getEye ().X, wp_project->getScene ()->getCamera ()->getEye ().Y, wp_project->getScene ()->getCamera ()->getEye ().Z, wp_project->getScene ()->getCamera ()->getCenter ().Z);
+    waterNode->getMaterial ().setTexture (0, waterTexture);
+    waterNode->getMaterial ().setTexture (1, waterRippleNormalTexture);
+    waterNode->getMaterial ().setTexture (2, whiteTexture);
+    waterNode->setType ( (irr::video::E_MATERIAL_TYPE) materialType1);*/
 
-    wp::irrlicht::driver->setTransform (irr::video::ETS_PROJECTION, orthoProjection);
-    wp::irrlicht::driver->setTransform (irr::video::ETS_VIEW, identity);
-    wp::irrlicht::driver->setTransform (irr::video::ETS_WORLD, identity);*/
+    // register nodes
+    wp::video::renderer::queueNode (wp_project->getScene ());
+    // wp::video::renderer::queueNode (backgroundNode);
+    // wp::video::renderer::queueNode (mudNode);
+    // wp::video::renderer::queueNode (waterNode);
 
     int32_t lastTime = 0;
     int32_t minimumTime = 1000 / 90;
@@ -243,10 +172,7 @@ int nier_test ()
 
             if (currentTime - lastTime > minimumTime)
             {
-                wp::irrlicht::driver->beginScene (true, true, irr::video::SColor(0, 0, 0, 0));
-                sceneManager->drawAll ();
-                wp::irrlicht::driver->endScene ();
-
+                wp::video::renderer::render ();
                 lastTime = currentTime;
             }
             else

+ 1 - 2
nier_test.h

@@ -5,8 +5,7 @@
 #ifndef WALLENGINE_NIER_TEST_H
 #define WALLENGINE_NIER_TEST_H
 
-extern irr::io::path _example_base_folder;
-
+void do_decompress ();
 int nier_test ();
 
 #endif //WALLENGINE_NIER_TEST_H

+ 102 - 88
wallpaperengine/fs/fileResolver.cpp

@@ -1,123 +1,137 @@
+#include <cstdint>
 #include <sys/stat.h>
+
+// filesystem includes
+#include <wallpaperengine/fs/fileResolver.h>
+
+// engine includes
 #include <wallpaperengine/irrlicht.h>
-#include "fileResolver.h"
 
 namespace wp
 {
-    fs::fileResolver::fileResolver ()
+    namespace fs
     {
-        this->m_environment.push_back (".");
-    }
+        fileResolver::fileResolver ()
+        {
+            this->m_environment.push_back (".");
+        }
 
-    fs::fileResolver::fileResolver (std::vector<irr::io::path> environment)
-    {
-        this->m_environment.push_back (".");
-        this->m_environment.insert (this->m_environment.end (), environment.begin (), environment.end ());
-    }
-    void fs::fileResolver::appendEnvironment (irr::io::path path)
-    {
-        this->m_environment.push_back (wp::irrlicht::device->getFileSystem ()->getAbsolutePath (path));
-    }
+        fileResolver::fileResolver (std::vector<irr::io::path> environment)
+        {
+            this->m_environment.push_back (".");
+            this->m_environment.insert (this->m_environment.end (), environment.begin (), environment.end ());
+        }
 
-    void fs::fileResolver::removeEnvironment(irr::io::path path)
-    {
-        std::vector<irr::io::path>::const_iterator cur = this->m_environment.begin ();
-        std::vector<irr::io::path>::const_iterator end = this->m_environment.end ();
-        irr::io::path absolute = wp::irrlicht::device->getFileSystem ()->getAbsolutePath (path);
+        void fileResolver::appendEnvironment (irr::io::path path)
+        {
+            this->m_environment.push_back (wp::irrlicht::device->getFileSystem ()->getAbsolutePath (path));
+        }
 
-        for (; cur != end; cur ++)
+        void fileResolver::removeEnvironment(irr::io::path path)
         {
-            if (*cur == path)
+            std::vector<irr::io::path>::const_iterator cur = this->m_environment.begin ();
+            std::vector<irr::io::path>::const_iterator end = this->m_environment.end ();
+            irr::io::path absolute = wp::irrlicht::device->getFileSystem ()->getAbsolutePath (path);
+
+            for (; cur != end; cur ++)
             {
-                this->m_environment.erase (cur);
-                return;
+                if (*cur == path)
+                {
+                    this->m_environment.erase (cur);
+                    return;
+                }
             }
         }
-    }
 
-    void fs::fileResolver::prependEnvironment (irr::io::path path)
-    {
-        this->m_environment.insert (
-                this->m_environment.begin (),
-                wp::irrlicht::device->getFileSystem ()->getAbsolutePath (path)
-        );
-    }
-
-    void fs::fileResolver::changeWorkingDirectory (irr::io::path newpath)
-    {
-        this->m_environment.erase (this->m_environment.begin ());
-        this->prependEnvironment (newpath);
-    }
+        void fileResolver::prependEnvironment (irr::io::path path)
+        {
+            this->m_environment.insert (
+                    this->m_environment.begin (),
+                    wp::irrlicht::device->getFileSystem ()->getAbsolutePath (path)
+            );
+        }
 
-    irr::io::path fs::fileResolver::getWorkingDirectory ()
-    {
-        return *this->m_environment.begin ();
-    }
+        void fileResolver::changeWorkingDirectory (irr::io::path newpath)
+        {
+            this->m_environment.erase (this->m_environment.begin ());
+            this->prependEnvironment (newpath);
+        }
 
-    fs::fileResolver fs::fileResolver::clone ()
-    {
-        return fileResolver (this->m_environment);
-    }
+        irr::io::path fileResolver::getWorkingDirectory ()
+        {
+            return *this->m_environment.begin ();
+        }
 
-    irr::io::path fs::fileResolver::resolve (irr::io::path name)
-    {
-        std::vector<irr::io::path>::const_iterator cur = this->m_environment.begin ();
-        std::vector<irr::io::path>::const_iterator end = this->m_environment.end ();
-        irr::io::path tmp = "";
+        fs::fileResolver fileResolver::clone ()
+        {
+            return fileResolver (this->m_environment);
+        }
 
-        // try to resolve the path
-        for (; cur != end; cur ++)
+        irr::io::path fileResolver::resolve (irr::io::path name)
         {
-            tmp = *cur;
-            tmp += "/";
-            tmp += name;
+            std::vector<irr::io::path>::const_iterator cur = this->m_environment.begin ();
+            std::vector<irr::io::path>::const_iterator end = this->m_environment.end ();
+            irr::io::path tmp = "";
 
-            if (wp::irrlicht::device->getFileSystem ()->existFile (tmp) == true)
+            // try to resolve the path
+            for (; cur != end; cur ++)
             {
-                wp::irrlicht::device->getLogger ()->log ("Resolved file to", tmp.c_str ());
-                return tmp;
+                tmp = *cur;
+                tmp += "/";
+                tmp += name;
+
+                if (wp::irrlicht::device->getFileSystem ()->existFile (tmp) == true)
+                {
+                    wp::irrlicht::device->getLogger ()->log ("Resolved file to", tmp.c_str ());
+
+                    return tmp;
+                }
             }
+
+            wp::irrlicht::device->getLogger ()->log ("Failed resolving file ", name.c_str (), irr::ELL_ERROR);
+
+            return "";
         }
 
-        wp::irrlicht::device->getLogger ()->log ("Failed resolving file ", name.c_str (), irr::ELL_ERROR);
+        irr::io::path fileResolver::resolveOnWorkingDirectory (irr::io::path name)
+        {
+            irr::io::path file = *this->m_environment.begin () + "/" + name;
+
+            if (wp::irrlicht::device->getFileSystem ()->existFile (file) == true)
+            {
+                wp::irrlicht::device->getLogger ()->log ("Resolved file in working directory to", file.c_str ());
 
-        return "";
-    }
+                // perform stat over the file to check for directory
+                return file;
+            }
 
-    irr::io::path fs::fileResolver::resolveOnWorkingDirectory (irr::io::path name)
-    {
-        irr::io::path file = *this->m_environment.begin () + "/" + name;
+            wp::irrlicht::device->getLogger ()->log ("Failed resolving file on working directory for ", name.c_str (), irr::ELL_ERROR);
 
-        if (wp::irrlicht::device->getFileSystem ()->existFile (file) == true)
-        {
-            wp::irrlicht::device->getLogger ()->log ("Resolved file in working directory to", file.c_str ());
-            return file;
+            return "";
         }
 
-        return "";
-    }
+        irr::io::path fileResolver::resolve (json name)
+        {
+            std::string tmp = name;
+            return this->resolve (tmp.c_str ());
+        }
 
-    irr::io::path fs::fileResolver::resolve (json name)
-    {
-        std::string tmp = name;
-        return this->resolve (tmp.c_str ());
-    }
+        irr::io::path fileResolver::resolveOnWorkingDirectory (json name)
+        {
+            std::string tmp = name;
+            return this->resolveOnWorkingDirectory (tmp.c_str ());
+        }
 
-    irr::io::path fs::fileResolver::resolveOnWorkingDirectory (json name)
-    {
-        std::string tmp = name;
-        return this->resolveOnWorkingDirectory (tmp.c_str ());
-    }
+        irr::io::path fileResolver::resolve (const char* name)
+        {
+            return this->resolve (irr::io::path(name));
+        }
 
-    irr::io::path fs::fileResolver::resolve (const char* name)
-    {
-        return this->resolve (irr::io::path(name));
-    }
+        irr::io::path fileResolver::resolveOnWorkingDirectory (const char* name)
+        {
+            return this->resolveOnWorkingDirectory(irr::io::path (name));
+        }
 
-    irr::io::path fs::fileResolver::resolveOnWorkingDirectory (const char* name)
-    {
-        return this->resolveOnWorkingDirectory(irr::io::path (name));
+        fileResolver resolver;
     }
-
-    fs::fileResolver fs::resolver;
 }

+ 2 - 3
wallpaperengine/fs/fileResolver.h

@@ -9,9 +9,8 @@
 namespace wp
 {
     using json = nlohmann::json;
-    class fs
+    namespace fs
     {
-    public:
         class fileResolver
         {
         public:
@@ -37,7 +36,7 @@ namespace wp
             std::vector<irr::io::path> m_environment;
         };
 
-        static fileResolver resolver;
+        extern fileResolver resolver;
     };
 }
 

+ 137 - 10
wallpaperengine/image.cpp

@@ -1,23 +1,150 @@
-#include <irrlicht/path.h>
+#include <irrlicht/irrlicht.h>
+#include <fstream>
+
 #include <wallpaperengine/fs/fileResolver.h>
-#include "object3d.h"
-#include "image.h"
+#include <wallpaperengine/object3d.h>
+#include <wallpaperengine/image.h>
+
+#include <wallpaperengine/irrlicht.h>
+#include <wallpaperengine/core.h>
 
 namespace wp
 {
-    image::image (json json_data) : object3d (object3d::Type::Type_Image)
+    image::image (json json_data, wp::scene* scene) : object3d (object3d::Type::Type_Material, scene)
     {
-        json::const_iterator visible = json_data.find ("visible");
-        json::const_iterator file = json_data.find ("image");
+        json::const_iterator visible_it = json_data.find ("visible");
+        json::const_iterator file_it = json_data.find ("image");
+        json::const_iterator origin_it = json_data.find ("origin");
+
+        if (visible_it != json_data.end () && (*visible_it).is_boolean () == true)
+        {
+            this->m_visible = *visible_it;
+        }
 
-        if (visible != json_data.end () && (*visible).is_boolean () == true)
+        // basic texture, main thing to assign first
+        if (file_it != json_data.end () && (*file_it).is_string () == true)
         {
-            this->m_visible = *visible;
+            this->m_file = wp::fs::resolver.resolve (*file_it);
+
+            this->m_content = "";
+            std::ifstream _in (this->m_file.c_str ());
+            this->m_content.append (std::istreambuf_iterator<char> (_in), std::istreambuf_iterator<char> ());
+            json content = json::parse (this->m_content);
+            json::const_iterator it = content.find ("material");
+
+            if (it != content.end () && (*it).is_string () == true)
+            {
+                irr::io::path materialfile = wp::fs::resolver.resolveOnWorkingDirectory ((*it));
+
+                std::ifstream _in (materialfile.c_str ());
+                std::string texturejson_content = "";
+                texturejson_content.append (std::istreambuf_iterator<char> (_in), std::istreambuf_iterator<char> ());
+                json materialcontent = json::parse (texturejson_content);
+
+                // change working directory for the resolver to the materials folder
+                this->m_resolver = wp::fs::resolver.clone ();
+                this->m_resolver.changeWorkingDirectory(this->m_resolver.resolveOnWorkingDirectory ("materials"));
+
+                // now try to read the texture if any
+                json::const_iterator it = materialcontent.find ("passes");
+
+                if (it != materialcontent.end () && (*it).is_array() == true)
+                {
+                    json::const_iterator passesCur = (*it).begin ();
+                    json::const_iterator passesEnd = (*it).end ();
+
+                    for (; passesCur != passesEnd; passesCur ++)
+                    {
+                        json::const_iterator texture = (*passesCur).find ("textures");
+
+                        if (texture != (*passesCur).end () && (*texture).is_array () == true)
+                        {
+                            json::const_iterator texturesCur = (*texture).begin ();
+                            json::const_iterator texturesEnd = (*texture).end ();
+
+                            for (; texturesCur != texturesEnd; texturesCur ++)
+                            {
+                                irr::io::path texturePath = this->m_resolver.resolveOnWorkingDirectory ((*texturesCur));
+
+                                this->m_textures.push_back (new wp::texture (texturePath));
+                            }
+                        }
+                    }
+                }
+            }
         }
 
-        if (file != json_data.end () && (*file).is_string () == true)
+        // TODO: CHECK EFFECT PASSES HERE SO WE CAN TAKE IN ACCOUNT THE EXTRA TEXTURES FOR SHADERS, ETC
+
+        if (origin_it != json_data.end ())
         {
-            this->m_file = wp::fs::resolver.resolve (*file);
+            std::string origin = *origin_it;
+            this->m_origin = wp::core::ato3vf (origin.c_str ());
+        }
+        else
+        {
+            // TOOD: CHANGE TO CENTER?
+            this->m_origin = irr::core::vector3df (0.0f, 0.0f, 0.0f);
+        }
+
+        // initialize actual material properties
+        irr::f32 xright = this->m_origin.X;
+        irr::f32 xleft = -this->m_origin.X;
+        irr::f32 ztop = this->m_origin.Y;
+        irr::f32 zbottom = -this->m_origin.Y;
+        irr::f32 z = this->m_scene->getCamera ()->getEye ().Z;
+
+        m_vertices [0].Pos = irr::core::vector3df (xleft,   ztop,    z); // top left
+        m_vertices [1].Pos = irr::core::vector3df (xright,  ztop,    z); // top right
+        m_vertices [2].Pos = irr::core::vector3df (xright,  zbottom, z); // bottom right
+        m_vertices [3].Pos = irr::core::vector3df (xleft,   zbottom, z); // bottom left
+
+        m_vertices [0].TCoords = irr::core::vector2df (1.0f, 0.0f);
+        m_vertices [1].TCoords = irr::core::vector2df (0.0f, 0.0f);
+        m_vertices [2].TCoords = irr::core::vector2df (0.0f, 1.0f);
+        m_vertices [3].TCoords = irr::core::vector2df (1.0f, 1.0f);
+
+        m_vertices [0].Color = irr::video::SColor (255, 255, 255, 255);
+        m_vertices [1].Color = irr::video::SColor (255, 255, 255, 255);
+        m_vertices [2].Color = irr::video::SColor (255, 255, 255, 255);
+        m_vertices [3].Color = irr::video::SColor (255, 255, 255, 255);
+
+        // once textures are defined, prepare them to be displayed
+        std::vector<wp::texture*>::const_iterator cur = this->m_textures.begin ();
+        std::vector<wp::texture*>::const_iterator end = this->m_textures.end ();
+
+        for (int i = 0; cur != end; cur ++, i ++)
+        {
+            this->getMaterial ().setTexture (i, (*cur)->getIrrTexture ());
         }
     }
+
+
+
+    void image::setFlag(irr::video::E_MATERIAL_FLAG flag, bool newvalue)
+    {
+        this->getMaterial ().setFlag (flag, newvalue);
+    }
+
+    void image::setType(irr::video::E_MATERIAL_TYPE newType)
+    {
+        this->getMaterial ().MaterialType = newType;
+    }
+
+    irr::video::SMaterial& image::getMaterial ()
+    {
+        return this->m_material;
+    }
+
+    void image::render ()
+    {
+        uint16_t indices[] =
+        {
+                0, 1, 2, 3
+        };
+
+        wp::irrlicht::driver->setMaterial (this->m_material);
+        wp::irrlicht::driver->drawVertexPrimitiveList (this->m_vertices, 4, indices, 1, irr::video::EVT_STANDARD, irr::scene::EPT_QUADS, irr::video::EIT_16BIT);
+    }
+
 }

+ 17 - 2
wallpaperengine/image.h

@@ -2,7 +2,10 @@
 #define WALLENGINE_MODEL_H
 
 #include <nlohmann/json.hpp>
-#include <irrlicht/path.h>
+#include <irrlicht/irrlicht.h>
+
+#include <wallpaperengine/fs/fileResolver.h>
+#include <wallpaperengine/texture.h>
 
 namespace wp
 {
@@ -11,12 +14,24 @@ namespace wp
     class image : public object3d
     {
     public:
-        image(json json_data);
+        image(json json_data, wp::scene* scene);
+        irr::video::SMaterial& getMaterial ();
+        void setFlag(irr::video::E_MATERIAL_FLAG flag, bool newvalue);
+        void setType(irr::video::E_MATERIAL_TYPE newType);
+        void render ();
 
     private:
         bool m_visible;
 
+        irr::video::S3DVertex m_vertices [4];
+        irr::video::SMaterial m_material;
+
+        wp::fs::fileResolver m_resolver;
+        irr::core::vector3df m_origin;
         irr::io::path m_file;
+        std::string m_content;
+
+        std::vector<wp::texture*> m_textures;
     };
 };
 

+ 2 - 1
wallpaperengine/irrlicht.cpp

@@ -1,7 +1,8 @@
-#include "irrlicht.h"
+#include <wallpaperengine/irrlicht.h>
 
 namespace wp
 {
     irr::video::IVideoDriver* irrlicht::driver = nullptr;
     irr::IrrlichtDevice* irrlicht::device = nullptr;
+    irr::scene::ICameraSceneNode* irrlicht::camera = nullptr;
 }

+ 1 - 0
wallpaperengine/irrlicht.h

@@ -10,6 +10,7 @@ namespace wp
     public:
         static irr::video::IVideoDriver* driver;
         static irr::IrrlichtDevice* device;
+        static irr::scene::ICameraSceneNode* camera;
     };
 }
 

+ 0 - 13
wallpaperengine/material.cpp

@@ -1,13 +0,0 @@
-//
-// Created by almamu on 6/07/18.
-//
-
-#include "material.h"
-
-namespace wp
-{
-    material::material(json json_data)
-    {
-
-    }
-};

+ 0 - 17
wallpaperengine/material.h

@@ -1,17 +0,0 @@
-#ifndef WALLENGINE_MATERIAL_H
-#define WALLENGINE_MATERIAL_H
-
-#include <nlohmann/json.hpp>
-
-namespace wp
-{
-    using json = nlohmann::json;
-
-    class material
-    {
-        material(json json_data);
-    };
-}
-
-
-#endif //WALLENGINE_MATERIAL_H

+ 18 - 8
wallpaperengine/object.cpp

@@ -3,17 +3,19 @@
 #include <fstream>
 #include <nlohmann/json.hpp>
 
-#include "object.h"
-#include "core.h"
-#include "object3d.h"
-#include "image.h"
+#include <wallpaperengine/object.h>
+#include <wallpaperengine/core.h>
+#include <wallpaperengine/object3d.h>
+#include <wallpaperengine/image.h>
 
 namespace wp
 {
     using json = nlohmann::json;
 
-    object::object (json json_data)
+    object::object (json json_data, wp::scene* scene) : m_object3d (nullptr)
     {
+        this->m_scene = scene;
+
         json::const_iterator size = json_data.find ("size");
         json::const_iterator scale = json_data.find ("scale");
         json::const_iterator origin = json_data.find ("origin");
@@ -68,7 +70,7 @@ namespace wp
 
         if (image != json_data.end () && (*image).is_null () == false)
         {
-            _type = object3d::Type::Type_Image;
+            _type = object3d::Type::Type_Material;
         }
 
         if (model != json_data.end () && (*model).is_null () == false)
@@ -83,8 +85,8 @@ namespace wp
 
         switch (_type)
         {
-            case object3d::Type::Type_Image:
-                this->m_object3d = new wp::image (json_data);
+            case object3d::Type::Type_Material:
+                this->m_object3d = new wp::image (json_data, this->m_scene);
                 break;
 
             case object3d::Type::Type_Model:
@@ -115,4 +117,12 @@ namespace wp
             delete this->m_object3d;
         }
     }
+
+    void object::render ()
+    {
+        if (this->m_object3d != nullptr)
+        {
+            this->m_object3d->render ();
+        }
+    }
 }

+ 10 - 3
wallpaperengine/object.h

@@ -4,23 +4,30 @@
 #include <iostream>
 #include <irrlicht/irrlicht.h>
 #include <nlohmann/json.hpp>
-#include "effect.h"
+#include <wallpaperengine/video/node.h>
+#include <wallpaperengine/effect.h>
+#include <wallpaperengine/scene.h>
 
 namespace wp
 {
     using json = nlohmann::json;
 
     class object3d;
-    class object
+    class scene;
+
+    class object : public wp::video::node
     {
     public:
 
-        object (json json_data);
+        object (json json_data, wp::scene* scene);
         ~object ();
 
+        void render ();
     private:
         int m_id;
 
+        wp::scene* m_scene;
+
         std::string m_name;
 
         irr::core::vector2df m_size;

+ 10 - 4
wallpaperengine/object3d.cpp

@@ -1,11 +1,12 @@
-#include "object3d.h"
-#include "image.h"
+#include <wallpaperengine/object3d.h>
+#include <wallpaperengine/image.h>
 
 namespace wp
 {
-    object3d::object3d (object3d::Type type)
+    object3d::object3d (object3d::Type type, wp::scene* scene)
     {
         this->m_type = type;
+        this->m_scene = scene;
     }
 
     template <class T> T* object3d::as()
@@ -20,6 +21,11 @@ namespace wp
 
     template <> bool object3d::is<image>()
     {
-        return this->m_type == Type::Type_Image;
+        return this->m_type == Type::Type_Material;
+    }
+
+    void object3d::render ()
+    {
+
     }
 }

+ 12 - 3
wallpaperengine/object3d.h

@@ -1,24 +1,33 @@
 #ifndef WALLENGINE_OBJECT3D_H
 #define WALLENGINE_OBJECT3D_H
 
+#include <wallpaperengine/video/node.h>
+
+#include <wallpaperengine/scene.h>
+
 namespace wp
 {
-    class object3d
+    class object3d : wp::video::node
     {
     public:
         enum Type
         {
-            Type_Image = 0,
+            Type_Material = 0,
             Type_Model = 1,
             Type_Particle = 2,
             Type_None = 3
         };
 
-        object3d (Type type);
+        object3d (Type type, wp::scene* scene);
+
+        virtual void render ();
 
         template <class T> T* as();
         template <class T> bool is();
 
+    protected:
+        wp::scene* m_scene;
+
     private:
         Type m_type;
     };

+ 48 - 3
wallpaperengine/scene.cpp

@@ -2,8 +2,9 @@
 #include <iostream>
 #include <fstream>
 #include <nlohmann/json.hpp>
-#include "scene.h"
-#include "camera.h"
+
+#include <wallpaperengine/scene.h>
+#include <wallpaperengine/camera.h>
 
 namespace wp
 {
@@ -33,7 +34,25 @@ namespace wp
 
             for (; cur != end; cur ++)
             {
-                this->m_objects.push_back (new object (*cur));
+                this->m_objects.push_back (new object (*cur, this));
+            }
+        }
+
+        json::const_iterator orthogonalprojection = (*general_it).find ("orthogonalprojection");
+
+        if (orthogonalprojection != (*general_it).end () && (*orthogonalprojection).is_object () == true)
+        {
+            json::const_iterator width = (*orthogonalprojection).find ("width");
+            json::const_iterator height = (*orthogonalprojection).find ("height");
+
+            if (width != (*orthogonalprojection).end () && (*width).is_number () == true)
+            {
+                this->m_width = *width;
+            }
+
+            if (height != (*orthogonalprojection).end () && (*height).is_number () == true)
+            {
+                this->m_height= *height;
             }
         }
     }
@@ -60,4 +79,30 @@ namespace wp
     {
         return this->m_camera;
     }
+
+    bool scene::isOrthogonal ()
+    {
+        return this->m_isOrthogonal;
+    }
+
+    float scene::getProjectionWidth ()
+    {
+        return this->m_width;
+    }
+
+    float scene::getProjectionHeight ()
+    {
+        return this->m_height;
+    }
+
+    void scene::render ()
+    {
+        std::vector<object*>::const_iterator cur = this->m_objects.begin ();
+        std::vector<object*>::const_iterator end = this->m_objects.end ();
+
+        for (; cur != end; cur ++)
+        {
+            (*cur)->render ();
+        }
+    }
 }

+ 13 - 3
wallpaperengine/scene.h

@@ -4,22 +4,32 @@
 #include <iostream>
 #include <irrlicht/irrlicht.h>
 #include <nlohmann/json.hpp>
-#include "object.h"
-#include "camera.h"
+#include <wallpaperengine/object.h>
+#include <wallpaperengine/camera.h>
+#include <wallpaperengine/video/node.h>
 
 namespace wp
 {
     using json = nlohmann::json;
 
-    class scene
+    class object;
+    class scene : public wp::video::node
     {
     public:
         scene (irr::io::path file);
         ~scene ();
 
         camera* getCamera ();
+        bool isOrthogonal ();
+        float getProjectionWidth ();
+        float getProjectionHeight ();
+        void render ();
 
     private:
+        float m_width;
+        float m_height;
+        bool m_isOrthogonal;
+
         irr::io::path m_file;
         std::string m_content;
         camera* m_camera;

+ 14 - 10
wallpaperengine/shaders/compiler.cpp

@@ -2,13 +2,18 @@
 #include <iostream>
 #include <fstream>
 #include <string>
+
+// system configuration
 #include <wallpaperengine/config.h>
 
-#include "compiler.h"
-#include "nier_test.h"
-#include "common.h"
-#include "../irrlicht.h"
-#include "../fs/fileResolver.h"
+// filesystem
+#include <wallpaperengine/fs/fileResolver.h>
+
+// video engine
+#include <wallpaperengine/irrlicht.h>
+
+// shader compiler
+#include <wallpaperengine/shaders/compiler.h>
 
 namespace wp
 {
@@ -31,6 +36,8 @@ namespace wp
 
             std::ifstream _in (file.c_str ());
             this->m_content.append (std::istreambuf_iterator<char> (_in), std::istreambuf_iterator<char> ());
+
+            // append file content
             this->m_type = type;
 
             this->m_resolver = wp::fs::resolver.clone ();
@@ -179,13 +186,10 @@ namespace wp
 
         std::string compiler::lookupShaderFile (std::string filename)
         {
+            // get file information
             irr::io::path shader = this->m_resolver.resolve (filename.c_str ());
-            irr::io::IFileSystem *fs = wp::irrlicht::device->getFileSystem ();
 
-            // by default try to load from current folder
-            // we might want, in the future, to load things from different folders
-            // to provide standard functionality
-            if (fs->existFile (shader) == false)
+            if (shader == "")
             {
                 this->m_error = true;
                 this->m_errorInfo = "Cannot find file " + filename + " to include";

+ 1 - 1
wallpaperengine/shaders/compiler.h

@@ -6,7 +6,7 @@
 #include <vector>
 #include <map>
 
-#include "../fs/fileResolver.h"
+#include <wallpaperengine/fs/fileResolver.h>
 
 namespace wp
 {

+ 16 - 0
wallpaperengine/texture.cpp

@@ -0,0 +1,16 @@
+#include <wallpaperengine/texture.h>
+
+namespace wp
+{
+
+    texture::texture (irr::io::path file)
+    {
+
+    }
+
+
+    irr::video::ITexture* texture::getIrrTexture ()
+    {
+        return nullptr;
+    }
+}

+ 21 - 0
wallpaperengine/texture.h

@@ -0,0 +1,21 @@
+#ifndef WALLENGINE_TEXTURE_H
+#define WALLENGINE_TEXTURE_H
+
+#include <irrlicht/irrlicht.h>
+
+namespace wp
+{
+    class texture
+    {
+    public:
+        texture (irr::io::path file);
+
+        irr::video::ITexture* getIrrTexture ();
+
+    private:
+        irr::video::ITexture* m_texture;
+    };
+}
+
+
+#endif //WALLENGINE_TEXTURE_H

+ 63 - 0
wallpaperengine/video/material.cpp

@@ -0,0 +1,63 @@
+#include <wallpaperengine/irrlicht.h>
+#include <wallpaperengine/video/material.h>
+
+namespace wp
+{
+    namespace video
+    {
+        material::material (irr::core::vector3df origin, wp::scene *scene)
+        {
+            m_origin = origin;
+            m_scene = scene;
+            m_material.Wireframe = false;
+            m_material.Lighting = false;
+
+            irr::f32 xright = this->m_origin.X;
+            irr::f32 xleft = -this->m_origin.X;
+            irr::f32 ztop = this->m_origin.Y;
+            irr::f32 zbottom = -this->m_origin.Y;
+            irr::f32 z = this->m_scene->getCamera ()->getEye ().Z;
+
+            m_vertices [0].Pos = irr::core::vector3df (xleft,   ztop,    z); // top left
+            m_vertices [1].Pos = irr::core::vector3df (xright,  ztop,    z); // top right
+            m_vertices [2].Pos = irr::core::vector3df (xright,  zbottom, z); // bottom right
+            m_vertices [3].Pos = irr::core::vector3df (xleft,   zbottom, z); // bottom left
+
+            m_vertices [0].TCoords = irr::core::vector2df (1.0f, 0.0f);
+            m_vertices [1].TCoords = irr::core::vector2df (0.0f, 0.0f);
+            m_vertices [2].TCoords = irr::core::vector2df (0.0f, 1.0f);
+            m_vertices [3].TCoords = irr::core::vector2df (1.0f, 1.0f);
+
+            m_vertices [0].Color = irr::video::SColor (255, 255, 255, 255);
+            m_vertices [1].Color = irr::video::SColor (255, 255, 255, 255);
+            m_vertices [2].Color = irr::video::SColor (255, 255, 255, 255);
+            m_vertices [3].Color = irr::video::SColor (255, 255, 255, 255);
+        }
+
+        void material::setFlag(irr::video::E_MATERIAL_FLAG flag, bool newvalue)
+        {
+            this->getMaterial ().setFlag (flag, newvalue);
+        }
+
+        void material::setType(irr::video::E_MATERIAL_TYPE newType)
+        {
+            this->getMaterial ().MaterialType = newType;
+        }
+
+        irr::video::SMaterial& material::getMaterial ()
+        {
+            return this->m_material;
+        }
+
+        void material::render ()
+        {
+            uint16_t indices[] =
+            {
+                    0, 1, 2, 3
+            };
+
+            wp::irrlicht::driver->setMaterial (m_material);
+            wp::irrlicht::driver->drawVertexPrimitiveList (m_vertices, 4, indices, 1, irr::video::EVT_STANDARD, irr::scene::EPT_QUADS, irr::video::EIT_16BIT);
+        }
+    }
+}

+ 32 - 0
wallpaperengine/video/material.h

@@ -0,0 +1,32 @@
+#ifndef WALLENGINE_MATERIAL_H
+#define WALLENGINE_MATERIAL_H
+
+
+#include <irrlicht/vector3d.h>
+#include <wallpaperengine/scene.h>
+#include <wallpaperengine/video/node.h>
+
+namespace wp
+{
+    namespace video
+    {
+        class material : public node
+        {
+        public:
+            material (irr::core::vector3df origin, wp::scene* scene);
+            void render ();
+            irr::video::SMaterial& getMaterial ();
+            void setFlag(irr::video::E_MATERIAL_FLAG flag, bool newvalue);
+            void setType(irr::video::E_MATERIAL_TYPE newType);
+
+        private:
+            irr::video::S3DVertex m_vertices [4];
+            irr::video::SMaterial m_material;
+            irr::core::vector3df m_origin;
+            wp::scene* m_scene;
+        };
+    }
+}
+
+
+#endif //WALLENGINE_MATERIAL_H

+ 12 - 0
wallpaperengine/video/node.cpp

@@ -0,0 +1,12 @@
+#include <wallpaperengine/video/node.h>
+
+namespace wp
+{
+    namespace video
+    {
+        void node::render ()
+        {
+
+        }
+    }
+}

+ 17 - 0
wallpaperengine/video/node.h

@@ -0,0 +1,17 @@
+#ifndef WALLENGINE_NODE_H
+#define WALLENGINE_NODE_H
+
+namespace wp
+{
+    namespace video
+    {
+        class node
+        {
+        public:
+            virtual void render ();
+        };
+    }
+}
+
+
+#endif //WALLENGINE_NODE_H

+ 49 - 0
wallpaperengine/video/renderer.cpp

@@ -0,0 +1,49 @@
+#include <wallpaperengine/irrlicht.h>
+#include <wallpaperengine/video/renderer.h>
+
+namespace wp
+{
+    namespace video
+    {
+        void renderer::queueNode (node* node)
+        {
+            s_nodes.push_back (node);
+        }
+
+        void renderer::setupOrthographicCamera (irr::f32 width, irr::f32 height, irr::core::vector3df position, irr::core::vector3df lookat, irr::f32 znear, irr::f32 zfar)
+        {
+            irr::core::matrix4 identity; identity.makeIdentity ();
+            irr::core::matrix4 orthoProjection; orthoProjection.buildProjectionMatrixOrthoLH(
+                    width,
+                    height,
+                    znear,
+                    zfar
+            );
+            wp::irrlicht::camera = wp::irrlicht::device->getSceneManager ()->addCameraSceneNode (0, position, lookat);
+            wp::irrlicht::camera->setProjectionMatrix (orthoProjection);
+
+            wp::irrlicht::driver->setTransform (irr::video::ETS_PROJECTION, orthoProjection);
+            wp::irrlicht::driver->setTransform (irr::video::ETS_VIEW, identity);
+            wp::irrlicht::driver->setTransform (irr::video::ETS_WORLD, identity);
+        }
+
+        void renderer::render ()
+        {
+            if (wp::irrlicht::driver == nullptr) return;
+
+            wp::irrlicht::driver->beginScene(true, true, irr::video::SColor(0, 0, 0, 0));
+
+            std::vector<node*>::const_iterator cur = s_nodes.begin ();
+            std::vector<node*>::const_iterator end = s_nodes.end ();
+
+            for(; cur != end; cur ++)
+            {
+                (*cur)->render ();
+            }
+
+            wp::irrlicht::driver->endScene ();
+        }
+
+        std::vector<node*> renderer::s_nodes;
+    }
+};

+ 26 - 0
wallpaperengine/video/renderer.h

@@ -0,0 +1,26 @@
+#ifndef WALLENGINE_RENDER_H
+#define WALLENGINE_RENDER_H
+
+#include <vector>
+
+#include <wallpaperengine/video/node.h>
+
+namespace wp
+{
+    namespace video
+    {
+        class renderer
+        {
+        public:
+            static void queueNode (node* node);
+            static void setupOrthographicCamera (irr::f32 width, irr::f32 height, irr::core::vector3df position, irr::core::vector3df lookat, irr::f32 znear, irr::f32 zfar);
+            static void render ();
+
+        private:
+            static std::vector<node*> s_nodes;
+        };
+    }
+}
+
+
+#endif //WALLENGINE_RENDER_H