#include "shader-helper.h" #include #include #include GLuint loadShader(std::string_view name, std::span source, GLenum shader_type) { GLuint shaderId = glCreateShader(shader_type); GLint result = GL_FALSE; int infoLogLength; auto data = reinterpret_cast(source.data()); auto size = static_cast(source.size()); glShaderSource(shaderId, 1, &data, &size); glCompileShader(shaderId); glGetShaderiv(shaderId, GL_COMPILE_STATUS, &result); glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &infoLogLength); if (infoLogLength > 0) { std::cout << "errors in shader " << name << std::endl; std::vector VertexShaderErrorMessage(infoLogLength + 1); glGetShaderInfoLog(shaderId, infoLogLength, nullptr, &VertexShaderErrorMessage[0]); std::cout << &VertexShaderErrorMessage[0] << std::endl; std::cout << "=====" << std::endl; std::cout << std::string_view(data, size) << std::endl; exit(-1); } return shaderId; } GLuint loadProgram(std::string_view name, const std::vector &shaders) { GLuint programId = glCreateProgram(); for (const auto &item : shaders) { glAttachShader(programId, item); } glLinkProgram(programId); GLint result = GL_FALSE; int infoLogLength; glGetProgramiv(programId, GL_LINK_STATUS, &result); glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &infoLogLength); if (infoLogLength > 0) { std::cout << "errors in program " << name << std::endl; std::vector ProgramErrorMessage(infoLogLength + 1); glGetProgramInfoLog(programId, infoLogLength, nullptr, &ProgramErrorMessage[0]); std::cout << &ProgramErrorMessage[0] << std::endl; } return programId; }