}\r
}\r
\r
-void IMetaMesh::drawModel(Shader* _shader, Texture* _texture, const mat4& _modelMat) const\r
+void IMetaMesh::drawModel(Texture* _texture, const mat4& _modelMat) const\r
{\r
for (auto i = models.begin(); i != models.end(); ++i)\r
{\r
- i->first->drawModel(_shader, _texture, _modelMat* i->second);\r
+ i->first->drawModel(_texture, _modelMat* i->second);\r
}\r
}\r
\r
void unbindModel() override;\r
void unbindShader(Shader* shader) override;\r
\r
- void drawModel(Shader* shader, Texture* texture, const mat4& modelMat) const override;\r
+ void drawModel(Texture* texture, const mat4& modelMat) 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
glBindVertexArray(0);\r
}\r
\r
-void Model::drawModel(Shader* _shader, Texture* _texture, const mat4& _modelMat) const\r
+void Model::drawModel(Texture* _texture, const mat4& _modelMat) const\r
{\r
- //Message::info("Error from before?");\r
- //Graphix::getGlError();\r
- useModel(_shader);\r
- //Message::info("IMesh loading Coordinates");\r
- //Graphix::getGlError();\r
- useTexture(_texture, _shader);\r
- //Message::info("IMesh loading Texture");\r
- //Graphix::getGlError();\r
- useModelMat(_modelMat, _shader);\r
- //Message::info("IMesh loading MMatrix");\r
- //Graphix::getGlError();\r
+ useModel(_modelMat);\r
+\r
if (Events::isKToggleActive(SDLK_F3))\r
drawWire();\r
else\r
drawModel();\r
- //Message::info("IMesh drawing Elements");\r
- //Graphix::getGlError();\r
- //system("pause");\r
}\r
\r
-void Model::drawWire(Shader* _shader, const mat4& _modelMat) const\r
+void Model::drawWire(const mat4& _modelMat) const\r
{\r
- //Message::info("Error from before?");\r
- //Graphix::getGlError();\r
- useModel(_shader);\r
- //Message::info("IMesh loading Coordinates");\r
- //Graphix::getGlError();\r
- //useTexture(_texture, _shader);\r
- //Message::info("IMesh loading Texture");\r
- //Graphix::getGlError();\r
- useModelMat(_modelMat, _shader);\r
- //Message::info("IMesh loading MMatrix");\r
- //Graphix::getGlError();\r
+\r
+ useModel(_modelMat);\r
+\r
drawWire();\r
- //Message::info("IMesh drawing Elements");\r
- //Graphix::getGlError();\r
- //system("pause");\r
+\r
}\r
\r
void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
\r
vec3 size = (max - min);\r
vec3 center = (max + min) * .5f;\r
-\r
- getBBoxModel()->drawModel(Graphix::shader_BBox, NULL, _modelMat*translate(center)*glm::scale(size)); //\r
+ Graphix::shader_BBox->useShader();\r
+ getBBoxModel()->drawModel(nullptr, _modelMat*translate(center)*glm::scale(size)); //\r
}\r
\r
//void Model::getBBcs(vec3& _center, vec3& _size) const\r
}\r
\r
\r
-void Model::useModel(Shader* _shader) const\r
+void Model::useModel(const mat4& _modelMat) const\r
{\r
- _shader->useShader();\r
+\r
+ auto active_shader = Shader::getActive();\r
+\r
+ /* use MODEL*/\r
uint vao = -1;\r
- auto i = shader_map.find(*_shader);\r
+ auto i = shader_map.find(*active_shader);\r
if (i == shader_map.end())\r
Message::error("Model: Shader wurde nicht an das Model gebunden.");\r
else\r
\r
glBindVertexArray(vao);\r
\r
-}\r
-\r
-void Model::useTexture(Texture* _texture, Shader* _shader) const\r
-{\r
- if (_texture != nullptr)\r
- {\r
- auto tmp = _shader->getUniformLocation("uColorTexture");\r
- if (tmp < 0){\r
- return;\r
- }\r
- int unit = 0;\r
- _texture->bind(unit);\r
- glUniform1i(tmp, unit);\r
-\r
- int tmp2 = _shader->getUniformLocation("material");\r
- if (tmp2 >= 0)\r
- glUniform4fv(tmp2, 1, value_ptr(_texture->material));\r
- }\r
-}\r
\r
-void Model::useModelMat(const mat4& _model, Shader* _shader) const\r
-{\r
- int tmp = _shader->getUniformLocation("uModel");\r
+ /* use ModelMAT*/\r
+ int tmp = active_shader->getUniformLocation("uModel");\r
if (tmp >= 0)\r
- glUniformMatrix4fv(tmp, 1, GL_FALSE, value_ptr(_model));\r
+ glUniformMatrix4fv(tmp, 1, GL_FALSE, value_ptr(_modelMat));\r
+\r
}\r
\r
vec3 Model::rotateSize(const vec3& _size, const mat4& _modelMat)\r
\r
/* Binds Model to GL*/\r
virtual void bindModel();\r
+ virtual void unbindModel();\r
\r
/* Binds Model to the Shader*/\r
virtual void bindShader(Shader* shader);\r
-\r
- virtual void unbindModel();\r
virtual void unbindShader(Shader* shader);\r
\r
/* Draws Model */\r
- virtual void drawModel(Shader* shader, Texture* texture, const mat4& modelMat) const;\r
- virtual void drawWire(Shader* shader, const mat4& modelMat) const;\r
+ virtual void drawModel(Texture* texture, const mat4& modelMat) const;\r
+ virtual void drawWire(const mat4& modelMat) 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
\r
- /* Get min&max from BBox */\r
-// virtual void getBBmm(vec3& min, vec3& max) const;\r
- /* Get size&position from BBox */\r
- //void getBBcs(vec3& center, vec3& size) const;\r
-\r
static Model* getBBoxModel();\r
static Model* getSkyBoxModel();\r
static Model* newIMetaModel(const std::string& modelpath,bool isConvex=true);\r
static void deleteSkyBoxModel();\r
static void deleteIMetaModel(const std::string& modelpath);\r
\r
- //virtual float getPDistHit(const vec3& P, const vec3& direction) const;\r
-\r
virtual operator std::string() const;\r
virtual std::string type2str() const = 0;\r
\r
- \r
virtual operator btCollisionShape*() const;\r
virtual void bt_init(bool _convex = true);\r
virtual void bt_setMargin(btScalar margin);\r
void bindBuffer(const uint &buffer, const uint tartget, const uint index, const uint dim = 3);\r
\r
\r
- virtual void useModel(Shader* shader) const;\r
- virtual void useTexture(Texture* texture, Shader* shader) const; \r
- virtual void useModelMat(const mat4& model, Shader* shader) const;\r
+ /* use Model with active Shader*/\r
+ virtual void useModel(const mat4& modelMat) const;\r
virtual void drawModel() const;\r
virtual void drawWire() const;\r
\r
{\r
}\r
\r
-void SkyBox::drawModel(Shader* _shader, Texture* _texture, const mat4& _modelMat) const\r
+void SkyBox::drawModel(Texture* _texture, const mat4& _modelMat) const\r
{\r
//_shader->useShader();\r
//GLint OldCullFaceMode;\r
//glCullFace(GL_FRONT);\r
glDepthFunc(GL_LEQUAL);\r
//glDisable(GL_DEPTH_TEST);\r
- Model::drawModel(_shader, _texture, _modelMat);\r
+ Model::drawModel(_texture, _modelMat);\r
//glEnable(GL_DEPTH_TEST);\r
//glCullFace(OldCullFaceMode);\r
glDepthFunc(OldDepthFuncMode);\r
SkyBox();\r
~SkyBox();\r
\r
- void drawModel(Shader* shader, Texture* texture, const mat4& modelMat) const override;\r
+ void drawModel(Texture* texture, const mat4& modelMat) const override;\r
\r
//uncommend following lines to use default Loaders\r
//void useModelMat(const mat4& model, Shader* shader) const override;\r
void Shader::useShader() const
{
+ active = this;
glUseProgram(handle);
}
+Shader const* Shader::getActive()
+{
+ return active;
+}
+
int Shader::getAttribLocation(const string& name) const
{
int ind = glGetAttribLocation(handle, name.c_str());
}
return programHandle;
}
+
+
+Shader const * Shader::active = nullptr;
\ No newline at end of file
void useShader() const;
+ static Shader const* getActive();
+
int getAttribLocation(const string& name) const;
int getUniformLocation(const string& name) const;
uint getHandle() const;
uint loadProgram(uint _shader1, uint _shader2);
-
+ static Shader const * active;
};
#include "../Message.h"
#include "Graphix.h"
+#include "Shader.h"
using std::string;
using std::unordered_map;
}
}
-void Texture::bind(int unit)
+void Texture::useTexture() const
{
+
+ /* bind Texture*/
+ auto tmp = Shader::getActive()->getUniformLocation("uColorTexture");
+ if (tmp < 0) {
+ return;
+ }
+
+ int unit = 0;
glActiveTexture(GL_TEXTURE0 + unit);
glBindTexture(TEXTURE_TYPE, handle);
+ glUniform1i(tmp, unit);
+
+ /* bind Material*/
+ int tmp2 = Shader::getActive()->getUniformLocation("material");
+ if (tmp2 >= 0)
+ glUniform4fv(tmp2, 1, value_ptr(material));
+
}
Texture::operator string() const
static Texture* newTexture(const std::string& path, const vec4& material);
static void deleteTexture(const std::string& path);
- void bind(int unit);
+ virtual void useTexture() const;
operator std::string() const;
- vec4 material;
-
private:
Texture(const std::string& path, const vec4& material);
~Texture();
Texture* ptr=nullptr;
} texHandle;
+ vec4 material;
+
static std::unordered_map<std::string, texHandle> texture_Map;
};
\ No newline at end of file
collide_group = COL_LEVEL;
collide_with = COL_MARVIN | COL_ENEMY;
- model->bindModel();
- model->bindShader(_shader);
+ //model->bindModel();
+ //model->bindShader(shader);
collision = model;
collision->bt_init(false);
collision = Model::getBBoxModel();
}
-// model->bindModel();
+ model->bindModel();
model->bindShader(shader);
//Message::info("Binding Shader");
//Graphix::getGlError();
void SceneObject::draw() const
{
- // useModel(shader);
-
- // useTexture(texture, shader);
-
- // useMMatrix(modelMat,shader);
-
- // glUniform1i(shader->getUniformLocation ("inv"), 1);
-
- // drawModel();
+
+ /* Draw Object*/
+ shader->useShader();
+ texture->useTexture();
+ model->drawModel(texture, modelMat);
- //model->drawWire(shader, modelMat); //BUG
- model->drawModel(shader, texture, modelMat);
if (Events::isKToggleActive(SDLK_F6) && collision != nullptr)
{
collision->drawBBox(modelMat);