More coding style fixes because I suck at sed
This commit is contained in:
parent
3c6d0fc710
commit
3bcec51334
|
@ -49,16 +49,16 @@
|
||||||
|
|
||||||
// Annoying sure, can be removed once we get up to GLSL ~1.3
|
// Annoying sure, can be removed once we get up to GLSL ~1.3
|
||||||
const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 },
|
const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 },
|
||||||
{I_KCOLORS, C_KCOLORS, 4 },
|
{I_KCOLORS, C_KCOLORS, 4 },
|
||||||
{I_ALPHA, C_ALPHA, 1 },
|
{I_ALPHA, C_ALPHA, 1 },
|
||||||
{I_TEXDIMS, C_TEXDIMS, 8 },
|
{I_TEXDIMS, C_TEXDIMS, 8 },
|
||||||
{I_ZBIAS , C_ZBIAS, 2 },
|
{I_ZBIAS , C_ZBIAS, 2 },
|
||||||
{I_INDTEXSCALE , C_INDTEXSCALE, 2 },
|
{I_INDTEXSCALE , C_INDTEXSCALE, 2 },
|
||||||
{I_INDTEXMTX, C_INDTEXMTX, 6 },
|
{I_INDTEXMTX, C_INDTEXMTX, 6 },
|
||||||
{I_FOG, C_FOG, 3 },
|
{I_FOG, C_FOG, 3 },
|
||||||
{I_PLIGHTS, C_PLIGHTS, 40 },
|
{I_PLIGHTS, C_PLIGHTS, 40 },
|
||||||
{I_PMATERIALS, C_PMATERIALS, 4 },
|
{I_PMATERIALS, C_PMATERIALS, 4 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// DO NOT make anything in this class virtual.
|
// DO NOT make anything in this class virtual.
|
||||||
template<bool safe>
|
template<bool safe>
|
||||||
|
|
|
@ -69,7 +69,7 @@ u16 GetEncodedSampleCount(u32 format)
|
||||||
const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num)
|
const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num)
|
||||||
{
|
{
|
||||||
if(ApiType == API_GLSL)
|
if(ApiType == API_GLSL)
|
||||||
return ""; // Once we switch to GLSL 1.3 we can do something here
|
return ""; // Once we switch to GLSL 1.3 we can do something here
|
||||||
static char result[64];
|
static char result[64];
|
||||||
sprintf(result, " : register(%s%d)", prefix, num);
|
sprintf(result, " : register(%s%d)", prefix, num);
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -48,15 +48,15 @@
|
||||||
#define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64)
|
#define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64)
|
||||||
#define C_VENVCONST_END (C_DEPTHPARAMS + 1)
|
#define C_VENVCONST_END (C_DEPTHPARAMS + 1)
|
||||||
const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 },
|
const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 },
|
||||||
{I_PROJECTION , C_PROJECTION, 4 },
|
{I_PROJECTION , C_PROJECTION, 4 },
|
||||||
{I_MATERIALS, C_MATERIALS, 4 },
|
{I_MATERIALS, C_MATERIALS, 4 },
|
||||||
{I_LIGHTS, C_LIGHTS, 40 },
|
{I_LIGHTS, C_LIGHTS, 40 },
|
||||||
{I_TEXMATRICES, C_TEXMATRICES, 24 },
|
{I_TEXMATRICES, C_TEXMATRICES, 24 },
|
||||||
{I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 },
|
{I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 },
|
||||||
{I_NORMALMATRICES , C_NORMALMATRICES, 32 },
|
{I_NORMALMATRICES , C_NORMALMATRICES, 32 },
|
||||||
{I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 },
|
{I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 },
|
||||||
{I_DEPTHPARAMS, C_DEPTHPARAMS, 1 },
|
{I_DEPTHPARAMS, C_DEPTHPARAMS, 1 },
|
||||||
};
|
};
|
||||||
template<bool safe>
|
template<bool safe>
|
||||||
class _VERTEXSHADERUID
|
class _VERTEXSHADERUID
|
||||||
{
|
{
|
||||||
|
|
|
@ -496,11 +496,11 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex)
|
||||||
if (!strcmp(name, UniformNames[a]))
|
if (!strcmp(name, UniformNames[a]))
|
||||||
{
|
{
|
||||||
if(tmp.UniformLocations[a] == -1)
|
if(tmp.UniformLocations[a] == -1)
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glUniform1i(tmp.UniformLocations[a], Tex);
|
glUniform1i(tmp.UniformLocations[a], Tex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -511,11 +511,11 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float
|
||||||
if (!strcmp(name, UniformNames[a]))
|
if (!strcmp(name, UniformNames[a]))
|
||||||
{
|
{
|
||||||
if(tmp.UniformLocations[a] == -1)
|
if(tmp.UniformLocations[a] == -1)
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glUniform4fv(tmp.UniformLocations[a] + offset, count, f);
|
glUniform4fv(tmp.UniformLocations[a] + offset, count, f);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -601,9 +601,9 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram)
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s",
|
PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s",
|
||||||
num_failures - 1, szTemp,
|
num_failures - 1, szTemp,
|
||||||
g_cgfProf,
|
g_cgfProf,
|
||||||
cgGetLastListing(g_cgcontext));
|
cgGetLastListing(g_cgcontext));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,116 +27,116 @@ namespace OGL
|
||||||
|
|
||||||
std::pair<u64, u64> ProgramShaderCache::CurrentShaderProgram;
|
std::pair<u64, u64> ProgramShaderCache::CurrentShaderProgram;
|
||||||
const char *UniformNames[NUM_UNIFORMS] = {
|
const char *UniformNames[NUM_UNIFORMS] = {
|
||||||
// SAMPLERS
|
// SAMPLERS
|
||||||
"samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7",
|
"samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7",
|
||||||
// PIXEL SHADER UNIFORMS
|
// PIXEL SHADER UNIFORMS
|
||||||
I_COLORS,
|
I_COLORS,
|
||||||
I_KCOLORS,
|
I_KCOLORS,
|
||||||
I_ALPHA,
|
I_ALPHA,
|
||||||
I_TEXDIMS,
|
I_TEXDIMS,
|
||||||
I_ZBIAS ,
|
I_ZBIAS ,
|
||||||
I_INDTEXSCALE ,
|
I_INDTEXSCALE ,
|
||||||
I_INDTEXMTX,
|
I_INDTEXMTX,
|
||||||
I_FOG,
|
I_FOG,
|
||||||
I_PLIGHTS,
|
I_PLIGHTS,
|
||||||
I_PMATERIALS,
|
I_PMATERIALS,
|
||||||
// VERTEX SHADER UNIFORMS
|
// VERTEX SHADER UNIFORMS
|
||||||
I_POSNORMALMATRIX,
|
I_POSNORMALMATRIX,
|
||||||
I_PROJECTION ,
|
I_PROJECTION ,
|
||||||
I_MATERIALS,
|
I_MATERIALS,
|
||||||
I_LIGHTS,
|
I_LIGHTS,
|
||||||
I_TEXMATRICES,
|
I_TEXMATRICES,
|
||||||
I_TRANSFORMMATRICES ,
|
I_TRANSFORMMATRICES ,
|
||||||
I_NORMALMATRICES ,
|
I_NORMALMATRICES ,
|
||||||
I_POSTTRANSFORMMATRICES,
|
I_POSTTRANSFORMMATRICES,
|
||||||
I_DEPTHPARAMS,
|
I_DEPTHPARAMS,
|
||||||
};
|
};
|
||||||
|
|
||||||
void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS)
|
void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS)
|
||||||
{
|
{
|
||||||
PROGRAMUID uid;
|
PROGRAMUID uid;
|
||||||
CurrentFShader = PS;
|
CurrentFShader = PS;
|
||||||
CurrentVShader = VS;
|
CurrentVShader = VS;
|
||||||
|
|
||||||
|
|
||||||
GetProgramShaderId(&uid, CurrentVShader, CurrentFShader);
|
GetProgramShaderId(&uid, CurrentVShader, CurrentFShader);
|
||||||
|
|
||||||
if(uid.uid.id == 0)
|
if(uid.uid.id == 0)
|
||||||
{
|
{
|
||||||
CurrentProgram = 0;
|
CurrentProgram = 0;
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fragment shaders can survive without Vertex Shaders
|
// Fragment shaders can survive without Vertex Shaders
|
||||||
// We have a valid fragment shader, let's create our program
|
// We have a valid fragment shader, let's create our program
|
||||||
std::pair<u64, u64> ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid);
|
std::pair<u64, u64> ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid);
|
||||||
PCache::iterator iter = pshaders.find(ShaderPair);
|
PCache::iterator iter = pshaders.find(ShaderPair);
|
||||||
if (iter != pshaders.end())
|
if (iter != pshaders.end())
|
||||||
{
|
{
|
||||||
PCacheEntry &entry = iter->second;
|
PCacheEntry &entry = iter->second;
|
||||||
glUseProgram(entry.program.glprogid);
|
glUseProgram(entry.program.glprogid);
|
||||||
CurrentShaderProgram = ShaderPair;
|
CurrentShaderProgram = ShaderPair;
|
||||||
CurrentProgram = entry.program.glprogid;
|
CurrentProgram = entry.program.glprogid;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PCacheEntry entry;
|
PCacheEntry entry;
|
||||||
entry.program.vsid = CurrentVShader;
|
entry.program.vsid = CurrentVShader;
|
||||||
entry.program.psid = CurrentFShader;
|
entry.program.psid = CurrentFShader;
|
||||||
entry.program.glprogid = glCreateProgram();
|
entry.program.glprogid = glCreateProgram();
|
||||||
|
|
||||||
// Right, the program is created now
|
// Right, the program is created now
|
||||||
// Let's attach everything
|
// Let's attach everything
|
||||||
if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out
|
if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out
|
||||||
glAttachShader(entry.program.glprogid, entry.program.vsid);
|
glAttachShader(entry.program.glprogid, entry.program.vsid);
|
||||||
|
|
||||||
glAttachShader(entry.program.glprogid, entry.program.psid);
|
glAttachShader(entry.program.glprogid, entry.program.psid);
|
||||||
|
|
||||||
glLinkProgram(entry.program.glprogid);
|
glLinkProgram(entry.program.glprogid);
|
||||||
|
|
||||||
glUseProgram(entry.program.glprogid);
|
glUseProgram(entry.program.glprogid);
|
||||||
|
|
||||||
// Dunno why this is needed when I have the binding
|
// Dunno why this is needed when I have the binding
|
||||||
// points statically set in the shader source
|
// points statically set in the shader source
|
||||||
// We should only need these two functions when we don't support binding but do support UBO
|
// We should only need these two functions when we don't support binding but do support UBO
|
||||||
// Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64
|
// Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64
|
||||||
//if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding)
|
//if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding)
|
||||||
{
|
{
|
||||||
glUniformBlockBinding( entry.program.glprogid, 0, 1 );
|
glUniformBlockBinding( entry.program.glprogid, 0, 1 );
|
||||||
glUniformBlockBinding( entry.program.glprogid, 1, 2 );
|
glUniformBlockBinding( entry.program.glprogid, 1, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// We cache our uniform locations for now
|
// We cache our uniform locations for now
|
||||||
// Once we move up to a newer version of GLSL, ~1.30
|
// Once we move up to a newer version of GLSL, ~1.30
|
||||||
// We can remove this
|
// We can remove this
|
||||||
|
|
||||||
//For some reason this fails on my hardware
|
//For some reason this fails on my hardware
|
||||||
//glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations);
|
//glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations);
|
||||||
//Got to do it this crappy way.
|
//Got to do it this crappy way.
|
||||||
if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO)
|
if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO)
|
||||||
for(int a = 0; a < NUM_UNIFORMS; ++a)
|
for(int a = 0; a < NUM_UNIFORMS; ++a)
|
||||||
entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]);
|
entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]);
|
||||||
|
|
||||||
// Need to get some attribute locations
|
// Need to get some attribute locations
|
||||||
if(uid.uid.vsid != 0) // We have no vertex Shader
|
if(uid.uid.vsid != 0) // We have no vertex Shader
|
||||||
{
|
{
|
||||||
entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1");
|
entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1");
|
||||||
entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2");
|
entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2");
|
||||||
entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx");
|
entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx");
|
||||||
if(entry.program.attrLoc[0] > 0)
|
if(entry.program.attrLoc[0] > 0)
|
||||||
glEnableVertexAttribArray(entry.program.attrLoc[0]);
|
glEnableVertexAttribArray(entry.program.attrLoc[0]);
|
||||||
if(entry.program.attrLoc[1] > 0)
|
if(entry.program.attrLoc[1] > 0)
|
||||||
glEnableVertexAttribArray(entry.program.attrLoc[1]);
|
glEnableVertexAttribArray(entry.program.attrLoc[1]);
|
||||||
if(entry.program.attrLoc[2] > 0)
|
if(entry.program.attrLoc[2] > 0)
|
||||||
glEnableVertexAttribArray(entry.program.attrLoc[2]);
|
glEnableVertexAttribArray(entry.program.attrLoc[2]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0;
|
entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0;
|
||||||
|
|
||||||
|
|
||||||
pshaders[ShaderPair] = entry;
|
pshaders[ShaderPair] = entry;
|
||||||
CurrentShaderProgram = ShaderPair;
|
CurrentShaderProgram = ShaderPair;
|
||||||
CurrentProgram = entry.program.glprogid;
|
CurrentProgram = entry.program.glprogid;
|
||||||
}
|
}
|
||||||
void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count)
|
void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count)
|
||||||
{
|
{
|
||||||
|
@ -158,11 +158,11 @@ namespace OGL
|
||||||
|
|
||||||
GLint ProgramShaderCache::GetAttr(int num)
|
GLint ProgramShaderCache::GetAttr(int num)
|
||||||
{
|
{
|
||||||
return pshaders[CurrentShaderProgram].program.attrLoc[num];
|
return pshaders[CurrentShaderProgram].program.attrLoc[num];
|
||||||
}
|
}
|
||||||
PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void)
|
PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void)
|
||||||
{
|
{
|
||||||
return pshaders[CurrentShaderProgram].program;
|
return pshaders[CurrentShaderProgram].program;
|
||||||
}
|
}
|
||||||
void ProgramShaderCache::Init(void)
|
void ProgramShaderCache::Init(void)
|
||||||
{
|
{
|
||||||
|
@ -190,11 +190,11 @@ namespace OGL
|
||||||
}
|
}
|
||||||
void ProgramShaderCache::Shutdown(void)
|
void ProgramShaderCache::Shutdown(void)
|
||||||
{
|
{
|
||||||
PCache::iterator iter = pshaders.begin();
|
PCache::iterator iter = pshaders.begin();
|
||||||
for (; iter != pshaders.end(); iter++)
|
for (; iter != pshaders.end(); iter++)
|
||||||
iter->second.Destroy();
|
iter->second.Destroy();
|
||||||
pshaders.clear();
|
pshaders.clear();
|
||||||
glDeleteBuffers(2, UBOBuffers);
|
glDeleteBuffers(2, UBOBuffers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,10 @@
|
||||||
|
|
||||||
union PID
|
union PID
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
GLuint vsid, psid;
|
GLuint vsid, psid;
|
||||||
};
|
};
|
||||||
u64 id;
|
u64 id;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PROGRAMUID
|
class PROGRAMUID
|
||||||
|
@ -41,22 +41,22 @@ public:
|
||||||
|
|
||||||
PROGRAMUID()
|
PROGRAMUID()
|
||||||
{
|
{
|
||||||
uid.id = 0;
|
uid.id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PROGRAMUID(const PROGRAMUID& r)
|
PROGRAMUID(const PROGRAMUID& r)
|
||||||
{
|
{
|
||||||
uid.id = r.uid.id;
|
uid.id = r.uid.id;
|
||||||
}
|
}
|
||||||
PROGRAMUID(GLuint _v, GLuint _p)
|
PROGRAMUID(GLuint _v, GLuint _p)
|
||||||
{
|
{
|
||||||
uid.vsid = _v;
|
uid.vsid = _v;
|
||||||
uid.psid = _p;
|
uid.psid = _p;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetNumValues() const
|
int GetNumValues() const
|
||||||
{
|
{
|
||||||
return uid.id;
|
return uid.id;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p);
|
void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p);
|
||||||
|
@ -81,13 +81,13 @@ class ProgramShaderCache
|
||||||
{
|
{
|
||||||
struct PCacheEntry
|
struct PCacheEntry
|
||||||
{
|
{
|
||||||
PROGRAMSHADER program;
|
PROGRAMSHADER program;
|
||||||
int frameCount;
|
int frameCount;
|
||||||
PCacheEntry() : frameCount(0) {}
|
PCacheEntry() : frameCount(0) {}
|
||||||
void Destroy() {
|
void Destroy() {
|
||||||
glDeleteProgram(program.glprogid);
|
glDeleteProgram(program.glprogid);
|
||||||
program.glprogid = 0;
|
program.glprogid = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
typedef std::map<std::pair<u64, u64>, PCacheEntry> PCache;
|
typedef std::map<std::pair<u64, u64>, PCacheEntry> PCache;
|
||||||
|
|
||||||
|
|
|
@ -281,7 +281,7 @@ void Shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc,
|
void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc,
|
||||||
u8* destAddr, int dstWidth, int dstHeight, int readStride,
|
u8* destAddr, int dstWidth, int dstHeight, int readStride,
|
||||||
bool toTexture, bool linearFilter)
|
bool toTexture, bool linearFilter)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -112,19 +112,19 @@ void GetShaders(std::vector<std::string> &shaders)
|
||||||
shaders.clear();
|
shaders.clear();
|
||||||
if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX)))
|
if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX)))
|
||||||
{
|
{
|
||||||
File::FSTEntry entry;
|
File::FSTEntry entry;
|
||||||
File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry);
|
File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry);
|
||||||
for (u32 i = 0; i < entry.children.size(); i++)
|
for (u32 i = 0; i < entry.children.size(); i++)
|
||||||
{
|
{
|
||||||
std::string name = entry.children[i].virtualName.c_str();
|
std::string name = entry.children[i].virtualName.c_str();
|
||||||
if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt"))
|
if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt"))
|
||||||
name = name.substr(0, name.size() - 4);
|
name = name.substr(0, name.size() - 4);
|
||||||
shaders.push_back(name);
|
shaders.push_back(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str());
|
File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue