6 #include "nta/GLSLProgram.h"
7 #include "nta/Logger.h"
12 GLSLProgram::~GLSLProgram() {
20 retID = glCreateShader(shaderType);
24 std::ifstream shaderFile(shaderFileName);
25 if (shaderFile.fail()) {
29 std::string fileContents =
"";
31 while (getline(shaderFile, line)) {
32 fileContents += line +
'\n';
35 const char* contentsPtr = fileContents.c_str();
36 glShaderSource(retID, 1, &contentsPtr,
nullptr);
37 glCompileShader(retID);
38 GLint compileStatus = 0;
39 glGetShaderiv(retID, GL_COMPILE_STATUS, &compileStatus);
40 if (compileStatus == GL_FALSE) {
42 glGetShaderiv(retID, GL_INFO_LOG_LENGTH, &maxLength);
43 char* log =
new char[maxLength];
44 glGetShaderInfoLog(retID, maxLength, &maxLength, log);
46 glDeleteShader(retID);
54 GLint ret = glGetUniformLocation(
m_programID, uniformName.c_str());
55 if (ret == GL_INVALID_INDEX) {
67 m_vert = shaderProgName +
".vert";
69 m_frag = shaderProgName +
".frag";
70 m_fragShaderID =
compileShader(m_frag.to_string(), GL_FRAGMENT_SHADER);
76 std::tie(
m_vert, m_frag) = std::make_tuple(vert, frag);
91 glGetProgramiv(
m_programID, GL_LINK_STATUS, &linkStatus);
92 if (linkStatus == GL_FALSE) {
94 glGetProgramiv(
m_programID, GL_INFO_LOG_LENGTH, &maxLength);
95 char* log =
new char[maxLength];
96 glGetProgramInfoLog(
m_programID, maxLength, &maxLength, log);
99 glDeleteShader(m_fragShaderID);
108 glDeleteShader(m_fragShaderID);
115 glEnableVertexAttribArray(i);
121 glDisableVertexAttribArray(i);
131 static const std::size_t MAX_ATTRIB_NAME_SIZE = 64;
137 char attribName[MAX_ATTRIB_NAME_SIZE];
140 glGetActiveAttrib(
m_programID, i, MAX_ATTRIB_NAME_SIZE,
nullptr,
141 &size, &type, attribName);
142 attribs[glGetAttribLocation(
m_programID, attribName)] = attribName;
147 for (
auto& attrib : attribs) {