00001 #pragma once
00002
00003 #include "common.h"
00004 #include <glew.h>
00005
00006 #include <windows.h>
00007 #include <stdlib.h>
00008 #include <io.h>
00009 #include <glew.h>
00010 #include "Vector.h"
00011
00012
00014
00019 class AbstractShader
00020 {
00021 public:
00027 char* textFileRead(char *fn)
00028 {
00029 FILE *fp;
00030 char *content = NULL;
00031 int count=0;
00032
00033 if (fn != NULL)
00034 {
00035 fp = fopen(fn,"rt");
00036 if (fp != NULL)
00037 {
00038 fseek(fp, 0, SEEK_END);
00039 count = ftell(fp);
00040 rewind(fp);
00041
00042 if (count > 0)
00043 {
00044 content = (char *)malloc(sizeof(char) * (count+1));
00045 count = fread(content,sizeof(char),count,fp);
00046 content[count] = '\0';
00047 }
00048 fclose(fp);
00049 }
00050 }
00051 return content;
00052 };
00053
00060 GLhandleARB loadShader(const char* filename, unsigned int type)
00061 {
00062 FILE *pfile;
00063 GLhandleARB handle;
00064 const GLcharARB* files[1];
00065 GLint result;
00066 GLint errorLoglength ;
00067 char* errorLogText;
00068 GLsizei actualErrorLogLength;
00069 char buffer[400000];
00070 memset(buffer,0,400000);
00071
00072 pfile = fopen(filename, "rb");
00073 if(!pfile)
00074 {
00075 printf("Shader konnte nicht geöffnet werden '%s'.\n", filename);
00076
00077 }
00078
00079 fread(buffer,sizeof(char),400000,pfile);
00080 fclose(pfile);
00081
00082 handle = glCreateShaderObjectARB(type);
00083 if (!handle)
00084 {
00085 printf("Shader konte nicht erstellt werden: %s.",filename);
00086
00087 }
00088
00089 files[0] = (const GLcharARB*)buffer;
00090 glShaderSourceARB(handle, 1, files, NULL);
00091 glCompileShaderARB(handle);
00092 glGetObjectParameterivARB(handle, GL_OBJECT_COMPILE_STATUS_ARB, &result);
00093
00094 if (!result)
00095 {
00096 printf("Shader '%s' konnte nicht kompeliert werden.\n",filename);
00097 glGetObjectParameterivARB(handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &errorLoglength);
00098 errorLogText = (char*) malloc(sizeof(char) *errorLoglength);
00099 glGetInfoLogARB(handle, errorLoglength, &actualErrorLogLength, errorLogText);
00100 printf("%s\n",errorLogText);
00101 free(errorLogText);
00102 }
00103 return handle;
00104 };
00105 };