updated makefile for supporting different target architectures
use "ARCH=arch_name make" restructured project folder, implementations and headers together under sources/
This commit is contained in:
100
sources/GL_STUFF/UTILS/ShaderMaker.cpp
Executable file
100
sources/GL_STUFF/UTILS/ShaderMaker.cpp
Executable file
@@ -0,0 +1,100 @@
|
||||
#include "ShaderMaker.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
/* PORCATA AGGIUNTA IN SEGUITO */
|
||||
#include <stdlib.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
char* ShaderMaker::readShaderSource(const char* shaderFile)
|
||||
{
|
||||
FILE* fp = fopen(shaderFile, "rb");
|
||||
|
||||
if (fp == NULL) { return NULL; }
|
||||
|
||||
fseek(fp, 0L, SEEK_END);
|
||||
long size = ftell(fp);
|
||||
|
||||
fseek(fp, 0L, SEEK_SET);
|
||||
char* buf = new char[size + 1];
|
||||
fread(buf, 1, size, fp);
|
||||
|
||||
buf[size] = '\0';
|
||||
fclose(fp);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
GLuint ShaderMaker::createProgram(char* vertexfilename, char *fragmentfilename)
|
||||
{
|
||||
GLenum ErrorCheckValue = glGetError();
|
||||
|
||||
// Creiamo gli eseguibili degli shader
|
||||
//Leggiamo il codice del Vertex Shader
|
||||
GLchar* VertexShader = readShaderSource(vertexfilename);
|
||||
//Visualizzo sulla console il CODICE VERTEX SHADER
|
||||
std::cout << VertexShader;
|
||||
|
||||
std::cout << "MACHEOH\n\n\n\n" << std::endl;
|
||||
|
||||
//Generiamo un identificativo per il vertex shader
|
||||
GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER);
|
||||
//Associamo all'identificativo il codice del vertex shader
|
||||
glShaderSource(vertexShaderId, 1, (const char**)&VertexShader, NULL);
|
||||
//Compiliamo il Vertex SHader
|
||||
glCompileShader(vertexShaderId);
|
||||
|
||||
int success;
|
||||
GLchar infoLog[512];
|
||||
int logLength;
|
||||
|
||||
glGetShaderiv(vertexShaderId, GL_COMPILE_STATUS, &success);
|
||||
if ( GL_TRUE != success) {
|
||||
glGetShaderInfoLog(vertexShaderId, 512, &logLength, infoLog);
|
||||
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
|
||||
}
|
||||
|
||||
//Leggiamo il codice del Fragment Shader
|
||||
const GLchar* FragmentShader = readShaderSource(fragmentfilename);
|
||||
//Visualizzo sulla console il CODICE FRAGMENT SHADER
|
||||
std::cout << FragmentShader;
|
||||
|
||||
//Generiamo un identificativo per il FRAGMENT shader
|
||||
GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragmentShaderId, 1, (const char**)&FragmentShader, NULL);
|
||||
//Compiliamo il FRAGMENT SHader
|
||||
glCompileShader(fragmentShaderId);
|
||||
|
||||
|
||||
glGetShaderiv(fragmentShaderId, GL_COMPILE_STATUS, &success);
|
||||
if ( GL_TRUE != success) {
|
||||
glGetShaderInfoLog(fragmentShaderId, 512, &logLength, infoLog);
|
||||
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ErrorCheckValue = glGetError();
|
||||
cout << ErrorCheckValue;
|
||||
|
||||
if (ErrorCheckValue != GL_NO_ERROR)
|
||||
{
|
||||
fprintf(
|
||||
stderr,
|
||||
"ERROR: Could not create the shaders: %s | %x\n",
|
||||
"(FIX MY SOURCE)",
|
||||
ErrorCheckValue
|
||||
);
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
//Creiamo un identificativo di un eseguibile e gli colleghiamo i due shader compilati
|
||||
GLuint programId = glCreateProgram();
|
||||
|
||||
glAttachShader(programId, vertexShaderId);
|
||||
glAttachShader(programId, fragmentShaderId);
|
||||
glLinkProgram(programId);
|
||||
|
||||
return programId;
|
||||
}
|
||||
Reference in New Issue
Block a user