]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
moved bind/gen/deleteBuffer ->Shader
authorPeter Schaefer <schaeferpm@gmail.com>
Wed, 13 Apr 2016 18:00:03 +0000 (20:00 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Wed, 13 Apr 2016 18:00:03 +0000 (20:00 +0200)
CollisionShapes statt BBox

Weave/Graphix/Model/IMetaMesh.cpp
Weave/Graphix/Model/IMetaMesh.h
Weave/Graphix/Model/Model.cpp
Weave/Graphix/Model/Model.h
Weave/Graphix/Model/Plane.cpp
Weave/Graphix/Model/SkyBox.cpp
Weave/Graphix/Shader.cpp
Weave/Graphix/Shader.h
Weave/Graphix/Texture.cpp
Weave/Graphix/ViewPort.cpp
Weave/Scene/SceneObject.cpp

index b536c17dfe02edb028e71a7de9add4009b96e645..a907c49c42a3d368b1a1b39588a9657b7fd58162 100644 (file)
@@ -154,6 +154,14 @@ void IMetaMesh::drawModel(const mat4& _modelMat) const
        }\r
 }\r
 \r
+void IMetaMesh::drawWire(const mat4& _modelMat, const vec4& _color) const\r
+{\r
+       for (auto i = models.begin(); i != models.end(); ++i)\r
+       {\r
+               i->first->drawWire(_modelMat* i->second, _color*0.8f);\r
+       }\r
+}\r
+\r
 void IMetaMesh::bt_init(bool _isConvex)\r
 {\r
        if (bt_collision_shape == nullptr)\r
index 287add230d9e297313d277d0e2e9a1fa50ccb9cf..e8f14fbc1193e317842702bfa8079a03c0ae20ae 100644 (file)
@@ -23,6 +23,7 @@ public:
        void unbindShader(const Shader* shader) override;\r
 \r
        void drawModel(const mat4& modelMat) const override;\r
+       void drawWire(const mat4& modelMat, const vec4& _color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
 \r
        void drawBBox(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
 \r
index a7bce9771047aac586d5363fbb73bc11271e2f1d..c819389ad3d91611725ca59d7673f8061367239c 100644 (file)
@@ -52,13 +52,13 @@ Model::operator std::string() const
 void Model::bindModel()\r
 {\r
        if(vertex != nullptr)\r
-               genBuffer(vertexBuffer,GL_ARRAY_BUFFER, numvertices * 3 * sizeof(float), (void*)vertex);\r
+               Shader::genBuffer(vertexBuffer,GL_ARRAY_BUFFER, numvertices * 3 * sizeof(float), (void*)vertex);\r
        if (normals != nullptr)\r
-               genBuffer(normalBuffer, GL_ARRAY_BUFFER, numvertices * 3 * sizeof(float), (void*)normals);\r
+               Shader::genBuffer(normalBuffer, GL_ARRAY_BUFFER, numvertices * 3 * sizeof(float), (void*)normals);\r
        if (uvs != nullptr)\r
-               genBuffer(uvBuffer, GL_ARRAY_BUFFER, numvertices * 2 * sizeof(float), (void*)uvs);\r
+               Shader::genBuffer(uvBuffer, GL_ARRAY_BUFFER, numvertices * 2 * sizeof(float), (void*)uvs);\r
        if (index != nullptr)\r
-               genBuffer(indexBuffer, GL_ELEMENT_ARRAY_BUFFER, numfaces * 3 * sizeof(uint), (void*)index);\r
+               Shader::genBuffer(indexBuffer, GL_ELEMENT_ARRAY_BUFFER, numfaces * 3 * sizeof(uint), (void*)index);\r
 \r
        glBindBuffer(GL_ARRAY_BUFFER, 0);\r
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);\r
@@ -66,10 +66,10 @@ void Model::bindModel()
 \r
 void Model::unbindModel()\r
 {\r
-       deleteBuffer(vertexBuffer);\r
-       deleteBuffer(indexBuffer);\r
-       deleteBuffer(normalBuffer);\r
-       deleteBuffer(uvBuffer);\r
+       Shader::deleteBuffer(vertexBuffer);\r
+       Shader::deleteBuffer(indexBuffer);\r
+       Shader::deleteBuffer(normalBuffer);\r
+       Shader::deleteBuffer(uvBuffer);\r
                \r
 }\r
 \r
@@ -92,15 +92,9 @@ void Model::bindShader(const Shader* _shader)
        glGenVertexArrays(1, &vao);\r
        glBindVertexArray(vao);\r
 \r
-\r
-       if (vertexBuffer != (uint)-1)\r
-               bindBuffer(vertexBuffer, GL_ARRAY_BUFFER, _shader->getAttribLocation("aPosition"));\r
-\r
-       if (uvBuffer != (uint)-1)\r
-               bindBuffer(uvBuffer, GL_ARRAY_BUFFER, _shader->getAttribLocation("aUV"), 2);\r
-\r
-       if (normalBuffer != (uint)-1)\r
-               bindBuffer(normalBuffer, GL_ARRAY_BUFFER, _shader->getAttribLocation("aNormal"));\r
+       _shader->bindBuffer(vertexBuffer, GL_ARRAY_BUFFER, "aPosition");\r
+       _shader->bindBuffer(uvBuffer, GL_ARRAY_BUFFER, "aUV", 2);\r
+       _shader->bindBuffer(normalBuffer, GL_ARRAY_BUFFER, "aNormal");\r
 \r
        if (indexBuffer != (uint)-1)\r
                glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);\r
@@ -129,7 +123,8 @@ void Model::drawModel() const
 \r
 void Model::drawWire() const\r
 {\r
-       glDrawElements(GL_LINE_LOOP, numfaces * 3, GL_UNSIGNED_INT, 0);\r
+       for (uint i = 0; i < numfaces; i++)\r
+               glDrawElements(GL_LINE_LOOP, 3, GL_UNSIGNED_INT, (void*)(3*i*sizeof(unsigned int)));\r
        glBindVertexArray(0);\r
 }\r
 \r
@@ -143,11 +138,14 @@ void Model::drawModel(const mat4& _modelMat) const
                drawModel();\r
 }\r
 \r
-void Model::drawWire(const mat4& _modelMat) const\r
+void Model::drawWire(const mat4& _modelMat, const vec4& _color) const\r
 {\r
+       //Shader::gBasic()->useShader();\r
 \r
        useModel(_modelMat);\r
 \r
+       Shader::gActive()->setUniformLocation("uFragmentColor", _color);\r
+\r
        drawWire();\r
 \r
 }\r
@@ -157,7 +155,7 @@ void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const
        Graphix::getGlError();\r
        Shader::gBasic()->useShader();\r
 \r
-       Shader::setUniformLocation("uFragmentColor", _color);\r
+       Shader::gActive()->setUniformLocation("uFragmentColor", _color);\r
 \r
        Graphix::getGlError();\r
 \r
@@ -171,7 +169,7 @@ void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const
 \r
        vec3 size = (max - min);\r
        vec3 center = (max + min) * .5f;\r
-       Shader::gBasic()->useShader();\r
+       //Shader::gBasic()->useShader();\r
        getBBoxModel()->drawModel(_modelMat*translate(center)*glm::scale(size)); //\r
 }\r
 \r
