58 lines
1.3 KiB
C++
58 lines
1.3 KiB
C++
|
|
#include "shaderClass.h"
|
|
#include "VBO.h"
|
|
|
|
Shader::Shader(const char* vertexFile, const char* fragFile)
|
|
{
|
|
std::string vertexCode = get_file_contents(vertexFile);
|
|
std::string fragCode = get_file_contents(fragFile);
|
|
|
|
const char* vertexSource = vertexCode.c_str();
|
|
const char* fragSource = fragCode.c_str();
|
|
|
|
unsigned int vertexShader;
|
|
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
|
glShaderSource(vertexShader, 1, &vertexSource, NULL);
|
|
glCompileShader(vertexShader);
|
|
|
|
unsigned int fragmentShader;
|
|
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
|
glShaderSource(fragmentShader, 1, &fragSource, NULL);
|
|
glCompileShader(fragmentShader);
|
|
|
|
ID = glCreateProgram();
|
|
glAttachShader(ID, vertexShader);
|
|
glAttachShader(ID, fragmentShader);
|
|
glLinkProgram(ID);
|
|
|
|
glDeleteShader(vertexShader);
|
|
glDeleteShader(fragmentShader);
|
|
}
|
|
|
|
void Shader::Activate()
|
|
{
|
|
glUseProgram(ID);
|
|
}
|
|
|
|
void Shader::Delete()
|
|
{
|
|
glDeleteProgram(ID);
|
|
}
|
|
|
|
std::string get_file_contents(const char* filename)
|
|
{
|
|
std::ifstream in(filename, std::ios::binary);
|
|
|
|
if (in) {
|
|
std::string contents;
|
|
in.seekg(0, std::ios::end);
|
|
contents.resize(in.tellg());
|
|
in.seekg(0, std::ios::beg);
|
|
in.read(&contents[0], contents.size());
|
|
in.close();
|
|
return contents;
|
|
}
|
|
std::cout << "GETTING SHADER FILE CONTENTS FAILED\n";
|
|
throw errno;
|
|
}
|