示例#1
0
        public void LoadAdaptor(SkinningCompute compute, SkinningBlend blend, bool tension)
        {
            switch (compute)
            {
            case SkinningCompute.Auto:
                if (SystemInfo.supportsComputeShaders)
                {
                    LoadAdaptor(SkinningCompute.ForceGPGPU, blend, tension);
                }
                else
                {
                    LoadAdaptor(SkinningCompute.ForceCPU, blend, tension);
                }
                break;

            case SkinningCompute.ForceGPGPU:
            {
                ComputeShaderSkinningAdapter computeAdapter = new ComputeShaderSkinningAdapter(blend, computeShader, chunk, chunk.GetBones(transform.parent), material, tension);

                adapter    = computeAdapter as IRenderAdapter;
                disposable = computeAdapter as IDisposable;
            }
            break;

            case SkinningCompute.ForceCPU:
            {
                DefaultSkinningAdapter defaultAdapter = new DefaultSkinningAdapter(blend, chunk, chunk.GetBones(transform.parent), material);

                adapter    = defaultAdapter as IRenderAdapter;
                disposable = defaultAdapter as IDisposable;
            }
            break;
            }
        }
示例#2
0
        public void SelectSkinning(SkinningSelector selector)
        {
            switch (selector)
            {
            case SkinningSelector.Auto:
                AutoSelectSkinning();
                break;

            case SkinningSelector.ForceGPGPU:
            {
                ComputeShaderSkinningAdapter computeAdapter = new ComputeShaderSkinningAdapter(method, computeShader, chunk, chunk.GetBones(transform.parent), material);

                adapter    = computeAdapter as IRenderAdapter;
                disposable = computeAdapter as IDisposable;
            }
            break;

            case SkinningSelector.ForceGPU:
                throw new ArgumentOutOfRangeException("SkinningSelector selector", "GPU Skinning not support.");

            case SkinningSelector.ForceCPU:
            {
                DefaultSkinningAdapter defaultAdapter = new DefaultSkinningAdapter(method, chunk, chunk.GetBones(transform.parent), material);

                adapter    = defaultAdapter as IRenderAdapter;
                disposable = defaultAdapter as IDisposable;
            }
            break;
            }
        }
示例#3
0
        public void ReloadAdaptor(SkinningCompute compute, SkinningBlend blend, bool tension)
        {
            if (disposable != null)
            {
                disposable.Dispose();
            }

            adapter    = null;
            disposable = null;

            LoadAdaptor(compute, blend, tension);
        }
示例#4
0
        public void AutoSelectSkinning()
        {
            if (SystemInfo.supportsComputeShaders)
            {
                ComputeShaderSkinningAdapter computeAdapter = new ComputeShaderSkinningAdapter(method, computeShader, chunk, chunk.GetBones(transform.parent), material);

                adapter    = computeAdapter as IRenderAdapter;
                disposable = computeAdapter as IDisposable;
            }
            else // last fallback
            {
                DefaultSkinningAdapter defaultAdapter = new DefaultSkinningAdapter(method, chunk, chunk.GetBones(transform.parent), material);

                adapter    = defaultAdapter as IRenderAdapter;
                disposable = defaultAdapter as IDisposable;
            }
        }
示例#5
0
 public PatternRenderer(IRenderAdapter renderedAdapter)
 {
     _renderedAdapter = renderedAdapter;
 }