public void RenderBlock(UniformBlock block, int programID, int vertexLocation, int fragmentLocation, int bindings)
        {
            if (vertexLocation != -1)
            {
                block.RenderBuffer(programID, $"vp_{vertexLocation}", bindings);
            }

            if (fragmentLocation != -1)
            {
                block.RenderBuffer(programID, $"fp_{fragmentLocation}", bindings);
            }
        }
        private void RenderBlock(UniformBlock block, int programID, int vertexLocation, int fragmentLocation, int binding)
        {
            if (vertexLocation != -1)
            {
                block.RenderBuffer(programID, IsSwitch ? $"vp_c{vertexLocation + 3}" : $"vp_{vertexLocation}", binding);
            }

            if (fragmentLocation != -1)
            {
                block.RenderBuffer(programID, IsSwitch ? $"fp_c{fragmentLocation + 3}" : $"fp_{fragmentLocation}", binding);
            }
        }
        static void LoadUniforms(int programID, Vector4[] shData)
        {
            UniformBlock paramBlock = GetBlock("paramBlock");

            paramBlock.Buffer.Clear();
            //Variables from the sharcfb binaries
            paramBlock.Add(new Vector4(LightmapWeight[0], 0, 0, 0));
            paramBlock.Add(new Vector4(LightmapWeight[1], 0, 0, 0));
            paramBlock.Add(new Vector4(LightmapArrayIndex[0], 0, 0, 0));
            paramBlock.Add(new Vector4(LightmapArrayIndex[1], 0, 0, 0));
            paramBlock.Add(new Vector4(SHWeight[0], 0, 0, 0));
            paramBlock.RenderBuffer(programID, "cbuf_block3");

            UniformBlock dataBlock = GetBlock("shBlock");

            dataBlock.Buffer.Clear();
            dataBlock.Add(shData[0]);
            dataBlock.Add(shData[1]);
            dataBlock.Add(shData[2]);
            dataBlock.Add(shData[3]);
            dataBlock.Add(shData[4]);
            dataBlock.Add(shData[5]);
            dataBlock.Add(shData[6]);
            dataBlock.RenderBuffer(programID, "cbuf_block4");
        }