コード例 #1
0
        /// <summary>
        /// ブレンディング ステートを名指定でセットする
        /// </summary>
        /// <param name="name">ブレンディング ステート名</param>
        /// <param name="bs">ブレンディング ステート</param>
        /// <param name="c4">ブレンディング係数の配列です。RGBA の成分ごとに 1 つずつあります。</param>
        /// <param name="sampleMask">32 ビットのサンプル カバレッジです。</param>
        /// <param name="data">成功した場合、ブレンディング ステートの番号を返す。失敗した場合は-1を返す。</param>
        /// <returns></returns>
        public int CreateBlendState(string name, BlendStateDescription bs, RawColor4 c4, int sampleMask, out MCBlendStateData data)
        {
            int ret = m_no;

            data = null;
            if (m_nameDataIdx.ContainsKey(name))
            {
                if (!m_nameDataIdx[name].TryGetTarget(out data))
                {
                    m_nameDataIdx.Remove(name);
                }
                else
                {
                    return(-1);
                }
            }


            MCBlendStateData bsData = new MCBlendStateData(App, m_no, name);

            bsData.OnCreateDevice(App.DXDevice);
            bsData.SetBlendDesc(bs);
            bsData.SetBlendFactor(c4);
            bsData.SetSampleMask(sampleMask);

            m_numDataIdx.Add(m_no, bsData);

            bsData.CreateBlendState();
            m_nameDataIdx.Add(name, new WeakReference <MCBlendStateData>(bsData));
            ++m_no;

            return(ret);
        }
コード例 #2
0
 /// <summary>
 /// ブレンディング ステート名指定で取得する
 /// </summary>
 /// <param name="name">ブレンディング ステート名</param>
 /// <param name="data"></param>
 /// <returns>nameで指定した名前が存在した場合trueを返す。無い場合はfalseを返す</returns>
 public bool GetBlendState(string name, out MCBlendStateData data)
 {
     data = null;
     if (!m_nameDataIdx.ContainsKey(name))
     {
         if (!m_nameDataIdx[name].TryGetTarget(out data))
         {
             m_nameDataIdx.Remove(name);
             return(false);
         }
     }
     return(true);
 }
コード例 #3
0
        /// <summary>
        /// ブレンディング ステートを番号指定で取得する
        /// </summary>
        /// <param name="no">ブレンディング ステート番号</param>
        /// <param name=""></param>
        /// <param name=""></param>
        /// <returns>noで指定した番号が存在した場合trueを返す。無い場合はfalseを返す</returns>
        public bool GetBlendState(int no, out MCBlendStateData data)
        {
            if (m_numDataIdx.ContainsKey(no))
            {
                data = m_numDataIdx[no];
            }
            else
            {
                data = null;
                return(false);
            }

            return(true);
        }
コード例 #4
0
        /// <summary>
        /// デバイス作成時の処理
        /// </summary>
        /// <param name="device"></param>
        /// <returns>通常、エラーが発生しなかった場合は MC_S_OK を返すようにプログラムする。</returns>
        internal int OnCreateDevice(Device device)
        {
            if (!m_isInitCreate)
            {
                int i;
                int sampleMask = -1;
                MCBlendStateData      tmp;
                RawColor4             c4 = new RawColor4();
                BlendStateDescription bsDesc;
                MCBlendStateData.D3D11_BLEND_DESC_Init(out bsDesc);

                // Default
                CreateBlendState("DEFAULT", bsDesc, c4, sampleMask, out tmp);
                // ALPHAブレンド
                bsDesc.AlphaToCoverageEnable  = false;
                bsDesc.IndependentBlendEnable = false;
                for (i = 0; i < 8; i++)
                {
                    bsDesc.RenderTarget[i].IsBlendEnabled        = true;
                    bsDesc.RenderTarget[i].SourceBlend           = BlendOption.SourceAlpha;
                    bsDesc.RenderTarget[i].DestinationBlend      = BlendOption.InverseSourceAlpha;
                    bsDesc.RenderTarget[i].BlendOperation        = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].SourceAlphaBlend      = BlendOption.One;
                    bsDesc.RenderTarget[i].DestinationAlphaBlend = BlendOption.One;
                    bsDesc.RenderTarget[i].AlphaBlendOperation   = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                }
                CreateBlendState("ALPHA", bsDesc, c4, sampleMask, out tmp);
                //SourceAlphaBlend = ONE;
                //DestinationAlphaBlend = ZERO;

                // 加算合成用
                bsDesc.AlphaToCoverageEnable  = false;
                bsDesc.IndependentBlendEnable = false;
                for (i = 0; i < 8; i++)
                {
                    bsDesc.RenderTarget[i].IsBlendEnabled        = true;
                    bsDesc.RenderTarget[i].SourceBlend           = BlendOption.SourceAlpha;
                    bsDesc.RenderTarget[i].DestinationBlend      = BlendOption.One;
                    bsDesc.RenderTarget[i].BlendOperation        = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].SourceAlphaBlend      = BlendOption.One;
                    bsDesc.RenderTarget[i].DestinationAlphaBlend = BlendOption.Zero;
                    bsDesc.RenderTarget[i].AlphaBlendOperation   = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                }
                CreateBlendState("ADD", bsDesc, c4, sampleMask, out tmp);
                // 減算合成用
                bsDesc.AlphaToCoverageEnable  = false;
                bsDesc.IndependentBlendEnable = false;
                for (i = 0; i < 8; i++)
                {
                    bsDesc.RenderTarget[i].IsBlendEnabled        = true;
                    bsDesc.RenderTarget[i].SourceBlend           = BlendOption.SourceAlpha;
                    bsDesc.RenderTarget[i].DestinationBlend      = BlendOption.One;
                    bsDesc.RenderTarget[i].BlendOperation        = SharpDX.Direct3D11.BlendOperation.ReverseSubtract;
                    bsDesc.RenderTarget[i].SourceAlphaBlend      = BlendOption.One;
                    bsDesc.RenderTarget[i].DestinationAlphaBlend = BlendOption.Zero;
                    bsDesc.RenderTarget[i].AlphaBlendOperation   = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                }
                CreateBlendState("SUBTRACT", bsDesc, c4, sampleMask, out tmp);
                // 乗算合成用ブレンドステート
                bsDesc.AlphaToCoverageEnable  = false;
                bsDesc.IndependentBlendEnable = false;
                for (i = 0; i < 8; i++)
                {
                    bsDesc.RenderTarget[i].IsBlendEnabled        = true;
                    bsDesc.RenderTarget[i].SourceBlend           = BlendOption.Zero;
                    bsDesc.RenderTarget[i].DestinationBlend      = BlendOption.SourceColor;
                    bsDesc.RenderTarget[i].BlendOperation        = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].SourceAlphaBlend      = BlendOption.One;
                    bsDesc.RenderTarget[i].DestinationAlphaBlend = BlendOption.Zero;
                    bsDesc.RenderTarget[i].AlphaBlendOperation   = SharpDX.Direct3D11.BlendOperation.Add;
                    bsDesc.RenderTarget[i].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                }
                CreateBlendState("MULTIPLE", bsDesc, c4, sampleMask, out tmp);

                m_isInitCreate = true;
            }
            else
            {
                foreach (var val in m_numDataIdx)
                {
                    val.Value.OnCreateDevice(device);
                }
            }
            return(0);
        }