Не привязывается шейдерный код к объекту

Я пытаюсь запустить программу, но у меня вылетает ошибка при привязке glsl кода к объекту. Интересно что в мейне моего вертексного шейдера 3 строки и ошибка вылетает именно тогда, когда я передаю в функцию glShaderSource(..) вторым параметром 3, а если ставлю 2 - программа выполняется. Ошибка при выполнении

Честно говоря уже перелопатил всё и мне срочно нужна ваша помощь в решении проблемы.

main.cpp

#include "Object.h"
#include "GLFWprocessing.h"


int main()
{
    GLFWproccessing glfwProccessing;

    GLFWwindow* window = nullptr;


    if(glfwProccessing.GLFWpreferences(window) == -1)
        return -1;



    GLfloat vertices[] =
    {
             1.0f, 1.0f, 0.0f,      1.0f, 0.0f, 0.0f,       1.0f, 1.0f,// Верхний правый угол
             1.0f, -1.0f, 0.0f,     0.0f, 1.0f, 0.0f,       1.0f, 0.0f,// Нижний правый угол
            -1.0f,-1.0f, 0.0f,      0.0f, 0.0f, 1.0f,       0.0f, 0.0f,// Нижний левый угол
             -1.0f, 1.0f, 0.0f,     1.0f, 1.0f, 0.0f,       0.0f, 1.0f // Верхний левый угол
    };
    GLuint indices[] =
    {
        0, 1, 3,
        1, 2, 3
    };
    const GLchar* vertexShader_Source =
        "#version 330 core\n"
        "layout(location = 0) in vec3 position;\n"
        "layout(location = 1) in vec3 color;\n"
        "layout(location = 3) in vec2 texCoord;\n"
        "out vec3 ourColor;\n"
        "out vec2 TexCoord;\n"
        "void main()\n"
        "{\n"
        "TexCoord = texCoord;\n"
        "ourColor = color;\n"
        "gl_Position = vec4(position, 1.0f);\n"
        "}\0";

    const GLchar* fragmentShader_Source =
        "#version 330 core\n"
        "in vec3 ourColor;\n"
        "in vec2 TexCoord;\n"
        "out vec4 color;\n"
        "uniform sampler2D ourTexture;\n"
        "void main()\n"
        "{\n"
        "color = texture(ourTexture, TexCoord);\n"
        "}\n\0" ;


    Object Desk;
    //Object Figure[18];

    GLuint shaderProgram;       //Создание объекта шейдерной программы
    shaderProgram = glCreateProgram();      //создание шейдерной программы


    Desk._Texture.GenTexture();
    Desk._Texture.TypeWrapping("clampBorder");
    Desk._Texture.Filter();
    Desk._Texture.setTexture("C:/Users/дом/source/repos/Game/Release/Desk.jpg");
    Desk._Texture.UseTexture();

    Desk.setVertices(/*_INPUT_DATA->*/vertices, 12);
    Desk._VertexShader.Initialize_Source(vertexShader_Source, shaderProgram);
    Desk._FragmentShader.Initialize_Source(fragmentShader_Source, shaderProgram);
...
}

VertexShader.h

#pragma once
#include "Shader.h"

class VertexShader : Shader
{
public:
    VertexShader();

    inline void Initialize_Source(const GLchar* Shader_Source, GLuint& shaderProgram) override;

    inline void Delete() override;

private:
    GLuint Shader_Object;
    const GLchar* Shader_Source;

    inline void build_Shader(GLuint& shaderProgram, size_t strings_count) override;
};

VertexShader.cpp

    #include "VertexShader.h"

VertexShader::VertexShader()
{
    Shader_Object = glCreateShader(GL_VERTEX_SHADER);
}

inline void VertexShader::Initialize_Source(const GLchar* Shader_Source, GLuint& shaderProgram)
{
    this->Shader_Source = Shader_Source;

    size_t strings_count = 0;
    size_t i = 0;
    while (Shader_Source[i] != '{')
    {
        ++i;
    }

    for (i += 2; Shader_Source[i] != '\0'; ++i)
    {
        if (Shader_Source[i] == '}')
        {
            break;
        }
        if (Shader_Source[i] == '\n')
        {
            ++strings_count;
        }
    }

    build_Shader(shaderProgram, strings_count);
}

inline void VertexShader::build_Shader(GLuint& shaderProgram, size_t strings_count)
{

    glShaderSource(Shader_Object, 3, &Shader_Source, NULL); //Привязка кода к объекту

    glCompileShader(Shader_Object);
    glAttachShader(shaderProgram, Shader_Object);
}

inline void VertexShader::Delete()
{
    glDeleteShader(Shader_Object);
}

Ответы (0 шт):