private void BindConstBuffers(GalPipelineState New) { int FreeBinding = OGLShader.ReservedCbufCount; void BindIfNotNull(OGLShaderStage Stage) { if (Stage != null) { foreach (ShaderDeclInfo DeclInfo in Stage.ConstBufferUsage) { long Key = New.ConstBufferKeys[(int)Stage.Type][DeclInfo.Cbuf]; if (Key != 0 && Buffer.TryGetUbo(Key, out int UboHandle)) { GL.BindBufferBase(BufferRangeTarget.UniformBuffer, FreeBinding, UboHandle); } FreeBinding++; } } } BindIfNotNull(Shader.Current.Vertex); BindIfNotNull(Shader.Current.TessControl); BindIfNotNull(Shader.Current.TessEvaluation); BindIfNotNull(Shader.Current.Geometry); BindIfNotNull(Shader.Current.Fragment); }