@@ -189,44 +187,6 @@ void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const
 //     _center = (max + min) * .5f;\r
 //}\r
 \r
-void Model::genBuffer(uint &buffer, const uint target, const uint size, const void* value)\r
-{\r
-       if (buffer != (uint)-1)\r
-       {\r
-//             Message::error("genBuffer: Buffer wurde schon gesetzt und ausgelassen.");\r
-               return;\r
-       }\r
-               \r
-       glGenBuffers(1, &buffer);\r
-       glBindBuffer(target, buffer);\r
-       glBufferData(target, size, value, GL_STATIC_DRAW);\r
-       //glBindBuffer(target, 0);\r
-}\r
-\r
-void Model::deleteBuffer(uint &buffer)\r
-{\r
-       if (buffer != (uint)-1)\r
-       {\r
-               glDeleteBuffers(1, &buffer);\r
-               buffer = -1;\r
-       }\r
-}\r
-\r
-void Model::bindBuffer(const uint &buffer, const uint target, const uint index, const uint dim)\r
-{\r
-       //Falls index nicht gefunden werden konnte\r
-       if (index == (uint)-1)\r
-       {\r
-               Message::error("Model: BindBuffer wird ausgelassen da index fehlerhaft ist.");\r
-               return;\r
-       }\r
-\r
-       glBindBuffer(target, buffer);\r
-       glEnableVertexAttribArray(index);\r
-       glVertexAttribPointer(index, dim, GL_FLOAT, GL_FALSE, 0, 0);    //FLOAT as Default\r
-       //glBindBuffer(target, 0);\r
-}\r
-\r
 \r
 void Model::useModel(const mat4& _modelMat) const\r
 {\r
@@ -243,7 +203,7 @@ void Model::useModel(const mat4& _modelMat) const
 \r
 \r
        /* use ModelMAT*/\r
-       Shader::setUniformLocation("uModel", _modelMat);\r
+       Shader::gActive()->setUniformLocation("uModel", _modelMat);\r
 \r
 }\r
 \r
index 81499e581a7a3fc37c548c6667fd8c4a47928fc1..c14756ba8679aa47ca9c360154913d2dbc0c1d4f 100644 (file)
@@ -25,7 +25,7 @@ public:
 \r
        /* Draws Model */\r
        virtual void drawModel(const mat4& modelMat) const;\r
