mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 13:20:54 +00:00
Actually handle serialised case of program=0 on replay
This commit is contained in:
@@ -281,7 +281,6 @@ class WrappedOpenGL : public IFrameCapturer
|
||||
GLbitfield use;
|
||||
};
|
||||
|
||||
vector<ProgramUse> programs;
|
||||
ResourceId stagePrograms[6];
|
||||
ResourceId stageShaders[6];
|
||||
};
|
||||
|
||||
@@ -851,33 +851,52 @@ bool WrappedOpenGL::Serialise_glUseProgramStages(GLuint pipeline, GLbitfield sta
|
||||
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
ResourceId livePipeId = GetResourceManager()->GetLiveID(pipe);
|
||||
ResourceId liveProgId = GetResourceManager()->GetLiveID(prog);
|
||||
|
||||
PipelineData &pipeDetails = m_Pipelines[livePipeId];
|
||||
ProgramData &progDetails = m_Programs[liveProgId];
|
||||
|
||||
pipeDetails.programs.push_back(PipelineData::ProgramUse(liveProgId, Stages));
|
||||
|
||||
for(size_t s=0; s < 6; s++)
|
||||
if(prog != ResourceId())
|
||||
{
|
||||
if(Stages & ShaderBit(s))
|
||||
ResourceId livePipeId = GetResourceManager()->GetLiveID(pipe);
|
||||
ResourceId liveProgId = GetResourceManager()->GetLiveID(prog);
|
||||
|
||||
PipelineData &pipeDetails = m_Pipelines[livePipeId];
|
||||
ProgramData &progDetails = m_Programs[liveProgId];
|
||||
|
||||
for(size_t s=0; s < 6; s++)
|
||||
{
|
||||
for(size_t sh=0; sh < progDetails.shaders.size(); sh++)
|
||||
if(Stages & ShaderBit(s))
|
||||
{
|
||||
if(m_Shaders[ progDetails.shaders[sh] ].type == ShaderEnum(s))
|
||||
for(size_t sh=0; sh < progDetails.shaders.size(); sh++)
|
||||
{
|
||||
pipeDetails.stagePrograms[s] = liveProgId;
|
||||
pipeDetails.stageShaders[s] = progDetails.shaders[sh];
|
||||
break;
|
||||
if(m_Shaders[ progDetails.shaders[sh] ].type == ShaderEnum(s))
|
||||
{
|
||||
pipeDetails.stagePrograms[s] = liveProgId;
|
||||
pipeDetails.stageShaders[s] = progDetails.shaders[sh];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glUseProgramStages(GetResourceManager()->GetLiveResource(pipe).name,
|
||||
Stages,
|
||||
GetResourceManager()->GetLiveResource(prog).name);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResourceId livePipeId = GetResourceManager()->GetLiveID(pipe);
|
||||
PipelineData &pipeDetails = m_Pipelines[livePipeId];
|
||||
|
||||
for(size_t s=0; s < 6; s++)
|
||||
{
|
||||
if(Stages & ShaderBit(s))
|
||||
{
|
||||
pipeDetails.stagePrograms[s] = ResourceId();
|
||||
pipeDetails.stageShaders[s] = ResourceId();
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glUseProgramStages(GetResourceManager()->GetLiveResource(pipe).name,
|
||||
Stages,
|
||||
0);
|
||||
}
|
||||
|
||||
m_Real.glUseProgramStages(GetResourceManager()->GetLiveResource(pipe).name,
|
||||
Stages,
|
||||
GetResourceManager()->GetLiveResource(prog).name);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user