|
|
#region License
|
|
|
/* FNA - XNA4 Reimplementation for Desktop Platforms
|
|
|
* Copyright 2009-2022 Ethan Lee and the MonoGame Team
|
|
|
*
|
|
|
* Released under the Microsoft Public License.
|
|
|
* See LICENSE for details.
|
|
|
*/
|
|
|
#endregion
|
|
|
|
|
|
#region Using Statements
|
|
|
using System;
|
|
|
#endregion
|
|
|
|
|
|
namespace Microsoft.Xna.Framework.Graphics
|
|
|
{
|
|
|
public class OcclusionQuery : GraphicsResource
|
|
|
{
|
|
|
#region Public Properties
|
|
|
|
|
|
public bool IsComplete
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return FNA3D.FNA3D_QueryComplete(
|
|
|
GraphicsDevice.GLDevice,
|
|
|
query
|
|
|
) == 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public int PixelCount
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return FNA3D.FNA3D_QueryPixelCount(
|
|
|
GraphicsDevice.GLDevice,
|
|
|
query
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Private FNA3D Variables
|
|
|
|
|
|
private IntPtr query;
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Public Constructor
|
|
|
|
|
|
public OcclusionQuery(GraphicsDevice graphicsDevice)
|
|
|
{
|
|
|
GraphicsDevice = graphicsDevice;
|
|
|
query = FNA3D.FNA3D_CreateQuery(GraphicsDevice.GLDevice);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Protected Dispose Method
|
|
|
|
|
|
protected override void Dispose(bool disposing)
|
|
|
{
|
|
|
if (!IsDisposed)
|
|
|
{
|
|
|
FNA3D.FNA3D_AddDisposeQuery(GraphicsDevice.GLDevice, query);
|
|
|
}
|
|
|
base.Dispose(disposing);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Public Begin/End Methods
|
|
|
|
|
|
public void Begin()
|
|
|
{
|
|
|
FNA3D.FNA3D_QueryBegin(GraphicsDevice.GLDevice, query);
|
|
|
}
|
|
|
|
|
|
public void End()
|
|
|
{
|
|
|
FNA3D.FNA3D_QueryEnd(GraphicsDevice.GLDevice, query);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
}
|
|
|
|