GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);\r
GL.MatrixMode(MatrixMode.Projection);\r
\r
- GL.Enable(EnableCap.Blend);\r
+ GL.AlphaFunc(AlphaFunction.Greater, 0.5f);\r
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);\r
string glExtensions = GL.GetString(StringName.Extensions);\r
hasMipmap = glExtensions.Contains("GL_SGIS_generate_mipmap");\r
mesh.Step(lastFrameTime);\r
}\r
\r
+ if (!AvatarRenderingEnabled && mesh.Attached) return;\r
+\r
Primitive prim = mesh.Prim;\r
\r
// Individual prim matrix\r
\r
if (pass != RenderPass.Picking)\r
{\r
- bool belongToAlphaPass = (teFace.RGBA.A < 0.99) || data.TextureInfo.HasAlpha;\r
+ bool belongToAlphaPass = (teFace.RGBA.A < 0.99f) || (data.TextureInfo.HasAlpha && !data.TextureInfo.IsMask);\r
\r
if (belongToAlphaPass && pass != RenderPass.Alpha) continue;\r
if (!belongToAlphaPass && pass == RenderPass.Alpha) continue;\r
}\r
else\r
{\r
+ // Alpha mask elements, no blending, alpha test for A > 0.5\r
+ GL.Enable(EnableCap.AlphaTest);\r
RenderTerrain();\r
RenderObjects(RenderPass.Simple);\r
RenderAvatarsSkeleton(RenderPass.Simple);\r
RenderAvatars(RenderPass.Simple);\r
+ GL.Disable(EnableCap.AlphaTest);\r
\r
- GL.Disable(EnableCap.Lighting);\r
+ // Alpha blending elements, disable writing to depth buffer\r
+ GL.Enable(EnableCap.Blend);\r
GL.DepthMask(false);\r
RenderWater();\r
RenderObjects(RenderPass.Alpha);\r
GL.DepthMask(true);\r
- GL.Enable(EnableCap.Lighting);\r
\r
GLHUDBegin();\r
RenderText();\r
RenderStats();\r
GLHUDEnd();\r
+ GL.Disable(EnableCap.Blend);\r
}\r
\r
// Pop the world matrix\r
private void cbMisc_CheckedChanged(object sender, EventArgs e)\r
{\r
miscEnabled = cbMisc.Checked;\r
+ AvatarRenderingEnabled = miscEnabled;\r
}\r
\r
\r