Original Post
I'm trying to get shaders working in my C OpenGL program. Below is all the code pertaining to the shaders for my program. On my computer the program still runs, but I know it's not using the shaders, because if I introduce an easily visible error, nothing changes. On some computers it just crashes out. Any suggestions? Cheers
[source lang=c]
// Header File For Loading and Executing GLSL Shader Files
#define __ARB_ENABLE true
// #define EXT_INFO
#define MAX_EXTENSION_SPACE 10240
#define MAX_EXTENSION_LENGTH 256
bool multitextureSupported=false;
bool useMultitexture=true;
GLint maxTexelUnits=1;
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
PFNGLATTACHSHADERPROC glAttachShader = NULL;
PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
PFNGLUSEPROGRAMPROC glUseProgram = NULL;
PFNGLCREATESHADERPROC glCreateShader = NULL;
PFNGLSHADERSOURCEPROC glShaderSource = NULL;
PFNGLCOMPILESHADERPROC glCompileShader = NULL;
void loadExtensions()
{
glCreateProgram = (PFNGLCREATEPROGRAMPROC) wglGetProcAddress("glCreateProgram");
glAttachShader = (PFNGLATTACHSHADERPROC) wglGetProcAddress("glAttachShader");
glLinkProgram = (PFNGLLINKPROGRAMPROC) wglGetProcAddress("glLinkProgram");
glUseProgram = (PFNGLUSEPROGRAMPROC) wglGetProcAddress("glUseProgram");
glCreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader");
glShaderSource = (PFNGLSHADERSOURCEPROC) wglGetProcAddress("glShaderSource");
glCompileShader = (PFNGLCOMPILESHADERPROC) wglGetProcAddress("glCompileShader");
GLuint v = glCreateShader(GL_VERTEX_SHADER);
GLuint f = glCreateShader(GL_FRAGMENT_SHADER);
GLuint p = glCreateProgram();
char buffer[50];
sprintf(buffer,"Creating Shader Program(ID:%i)",p);
writeLog(buffer,"",TRUE);
FILE *file;
FILE *debug;
sprintf(buffer,"Creating Vertex Shader(ID:%i)",v);
if((file=fopen("Data\\Shaders\\vertex.shader","r"))==NULL)
{
writeLog(buffer,"",FALSE);
} else {
char vShaderSource[500];
fscanf(file,vShaderSource);
fclose(file);
const GLchar * vs = vShaderSource;
debug=fopen("shaderLog.txt","w");
fputs(vs,debug);
fclose(debug);
glShaderSource(v,1,&vs,NULL);
writeLog(buffer,"",TRUE);
}
sprintf(buffer,"Creating Fragment Shader(ID:%i)",f);
if((file=fopen("Data\\Shaders\\fragment.shader","r"))==NULL)
{
writeLog(buffer,"",FALSE);
} else {
char fShaderSource[500];
fscanf(file,fShaderSource);
fclose(file);
const GLchar * fs = fShaderSource;
glShaderSource(f,1,&fs,NULL);
writeLog(buffer,"",TRUE);
}
glAttachShader(p,v);
glAttachShader(p,f);
glLinkProgram(p);
glUseProgram(p);
}