Не привязывается шейдерный код к объекту
Я пытаюсь запустить программу, но у меня вылетает ошибка при привязке 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);
}