Example #1
0
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;
}
Example #2
0
	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;
	}
Example #3
0
//
//  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);
}
Example #4
0
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;
}
Example #5
0
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;
}