bool CShaderInstance::CreateShader( const char* const pszName, const char* const pszSource, const GLenum type, GLuint& shader ) { shader = glCreateShader( type ); glShaderSource( shader, 1, &pszSource, nullptr ); glCompileShader( shader ); GLint vShaderCompiled = GL_FALSE; glGetShaderiv( shader, GL_COMPILE_STATUS, &vShaderCompiled ); if( vShaderCompiled == GL_TRUE ) return true; //TODO: handle all shader types - Solokiller printf( "Failed to compile %s shader \"%s\"\n", type == GL_VERTEX_SHADER ? "vertex" : "fragment", pszName ); PrintShaderLog( shader ); glDeleteShader( shader ); shader = 0; return false; }
OGL4ShaderPtr OGL4ShaderCompiler::CreateShaderFromSource(SHADER_TYPE type, const std::string& source, const std::vector<IncludeInfo>& inc_list, const std::string& entry) { GLenum gltype = OGL4Convert::ShaderTypeToGL(type); GLuint shader = glCreateShader(gltype); std::string result = AdjustEntryPoint(source, entry); const char* szSource = result.c_str(); glShaderSource(shader, 1, &szSource, 0); glCompileShader(shader); char szInfo[1024]; glGetShaderInfoLog(shader, 1024, nullptr, szInfo); PrintShaderLog(szInfo, inc_list); GLint ret = GL_FALSE; glGetShaderiv(shader, GL_COMPILE_STATUS, &ret); if(ret == GL_FALSE) { glDeleteShader(shader); return nullptr; } OGL4ShaderPtr pShader = std::make_shared<OGL4Shader>(type, shader); return pShader; }
// // Create Shader // void CreateShader(int prog,const GLenum type,const char* file) { // Create the shader int shader = glCreateShader(type); // Load source code from file char* source = ReadText(file); glShaderSource(shader,1,(const char**)&source,NULL); free(source); // Compile the shader glCompileShader(shader); // Check for errors PrintShaderLog(shader,file); // Attach to shader program glAttachShader(prog,shader); }
bool GLSLProgram::CompileShader( const GLSLShader& shader, string* strError /*= NULL*/ ) { GL->glCompileShader(shader.id); GLint result = 0xDEADBEEF; GL->glGetShaderiv(shader.id, GL_COMPILE_STATUS, &result); if (!result) { PrintShaderLog(shader.id); /*assert(FALSE && "Shader compilation fails!");*/ return false; } return true; }
GLuint LoadShader(const char* pFilename) { fprintf(stdout,"--- MIDISYS ENGINE: LoadShader(\"%s\")", pFilename); #ifdef SUPERVERBOSE printf("\n"); #endif char vsName[128] = ""; strcpy(vsName, pFilename); strcat(vsName, ".vs"); char fsName[128] = ""; strcpy(fsName, pFilename); strcat(fsName, ".fs"); #ifdef SUPERVERBOSE fprintf(stdout,"\tLoadShader(\"%s\") vertex shader source file: \"%s\"\n", pFilename, vsName); #endif GLchar *vsSource = File2String(vsName); #ifdef SUPERVERBOSE fprintf(stdout,"\tLoadShader(\"%s\") vertex shader source:\n----------------------------------------------------\n%s\n----------------------------------------------------\n", pFilename, vsSource); #endif #ifdef SUPERVERBOSE fprintf(stdout,"\tLoadShader(\"%s\") fragment shader source file: \"%s\"\n", pFilename, fsName); #endif GLchar *fsSource = File2String(fsName); #ifdef SUPERVERBOSE fprintf(stdout,"\tLoadShader(\"%s\") fragment shader source:\n----------------------------------------------------\n%s\n----------------------------------------------------\n", pFilename, fsSource); #endif GLuint vs, fs, sp; #ifdef SUPERVERBOSE printf("\tLoadShader(): vs glCreateShader\n"); #endif vs = glCreateShader(GL_VERTEX_SHADER); #ifdef SUPERVERBOSE printf("\tLoadShader(): vs glShaderSource\n"); #endif glShaderSource(vs, 1, (const GLchar**)&vsSource, NULL); #ifdef SUPERVERBOSE printf("\tLoadShader(): vs glCompileShader\n"); #endif glCompileShader(vs); #ifdef SUPERVERBOSE printf("\tLoadShader(): vs compiled\n"); #endif #ifdef SUPERVERBOSE printf("\tLoadShader(): fs glCreateShader\n"); #endif fs = glCreateShader(GL_FRAGMENT_SHADER); #ifdef SUPERVERBOSE printf("\tLoadShader(): fs glShaderSource\n"); #endif glShaderSource(fs, 1, (const GLchar**)&fsSource, NULL); #ifdef SUPERVERBOSE printf("\tLoadShader(): fs glCompileShader\n"); #endif glCompileShader(fs); #ifdef SUPERVERBOSE printf("\tLoadShader(): fs compiled\n"); #endif free(vsSource); free(fsSource); #ifdef SUPERVERBOSE printf("\tLoadShader(): glCreateProgram\n"); #endif sp = glCreateProgram(); #ifdef SUPERVERBOSE printf("\tLoadShader(): glAttachShader vs\n"); #endif glAttachShader(sp, vs); #ifdef SUPERVERBOSE printf("\tLoadShader(): glAttachShader fs\n"); #endif glAttachShader(sp, fs); #ifdef SUPERVERBOSE printf("\tLoadShader(): glLinkProgram\n"); #endif glLinkProgram(sp); PrintShaderLog(sp); #ifdef SUPERVERBOSE printf("\tLoadShader(): glUseProgram\n"); #endif glUseProgram(sp); PrintShaderLog(sp); #ifdef SUPERVERBOSE fprintf(stdout,"--- MIDISYS ENGINE: LoadShader(\"%s\") success\n", pFilename); #else printf(" success\n"); #endif return sp; }