// elements. This avoids having to sort the bindings.
for(const auto& binding : mImpl->mCurrentTextureBindings)
{
+ if(currentSampler >= samplers.size())
+ {
+ // Don't bind more textures than there are active samplers.
+ break;
+ }
+
auto texture = const_cast<GLES::Texture*>(static_cast<const GLES::Texture*>(binding.texture));
// Texture may not have been initialized yet...(tbm_surface timing issue?)
currentElement = 0;
}
}
- if(currentSampler >= samplers.size())
- {
- // Don't bind more textures than there are active samplers.
- break;
- }
}
const auto& pipelineState = mImpl->mNewPipeline ? mImpl->mNewPipeline->GetCreateInfo() : mImpl->mCurrentPipeline->GetCreateInfo();
mImpl->mCurrentStandaloneUBOBinding = standaloneBindings;
}
- if(uboCount >= mImpl->mCurrentUBOBindings.size())
+ if(uboCount && uboCount > mImpl->mCurrentUBOBindings.size())
{
- mImpl->mCurrentUBOBindings.resize(uboCount + 1);
+ mImpl->mCurrentUBOBindings.resize(uboCount);
}
auto it = uboBindings;
{
mImpl->mCurrentUBOBindings[i] = *it;
}
+ ++it;
}
}
{
ResolveStandaloneUniforms();
}
+ if(!mImpl->mCurrentUBOBindings.empty())
+ {
+ ResolveGpuUniformBuffers();
+ }
+}
+
+void Context::ResolveGpuUniformBuffers()
+{
+ auto& gl = *mImpl->mController.GetGL();
+ auto i = 0u;
+ for(auto& binding : mImpl->mCurrentUBOBindings)
+ {
+ gl.BindBufferRange(GL_UNIFORM_BUFFER, i++, binding.buffer->GetGLBuffer(), GLintptr(binding.offset), binding.dataSize);
+ }
}
void Context::ResolveStandaloneUniforms()
void Context::ClearState()
{
mImpl->mCurrentTextureBindings.clear();
+ mImpl->mCurrentUBOBindings.clear();
}
void Context::ColorMask(bool enabled)