]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
moved FPS to Graphix
authorPeter Schaefer <schaeferpm@gmail.com>
Thu, 16 Jun 2016 18:01:14 +0000 (20:01 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Thu, 16 Jun 2016 18:01:14 +0000 (20:01 +0200)
first Shader adjustments

Weave/Events.cpp
Weave/Fps.cpp
Weave/Game.cpp
Weave/Graphix/Graphix.cpp
Weave/Graphix/Graphix.h
Weave/Scene/Scene.cpp
shader/basicTexture_VS.hlsl
shader/lightingTexture_FS.hlsl

index 7c9eee36d708d17c99edb951eb3b58f8ef3fe617..121c2c4fa22269f95cdb53475a3a9c197c1e9eeb 100644 (file)
@@ -113,6 +113,10 @@ void Events::KeyDown(int _key)
                break;
        case SDLK_F2:
                //FPS
+               if (key_toggle[SDLK_F2])
+                       Graphix::disableEffects(EF_FPS_OBJ);
+               else
+                       Graphix::enableEffects(EF_FPS_OBJ);
                message("FPS", !key_toggle[SDLK_F2]);
                break;
        case SDLK_F3:
index 06b76de1ed642bbe940190ee5c47f9791efb3e23..9bd7ece20c5b1e956820d6ea26d25e1cdc4050a7 100644 (file)
@@ -3,7 +3,7 @@
 #include "SDL2\SDL.h"
 #include "Average.h"
 
-#define DELTA_CAP 100
+#define DELTA_CAP 50
 
 /* 
        Übernimmt die FPS berechnungen  
index 5b60c1472baac0ee47e53effe91a699031c15b13..b79d62f9a5b942d8ca314ed7ce8bef9ee4f32f27 100644 (file)
@@ -90,7 +90,6 @@ void Game::play()
 {\r
        active = this;\r
 \r
-       Fps fps(0.3f);\r
        int sleep_time=0;\r
        float message_time=0;\r
        int framecount = 0;\r
@@ -98,37 +97,20 @@ void Game::play()
        current_world->bindShader();\r
 \r
        while (!Events::halt){\r
-               fps.step();\r
+               Graphix::fps.step();\r
 \r
 #ifdef FRAMERATE_FIX\r
-               sleep_time += (int)(1000./ FRAMERATE_FIX - fps.getTicks());\r
+               sleep_time += (int)(1000./ FRAMERATE_FIX - Graphix::fps.getTicks());\r
 \r
                if (sleep_time < 0)\r
                        sleep_time = 0;\r
 \r
                Sleep(sleep_time);\r
 #endif\r
-               if (Events::isKToggleActive(SDLK_F2))\r
-               {\r
-                       ++framecount;\r
-                       message_time += fps.getDelta();\r
-                       if (message_time >= 0.5)\r
-                       {\r
-                               Graphix::updateFPS((float)framecount / message_time);\r
-                               //Message::info((string)"Fps: " + std::to_string((float)framecount/message_time));\r
-                               message_time = 0;\r
-                               framecount = 0;\r
-                       }\r
-\r
-               }\r
-               else\r
-                       Graphix::updateFPS(-1);\r
-\r
-\r
 \r
                Events::processEvents();\r
                //Message::info(std::to_string(fps.getDelta()));\r
-               update(fps.getCappedDelta());\r
+               update(Graphix::fps.getCappedDelta());\r
 \r
                Graphix::clear();\r
 \r
index 4595275aeff998b82355867de9ae24f7ae294190..9faa62b5b01e9cf03f139b941dcb4d07158f7f9e 100644 (file)
@@ -10,6 +10,9 @@ using std::string;
 #define MOTION_BLUR_COEFF 0.99f\r
 #define MOTION_BLUR_INTENS 0.99f\r
 \r
+float fps_time = 99;\r
+float fps_current;\r
+\r
 void Graphix::setWindowSize(unsigned int _width, unsigned int _height)\r
 {\r
        width = _width;\r
@@ -220,10 +223,20 @@ void Graphix::clear()
 \r
        string out = windowTitle;\r
 \r
-       if (fps > 0)\r
-               out += "(FPS:" + std::to_string(fps) + ")";\r
-       if (obj >= 0)\r
-               out += "(NumObj:" + std::to_string(obj) + ")";\r
+       if (testEffect(EF_FPS_OBJ))\r
+       {\r
+               if (fps_time > .5f)\r
+               {\r
+                       fps_current = fps.getAvFPS();\r
+                       fps_time = 0;\r
+               }\r
+               fps_time += fps.getDelta();\r
+\r
+               out += "(FPS:" + std::to_string((int)fps_current) + ")";\r
+               if (obj >= 0)\r
+                       out += "(NumObj:" + std::to_string(obj) + ")";\r
+       }\r
+               \r
        SDL_SetWindowTitle(sdl_window, out.c_str());\r
 }\r
 \r
@@ -276,11 +289,6 @@ unsigned int Graphix::getGlError()
        return error;\r
 }\r
 \r
-void Graphix::updateFPS(float _fps)\r
-{\r
-       fps = _fps;\r
-}\r
-\r
 void Graphix::updateNumObjects(int _obj)\r
 {\r
        obj = _obj;\r
@@ -307,4 +315,4 @@ SDL_GLContext Graphix::sdl_glcontext;
 short Graphix::effects = EF_TRANSPARENCY | EF_BLOOM | EF_FRUSTUM_CULLING;\r
 \r
 int Graphix::obj = -1;\r
-float Graphix::fps = -1;\r
+Fps Graphix::fps(0.3f);\r
index 5311c91ce158d2a631c94ff9cbc3c789f06c424b..12018ea879077ae2e7606159f9965896adfb39f6 100644 (file)
@@ -4,6 +4,7 @@
 #include <GL\glew.h>
 
 #include <string>
+#include "../Fps.h"
 
 #define BIT(x) (1<<(x))
 
@@ -13,7 +14,8 @@ enum Effects {
        EF_TRANSPARENCY = BIT(2),
        EF_BLOOM = BIT(3),
        EF_FRUSTUM_CULLING = BIT(4),
-       EF_MOTION_BLUR = BIT(5)
+       EF_MOTION_BLUR = BIT(5),
+       EF_FPS_OBJ = BIT(6)
 };
 
 class Graphix
@@ -24,7 +26,6 @@ public:
        static unsigned int getWindowHeight();
        static unsigned int getWindowWidth();
 
-       static void updateFPS(float fps);
        static void updateNumObjects(int obj);
 
        static void FullScreen(bool enable, bool keepDesktopResolution = true);
@@ -45,6 +46,8 @@ public:
 
        static unsigned int getGlError();
 
+       static Fps fps;
+
 private:
 
        static void updateEffects();
@@ -64,7 +67,5 @@ private:
        static short effects;
 
        static int obj;
-       static float fps;
-
 };
 
index 5f202c8cddad43bcd0687fd78b24dc2d47f515e4..c0ad8c64510830d56ee9101b45ca21fe91aeb7bd 100644 (file)
@@ -143,6 +143,15 @@ Scene::~Scene()
 
 void Scene::update(float deltaT)
 {
+       /* Save Old Mat's*/
+       if (Graphix::testEffect(EF_MOTION_BLUR)) {
+               camera.saveProjView();
+               for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i)
+               {
+                       (*i)->saveModelMat();
+               }
+       }
+
        // XYAchse um den Player
        //float rotatex = 0.002f*Events::getViewX();
        //float rotatey = 0.001f*Events::getViewY();
