Shaders loaded from files

This commit is contained in:
Enrico Turri 2018-05-21 13:08:02 +02:00
parent 3fb96ff636
commit 7cff6ef6db
8 changed files with 504 additions and 273 deletions

View file

@ -2,6 +2,11 @@
#include "GLShader.hpp"
//############################################################################################################################################
#include "../../libslic3r/Utils.hpp"
#include <boost/nowide/fstream.hpp>
//############################################################################################################################################
#include <string>
#include <utility>
#include <assert.h>
@ -22,7 +27,10 @@ inline std::string gl_get_string_safe(GLenum param)
return std::string(value ? value : "N/A");
}
bool GLShader::load(const char *fragment_shader, const char *vertex_shader)
//############################################################################################################################################
bool GLShader::load_from_text(const char *fragment_shader, const char *vertex_shader)
//bool GLShader::load(const char *fragment_shader, const char *vertex_shader)
//############################################################################################################################################
{
std::string gl_version = gl_get_string_safe(GL_VERSION);
int major = atoi(gl_version.c_str());
@ -123,6 +131,43 @@ bool GLShader::load(const char *fragment_shader, const char *vertex_shader)
return true;
}
//############################################################################################################################################
bool GLShader::load_from_file(const char* fragment_shader_filename, const char* vertex_shader_filename)
{
const std::string& path = resources_dir() + "/shaders/";
boost::nowide::ifstream vs(path + std::string(vertex_shader_filename), boost::nowide::ifstream::binary);
if (!vs.good())
return false;
vs.seekg(0, vs.end);
int file_length = vs.tellg();
vs.seekg(0, vs.beg);
std::string vertex_shader(file_length, '\0');
vs.read(const_cast<char*>(vertex_shader.data()), file_length);
if (!vs.good())
return false;
vs.close();
boost::nowide::ifstream fs(path + std::string(fragment_shader_filename), boost::nowide::ifstream::binary);
if (!fs.good())
return false;
fs.seekg(0, fs.end);
file_length = fs.tellg();
fs.seekg(0, fs.beg);
std::string fragment_shader(file_length, '\0');
fs.read(const_cast<char*>(fragment_shader.data()), file_length);
if (!fs.good())
return false;
fs.close();
return load_from_text(fragment_shader.c_str(), vertex_shader.c_str());
}
//############################################################################################################################################
void GLShader::release()
{
if (this->shader_program_id) {