コード例 #1
0
ShaderProgram::ShaderProgram(const char *vertexShaderFile, const char *fragmentShaderFile) {
    
    // create the vertex shader
    vertexShader = LoadShaderFromFile(vertexShaderFile, GL_VERTEX_SHADER);
    // create the fragment shader
    fragmentShader = LoadShaderFromFile(fragmentShaderFile, GL_FRAGMENT_SHADER);
    
    // Create the final shader program from our vertex and fragment shaders
    programID = glCreateProgram();
    glAttachShader(programID, vertexShader);
    glAttachShader(programID, fragmentShader);
    glLinkProgram(programID);
    
    GLint linkSuccess;
    glGetProgramiv(programID, GL_LINK_STATUS, &linkSuccess);
    if(linkSuccess == GL_FALSE) {
        printf("Error linking shader program!\n");
    }
    
    modelviewMatrixUniform = glGetUniformLocation(programID, "modelviewMatrix");
    projectionMatrixUniform = glGetUniformLocation(programID, "projectionMatrix");
    
    positionAttribute = glGetAttribLocation(programID, "position");
    texCoordAttribute = glGetAttribLocation(programID, "texCoord");
    
}
コード例 #2
0
	bool ShaderSet::LoadFromFile(const Resources::Shaders::ShadersInfo & shadersInfo, ID3D11Device * dev)
	{
		assert(dev);

		bool shaderLoadResult = true;

		if (shadersInfo.vertexShaderInfo)
		{
			ID3DBlob * shaderCode = LoadShaderFromFile(*shadersInfo.vertexShaderInfo, dev);

			if (!shaderCode)
			{
				return false;
			}

			VSBlob = shaderCode;

			HRESULT res = dev->CreateVertexShader(shaderCode->GetBufferPointer(), shaderCode->GetBufferSize(), NULL, &vertexShader);
			if (FAILED(res))
			{
				WinUtils::PrintErrorMessage(res, "Error creating VS : ", "Error");

				VSBlob->Release();

				return false;
			}

		}

		if (shadersInfo.pixelShaderInfo)
		{
			ID3DBlob * shaderCode = LoadShaderFromFile(*shadersInfo.pixelShaderInfo, dev);

			if (!shaderCode)
			{
				vertexShader->Release();
				return false;
			}

			PSBlob = shaderCode;

			HRESULT res = dev->CreatePixelShader(shaderCode->GetBufferPointer(), shaderCode->GetBufferSize(), NULL, &pixelShader);
			if (FAILED(res))
			{
				WinUtils::PrintErrorMessage(res, "Error creating PS : ", "Error");

				//clean up previously loaded shaders
				VSBlob->Release();
				vertexShader->Release();
				shaderCode->Release();

				return false;
			}

		}

		return true;
	}