@@ -244,7 +253,6 @@ void Scene::draw() const
        }
 
 
-
        //Directional Light Shadow
        glCullFace(GL_FRONT);
        glEnable(GL_POLYGON_OFFSET_FILL);
@@ -260,6 +268,8 @@ void Scene::draw() const
        glCullFace(GL_BACK);
        glDisable(GL_POLYGON_OFFSET_FILL);
 
+
+       /* Prepere DRAW SCENE */
        camera.useCamera();
        render->useBuffer();
        dirLight->updateDirLightView();
@@ -281,15 +291,27 @@ void Scene::draw() const
                fBufferObject::clearBuffer();
        }
 
-       /*DRAW SCENE*/
+       /*DRAW SCENE -> SkyBox*/
        Shader::getShader(SH_BASICTEXTURE)->useShader();
        SkyBox.draw();
        //Shader::getShader(SH_BASICTEXTURE)->useShader();
        //Shader::getShader(SH_BASICTEXTURE)->setUniformLocation("uFar", false);
-       Shader::getShader(SH_LIGHTING)->useShader();
-       drawSceneObjects();
 
 
+       Shader::getShader(SH_LIGHTING)->useShader();
+       /* MOTION BLUR */
+       if (Graphix::testEffect(EF_MOTION_BLUR))
+       {
+               camera.useOldProjView();
+               Shader::getShader(SH_ACTIVE)->setUniformLocation("uDelta",Graphix::fps.getCappedDelta());
+               //upload deltaT
+               drawSceneObjects(DRAW_ModelMotionBlur);
+       }
+       else
+       {
+               drawSceneObjects();
+       }
+
        //Pointlights & their shadows
        //for (auto i = pointlights.begin(); i != pointlights.end(); ++i)
        //{
index 86752b1eecee26bef9c1f36fb66109a513f6e8cb..07a1b7fd57e076d5f73b18c4414fafec295d0a9f 100644 (file)
@@ -9,6 +9,8 @@ out vec2 fUVs;
 
 out vec3  PointLightPosition1, DirectionalLightDirection1;
 
+out mat4 new2old;
+
 //out vec3 fPosition;
 
 out vec4 DirLightSpacePos;
@@ -18,11 +20,15 @@ uniform vec3 DirectionalLightDirection;
 uniform mat4 uProjection, uView, uModel=mat4(1.f);
 uniform mat4 dirLightProj, dirLightView;
 
+uniform mat4 uOldProjView, uInvProjView, uCur2OldModel;
+
 uniform int uEnableBloom = 1;
 uniform int uEnableTransp = 1;
 
 void main()
 {
+       new2old = uOldProjView * uCur2OldModel * uInvProjView;
+
        PointLightPosition1 = (uView * vec4(0.0f, 1.0f, 0.0f, 1.f)).xyz;
        DirectionalLightDirection1 = normalize((uView * vec4(DirectionalLightDirection, 0.0f)).xyz);
 
index f6921f595931f7d1e45f3b839182237b09143868..2e9bb765a35de5c9c2d032f87e4906067dcd9b1a 100644 (file)
@@ -5,6 +5,8 @@ in vec2 fUVs;
 
 in vec3 PointLightPosition1, DirectionalLightDirection1;
 
+in mat4 new2old;
+
 //in vec3 fPosition;
 
 in vec4 DirLightSpacePos;
@@ -17,6 +19,8 @@ uniform vec4 material;                                        //vec4 in the form (ambient, point, directional, glos
 uniform vec3 dirLightColor;
 uniform vec3 AmbientLightColor;
 
+uniform float uDelta;
+
 float DirLightCalcShadowFactor(vec4 LightSpacePos)
 {
        vec3 pos = LightSpacePos.xyz / LightSpacePos.w;