- res.fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
-
- char* tmpShader = (char*)malloc(sizeof(char) * 4096);
- strcpy(tmpShader,"#version " GLSL_VERSION "\n");
-
- if(alphaTest == 1)
- {
- strcat(tmpShader,"#define ALPHA_TEST\n");
- }
-
- res.alphaTest = alphaTest == 1;
- strcat(tmpShader,oglNewFP);
-
- glShaderSource(res.fragmentShaderID, 1,(const char**) &tmpShader,NULL);
- free(tmpShader);
-
-
- OPENGL_CHECK_ERRORS;
- glCompileShader(res.fragmentShaderID);
-
- glGetShaderiv(res.fragmentShaderID, GL_COMPILE_STATUS, &success);
- if (!success)
- {
- char Log[1024];
- GLint nLength;
- glGetShaderInfoLog(res.fragmentShaderID, 1024, &nLength, Log);
- printf("Error compiling shader!\n %s",oglNewFP);
- printf("%s", Log);
- }
-
- res.programID = glCreateProgram();
- glAttachShader(res.programID,res.vertexShaderID);
- glAttachShader(res.programID,res.fragmentShaderID);
-
- //Bind Attributes
- glBindAttribLocation(res.programID,VS_COLOR,"aColor");
- OPENGL_CHECK_ERRORS;
- glBindAttribLocation(res.programID,VS_TEXCOORD0,"aTexCoord0");
- OPENGL_CHECK_ERRORS;
- glBindAttribLocation(res.programID,VS_TEXCOORD1,"aTexCoord1");
- OPENGL_CHECK_ERRORS;
- glBindAttribLocation(res.programID,VS_POSITION,"aPosition");
- OPENGL_CHECK_ERRORS;
-
- glLinkProgram(res.programID);
- OPENGL_CHECK_ERRORS;
-
- glGetProgramiv(res.programID, GL_LINK_STATUS, &success);
- if (!success)
- {
- char Log[1024];
- GLint nLength;
- glGetShaderInfoLog(res.fragmentShaderID, 1024, &nLength, Log);
- printf("Error linking program!\n");
- printf("%s\n",Log);
- }
-
- glUseProgram(res.programID);
- OPENGL_CHECK_ERRORS;
-
- //Bind texture samplers
- GLint tex0 = glGetUniformLocation(res.programID,"uTex0");
- GLint tex1 = glGetUniformLocation(res.programID,"uTex1");
-
- if(tex0 != -1)
- glUniform1i(tex0,0);
- if(tex1 != -1)
- glUniform1i(tex1,1);
-
- //Bind Uniforms
- res.PrimColorLocation = glGetUniformLocation(res.programID,"PrimColor");
- OPENGL_CHECK_ERRORS;
- res.EnvColorLocation = glGetUniformLocation(res.programID,"EnvColor");
- OPENGL_CHECK_ERRORS;
- res.PrimFracLocation = glGetUniformLocation(res.programID,"PrimFrac");
- OPENGL_CHECK_ERRORS;
- res.EnvFracLocation = glGetUniformLocation(res.programID,"EnvFrac");
- OPENGL_CHECK_ERRORS;
- res.AlphaRefLocation = glGetUniformLocation(res.programID,"AlphaRef");
- OPENGL_CHECK_ERRORS;
- res.FogColorLocation = glGetUniformLocation(res.programID,"FogColor");
- OPENGL_CHECK_ERRORS;
- res.FogMinMaxLocation = glGetUniformLocation(res.programID,"FogMinMax");
- OPENGL_CHECK_ERRORS;
-
- res.dwMux0 = m_pDecodedMux->m_dwMux0;
- res.dwMux1 = m_pDecodedMux->m_dwMux1;
- res.fogIsUsed = gRDP.bFogEnableInBlender && gRSP.bFogEnabled;
-
- m_vCompiledShaders.push_back(res);
+ for(int fog = 0;fog < 2;fog++) {
+ res.fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
+
+ char* tmpShader = (char*)malloc(sizeof(char) * 4096);
+ strcpy(tmpShader,"#version " GLSL_VERSION "\n");
+
+ if(alphaTest == 1)
+ {
+ strcat(tmpShader,"#define ALPHA_TEST\n");
+ }
+ if(fog == 1)
+ {
+ strcat(tmpShader,"#define FOG\n");
+ }
+
+ res.fogIsUsed = fog == 1;
+ res.alphaTest = alphaTest == 1;
+ strcat(tmpShader,oglNewFP);
+
+ glShaderSource(res.fragmentShaderID, 1,(const char**) &tmpShader,NULL);
+ free(tmpShader);
+
+
+ OPENGL_CHECK_ERRORS;
+ glCompileShader(res.fragmentShaderID);
+
+ glGetShaderiv(res.fragmentShaderID, GL_COMPILE_STATUS, &success);
+ if (!success)
+ {
+ char Log[1024];
+ GLint nLength;
+ glGetShaderInfoLog(res.fragmentShaderID, 1024, &nLength, Log);
+ printf("Error compiling shader!\n %s",oglNewFP);
+ printf("%s", Log);
+ }
+
+ res.programID = glCreateProgram();
+ glAttachShader(res.programID,res.vertexShaderID);
+ glAttachShader(res.programID,res.fragmentShaderID);
+
+ //Bind Attributes
+ glBindAttribLocation(res.programID,VS_COLOR,"aColor");
+ OPENGL_CHECK_ERRORS;
+ glBindAttribLocation(res.programID,VS_TEXCOORD0,"aTexCoord0");
+ OPENGL_CHECK_ERRORS;
+ glBindAttribLocation(res.programID,VS_TEXCOORD1,"aTexCoord1");
+ OPENGL_CHECK_ERRORS;
+ glBindAttribLocation(res.programID,VS_POSITION,"aPosition");
+ OPENGL_CHECK_ERRORS;
+
+ glLinkProgram(res.programID);
+ OPENGL_CHECK_ERRORS;
+
+ glGetProgramiv(res.programID, GL_LINK_STATUS, &success);
+ if (!success)
+ {
+ char Log[1024];
+ GLint nLength;
+ glGetShaderInfoLog(res.fragmentShaderID, 1024, &nLength, Log);
+ printf("Error linking program!\n");
+ printf("%s\n",Log);
+ }
+
+ glUseProgram(res.programID);
+ OPENGL_CHECK_ERRORS;
+
+ //Bind texture samplers
+ GLint tex0 = glGetUniformLocation(res.programID,"uTex0");
+ GLint tex1 = glGetUniformLocation(res.programID,"uTex1");
+
+ if(tex0 != -1)
+ glUniform1i(tex0,0);
+ if(tex1 != -1)
+ glUniform1i(tex1,1);
+
+ //Bind Uniforms
+ res.PrimColorLocation = glGetUniformLocation(res.programID,"PrimColor");
+ OPENGL_CHECK_ERRORS;
+ res.EnvColorLocation = glGetUniformLocation(res.programID,"EnvColor");
+ OPENGL_CHECK_ERRORS;
+ res.PrimFracLocation = glGetUniformLocation(res.programID,"PrimFrac");
+ OPENGL_CHECK_ERRORS;
+ res.EnvFracLocation = glGetUniformLocation(res.programID,"EnvFrac");
+ OPENGL_CHECK_ERRORS;
+ res.AlphaRefLocation = glGetUniformLocation(res.programID,"AlphaRef");
+ OPENGL_CHECK_ERRORS;
+ res.FogColorLocation = glGetUniformLocation(res.programID,"FogColor");
+ OPENGL_CHECK_ERRORS;
+ res.FogMinMaxLocation = glGetUniformLocation(res.programID,"FogMinMax");
+ OPENGL_CHECK_ERRORS;
+
+ res.dwMux0 = m_pDecodedMux->m_dwMux0;
+ res.dwMux1 = m_pDecodedMux->m_dwMux1;
+
+ m_vCompiledShaders.push_back(res);
+ }