コード例 #3
0
ファイル: Shader.cpp プロジェクト: ksauriol/computer-graphics
bool Shader::InitializeFromFile(const char* vertFilename, const char* fragFilename)
{
	//std::cout << "Compiling shaders: " << vertFilename << " | " << fragFilename << std::endl;

	m_vertex = LoadShaderFromFile(vertFilename, GL_VERTEX_SHADER);
	m_fragment = LoadShaderFromFile(fragFilename, GL_FRAGMENT_SHADER);

	if(m_vertex == -1 || m_fragment == -1)
		return false;

	return CreateShader();
}
コード例 #4
0
static __forceinline bool LOAD_PS(char* DefineString, const char* name, FRAGMENTSHADER& fragment, int shaderver, ZZshProfile context, const char* depth)
{
	bool flag;
	char temp[200];
	GlslHeaderString(temp, name, depth);
	sprintf(DefineString, "%s#define FRAGMENT_SHADER 1\n#define CTX %d\n", temp, context * NOCONTEXT);
	//ZZLog::WriteLn("Define for PS == '%s'", DefineString);
	flag = LoadShaderFromFile(fragment.Shader, DefineString, name, GL_FRAGMENT_SHADER);
	SetupFragmentProgramParameters(&fragment, context, 0); 
	return flag;
}
コード例 #5
0
static __forceinline bool LOAD_VS(char* DefineString, const char* name, VERTEXSHADER& vertex, int shaderver, ZZshProfile context, const char* depth)
{
	bool flag;
	char temp[200];
	GlslHeaderString(temp, name, depth);
	sprintf(DefineString, "%s#define VERTEX_SHADER 1\n#define CTX %d\n", temp, context * NOCONTEXT);
	//ZZLog::WriteLn("Define for VS == '%s'", DefineString);
	flag = LoadShaderFromFile(vertex.Shader, DefineString, name, GL_VERTEX_SHADER);
	SetupVertexProgramParameters(&vertex, context);
	return flag;
}
コード例 #6
0
ファイル: AsShader.cpp プロジェクト: KevinMackenzie/asggl
AsShader::AsShader(std::string* pShaderPaths, GLuint pNumFiles, GLenum pType)
{
    mShaderType = pType;
	LoadShaderFromFile(pShaderPaths, pNumFiles, pType);
}
コード例 #7
0
ファイル: main.cpp プロジェクト: redcodes/UnrealEngine4
int main( int argc, char** argv)
#endif
{
	char* HLSLShaderSource = 0;
	char* GLSLShaderSource = 0;
	char* ErrorLog = 0;

	SCmdOptions Options;
	{
		int Result = ParseCommandLine( argc-1, argv+1, Options);
		if (Result != 0)
		{
			return Result;
		}
	}
	
	HLSLShaderSource = LoadShaderFromFile(Options.ShaderFilename);
	if (!HLSLShaderSource)
	{
		dprintf( "Failed to open input shader %s\n", Options.ShaderFilename);
		return -2;
	}

	int Flags = HLSLCC_PackUniforms; // | HLSLCC_NoValidation | HLSLCC_PackUniforms;
	Flags |= Options.bNoPreprocess ? HLSLCC_NoPreprocess : 0;
	Flags |= Options.bDumpAST ? HLSLCC_PrintAST : 0;
	Flags |= Options.bFlattenUB ? HLSLCC_FlattenUniformBuffers : 0;
	Flags |= Options.bFlattenUBStructures ? HLSLCC_FlattenUniformBufferStructures : 0;
	Flags |= Options.bGroupFlattenedUB ? HLSLCC_GroupFlattenedUniformBuffers : 0;
	Flags |= Options.bCSE ? HLSLCC_ApplyCommonSubexpressionElimination : 0;
	Flags |= Options.bExpandExpressions ? HLSLCC_ExpandSubexpressions : 0;
	Flags |= Options.bSeparateShaderObjects ? HLSLCC_SeparateShaderObjects : 0;

	FGlslCodeBackend GlslCodeBackend(Flags, Options.Target);
	FGlslLanguageSpec GlslLanguageSpec;//(Options.Target == HCT_FeatureLevelES2);

	FCodeBackend* CodeBackend = &GlslCodeBackend;
	ILanguageSpec* LanguageSpec = &GlslLanguageSpec;
	switch (Options.Backend)
	{
	case HB_Glsl:
	default:
		CodeBackend = &GlslCodeBackend;
		LanguageSpec = &GlslLanguageSpec;
		Flags |= HLSLCC_DX11ClipSpace;
		break;
	}
	int Result = 0;

	{
		//FCRTMemLeakScope::BreakOnBlock(33758);
		FCRTMemLeakScope MemLeakScopeContext;
		FHlslCrossCompilerContext Context(Flags, Options.Frequency, Options.Target);
		if (Context.Init(Options.ShaderFilename, LanguageSpec))
		{
			FCRTMemLeakScope MemLeakScopeRun;
			Result = Context.Run(
				HLSLShaderSource,
				Options.Entry,
				CodeBackend,
				&GLSLShaderSource,
				&ErrorLog) ? 1 : 0;
		}

		if (GLSLShaderSource)
		{
			dprintf("GLSL Shader Source --------------------------------------------------------------\n");
			dprintf("%s",GLSLShaderSource);
			dprintf("\n-------------------------------------------------------------------------------\n\n");
		}

		if (ErrorLog)
		{
			dprintf("Error Log ----------------------------------------------------------------------\n");
			dprintf("%s",ErrorLog);
			dprintf("\n-------------------------------------------------------------------------------\n\n");
		}

		if (Options.OutFile && GLSLShaderSource)
		{
			FILE *fp = fopen( Options.OutFile, "w");

			if (fp)
			{
				fprintf( fp, "%s", GLSLShaderSource);
				fclose(fp);
			}
		}

		free(HLSLShaderSource);
		free(GLSLShaderSource);
		free(ErrorLog);

		if (DebugBuffer)
		{
			free(DebugBuffer);
			DebugBuffer = nullptr;
		}
	}

	return 0;
}
コード例 #8
0
ファイル: demo.cpp プロジェクト: FattyMieo/3DGameProgramming
int Init ( void )
{
   GLuint vertexShader;
   GLuint fragmentShader;
   GLuint programObject;
   GLint linked;

   // Load Textures
   glGenTextures(TEXTURE_COUNT, GtextureID);
   loadTexture("../media/rocks.bmp", GtextureID[0]);
   loadTexture("../media/rainbow-blocks.bmp", GtextureID[1]);
   loadTexture("../media/rgb.bmp", GtextureID[2]);
   loadTexture("../media/barack-obama.bmp", GtextureID[3]);
   loadTexture("../media/rainbow-stripes.bmp", GtextureID[4]);
   loadTexture("../media/gtx-promo.bmp", GtextureID[5]);
   loadTexture("../media/Mettle_Skybox_Cubic_Cross.bmp", GtextureID[6]);
   loadTexture("../media/sky.bmp", GtextureID[7]);

   // Initialize FMOD
   //initFmod();

   // Create a new FBO (Frame Bufffer Object)
   glGenFramebuffers(1, &Gframebuffer);

   // Create a new empty texture for rendering original scene
   glGenTextures(1, &GfullscreenTexture);
   glBindTexture(GL_TEXTURE_2D, GfullscreenTexture);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WINDOW_WIDTH, WINDOW_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

   // Create 3 new empty textures for processing textures
   glGenTextures(1, &GpTexture_0);
   glBindTexture(GL_TEXTURE_2D, GpTexture_0);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WINDOW_WIDTH, WINDOW_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glGenTextures(1, &GpTexture_1);
   glBindTexture(GL_TEXTURE_2D, GpTexture_1);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WINDOW_WIDTH, WINDOW_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glGenTextures(1, &GpTexture_2);
   glBindTexture(GL_TEXTURE_2D, GpTexture_2);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WINDOW_WIDTH, WINDOW_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

   // Create and bind render buffer, and create a 16-bit depth buffer
   glGenRenderbuffers(1, &GdepthRenderbuffer);
   glBindRenderbuffer(GL_RENDERBUFFER, GdepthRenderbuffer);
   glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, WINDOW_WIDTH, WINDOW_HEIGHT);

   // Load Shaders
   vertexShader = LoadShaderFromFile(GL_VERTEX_SHADER, "../vertexShader1.vert" );
   fragmentShader = LoadShaderFromFile(GL_FRAGMENT_SHADER, "../fragmentShader1.frag" );

   // Create the program object
   programObject = glCreateProgram ( );
   
   if ( programObject == 0 )
      return 0;

   glAttachShader ( programObject, fragmentShader );
   glAttachShader ( programObject, vertexShader );

   // (Send from CPU to GPU)
   // Bind vPosition to attribute 0
   glBindAttribLocation(programObject, 0, "vPosition");
   // Bind vColor to attribute 1   
   glBindAttribLocation(programObject, 1, "vColor");
   // Bind vPosition to attribute 2
   glBindAttribLocation(programObject, 2, "vTexCoord");

   // Link the program
   glLinkProgram ( programObject );

   // Check the link status
   glGetProgramiv ( programObject, GL_LINK_STATUS, &linked );

   if ( !linked ) 
   {
      GLint infoLen = 0;

      glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen );
      
      if ( infoLen > 1 )
      {
         //char* infoLog = malloc (sizeof(char) * infoLen );
		 char infoLog[512];
         glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog );
         printf ( "Error linking program:\n%s\n", infoLog );            
         
         //free ( infoLog );
      }

      glDeleteProgram ( programObject );
      return 0;
   }

   // Store the program object
   GprogramID = programObject;

   glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );

   // Enable depth test
   glEnable(GL_DEPTH_TEST);

   glEnable(GL_BLEND);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

   //Initialize Matrices
   gPerspectiveMatrix = Matrix4::perspective
   (
	   60.0f,
	   (float)WINDOW_WIDTH / (float)WINDOW_HEIGHT,
	   0.1f, 30.0f
   );

   gViewMatrix = Matrix4::translate(Vector3(0.0f, 0.0f, -2.0f));

   return 1;
}