]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
defined static Shaders (Basic,Lighting,Blur)
authorPeter Schaefer <schaeferpm@gmail.com>
Wed, 13 Apr 2016 11:29:46 +0000 (13:29 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Wed, 13 Apr 2016 11:29:46 +0000 (13:29 +0200)
corrected const for Shader

27 files changed:
CGUE2015_Weave.sln
Weave/Game.cpp
Weave/Graphix/Graphix.cpp
Weave/Graphix/Graphix.h
Weave/Graphix/Model/IMetaMesh.cpp
Weave/Graphix/Model/IMetaMesh.h
Weave/Graphix/Model/Model.cpp
Weave/Graphix/Model/Model.h
Weave/Graphix/Shader.cpp
Weave/Graphix/Shader.h
Weave/Graphix/Texture.cpp
Weave/Graphix/ViewPort.cpp
Weave/Graphix/ViewPort.h
Weave/Scene/EventBox.cpp
Weave/Scene/Level.cpp
Weave/Scene/Level.h
Weave/Scene/Marvin.cpp
Weave/Scene/Marvin.h
Weave/Scene/Scene.cpp
Weave/Scene/Scene.h
Weave/Scene/SceneObject.cpp
Weave/Scene/SceneObject.h
Weave/main.cpp
shader/basicTexture_VS.hlsl
shader/basic_VS.hlsl
shader/blur_FS.hlsl
shader/plane_VS.hlsl [new file with mode: 0644]

index e715e71ecd277edfc4f73eabef700200331ab73c..04a457220a402cbdbdbca9aaea2e63657b817dad 100644 (file)
@@ -14,6 +14,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shader", "shader", "{75179E
                shader\blur_FS.hlsl = shader\blur_FS.hlsl
                shader\lightingTexture_FS.hlsl = shader\lightingTexture_FS.hlsl
                shader\perspective_VS.hlsl = shader\perspective_VS.hlsl
+               shader\plane_VS.hlsl = shader\plane_VS.hlsl
                shader\skybox_VS.hlsl = shader\skybox_VS.hlsl
                shader\skyplane_color_FS.hlsl = shader\skyplane_color_FS.hlsl
                shader\skyplane_FS.hlsl = shader\skyplane_FS.hlsl
index 3ef93e486a893d077caa0a006988b7a7c12b2c7f..1778c4b5ece5eac5797f2e02885bb44388b58357 100644 (file)
@@ -43,33 +43,30 @@ Game::Game() : playing(true)
        // Hauptfenster\r
        current_world = new Scene(0, 0, Graphix::getWindowWidth(), Graphix::getWindowHeight(), 45, 0.1f, 40, vec3(0.0f, 0.0f, 0.f));\r
 \r
-       //Allg Shader\r
-       Shader* shader1 = new Shader("basicTexture_VS.hlsl", "lightingTexture_FS.hlsl");\r
-\r
        // load LVL\r
 \r
-       SceneObject* tmp_world = new Level(shader1, "level_1", "model_levelTest_2D.jpg");\r
+       SceneObject* tmp_world = new Level(Shader::gLighting(), "level_1", "model_levelTest_2D.jpg");\r
 \r
        //tmp_world->ignore = true;\r
        current_world->addObject(tmp_world);\r
 \r
-//     current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));\r
+//     current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));\r
 \r
        //Player\r
-       SceneObject* tmp_playerObject = new Marvin(shader1, translate(vec3(1.f, 3.f, 1.f))*rotate((float)M_PI_4,vec3(0.f,1.f,0.f)));\r
+       SceneObject* tmp_playerObject = new Marvin(Shader::gLighting(), translate(vec3(1.f, 3.f, 1.f))*rotate((float)M_PI_4,vec3(0.f,1.f,0.f)));\r
 \r
        tmp_playerObject->yStatic= false;\r
 \r
        current_world->addObject(tmp_playerObject);\r
        current_world->setLookAt(tmp_playerObject);\r
 \r
-       //current_world->addObject(new SceneObject(shader1, glm::mat4(1.0f), "Player.dae", "model_player.png"));\r
-       //current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg"));\r
-       current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png"));\r
-       current_world->addObject(new SceneObject(shader1, translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck", "model_duck_2D.png"));\r
-       current_world->addObject(new SceneObject(shader1, translate(vec3(0.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"));\r
+       //current_world->addObject(new SceneObject(Shader::gLighting(), glm::mat4(1.0f), "Player.dae", "model_player.png"));\r
+       //current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg"));\r
+       current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png"));\r
+       current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck", "model_duck_2D.png"));\r
+       current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(0.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"));\r
 \r
-       current_world->addObject(new SceneObject(shader1, translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox", "model_SkyBox_2D.png"));\r
+       current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox", "model_SkyBox_2D.png"));\r
 \r
        //current_world->addObject(new EventBox(translate(vec3(3.f, .4f, 0.f)),EB_LOSTZONE));\r
        current_world->addObject(new EventBox(translate(vec3(3.f, .4f, -15.f)), EB_WINZONE));\r
index 3a98fbb7725c6be576a77195cd9cc7e3011a1c99..4db3355f07e93056d569e2a300095bb03e6d6a19 100644 (file)
@@ -3,7 +3,6 @@
 #include "Debug.h"\r
 \r
 #include "../Message.h"\r
-#include "Shader.h"\r
 #include <string>\r
 \r
 using std::string;\r
@@ -146,7 +145,6 @@ void Graphix::init()
        glClearAccum(0.f, 0.f, 0.f, 0.f);\r
        glClear(GL_ACCUM_BUFFER_BIT);\r
 \r
-       shader_BBox = new Shader("basic_VS.hlsl", "basic_FS.hlsl");\r
 }\r
 \r
 void Graphix::FullScreen(bool _enable, bool _keepDesktopResolution)\r
@@ -227,8 +225,6 @@ void Graphix::swap()
 \r
 void Graphix::cleanup()\r
 {\r
-       delete shader_BBox;\r
-\r
        //SDL_SetWindowGrab(sdl_window, SDL_FALSE);\r
 \r
        SDL_GL_DeleteContext(sdl_glcontext);\r
@@ -284,5 +280,3 @@ SDL_Window* Graphix::sdl_window;
 SDL_GLContext Graphix::sdl_glcontext;\r
 \r
 short Graphix::effects = EF_TRANSPARENCY;\r
-\r
-Shader* Graphix::shader_BBox;\r
index bde1f6ad5bb3e8793e8bc3db8d8f1c93f16b74b1..337482d259a9384ec6ce8d71aa40028f43dd576e 100644 (file)
@@ -14,8 +14,6 @@ enum Effects {
        EF_BLOOM = BIT(3)
 };
 
-class Shader;
-
 class Graphix
 {
 public:
@@ -42,8 +40,6 @@ public:
 
        static unsigned int getGlError();
 
-       static Shader* shader_BBox;
-
 private:
 
        static void updateEffects();
index 6cb7e0476f62191608454a1204433618004b0440..b536c17dfe02edb028e71a7de9add4009b96e645 100644 (file)
@@ -130,7 +130,7 @@ void IMetaMesh::unbindModel()
        }\r
 }\r
 \r
-void IMetaMesh::bindShader(Shader* _shader)\r
+void IMetaMesh::bindShader(const Shader* _shader)\r
 {\r
        for (auto i = models.begin(); i != models.end(); ++i)\r
        {\r
@@ -138,7 +138,7 @@ void IMetaMesh::bindShader(Shader* _shader)
        }\r
 }\r
 \r
-void IMetaMesh::unbindShader(Shader* _shader)\r
+void IMetaMesh::unbindShader(const Shader* _shader)\r
 {\r
        for (auto i = models.begin(); i != models.end(); ++i)\r
        {\r
index 781fd298d4cea39c9e8726ae61ae1032b72a420e..287add230d9e297313d277d0e2e9a1fa50ccb9cf 100644 (file)
@@ -15,12 +15,12 @@ public:
        IMetaMesh(const std::string& modelpath, const vec3& scale = vec3(1.f), bool isConvex = true);\r
        ~IMetaMesh();\r
 \r
-       void bindShader(Shader* shader) override;\r
+       void bindShader(const Shader* shader) override;\r
 \r
        void bindModel() override;\r
 \r
        void unbindModel() override;\r
-       void unbindShader(Shader* shader) override;\r
+       void unbindShader(const Shader* shader) override;\r
 \r
        void drawModel(const mat4& modelMat) const override;\r
 \r
index a9739aebaf956dc777fdc5a76a389614d5d0707d..7afe8de880316715d340f36bcf3385a5edfae6aa 100644 (file)
@@ -74,7 +74,7 @@ void Model::unbindModel()
 }\r
 \r
 \r
-void Model::bindShader(Shader* _shader)\r
+void Model::bindShader(const Shader* _shader)\r
 {\r
        auto i = shader_map.find(*_shader);\r
        if (i != shader_map.end())\r
@@ -114,7 +114,7 @@ void Model::bindShader(Shader* _shader)
 \r
 }\r
 \r
-void Model::unbindShader(Shader* _shader)\r
+void Model::unbindShader(const Shader* _shader)\r
 {\r
                glDeleteVertexArrays(1, &(shader_map[*_shader]));\r
                shader_map.erase(*_shader);\r
@@ -155,8 +155,8 @@ void Model::drawWire(const mat4& _modelMat) const
 void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
 {\r
        Graphix::getGlError();\r
-       Graphix::shader_BBox->useShader();\r
-       int tmp = Graphix::shader_BBox->getUniformLocation("uFragmentColor");\r
+       Shader::gBasic()->useShader();\r
+       int tmp = Shader::gBasic()->getUniformLocation("uFragmentColor");\r
        if (tmp >= 0)\r
                glUniform4fv(tmp, 1, value_ptr(_color));\r
        Graphix::getGlError();\r
@@ -171,7 +171,7 @@ void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const
 \r
        vec3 size = (max - min);\r
        vec3 center = (max + min) * .5f;\r
-       Graphix::shader_BBox->useShader();\r
+       Shader::gBasic()->useShader();\r
        getBBoxModel()->drawModel(_modelMat*translate(center)*glm::scale(size)); //\r
 }\r
 \r
@@ -231,11 +231,9 @@ void Model::bindBuffer(const uint &buffer, const uint target, const uint index,
 void Model::useModel(const mat4& _modelMat) const\r
 {\r
 \r
-       auto active_shader = Shader::getActive();\r
-\r
        /* use MODEL*/\r
        uint vao = -1;\r
-       auto i = shader_map.find(*active_shader);\r
+       auto i = shader_map.find(*Shader::gActive());\r
        if (i == shader_map.end())\r
                Message::error("Model: Shader wurde nicht an das Model gebunden.");\r
        else\r
@@ -245,7 +243,7 @@ void Model::useModel(const mat4& _modelMat) const
 \r
 \r
        /* use ModelMAT*/\r
-       int tmp = active_shader->getUniformLocation("uModel");\r
+       int tmp = Shader::gActive()->getUniformLocation("uModel");\r
        if (tmp >= 0)\r
                glUniformMatrix4fv(tmp, 1, GL_FALSE, value_ptr(_modelMat));\r
 \r
@@ -276,7 +274,7 @@ Model* Model::getBBoxModel()
        {\r
                BoundingBox = new BBox();\r
                BoundingBox->bindModel();\r
-               BoundingBox->bindShader(Graphix::shader_BBox);\r
+               BoundingBox->bindShader(Shader::gBasic());\r
        }\r
        return BoundingBox;\r
 }\r
index dba4ac86efa543f112737560f0a2207664e56227..81499e581a7a3fc37c548c6667fd8c4a47928fc1 100644 (file)
@@ -20,8 +20,8 @@ public:
        virtual void unbindModel();\r
 \r
        /* Binds Model to the Shader*/\r
-       virtual void bindShader(Shader* shader);\r
-       virtual void unbindShader(Shader* shader);\r
+       virtual void bindShader(const Shader* shader);\r
+       virtual void unbindShader(const Shader* shader);\r
 \r
        /* Draws Model */\r
        virtual void drawModel(const mat4& modelMat) const;\r
index a54b9c0f4c1f71048cde0ef00a27202cdfd53202..46af2c18fb19faddf272765d383c5bb64ea6f0fc 100644 (file)
@@ -27,15 +27,10 @@ Shader::~Shader()
 
 void Shader::useShader() const
 {
-       active = this;
+       shActive = this;
        glUseProgram(handle);
 }
 
-Shader const* Shader::getActive()
-{
-       return active;
-}
-
 int Shader::getAttribLocation(const string& name) const
 {
        int ind = glGetAttribLocation(handle, name.c_str());
@@ -148,5 +143,42 @@ GLuint Shader::loadProgram(GLuint _shader1, GLuint _shader2){
        return programHandle;
 }
 
+void Shader::init()
+{
+       if(shBasic==nullptr)
+               shBasic = new Shader("basic_VS.hlsl", "basic_FS.hlsl");
+       if(shLighting==nullptr)
+               shLighting = new Shader("basicTexture_VS.hlsl", "lightingTexture_FS.hlsl");
+       if(shBlur==nullptr)
+               shBlur = new Shader("plane_VS.hlsl", "blur_FS.hlsl");
+}
+
+void Shader::cleanup()
+{
+       delete shBasic, shLighting, shBlur;
+}
+
+const Shader * Shader::gActive()
+{
+       return shActive;
+}
+
+const Shader * Shader::gBasic()
+{
+       return shBasic;
+}
+
+const Shader * Shader::gLighting()
+{
+       return shLighting;
+}
+
+const Shader * Shader::gBlur()
+{
+       return shBlur;
+}
 
-Shader const * Shader::active = nullptr;
\ No newline at end of file
+const Shader * Shader::shActive = nullptr;
+const Shader * Shader::shBasic = nullptr;
+const Shader * Shader::shLighting = nullptr;
+const Shader * Shader::shBlur = nullptr;
index 0dd95f1f3f0f707c2a52298db1b72a8d143f55ba..460ee3d055fec4833f39ab8a418edc6a449de33f 100644 (file)
@@ -15,13 +15,19 @@ public:
 
        void useShader() const;
 
-       static Shader const* getActive();
-
        int getAttribLocation(const string& name) const;
        int getUniformLocation(const string& name) const;
        uint getHandle() const;
        operator uint() const;
 
+       static const Shader * gActive();
+       static const Shader * gBasic();
+       static const Shader * gLighting();
+       static const Shader * gBlur();
+
+       static void init();
+       static void cleanup();
+
 private:
        uint handle;
 
@@ -29,6 +35,9 @@ private:
        uint loadProgram(uint _shader1, uint _shader2);
 
 
-       static Shader const * active;
+       static const Shader * shActive;
+       static const Shader * shBasic;
+       static const Shader * shLighting;
+       static const Shader * shBlur;
 };
 
index 83ac7eecfa630cc2ed6423c4f5b037966d1577d0..0acf7298b2cfad8629f3a2ccd739231fa70d9e1b 100644 (file)
@@ -141,7 +141,7 @@ void Texture::useTexture() const
 {
 
        /* bind Texture*/
-       auto tmp = Shader::getActive()->getUniformLocation("uColorTexture");
+       auto tmp = Shader::gActive()->getUniformLocation("uColorTexture");
        if (tmp < 0) {
                return;
        }
@@ -152,7 +152,7 @@ void Texture::useTexture() const
        glUniform1i(tmp, unit);
 
        /* bind Material*/
-       int tmp2 = Shader::getActive()->getUniformLocation("material");
+       int tmp2 = Shader::gActive()->getUniformLocation("material");
        if (tmp2 >= 0)
                glUniform4fv(tmp2, 1, value_ptr(material));
        
index 80f68b845297bbc6c923943f5d6943bb768375a3..8ef047e9b1df7b8c2f4bdb90ba872894bbe4fc8a 100644 (file)
@@ -36,7 +36,7 @@ void ViewPort::useViewPort() const
        glViewport(xpos, ypos, width, height);
 }
 
-void ViewPort::bindView(Shader* shader) const{
+void ViewPort::bindView(const Shader* shader) const{
        shader->useShader();
        int tmp = -1;
 
@@ -53,7 +53,7 @@ void ViewPort::bindView(Shader* shader) const{
                glUniformMatrix4fv(tmp, 1, false, value_ptr(view));
 }
 
-void ViewPort::bindView(Shader* shader, vec3 pos) const{
+void ViewPort::bindView(const Shader* shader, vec3 pos) const{
        shader->useShader();
        int tmp = -1;
 
index 1ea35884183d2207cadab831d74ff71c4ad5ee41..4770d2e1c3b986faceedaf946459bab6eb6afaa4 100644 (file)
@@ -15,8 +15,8 @@ public:
 
        void setView(unsigned int x, unsigned int y, unsigned int width, unsigned int height, bool updateProjection = true);
 
-       void bindView(Shader* shader) const;
-       void bindView(Shader* shader, vec3 lookat) const;
+       void bindView(const Shader* shader) const;
+       void bindView(const Shader* shader, vec3 lookat) const;
 
        void rotateView(float angle_x, float angle_y);
        vec3 rotateDirection(const vec3 & direction) const;
index b320c051cf69ca51b6abedb055ab52ea0502335b..ab47b88748d9ddb785665856d0b75666be2eceb4 100644 (file)
@@ -1,6 +1,7 @@
 #include "EventBox.h"
 
-#include "../Graphix/Graphix.h"
+//#include "../Graphix/Graphix.h"
+#include "../Graphix/Shader.h"
 #include "../Graphix/Model.h"
 
 #include "../Events.h"
@@ -12,7 +13,7 @@
 
 
 EventBox::EventBox(const mat4& _modelMat, uint _EB_TYPE) : 
-       SceneObject(Graphix::shader_BBox, _modelMat, vec4(0.f), Model::getBBoxModel(), ""), 
+       SceneObject(Shader::gBasic(), _modelMat, vec4(0.f), Model::getBBoxModel(), ""), 
        eb_type(_EB_TYPE)
 {
        collide_group = COL_EVENT;
index 49c02a93de5c03d03b6f4bfd7d4d7e00c04e1403..3b436a73aeb173fb51eb1ada19f23da2bb3ea905 100644 (file)
@@ -7,7 +7,7 @@
 #include "../GLM.h"
 
 
-Level::Level(Shader* _shader, std::string _modelpath, std::string _texturepath) : SceneObject(_shader, mat4(1.f), vec4(1.f), Model::newIMetaModel(_modelpath+".dae"), _texturepath)
+Level::Level(const Shader* _shader, std::string _modelpath, std::string _texturepath) : SceneObject(_shader, mat4(1.f), vec4(1.f), Model::newIMetaModel(_modelpath+".dae"), _texturepath)
 {
        collide_group = COL_LEVEL;
        collide_with = COL_MARVIN | COL_ENEMY;
index ffe7690e43baa9158a37521398f9b50115a2dcbc..937a4fcad1ef1b90fb715d35fa20605b11f6e32a 100644 (file)
@@ -9,7 +9,7 @@ class Level :
        public SceneObject
 {
 public:
-       Level(Shader* shader,std::string modelpath, std::string texturepath);
+       Level(const Shader* shader,std::string modelpath, std::string texturepath);
        ~Level();
 
        virtual void collides(SceneObject* other, btPersistentManifold* contactManifold, float deltaT=1.f) override;
index 75db2fcd1ccc2b221bd28d8e038684de9165de3d..098ee24ae00e3c6228904c141e605441f34a3e27 100644 (file)
@@ -12,7 +12,7 @@
 #define SPEED_MOVE_NORMAL 1.5f
 #define MOVE_FASTER 2.5f
 
-Marvin::Marvin(Shader* _shader, const mat4& _modelMat) : 
+Marvin::Marvin(const Shader* _shader, const mat4& _modelMat) : 
 SceneObject(_shader, _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player", "model_player_2D.png")
 {
        collide_group = COL_MARVIN;
index ddd4ad779715cb4eb0372f39a389d0d3b31da896..8415a1bfe8656cba8e429e82ab5e9fada940d9a3 100644 (file)
@@ -9,7 +9,7 @@ class Marvin :
        public SceneObject
 {
 public:
-       Marvin(Shader* shader, const mat4& modelMat);
+       Marvin(const Shader* shader, const mat4& modelMat);
        ~Marvin();
 
        virtual void update(float) override;
index 7871ed4515b714790a369a4dc4e9bea55d1f865b..dd8dcb1f6cf594713b3bdc0a159704483026b847 100644 (file)
@@ -166,9 +166,9 @@ void Scene::draw() const
        viewPort.useViewPort();
 
        //Skybox
-       viewPort.bindView(SkyBox.getShader(), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+       viewPort.bindView(SkyBox.gShader(), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
        //BBox
-       viewPort.bindView(Graphix::shader_BBox, lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+       viewPort.bindView(Shader::gBasic(), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
 
        for (auto i = ShaderSet.cbegin(); i != ShaderSet.cend(); ++i)
        {
@@ -188,7 +188,7 @@ void Scene::draw() const
 void Scene::addObject(SceneObject* _add)
 {
        SceneObjects.push_back(_add);
-       ShaderSet.insert(_add->getShader());
+       ShaderSet.insert(_add->gShader());
 
        bt_collision_world->addCollisionObject(*_add, _add->getCollideGroup(), _add->getCollideWith());
        bt_dynamics_world->addCollisionObject(*_add,_add->getCollideGroup(),_add->getCollideWith());
index baddcb265c441b414fdb73c6cb716f5a84b2acdc..551af96682d8b9352881d1bac04ee4aebcba00d9 100644 (file)
@@ -41,7 +41,7 @@ protected:
        SceneObject* lookat;
 
        std::list<SceneObject*> SceneObjects;
-       std::set<Shader*> ShaderSet;
+       std::set<const Shader *> ShaderSet;
 
        float currenttime;
        std::stack<Timestamp> timestamps;
index c2ecd431a9263bd18fdcfd5fac08a208e4b7a511..9a271f16790afd5e39e9ccea10863fe8248b7ad5 100644 (file)
@@ -28,7 +28,7 @@ static inline bool file_exist(const std::string& name) {
 }
 
 
-SceneObject::SceneObject(Shader* _shader, const mat4& _modelMat, const vec4& _material, string _modelpath, string texturepath) :
+SceneObject::SceneObject(const Shader* _shader, const mat4& _modelMat, const vec4& _material, string _modelpath, string texturepath) :
 model(nullptr),
 collision(nullptr),
 modelMat(_modelMat),
@@ -122,7 +122,7 @@ move_delta(0)
 //     bt_rigid_body
 }
 
-SceneObject::SceneObject(Shader* _shader, const mat4& _modelMat, const vec4& _material, Model* _model, string texturepath) :
+SceneObject::SceneObject(const Shader* _shader, const mat4& _modelMat, const vec4& _material, Model* _model, string texturepath) :
 model(_model),
 collision(nullptr),
 modelMat(_modelMat),
@@ -259,6 +259,20 @@ void SceneObject::collides(SceneObject* _other, btPersistentManifold* _contactMa
 
 }
 
+const Shader * SceneObject::gShader() const
+{
+       return shader;
+}
+
+const Texture * SceneObject::gTexture() const
+{
+       return texture;
+}
+
+const Model * SceneObject::gModel() const
+{
+       return model;
+}
 
 vec3 SceneObject::getPosition() const
 {
@@ -323,22 +337,6 @@ void SceneObject::setMainScene(Scene* _scene)
        mainScene = _scene;
 }
 
-
-Shader* SceneObject::getShader() const
-{
-       return shader;
-}
-
-Texture* SceneObject::getTexture() const
-{
-       return texture;
-}
-
-Model* SceneObject::getModel() const
-{
-       return model;
-}
-
 SceneObject::operator btCollisionObject *() const
 {
        return bt_collision_object;
@@ -358,4 +356,5 @@ short SceneObject::getCollideGroup() const
 short SceneObject::getCollideWith() const
 {
        return collide_with;
-}
\ No newline at end of file
+}
+
index f05f29988fc18f3c6cddfdb9549de7036d2c389d..20d2886c6c3118c63f16e351126bec209fd9ee73 100644 (file)
@@ -29,8 +29,8 @@ class SceneObject
 public:
 
        //SceneObject(Shader* _shader, mat4& model);
-       SceneObject(Shader* _shader, const mat4& modelMat, const vec4& material, string modelpath, string texturepath);
-       SceneObject(Shader* _shader, const mat4& modelMat, const vec4& material, Model* model, string texturepath);
+       SceneObject(const Shader* _shader, const mat4& modelMat, const vec4& material, string modelpath, string texturepath);
+       SceneObject(const Shader* _shader, const mat4& modelMat, const vec4& material, Model* model, string texturepath);
 
        virtual ~SceneObject();
 
@@ -58,11 +58,9 @@ public:
 
        void setCollision(bool);
 
-       Shader* getShader() const;
-
-       Texture* getTexture() const;
-
-       Model* getModel() const;
+       const Shader * gShader() const;
+       const Texture * gTexture() const;
+       const Model * gModel() const;
 
        __declspec(deprecated)
        void setEnemy(bool isenemy);
@@ -87,7 +85,7 @@ protected:
        mat4 modelMat;
        
 
-       Shader* shader;
+       const Shader * shader;
        Texture* texture;
        Model* model;
        Model* collision;
index 7bd981a85ae1347d8ecbbcbd118be6b95096449c..1e3f6472f6140391771e0261c4c3766d4f54f434 100644 (file)
@@ -16,6 +16,7 @@
 #include "Message.h"
 
 #include "Graphix\Graphix.h"
+#include "Graphix\Shader.h"
 //#include "Graphix\Scene.h"
 #include "Events.h"
 
@@ -40,11 +41,12 @@ void logSDLerror(ostream &os, const char *msg)
 #include "btBulletDynamicsCommon.h"
 
 int main(int argc, char *argv[])
-{      
+{
        btBoxShape * box = new btBoxShape(btVector3(1, 1, 1));
        delete box;
 
        Graphix::init();
+       Shader::init();
 
        bool play(true);
 
@@ -69,7 +71,7 @@ int main(int argc, char *argv[])
 
        }
 
-
+       Shader::cleanup();
        Graphix::cleanup();
 
        return 0;
index f017f1fba417f86ccf778eea055ae0222fee305c..b2cc1cfa1e88edd87643b607bf396c35de049f18 100644 (file)
@@ -1,5 +1,5 @@
 //Vertex Shader
-#version 330
+#version 330 core
 
 in vec3 aNormal, aPosition;
 in vec2 aUV;
index 6e7555317ad182ee859c4f5d7c8779cc052dbe34..55bb6c222de4e38a3ba124001e937624821d0723 100644 (file)
@@ -1,5 +1,5 @@
 //Vertex Shader
-#version 330
+#version 330 core
 
 in vec3 aPosition;
 uniform mat4 uProjection;
index fd9999636794e7864b243e29816550fb74543258..ce74b5cc7fa9ee162c777594809c7be97b948c61 100644 (file)
@@ -1,47 +1,37 @@
 //Fragment Shader
-#version 330
-//"in" attributes from our vertex shader
-varying vec4 vColor;
-varying vec2 fUVs;
+#version 330 core
+in vec2 fUVs;
 
-//declare uniforms
-uniform sampler2D u_texture;
-uniform float resolution;
-uniform float radius;
-uniform vec2 dir;
-
-void main() {
-       //this will be our RGBA sum
-       vec4 sum = vec4(0.0);
-
-       //our original texcoord for this fragment
-       vec2 tc = fUVs;
-
-       //the amount to blur, i.e. how far off center to sample from 
-       //1.0 -> blur by one pixel
-       //2.0 -> blur by two pixels, etc.
-       float blur = radius / resolution;
-
-       //the direction of our blur
-       //(1.0, 0.0) -> x-axis blur
-       //(0.0, 1.0) -> y-axis blur
-       float hstep = dir.x;
-       float vstep = dir.y;
+out vec4 gl_FragColor;
 
-       //apply blurring, using a 9-tap filter with predefined gaussian weights
-
-       sum += texture2D(u_texture, vec2(tc.x - 4.0*blur*hstep, tc.y - 4.0*blur*vstep)) * 0.0162162162;
-       sum += texture2D(u_texture, vec2(tc.x - 3.0*blur*hstep, tc.y - 3.0*blur*vstep)) * 0.0540540541;
-       sum += texture2D(u_texture, vec2(tc.x - 2.0*blur*hstep, tc.y - 2.0*blur*vstep)) * 0.1216216216;
-       sum += texture2D(u_texture, vec2(tc.x - 1.0*blur*hstep, tc.y - 1.0*blur*vstep)) * 0.1945945946;
-
-       sum += texture2D(u_texture, vec2(tc.x, tc.y)) * 0.2270270270;
-
-       sum += texture2D(u_texture, vec2(tc.x + 1.0*blur*hstep, tc.y + 1.0*blur*vstep)) * 0.1945945946;
-       sum += texture2D(u_texture, vec2(tc.x + 2.0*blur*hstep, tc.y + 2.0*blur*vstep)) * 0.1216216216;
-       sum += texture2D(u_texture, vec2(tc.x + 3.0*blur*hstep, tc.y + 3.0*blur*vstep)) * 0.0540540541;
-       sum += texture2D(u_texture, vec2(tc.x + 4.0*blur*hstep, tc.y + 4.0*blur*vstep)) * 0.0162162162;
-
-       //discard alpha for our simple demo, multiply by vertex color and return
-       gl_FragColor = vColor * vec4(sum.rgb, 1.0);
+uniform sampler2D u_texture;
+uniform bool uHorizontal;
+uniform bool uSymetric = true;
+
+uniform float weight[5] = float[](0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162);
+
+
+void main()
+{
+       vec2 tex_offset = 1.0 / textureSize(u_texture, 0); // gets size of single texel
+       vec3 result = texture(u_texture, fUVs).rgb * weight[0];
+       if (uHorizontal)
+       {
+               for (int i = 1; i < 5; ++i)
+               {
+                       result += texture(u_texture, fUVs + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
+                       if(uSymetric)
+                               result += texture(u_texture, fUVs - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
+               }
+       }
+       else
+       {
+               for (int i = 1; i < 5; ++i)
+               {
+                       result += texture(u_texture, fUVs + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
+                       if(uSymetric)
+                               result += texture(u_texture, fUVs - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
+               }
+       }
+       gl_FragColor = vec4(result, 1.0);
 }
\ No newline at end of file
diff --git a/shader/plane_VS.hlsl b/shader/plane_VS.hlsl
new file mode 100644 (file)
index 0000000..8bb350d
--- /dev/null
@@ -0,0 +1,12 @@
+//Vertex Shader
+#version 330 core
+in vec3 aPosition;
+in vec2 aUVs;
+
+out vec2 fUVs;
+
+void main()
+{
+    gl_Position = vec4(aPosition, 1.0f);
+    fUVs = aUVs;
+}
\ No newline at end of file