Unity 6.3
0 онлайн 70 гостей 3 в системе
Вход

VariantCompileInfo

структура в UnityEditor

Описание

Информация о компилированном варианте шейдера.

Представляет собой результаты компиляции варианта с использованием ShaderData.Pass.CompileVariant. Эта структура содержит статус успешности и возможные сообщения об ошибках, а также часть данных рефлексии вместе с сырым бинарным выводом шейдера.

using UnityEditor;
using UnityEngine;

// Adds a new Editor menu item called Example.
// Select a shader asset in the Project window, then select
// Example > PrintVariantCompileInfoExample from the Editor menu.
// Information of a compiled variant will be printed as debug log.
public class PrintVariantCompileInfoExample
{
    [MenuItem("Example/PrintVariantCompileInfoExample")]
    static void MenuCallback()
    {
        if (Selection.activeObject is Shader selectedShader)
        {
            // Get the first pass of the the first subshader
            ShaderData shaderData = ShaderUtil.GetShaderData(selectedShader);
            ShaderData.Subshader subShader = shaderData.GetSubshader(0);
            ShaderData.Pass pass = subShader.GetPass(0);

            // Compile a vertex shader variant without any keywords
            var keywords = new string[] { };
            ShaderData.VariantCompileInfo info = pass.CompileVariant(UnityEditor.Rendering.ShaderType.Vertex, keywords, UnityEditor.Rendering.ShaderCompilerPlatform.D3D, BuildTarget.StandaloneWindows64);

            // Log the information Unity has about the compiled variant
            if (info.Success)
            {
                Debug.Log("Compiled size: " + info.ShaderData.Length + " bytes");

                string msg = "Vertex attributes: ";
                foreach (var a in info.Attributes)
                {
                    msg += a.ToString() + " ";
                }
                Debug.Log(msg);

                msg = "Texture bindings: ";
                foreach (var tex in info.TextureBindings)
                {
                    msg += tex.Name + "-" + tex.Index + " ";
                }
                Debug.Log(msg);

                msg = "Constant buffers: ";
                foreach (var cb in info.ConstantBuffers)
                {
                    msg += cb.Name + "-" + cb.Size + "bytes ";
                }
                Debug.Log(msg);
            }
            else // If the compilation fails, Unity prints the errors
            {
                string failureMsg = "Compilation failed: ";
                foreach(var msg in info.Messages)
                {
                    failureMsg += msg.message + "\n";
                }
            }
        }
    }
}

Дополнительные ресурсы: ,ShaderData.Pass.CompileVariant,, ,ShaderData,, ,ShaderUtil.GetShaderData,.

Свойства

Свойство Описание
AttributesВертикальные атрибуты компилированных вариантов используются (только для чтения).
ConstantBuffersКонстантные буферы, используемые скомпилированным вариантом (только для чтения). Некоторые платформы не имеют постоянных буферов; однако, Unity сообщает все глобальные константы/униформы в одном постоянном буфере.
MessagesХранит ошибки и предупреждения, созданные во время компиляции (только для чтения).
ResourceBindingsПодробная информация о каждом ресурсе, используемом компилированным вариантом, в одном комбинированном массиве (только для чтения).
ShaderDataХранит необработанный байт-код для компилированного шейдера (только для чтения).
SuccessПоказывает, удалась ли компиляция варианта (только для чтения). Если это произошло, то значение true. В противном случае значение false, и ShaderData.VariantCompileInfo.Messages содержит ошибки.
TextureBindingsПривязки текстуры, используемые компилированным вариантом (только для чтения).