20 GLuint vertexShader =
GLCheck(glCreateShader(GL_VERTEX_SHADER));
24 const GLchar* source = vertexSource.c_str();
25 GLCheck(glShaderSource(vertexShader, 1, &source, 0));
28 GLCheck(glCompileShader(vertexShader));
31 GLCheck(glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &isCompiled));
33 if (isCompiled == GL_FALSE)
36 glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &maxLength);
40 std::vector<GLchar> infoLog(maxLength);
41 glGetShaderInfoLog(vertexShader, maxLength, &maxLength, &infoLog[0]);
44 glDeleteShader(vertexShader);
46 EE_CORE_ERROR(
"{}", infoLog.data());
47 EE_CORE_ASSERT(
false,
"Vertex shader compilation failure.");
53 GLuint fragmentShader =
GLCheck(glCreateShader(GL_FRAGMENT_SHADER));
57 source = fragmentSouce.c_str();
58 GLCheck(glShaderSource(fragmentShader, 1, &source, 0));
61 GLCheck(glCompileShader(fragmentShader));
63 glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &isCompiled);
65 if (isCompiled == GL_FALSE)
68 glGetShaderiv(fragmentShader, GL_INFO_LOG_LENGTH, &maxLength);
72 std::vector<GLchar> infoLog(maxLength);
73 glGetShaderInfoLog(fragmentShader, maxLength, &maxLength, &infoLog[0]);
76 glDeleteShader(fragmentShader);
78 glDeleteShader(vertexShader);
80 EE_CORE_ERROR(
"{}", infoLog.data());
81 EE_CORE_ASSERT(
false,
"Fragment shader compilation failure.");
88 m_RendererID = glCreateProgram();
91 glAttachShader(m_RendererID, vertexShader);
92 glAttachShader(m_RendererID, fragmentShader);
95 glLinkProgram(m_RendererID);
99 glGetProgramiv(m_RendererID, GL_LINK_STATUS, (
int*)&isLinked);
100 if (isLinked == GL_FALSE)
103 glGetProgramiv(m_RendererID, GL_INFO_LOG_LENGTH, &maxLength);
107 std::vector<GLchar> infoLog(maxLength);
108 glGetProgramInfoLog(m_RendererID, maxLength, &maxLength, &infoLog[0]);
111 glDeleteProgram(m_RendererID);
113 glDeleteShader(vertexShader);
114 glDeleteShader(fragmentShader);
119 EE_CORE_ERROR(
"{}", infoLog.data());
120 EE_CORE_ERROR(
"Error : Unable to link shaders.");
125 glDetachShader(m_RendererID, vertexShader);
126 glDetachShader(m_RendererID, fragmentShader);
279 GLint uniformCount = 0;
280 glGetProgramiv(m_RendererID, GL_ACTIVE_UNIFORMS, &uniformCount);
282 std::vector<BufferElement> elements;
283 elements.reserve(uniformCount);
285 GLint maxNameLength = 0;
286 glGetProgramiv(m_RendererID, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxNameLength);
287 std::vector<GLchar> nameBuffer(maxNameLength);
289 EE_CORE_TRACE(
"Starting reflection for shader ID {}", m_RendererID);
290 for (GLint i = 0; i < uniformCount; i++)
295 glGetActiveUniform(m_RendererID, i, maxNameLength, &length, &size, &type, nameBuffer.data());
296 std::string name(nameBuffer.data(), length);
297 elements.push_back({ GLTypeToEngineDataType(type), name });
298 EE_CORE_TRACE(
" - Found uniform {}", name);
300 EE_CORE_TRACE(
"Completed shader reflection.");