diff --git a/include/Model.h b/include/Model.h index d5ad488..f9ecd2d 100644 --- a/include/Model.h +++ b/include/Model.h @@ -3,6 +3,7 @@ #include "Buffers.h" #include "Texture.h" +#include "Shader.h" #include @@ -42,7 +43,7 @@ class Model : public Movable Model(const Model& copy); // Конструктор копирования ~Model(); void render(); // Вызов отрисовки без uniform-даных - void render(const GLuint &model_uniform, UBO &material_buffer); // Вызов отрисовки + void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Вызов отрисовки void load_verteces(glm::vec3* verteces, GLuint count); // Загрузка вершин в буфер void load_indices(GLuint* indices, GLuint count); // Загрузка индексов в буфер void load_texCoords(glm::vec2* texCoords, GLuint count); // Загрузка текстурных координат в буфер @@ -66,7 +67,7 @@ class Model : public Movable class GrouptedModel: public Movable { public: - void render(const GLuint &model_uniform, UBO &material_buffer); // Вызов отрисовки + void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Вызов отрисовки std::vector parts; Model& operator[](int index); // Оператор[i] для простого доступа к частям модели diff --git a/src/Model.cpp b/src/Model.cpp index beb5d5f..94c7f38 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -45,10 +45,11 @@ void Model::render() } // Вызов отрисовки -void Model::render(const GLuint &model_uniform, UBO &material_buffer) +void Model::render(ShaderProgram &shaderProgram, UBO &material_buffer) { // Расчитаем матрицу трансформации glm::mat4 model = this->getTransformMatrix(); + GLuint model_uniform = shaderProgram.getUniformLoc("model"); glUniformMatrix4fv(model_uniform, 1, GL_FALSE, &model[0][0]); // Подключаем текстуры @@ -338,14 +339,14 @@ GrouptedModel loadOBJtoGroupted(const char* filename, const char* mtl_directory, } // Вызов отрисовки групповой модели -void GrouptedModel::render(const GLuint &model_uniform, UBO &material_buffer) +void GrouptedModel::render(ShaderProgram &shaderProgram, UBO &material_buffer) { for (auto& model : parts) { model.position += position; model.rotation += rotation; model.scale *= scale; - model.render(model_uniform, material_buffer); + model.render(shaderProgram, material_buffer); model.position -= position; model.rotation -= rotation; model.scale /= scale; diff --git a/src/main.cpp b/src/main.cpp index d30a0f9..81d0d1a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -106,9 +106,6 @@ int main(void) // Установка цвета очистки буфера цвета glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - // Расположение Uniform-переменной - GLuint model_uniform = base.getUniformLoc("model"); - // Источник света PointLight light = { {1.0f, 3.0f, 0.0f} // позиция , {1.0f, 1.0f, 1.0f} // цвет @@ -166,7 +163,7 @@ int main(void) cameraUB.loadSub(&camera.getData(), sizeof(CameraData)); // Тут производится рендер - scene.render(model_uniform, material_data); + scene.render(base, material_data); // Активируем базовый буфер кадра FBO::useDefault();