protected void AllocateMemory()
{
if (ScratchPadPtr == null)
{
NullPtr = null;
#if USE_ARRAY_BYTES
//if (ScratchPad != null)
{
ScratchPad = new byte[ScratchPadSize];
FrameBuffer = new byte[FrameBufferSize];
Main = new byte[MainSize];
Vectors = new byte[VectorsSize];
#if ENABLE_LOG_MEMORY
LogMain = new uint[MainSize];
#else
LogMain = new uint[0];
#endif
}
ScratchPadHandle = GCHandle.Alloc(ScratchPad, GCHandleType.Pinned);
FrameBufferHandle = GCHandle.Alloc(FrameBuffer, GCHandleType.Pinned);
MainHandle = GCHandle.Alloc(Main, GCHandleType.Pinned);
VectorsHandle = GCHandle.Alloc(Vectors, GCHandleType.Pinned);
LogMainHandle = GCHandle.Alloc(LogMain, GCHandleType.Pinned);
ScratchPadPtr = (byte*)ScratchPadHandle.AddrOfPinnedObject().ToPointer();
FrameBufferPtr = (byte*)FrameBufferHandle.AddrOfPinnedObject().ToPointer();
MainPtr = (byte*)MainHandle.AddrOfPinnedObject().ToPointer();
VectorsPtr = (byte*)VectorsHandle.AddrOfPinnedObject().ToPointer();
LogMainPtr = (uint*)LogMainHandle.AddrOfPinnedObject().ToPointer();
#else
ScratchPadPtr = (byte*)(Marshal.AllocHGlobal(ScratchPadSize).ToPointer());
FrameBufferPtr = (byte*)(Marshal.AllocHGlobal(FrameBufferSize).ToPointer());
MainPtr = (byte*)(Marshal.AllocHGlobal(MainSize).ToPointer());
LogMainPtr = (uint*)(Marshal.AllocHGlobal(MainSize * 4).ToPointer());
/*
PointerUtils.Memset(ScratchPadPtr, 0, ScratchPadSize);
PointerUtils.Memset(FrameBufferPtr, 0, FrameBufferSize);
PointerUtils.Memset(MainPtr, 0, MainSize);
PointerUtils.Memset((byte*)LogMainPtr, 0, MainSize * 4);
*/
#endif
//GCHandle.Alloc();
}
}