49 if((filename.length() > 1 && filename[0] ==
'/') ||
50 (filename.length() > 2 && filename[1] ==
':')) {
52 file.open(filename.c_str(), std::ifstream::in | std::ifstream::binary);
56 for(
unsigned int i = 0; i < paths.size(); i++) {
57 file.open((paths[i] + filename).c_str(), std::ifstream::in | std::ifstream::binary);
59 path = paths[i] + filename;
70 file.seekg(0, file.end);
71 size =
static_cast<GLint
>(file.tellg());
72 file.seekg(0, file.beg);
73 std::unique_ptr<char[]> buf = std::make_unique<char[]>(size);
74 file.read(buf.get(), size);
79 tmp = glCreateShader(type);
80 glShaderSource(tmp, 1, &code, &size);
82 glGetShaderiv(tmp, GL_COMPILE_STATUS, &compiled);
84 glGetShaderiv(tmp, GL_INFO_LOG_LENGTH, &info_log_length);
85 std::unique_ptr<char[]> info_log = std::make_unique<char[]>(info_log_length);
86 glGetShaderInfoLog(tmp, info_log_length, &info_log_length, info_log.get());
87 std::cerr <<
"CompileShader() infoLog " << filename
88 << std::endl << info_log.get() << std::endl;
94 attached.push_back(tmp);
96 shader_path_map[path] = type;
105 const char *string_ptr = shader_string.c_str();
106 int size = shader_string.length();
109 GLuint tmp = glCreateShader(type);
110 glShaderSource(tmp, 1, &(string_ptr), &(size));
111 glCompileShader(tmp);
112 glGetShaderiv(tmp, GL_COMPILE_STATUS, &compiled);
114 glGetShaderiv(tmp, GL_INFO_LOG_LENGTH, &info_log_length);
115 std::unique_ptr<char[]> infoLog = std::make_unique<char[]>(info_log_length);
116 glGetShaderInfoLog(tmp, info_log_length, &info_log_length, infoLog.get());
117 std::cerr <<
"CompileShader() infoLog " << std::endl
118 << infoLog.get() << std::endl;
124 attached.push_back(tmp);
126 shader_string_map[shader_string] = type;
135 std::vector<const char*> vars(variables.size());
136 for(
unsigned int i = 0; i < variables.size(); i++) {
137 vars[i] = variables[i].c_str();
139 glTransformFeedbackVaryings(
program, variables.size(), vars.data(), buffer_mode);
163 glGetProgramiv(
program, GL_LINK_STATUS, &isLinked);
164 if(isLinked == GL_FALSE) {
165 GLint info_log_length;
166 glGetProgramiv(
program, GL_INFO_LOG_LENGTH, &info_log_length);
167 std::unique_ptr<char[]> info_log = std::make_unique<char[]>(info_log_length);
168 glGetProgramInfoLog(
program, info_log_length, &info_log_length, info_log.get());
173 for(GLuint shader : attached) {
174 glDetachShader(
program, shader);