private void RenderOccludedObjects()
{
if (!RenderSettings.OcclusionCullingEnabled) return;
GL.EnableClientState(ArrayCap.VertexArray);
GL.ColorMask(false, false, false, false);
GL.Disable(EnableCap.CullFace);
GL.Disable(EnableCap.Lighting);
if (RenderSettings.UseVBO && !occludedVBOFailed)
{
if (boundingBoxVBO == -1)
{
Compat.GenBuffers(out boundingBoxVBO);
Compat.BindBuffer(BufferTarget.ArrayBuffer, boundingBoxVBO);
Compat.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(sizeof(float) * RHelp.CubeVertices.Length), RHelp.CubeVertices, BufferUsageHint.StaticDraw);
if (Compat.BufferSize(BufferTarget.ArrayBuffer) != sizeof(float) * RHelp.CubeVertices.Length)
{
occludedVBOFailed = true;
Compat.BindBuffer(BufferTarget.ArrayBuffer, 0);
boundingBoxVBO = -1;
}
}
else
{
Compat.BindBuffer(BufferTarget.ArrayBuffer, boundingBoxVBO);
}
if (boundingBoxVIndexVBO == -1)
{
Compat.GenBuffers(out boundingBoxVIndexVBO);
Compat.BindBuffer(BufferTarget.ElementArrayBuffer, boundingBoxVIndexVBO);
Compat.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(sizeof(ushort) * RHelp.CubeIndices.Length), RHelp.CubeIndices, BufferUsageHint.StaticDraw);
if (Compat.BufferSize(BufferTarget.ElementArrayBuffer) != sizeof(ushort) * RHelp.CubeIndices.Length)
{
occludedVBOFailed = true;
Compat.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
boundingBoxVIndexVBO = -1;
}
}
else
{
Compat.BindBuffer(BufferTarget.ElementArrayBuffer, boundingBoxVIndexVBO);
}
GL.VertexPointer(3, VertexPointerType.Float, 0, (IntPtr)0);
}
foreach (SceneObject obj in OccludedObjects)
{
if ((!obj.HasAlphaFaces && !obj.HasSimpleFaces)) continue;
obj.HasSimpleFaces = true;
obj.HasAlphaFaces = false;
obj.StartSimpleQuery();
RenderBoundingBox(obj);
obj.EndSimpleQuery();
}
if (RenderSettings.UseVBO)
{
Compat.BindBuffer(BufferTarget.ArrayBuffer, 0);
Compat.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
}
GL.ColorMask(true, true, true, true);
GL.DisableClientState(ArrayCap.VertexArray);
GL.Enable(EnableCap.CullFace);
GL.Enable(EnableCap.Lighting);
}