OpenGLController: moved some code around
shader: throw errors
This commit is contained in:
parent
d97a917a5e
commit
8955fc91ea
|
@ -99,34 +99,6 @@ void OpenGLController::processInit()
|
||||||
|
|
||||||
// draw vertics only from one side
|
// draw vertics only from one side
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
|
|
||||||
// generate stuff
|
|
||||||
glGenVertexArrays(1, &gluiVertexArrayID);
|
|
||||||
glBindVertexArray(gluiVertexArrayID);
|
|
||||||
|
|
||||||
glGenBuffers(1, &gluiVertexBufferID);
|
|
||||||
glGenBuffers(1, &gluiUVBufferID);
|
|
||||||
|
|
||||||
gluiShaderPrgmID = LoadShaders(VERTEX_SHADER, FRAGMENT_SHADER);
|
|
||||||
|
|
||||||
gluiMatrixID = glGetUniformLocation(gluiShaderPrgmID, "MVP");
|
|
||||||
gluiSamplerID = glGetUniformLocation(gluiShaderPrgmID, "textureSampler");
|
|
||||||
|
|
||||||
vfVertices = loadData();
|
|
||||||
vfUV = loadUV();
|
|
||||||
|
|
||||||
glGenTextures(1, &gluiTextureID);
|
|
||||||
glBindTexture(GL_TEXTURE_2D, gluiTextureID);
|
|
||||||
TextureTGA tempTex(TEXTURE_NAME);
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, tempTex.hasAlpha() ? GL_RGBA : GL_RGB, tempTex.getWidth(), tempTex.getHeight(), 0, tempTex.hasAlpha() ? GL_BGRA : GL_BGR, GL_UNSIGNED_BYTE, tempTex.getData().data());
|
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
|
||||||
glGenerateMipmap(GL_TEXTURE_2D);
|
|
||||||
|
|
||||||
loadMsh("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenGLController::startGLFW()
|
void OpenGLController::startGLFW()
|
||||||
|
@ -287,6 +259,40 @@ void OpenGLController::updateScene()
|
||||||
|
|
||||||
void OpenGLController::loadMsh(const char * path)
|
void OpenGLController::loadMsh(const char * path)
|
||||||
{
|
{
|
||||||
|
// generate stuff
|
||||||
|
glGenVertexArrays(1, &gluiVertexArrayID);
|
||||||
|
glBindVertexArray(gluiVertexArrayID);
|
||||||
|
|
||||||
|
glGenBuffers(1, &gluiVertexBufferID);
|
||||||
|
glGenBuffers(1, &gluiUVBufferID);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
gluiShaderPrgmID = LoadShaders(VERTEX_SHADER, FRAGMENT_SHADER);
|
||||||
|
}
|
||||||
|
catch (std::invalid_argument e)
|
||||||
|
{
|
||||||
|
MessageBox(NULL, e.what(), "MeshViewer 2.0 Error", MB_OK | MB_ICONERROR);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
gluiMatrixID = glGetUniformLocation(gluiShaderPrgmID, "MVP");
|
||||||
|
gluiSamplerID = glGetUniformLocation(gluiShaderPrgmID, "textureSampler");
|
||||||
|
|
||||||
|
// get data
|
||||||
|
vfVertices = loadData();
|
||||||
|
vfUV = loadUV();
|
||||||
|
|
||||||
|
glGenTextures(1, &gluiTextureID);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, gluiTextureID);
|
||||||
|
TextureTGA tempTex(TEXTURE_NAME);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, tempTex.hasAlpha() ? GL_RGBA : GL_RGB, tempTex.getWidth(), tempTex.getHeight(), 0, tempTex.hasAlpha() ? GL_BGRA : GL_BGR, GL_UNSIGNED_BYTE, tempTex.getData().data());
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, gluiVertexBufferID);
|
glBindBuffer(GL_ARRAY_BUFFER, gluiVertexBufferID);
|
||||||
glBufferData(
|
glBufferData(
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iostream>
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -27,10 +25,12 @@ GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path
|
||||||
while(getline(VertexShaderStream, Line))
|
while(getline(VertexShaderStream, Line))
|
||||||
VertexShaderCode += "\n" + Line;
|
VertexShaderCode += "\n" + Line;
|
||||||
VertexShaderStream.close();
|
VertexShaderStream.close();
|
||||||
}else{
|
}
|
||||||
printf("Impossible to open %s. Are you in the right directory ? Don't forget to read the FAQ !\n", vertex_file_path);
|
else
|
||||||
getchar();
|
{
|
||||||
return 0;
|
std::string message("File not found: ");
|
||||||
|
message += std::string(vertex_file_path);
|
||||||
|
throw std::invalid_argument(message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the Fragment Shader code from the file
|
// Read the Fragment Shader code from the file
|
||||||
|
@ -42,13 +42,18 @@ GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path
|
||||||
FragmentShaderCode += "\n" + Line;
|
FragmentShaderCode += "\n" + Line;
|
||||||
FragmentShaderStream.close();
|
FragmentShaderStream.close();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string message("File not found: ");
|
||||||
|
message += std::string(fragment_file_path);
|
||||||
|
throw std::invalid_argument(message.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
GLint Result = GL_FALSE;
|
GLint Result = GL_FALSE;
|
||||||
int InfoLogLength;
|
int InfoLogLength;
|
||||||
|
|
||||||
|
|
||||||
// Compile Vertex Shader
|
// Compile Vertex Shader
|
||||||
printf("Compiling shader : %s\n", vertex_file_path);
|
|
||||||
char const * VertexSourcePointer = VertexShaderCode.c_str();
|
char const * VertexSourcePointer = VertexShaderCode.c_str();
|
||||||
glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
|
glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
|
||||||
glCompileShader(VertexShaderID);
|
glCompileShader(VertexShaderID);
|
||||||
|
@ -59,13 +64,12 @@ GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path
|
||||||
if ( InfoLogLength > 0 ){
|
if ( InfoLogLength > 0 ){
|
||||||
std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
|
std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
|
||||||
glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
|
glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
|
||||||
printf("%s\n", &VertexShaderErrorMessage[0]);
|
throw std::invalid_argument(VertexShaderErrorMessage.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Compile Fragment Shader
|
// Compile Fragment Shader
|
||||||
printf("Compiling shader : %s\n", fragment_file_path);
|
|
||||||
char const * FragmentSourcePointer = FragmentShaderCode.c_str();
|
char const * FragmentSourcePointer = FragmentShaderCode.c_str();
|
||||||
glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL);
|
glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL);
|
||||||
glCompileShader(FragmentShaderID);
|
glCompileShader(FragmentShaderID);
|
||||||
|
@ -76,13 +80,12 @@ GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path
|
||||||
if ( InfoLogLength > 0 ){
|
if ( InfoLogLength > 0 ){
|
||||||
std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
|
std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
|
||||||
glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
|
glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
|
||||||
printf("%s\n", &FragmentShaderErrorMessage[0]);
|
throw std::invalid_argument(FragmentShaderErrorMessage.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Link the program
|
// Link the program
|
||||||
printf("Linking program\n");
|
|
||||||
GLuint ProgramID = glCreateProgram();
|
GLuint ProgramID = glCreateProgram();
|
||||||
glAttachShader(ProgramID, VertexShaderID);
|
glAttachShader(ProgramID, VertexShaderID);
|
||||||
glAttachShader(ProgramID, FragmentShaderID);
|
glAttachShader(ProgramID, FragmentShaderID);
|
||||||
|
@ -94,7 +97,7 @@ GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path
|
||||||
if ( InfoLogLength > 0 ){
|
if ( InfoLogLength > 0 ){
|
||||||
std::vector<char> ProgramErrorMessage(InfoLogLength+1);
|
std::vector<char> ProgramErrorMessage(InfoLogLength+1);
|
||||||
glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
|
glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
|
||||||
printf("%s\n", &ProgramErrorMessage[0]);
|
throw std::invalid_argument(ProgramErrorMessage.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
OpenGLController *scene = OpenGLController::getInstance();
|
OpenGLController *scene = OpenGLController::getInstance();
|
||||||
|
|
||||||
|
scene->loadMsh("test.msh");
|
||||||
|
|
||||||
do {
|
do {
|
||||||
scene->updateScene();
|
scene->updateScene();
|
||||||
} while (!glfwWindowShouldClose(scene->getWindow()));
|
} while (!glfwWindowShouldClose(scene->getWindow()));
|
||||||
|
|
Loading…
Reference in New Issue