GLint LoadProgram(AttributeType Tp, Types ... args) { GLint ProgramID = glCreateProgram(); loadAndAttach(ProgramID, args...); if (getGLSLVersion() < 330) setAttribute(Tp, ProgramID); glLinkProgram(ProgramID); GLint Result = GL_FALSE; int InfoLogLength; glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); if (Result == GL_FALSE) { Log::error("GLWrapp", "Error when linking these shaders :"); printFileList(args...); glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); char *ErrorMessage = new char[InfoLogLength]; glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, ErrorMessage); Log::error("GLWrapp", ErrorMessage); delete[] ErrorMessage; } GLenum glErr = glGetError(); if (glErr != GL_NO_ERROR) { Log::warn("IrrDriver", "GLWrap : OpenGL error %i\n", glErr); } return ProgramID; }
void loadAndAttach(GLint ProgramID, GLint ShaderType, const char *filepath, Types ... args) { GLint ShaderID = LoadShader(filepath, ShaderType); glAttachShader(ProgramID, ShaderID); glDeleteShader(ShaderID); loadAndAttach(ProgramID, args...); }
GLint LoadProgram(Types ... args) { GLint ProgramID = glCreateProgram(); loadAndAttach(ProgramID, args...); glLinkProgram(ProgramID); GLint Result = GL_FALSE; int InfoLogLength; glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); if (Result == GL_FALSE) { glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); char *ErrorMessage = new char[InfoLogLength]; glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, ErrorMessage); printf(ErrorMessage); delete[] ErrorMessage; } GLenum glErr = glGetError(); if (glErr != GL_NO_ERROR) { Log::warn("IrrDriver", "GLWrap : OpenGL error %i\n", glErr); } return ProgramID; }
GLint LoadProgram(Types ... args) { GLint ProgramID = glCreateProgram(); loadAndAttach(ProgramID, args...); if (irr_driver->getGLSLVersion() < 330) { glBindAttribLocation(ProgramID, 0, "Position"); glBindAttribLocation(ProgramID, 1, "Normal"); glBindAttribLocation(ProgramID, 2, "Color"); glBindAttribLocation(ProgramID, 3, "Texcoord"); glBindAttribLocation(ProgramID, 4, "SecondTexcoord"); glBindAttribLocation(ProgramID, 5, "Tangent"); glBindAttribLocation(ProgramID, 6, "Bitangent"); glBindAttribLocation(ProgramID, 7, "Origin"); glBindAttribLocation(ProgramID, 8, "Orientation"); glBindAttribLocation(ProgramID, 9, "Scale"); } glLinkProgram(ProgramID); GLint Result = GL_FALSE; int InfoLogLength; glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); if (Result == GL_FALSE) { Log::error("GLWrapp", "Error when linking these shaders :"); printFileList(args...); glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); char *ErrorMessage = new char[InfoLogLength]; glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, ErrorMessage); Log::error("GLWrapp", ErrorMessage); delete[] ErrorMessage; } GLenum glErr = glGetError(); if (glErr != GL_NO_ERROR) { Log::warn("IrrDriver", "GLWrap : OpenGL error %i\n", glErr); } return ProgramID; }