Пример #1
0
        private void FixGlobalVertexShader(GlobalVertexShader glvs)
        {
            throw new NotImplementedException();

            /*TODO: Fix this
             * var usedShaders = new bool[glvs.Shaders.Count];
             * for (var i = 0; i < glvs.VertexTypes.Count; i++)
             * {
             *  FixDrawModeList(glvs.VertexTypes[i].DrawModes);
             *  if (glvs.VertexTypes[i].DrawModes.Count > 18)
             *      glvs.VertexTypes[i].DrawModes[18].ShaderIndex = -1; // Disable z_only
             *  var type = (VertexType)i;
             *  for (var j = 0; j < glvs.VertexTypes[i].DrawModes.Count; j++)
             *  {
             *      var mode = glvs.VertexTypes[i].DrawModes[j];
             *      if (mode.ShaderIndex < 0)
             *          continue;
             *      Console.WriteLine("- Recompiling vertex shader {0}...", mode.ShaderIndex);
             *      var shader = glvs.Shaders[mode.ShaderIndex];
             *      var newBytecode = ShaderConverter.ConvertNewVertexShaderToOld(shader.PCShaderBytecode, j, type);
             *      if (newBytecode != null)
             *          shader.PCShaderBytecode = newBytecode;
             *      usedShaders[mode.ShaderIndex] = true;
             *  }
             * }
             *
             * // Null unused shaders
             * for (var i = 0; i < glvs.Shaders.Count; i++)
             * {
             *  if (!usedShaders[i])
             *      glvs.Shaders[i].PCShaderBytecode = null;
             * }*/
        }
Пример #2
0
        public static void FixGlobalVertexShader(GlobalVertexShader glvs)
        {
            var usedShaders = new bool[glvs.VertexShaders.Count];

            for (var i = 0; i < glvs.VertexTypes.Count; i++)
            {
                FixDrawModeList(glvs.VertexTypes[i].DrawModes);
                if (glvs.VertexTypes[i].DrawModes.Count > 18)
                {
                    glvs.VertexTypes[i].DrawModes[18].ShaderIndex = -1; // Disable z_only
                }
                var type = (VertexType)i;
                for (var j = 0; j < glvs.VertexTypes[i].DrawModes.Count; j++)
                {
                    var mode = glvs.VertexTypes[i].DrawModes[j];
                    if (mode.ShaderIndex < 0)
                    {
                        continue;
                    }
                    Console.WriteLine("- Recompiling vertex shader {0}...", mode.ShaderIndex);
                    var shader      = glvs.VertexShaders[mode.ShaderIndex];
                    var newBytecode = ShaderConverter.ConvertNewVertexShaderToOld(shader.Unknown2, j, type);
                    if (newBytecode != null)
                    {
                        shader.Unknown2 = newBytecode;
                    }
                    usedShaders[mode.ShaderIndex] = true;
                }
            }

            // Null unused shaders
            for (var i = 0; i < glvs.VertexShaders.Count; i++)
            {
                if (!usedShaders[i])
                {
                    glvs.VertexShaders[i].Unknown2 = null;
                }
            }
        }