Example #1
0
        private static void PushAlphaStates()
        {
            if (m_AlphaStateCount != 0)
            {
                if (m_VertexStream == null)
                {
                    m_VertexStream = new BufferedVertexStream(Engine.m_VertexBuffer, 0x8000, 0x1c);
                }
                Device device = Engine.m_Device;
                device.get_RenderState().set_ZBufferWriteEnable(false);
                device.get_RenderState().set_AlphaBlendEnable(true);
                for (int i = 0; i < m_AlphaStateCount; i++)
                {
                    AlphaState state = (AlphaState) m_AlphaStates[i];
                    Texture texture = state.m_Texture;
                    TextureVB textureVB = state.m_TextureVB;
                    if ((textureVB.m_Count > 0) && (textureVB.m_Frame == m_ActFrames))
                    {
                        if (state.m_AlphaTest != m_CurAlphaTest)
                        {
                            m_CurAlphaTest = state.m_AlphaTest;
                            device.get_RenderState().set_AlphaTestEnable(m_CurAlphaTest);
                        }
                        if (state.m_BlendType != m_CurBlendType)
                        {
                            m_CurBlendType = state.m_BlendType;
                            RenderStates states = device.get_RenderState();
                            switch (m_CurBlendType)
                            {
                                case DrawBlendType.Normal:
                                    states.set_SourceBlend(5);
                                    states.set_DestinationBlend(6);
                                    break;

                                case DrawBlendType.Additive:
                                    states.set_SourceBlend(2);
                                    states.set_DestinationBlend(2);
                                    break;

                                case DrawBlendType.BlackTransparency:
                                    states.set_SourceBlend(1);
                                    states.set_DestinationBlend(3);
                                    states.set_BlendOperation(1);
                                    break;
                            }
                        }
                        int num2 = state.m_LineStrip ? 2 : 4;
                        int num3 = num2 * 0x1c;
                        int vertexCount = textureVB.m_Count * num2;
                        int num5 = m_VertexStream.Push(textureVB.m_Stream.GetBuffer(), vertexCount, false);
                        if (num5 >= 0)
                        {
                            device.SetTexture(0, texture.Surface);
                            if (state.m_LineStrip)
                            {
                                device.DrawPrimitives(2, num5, textureVB.m_Count);
                            }
                            else
                            {
                                device.DrawIndexedPrimitives(4, num5, 0, vertexCount, 0, 2 * textureVB.m_Count);
                            }
                        }
                    }
                }
                device.get_RenderState().set_AlphaBlendEnable(false);
                device.get_RenderState().set_ZBufferWriteEnable(true);
                m_AlphaStateCount = 0;
            }
        }
Example #2
0
 public static void InsertAlphaState(bool lineStrip, bool alphaTest, DrawBlendType blend, Texture texture, byte[] buffer, int length, int count)
 {
     AlphaState state = null;
     if ((m_AlphaStateCount > 0) && ((m_AlphaStateCount - 1) < m_AlphaStates.Count))
     {
         state = (AlphaState) m_AlphaStates[m_AlphaStateCount - 1];
     }
     bool flag = state == null;
     if (!flag)
     {
         flag = (((state.m_LineStrip != lineStrip) || (state.m_AlphaTest != alphaTest)) || (state.m_BlendType != blend)) || (state.m_Texture != texture);
     }
     if (flag)
     {
         if (m_AlphaStateCount < m_AlphaStates.Count)
         {
             state = (AlphaState) m_AlphaStates[m_AlphaStateCount];
         }
         else
         {
             state = new AlphaState {
                 m_TextureVB = new TextureVB()
             };
             m_AlphaStates.Add(state);
         }
         state.m_LineStrip = lineStrip;
         state.m_AlphaTest = alphaTest;
         state.m_BlendType = blend;
         state.m_Texture = texture;
         state.m_TextureVB.m_Count = 0;
         state.m_TextureVB.m_Frame = -1;
         state.m_TextureVB.m_Stream.Seek(0L, SeekOrigin.Begin);
         m_AlphaStateCount++;
     }
     state.m_TextureVB.m_Count += count;
     state.m_TextureVB.m_Frame = m_ActFrames;
     state.m_TextureVB.m_Stream.Write(buffer, 0, length);
 }
Example #3
0
 public static void SetBlendType(DrawBlendType type)
 {
     m_BlendType = type;
 }
Example #4
0
 public RenderEffect(float alpha, DrawBlendType blendType, RenderEffectGlow glow)
 {
     this._alpha     = alpha;
     this._blendType = blendType;
     this._glow      = glow;
 }