-       virtual void drawWire(const mat4& modelMat) const;\r
+       virtual void drawWire(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const;\r
 \r
        /* Draws a BoundingBox around the Model */\r
        virtual void drawBBox(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const;\r
@@ -62,13 +62,6 @@ protected:
        uint *index = nullptr;\r
 \r
        std::unordered_map<uint, uint> shader_map;\r
-\r
-       //gen Buffer\r
-       void genBuffer(uint &buffer, const uint target, const uint size, const void* value);\r
-       //delete Buffer\r
-       void deleteBuffer(uint &buffer);\r
-       //bind Buffer to VAO\r
-       void bindBuffer(const uint &buffer, const uint tartget, const uint index, const uint dim = 3);\r
        \r
 \r
        /* use Model with active Shader*/\r
index 597cde003cc673e53632f63083d0928a4d704757..f967b4c913138aa141bda312bfe5ac3f00203380 100644 (file)
@@ -31,7 +31,7 @@ void Plane::drawModel() const
 {
        useModel(mat4(1.f));
 
-       Shader::setUniformLocation("uPlain", 1);
+       Shader::gActive()->setUniformLocation("uPlain", 1);
 
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
        glBindVertexArray(0);
@@ -40,7 +40,7 @@ void Plane::drawModel() const
 void Plane::bt_init(bool isConvex)
 {
        if(bt_collision_shape==nullptr)
-               bt_collision_shape = new btBoxShape(btVector3(.5f, .5f, .5f));
+               bt_collision_shape = new btBoxShape(btVector3(.5f, .5f, .001f));
 }
 
 
index fb963af3ed896bf5406948da61ccb2731e35f0a6..a3f5e23a6eade85bbbb3f6a3616e42907b3cdea6 100644 (file)
@@ -38,7 +38,7 @@ void SkyBox::drawModel(const mat4& _modelMat) const
 \r
        useModel(_modelMat);\r
 \r
-       Shader::setUniformLocation("uFar", 1);\r
+       Shader::gActive()->setUniformLocation("uFar", 1);\r
 \r
        Model::drawModel();\r
        //glEnable(GL_DEPTH_TEST);\r
index 285eac6a557c6076b0646272d7f7471f9f492840..68bd179ad6edc56d6b251d7f48a0c5b6e60868d7 100644 (file)
@@ -40,6 +40,55 @@ int Shader::getAttribLocation(const string& name) const
        return ind;
 }
 
+void Shader::genBuffer(uint &buffer, const uint target, const uint size, const void* value, const uint _draw)
+{
+       if (buffer != (uint)-1)
+       {
+               //              Message::error("genBuffer: Buffer wurde schon gesetzt und ausgelassen.");
+               return;
+       }
+
+       glGenBuffers(1, &buffer);
+       glBindBuffer(target, buffer);
+       glBufferData(target, size, value, _draw);
+       //glBindBuffer(target, 0);
+}
+
+void Shader::deleteBuffer(uint &buffer)
+{
+       if (buffer == (uint)-1)
+       {
+               Message::error("Model: DeleteBuffer wird ausgelassen da buffer leer ist.");
+               return;
+       }
+
+       glDeleteBuffers(1, &buffer);
+       buffer = -1;
+}
+
+void Shader::bindBuffer(const uint &_buffer, const uint _target, const string& _name, const uint _dim) const
+{
+       if (_buffer == (uint)-1)
+       {
+               Message::error("Model: BindBuffer wird ausgelassen da buffer fuer [" + _name + "] nicht leer ist.");
+               return;
+       }
+               
+
+       //Falls index nicht gefunden werden konnte
+       int ind = glGetAttribLocation(handle, _name.c_str());
+       if (ind == (uint)-1)
+       {
+               Message::error("Model: BindBuffer wird ausgelassen da index fuer [" + _name + "] fehlerhaft ist.");
+               return;
+       }
+
+       glBindBuffer(_target, _buffer);
+       glEnableVertexAttribArray(ind);
+       glVertexAttribPointer(ind, _dim, GL_FLOAT, GL_FALSE, 0, 0);     //FLOAT as Default
+       //glBindBuffer(_target, 0);
+}
+
 int Shader::getUniformLocation(const string& name) const
 {
        int ind = glGetUniformLocation(handle, name.c_str());
@@ -49,25 +98,25 @@ int Shader::getUniformLocation(const string& name) const
        return ind;
 }
 
-int Shader::setUniformLocation(const string& _name, const mat4& _mat)
+int Shader::setUniformLocation(const string& _name, const mat4& _mat) const
 {
-       int tmp = glGetUniformLocation(*shActive, _name.c_str());
+       int tmp = glGetUniformLocation(handle, _name.c_str());
        if (tmp >= 0)
                glUniformMatrix4fv(tmp, 1, GL_FALSE, value_ptr(_mat));
        return tmp;
 }
 
-int Shader::setUniformLocation(const string& _name, const vec4& _vec)
+int Shader::setUniformLocation(const string& _name, const vec4& _vec) const
 {
-       int tmp = glGetUniformLocation(*shActive, _name.c_str());
+       int tmp = glGetUniformLocation(handle, _name.c_str());
        if (tmp >= 0)
                glUniform4fv(tmp, 1, value_ptr(_vec));
        return tmp;
 }
 
-int Shader::setUniformLocation(const string& _name, const int& _i)
+int Shader::setUniformLocation(const string& _name, const int& _i) const
 {
-       int tmp = glGetUniformLocation(*shActive, _name.c_str());
+       int tmp = glGetUniformLocation(handle, _name.c_str());
        if (tmp >= 0)
                glUniform1i(tmp, _i);
        return tmp;
index 1473e558b70a451a39b8a7a72389af45450986ff..8a96a4f57fced2ee7ba850793114bd6951e3ade7 100644 (file)
@@ -3,6 +3,7 @@
 #include <fstream>
 #include <unordered_map>
 #include "../GLM.h"
+#include "../GL/glew.h"
 
 using std::string;
 
@@ -18,13 +19,20 @@ public:
 
        int getAttribLocation(const string& name) const;
        int getUniformLocation(const string& name) const;
+
        uint getHandle() const;
        operator uint() const;
 
-       //static int setAttribLocation(const string& name) const;
-       static int setUniformLocation(const string& name, const mat4& mat);
-       static int setUniformLocation(const string& name, const vec4& vec);
-       static int setUniformLocation(const string& name, const int& i);
+       /*genBuffer*/
+       static void genBuffer(uint &buffer, const uint target, const uint size, const void* value, const uint draw= GL_STATIC_DRAW);
+       //delete Buffer
+       static void deleteBuffer(uint &buffer);
+       //bind Buffer to VAO
+       void bindBuffer(const uint &buffer, const uint tartget, const string& name, const uint dim = 3) const;
+
+       int setUniformLocation(const string& name, const mat4& mat) const;
+       int setUniformLocation(const string& name, const vec4& vec) const;
+       int setUniformLocation(const string& name, const int& i) const;
 
        static const Shader * gActive();
        static const Shader * gBasic();
index 98529c58d66dac367a808f466548b404b0b24491..5f57fcb511cb80f1900af0506953b96dda7548d8 100644 (file)
@@ -145,10 +145,10 @@ void Texture::useTexture() const
        glActiveTexture(GL_TEXTURE0 + unit);
        glBindTexture(TEXTURE_TYPE, handle);
 
-       Shader::setUniformLocation("uColorTexture", unit);
+       Shader::gActive()->setUniformLocation("uColorTexture", unit);
 
        /* bind Material*/
-       Shader::setUniformLocation("material", material);
+       Shader::gActive()->setUniformLocation("material", material);
 }
 
 Texture::operator string() const
index 058ca3162337af46ed074d1ec88e2aada0242d20..c7a5d2e53f16f09cc4b2f62bafdf14efd230e9ad 100644 (file)
@@ -39,18 +39,18 @@ void ViewPort::useViewPort() const
 void ViewPort::bindView(const Shader* shader) const{
        shader->useShader();
 
-       Shader::setUniformLocation("uProjection", projection);
-       Shader::setUniformLocation("uInvProjection", glm::inverse(projection));
-       Shader::setUniformLocation("uView", view);
+       shader->setUniformLocation("uProjection", projection);
+       shader->setUniformLocation("uInvProjection", glm::inverse(projection));
+       shader->setUniformLocation("uView", view);
 
 }
 
 void ViewPort::bindView(const Shader* shader, vec3 pos) const{
        shader->useShader();
 
-       Shader::setUniformLocation("uProjection", projection);
-       Shader::setUniformLocation("uInvProjection", glm::inverse(projection));
-       Shader::setUniformLocation("uView", translate(view, -pos));
+       shader->setUniformLocation("uProjection", projection);
+       shader->setUniformLocation("uInvProjection", glm::inverse(projection));
+       shader->setUniformLocation("uView", translate(view, -pos));
 }
 
 void ViewPort::rotateView(float angle_x, float angle_y){
index 9a271f16790afd5e39e9ccea10863fe8248b7ad5..c3c1fb928c706c9d9396c9ffd5469eb0cf9c1830 100644 (file)
@@ -237,7 +237,9 @@ void SceneObject::draw() const
 
        if (Events::isKToggleActive(SDLK_F6) && collision != nullptr)
        {
-               collision->drawBBox(modelMat);
+               Shader::gBasic()->useShader();
+               collision->bindShader(Shader::gBasic());
+               collision->drawWire(modelMat);
                //collision->drawWire(modelMat);
        }
 }