mirror of
https://git.lynn.is/Gwen/pretty-automata.git
synced 2024-05-18 15:21:07 +02:00
51 lines
1.7 KiB
C++
51 lines
1.7 KiB
C++
#include "shader-helper.h"
|
|
#include <cstdlib>
|
|
#include <iostream>
|
|
#include <span>
|
|
|
|
GLuint loadShader(std::string_view name, std::span<const std::byte> source, GLenum shader_type) {
|
|
GLuint shaderId = glCreateShader(shader_type);
|
|
GLint result = GL_FALSE;
|
|
int infoLogLength;
|
|
|
|
auto data = reinterpret_cast<const char*>(source.data());
|
|
auto size = static_cast<GLint>(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<char> 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<GLuint> &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<char> ProgramErrorMessage(infoLogLength + 1);
|
|
glGetProgramInfoLog(programId, infoLogLength, nullptr,
|
|
&ProgramErrorMessage[0]);
|
|
std::cout << &ProgramErrorMessage[0] << std::endl;
|
|
}
|
|
return programId;
|
|
} |