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; } }
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); }
public static void SetBlendType(DrawBlendType type) { m_BlendType = type; }
public RenderEffect(float alpha, DrawBlendType blendType, RenderEffectGlow glow) { this._alpha = alpha; this._blendType = blendType; this._glow = glow; }