Make sure to set all sources at once (glShaderSource replaces).

This commit is contained in:
baldurk
2014-12-03 10:23:31 +00:00
parent 6039958ba1
commit c0c436f6ed
2 changed files with 21 additions and 8 deletions
+6 -4
View File
@@ -1019,11 +1019,13 @@ ResourceId GLReplay::RenderOverlay(ResourceId texid, TextureDisplayOverlay overl
if(shadDetails.type != eGL_FRAGMENT_SHADER)
{
shad = gl.glCreateShader(shadDetails.type);
char **srcs = new char *[shadDetails.sources.size()];
for(size_t s=0; s < shadDetails.sources.size(); s++)
{
src = shadDetails.sources[s].c_str();
gl.glShaderSource(shad, 1, &src, NULL);
}
srcs[s] = (char *)shadDetails.sources[s].c_str();
gl.glShaderSource(shad, shadDetails.sources.size(), srcs, NULL);
SAFE_DELETE_ARRAY(srcs);
gl.glCompileShader(shad);
gl.glAttachShader(progDetails.colOutProg, shad);
gl.glDeleteShader(shad);
+15 -4
View File
@@ -363,17 +363,28 @@ bool GLResourceManager::Serialise_InitialState(GLResource res)
const auto &shadDetails = m_GL->m_Shaders[details.shaders[i]];
GLuint shad = gl.glCreateShader(shadDetails.type);
char **srcs = new char *[shadDetails.sources.size()];
for(size_t s=0; s < shadDetails.sources.size(); s++)
{
const char *src = shadDetails.sources[s].c_str();
gl.glShaderSource(shad, 1, &src, NULL);
}
srcs[s] = (char *)shadDetails.sources[s].c_str();
gl.glShaderSource(shad, shadDetails.sources.size(), srcs, NULL);
SAFE_DELETE_ARRAY(srcs);
gl.glCompileShader(shad);
gl.glAttachShader(initProg, shad);
gl.glDeleteShader(shad);
}
gl.glLinkProgram(initProg);
GLint status = 0;
gl.glGetProgramiv(initProg, eGL_LINK_STATUS, &status);
if(status == 0)
{
char buffer[1025] = {0};
gl.glGetProgramInfoLog(initProg, 1024, NULL, buffer);
RDCERR("Link error: %s", buffer);
}
SerialiseProgramUniforms(gl, m_pSerialiser, initProg, &details.locationTranslate, false);