Skip to content

Commit 043c0b7

Browse files
committed
Bindings support mapping and unmapping of buffers
1 parent 9f09c79 commit 043c0b7

File tree

3 files changed

+48
-17
lines changed

3 files changed

+48
-17
lines changed

src/EngineKit/Native/OpenGL/GL.Enums.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public enum BufferUsage : uint
159159
}
160160

161161
[Flags]
162-
public enum BufferStorageMask : uint
162+
public enum BufferStorageFlags : uint
163163
{
164164
MapReadBit = 1,
165165
MapWriteBit = 2,
@@ -1012,7 +1012,20 @@ public enum MemoryAccess : uint
10121012
WriteOnly = 0x88B9,
10131013
ReadWrite = 0x88BA
10141014
}
1015-
1015+
1016+
[Flags]
1017+
public enum MapFlags : uint
1018+
{
1019+
Read = 0x0001,
1020+
Write = 0x0002,
1021+
InvalidateRange = 0x0004,
1022+
InvalidateBuffer = 0x0008,
1023+
FlushExplicit = 0x0010,
1024+
UnSynchronized = 0x0020,
1025+
Persistent = 0x0040,
1026+
Coherent = 0x0080
1027+
}
1028+
10161029
public enum ClipControlOrigin : uint
10171030
{
10181031
LowerLeft = 36001,

src/EngineKit/Native/OpenGL/GL.Native.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public static unsafe partial class GL
121121
private static delegate* unmanaged<float, void> _glLineWidthDelegate = &glLineWidth;
122122
private static delegate* unmanaged<LogicOperation, void> _glLogicOpDelegate = &glLogicOp;
123123

124-
private static delegate* unmanaged<uint, long, void*, BufferStorageMask, void> _glNamedBufferStorageDelegate =
124+
private static delegate* unmanaged<uint, long, void*, uint, void> _glNamedBufferStorageDelegate =
125125
&glNamedBufferStorage;
126126

127127
private static delegate* unmanaged<uint, nint, void*, BufferUsage, void> _glNamedBufferDataDelegate =
@@ -258,7 +258,8 @@ public static unsafe partial class GL
258258
private static delegate* unmanaged<uint, float*, void> _glGetFloatvDelegate = &glGetFloatv;
259259
private static delegate* unmanaged<uint, uint, byte*> _glGetStringiDelegate = &glGetStringi;
260260

261-
private static delegate* unmanaged<int, MemoryAccess, void*> _glMapNamedBufferDelegate = &glMapNamedBuffer;
261+
private static delegate* unmanaged<uint, MemoryAccess, void*> _glMapNamedBufferDelegate = &glMapNamedBuffer;
262+
private static delegate* unmanaged<uint, int> _glUnmapNamedBufferDelegate = &glUnmapNamedBuffer;
262263

263264
private static delegate* unmanaged<uint, int, int, byte, int, MemoryAccess, SizedInternalFormat, void> _glBindImageTextureDelegate = &glBindImageTexture;
264265
private static delegate* unmanaged<uint, int, int*, void> _glBindImageTexturesDelegate = &glBindImageTextures;
@@ -974,12 +975,12 @@ private static void glNamedBufferStorage(
974975
uint buffer,
975976
long size,
976977
void* dataPtr,
977-
BufferStorageMask bufferStorageMask)
978+
uint bufferStorageFlags)
978979
{
979980
_glNamedBufferStorageDelegate =
980-
(delegate* unmanaged<uint, long, void*, BufferStorageMask, void>)Glfw.Glfw.GetProcAddress(
981+
(delegate* unmanaged<uint, long, void*, uint, void>)Glfw.Glfw.GetProcAddress(
981982
nameof(glNamedBufferStorage));
982-
_glNamedBufferStorageDelegate(buffer, size, dataPtr, bufferStorageMask);
983+
_glNamedBufferStorageDelegate(buffer, size, dataPtr, bufferStorageFlags);
983984
}
984985

985986
[UnmanagedCallersOnly]
@@ -1738,11 +1739,18 @@ private static void glGetBooleanv(uint parameterName, byte* data)
17381739
}
17391740

17401741
[UnmanagedCallersOnly]
1741-
private static void* glMapNamedBuffer(int buffer, MemoryAccess memoryAccess)
1742+
private static void* glMapNamedBuffer(uint buffer, MemoryAccess memoryAccess)
17421743
{
1743-
_glMapNamedBufferDelegate = (delegate* unmanaged<int, MemoryAccess, void*>)Glfw.Glfw.GetProcAddress(nameof(glMapNamedBuffer));
1744+
_glMapNamedBufferDelegate = (delegate* unmanaged<uint, MemoryAccess, void*>)Glfw.Glfw.GetProcAddress(nameof(glMapNamedBuffer));
17441745
return _glMapNamedBufferDelegate(buffer, memoryAccess);
17451746
}
1747+
1748+
[UnmanagedCallersOnly]
1749+
private static int glUnmapNamedBuffer(uint buffer)
1750+
{
1751+
_glUnmapNamedBufferDelegate = (delegate* unmanaged<uint, int>)Glfw.Glfw.GetProcAddress(nameof(glUnmapNamedBuffer));
1752+
return _glUnmapNamedBufferDelegate(buffer);
1753+
}
17461754

17471755
[UnmanagedCallersOnly]
17481756
private static void glClipControl(ClipControlOrigin origin, ClipControlDepth depth)

src/EngineKit/Native/OpenGL/GL.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -585,45 +585,45 @@ public static void NamedBufferStorage(
585585
uint buffer,
586586
long size,
587587
nint data,
588-
BufferStorageMask bufferStorageMask)
588+
uint bufferStorageFlags)
589589
{
590590
var dataPtr = (void*)data;
591-
NamedBufferStorage(buffer, size, dataPtr, bufferStorageMask);
591+
NamedBufferStorage(buffer, size, dataPtr, bufferStorageFlags);
592592
}
593593

594594
public static void NamedBufferStorage<TData>(
595595
uint buffer,
596596
in TData data,
597-
BufferStorageMask bufferStorageMask)
597+
uint bufferStorageFlags)
598598
where TData : unmanaged
599599
{
600600
var size = (long)sizeof(TData);
601601
fixed (void* dataPtr = &data)
602602
{
603-
NamedBufferStorage(buffer, size, dataPtr, bufferStorageMask);
603+
NamedBufferStorage(buffer, size, dataPtr, bufferStorageFlags);
604604
}
605605
}
606606

607607
public static void NamedBufferStorage<TData>(
608608
uint buffer,
609609
TData[] data,
610-
BufferStorageMask bufferStorageMask)
610+
uint bufferStorageFlags)
611611
where TData : unmanaged
612612
{
613613
var size = (long)(data.Length * sizeof(TData));
614614
fixed (void* dataPtr = data)
615615
{
616-
NamedBufferStorage(buffer, size, dataPtr, bufferStorageMask);
616+
NamedBufferStorage(buffer, size, dataPtr, bufferStorageFlags);
617617
}
618618
}
619619

620620
private static void NamedBufferStorage(
621621
uint buffer,
622622
long size,
623623
void* dataPtr,
624-
BufferStorageMask bufferStorageMask)
624+
uint bufferStorageFlags)
625625
{
626-
_glNamedBufferStorageDelegate(buffer, size, dataPtr, bufferStorageMask);
626+
_glNamedBufferStorageDelegate(buffer, size, dataPtr, bufferStorageFlags);
627627
}
628628

629629
public static void NamedBufferSubData<TData>(
@@ -1554,4 +1554,14 @@ private static bool IsValidImageTextureFormat(SizedInternalFormat format)
15541554
_ => false
15551555
};
15561556
}
1557+
1558+
public static void* MapBuffer(uint buffer, MemoryAccess memoryAccess)
1559+
{
1560+
return _glMapNamedBufferDelegate(buffer, memoryAccess);
1561+
}
1562+
1563+
public static bool UnmapBuffer(uint buffer)
1564+
{
1565+
return _glUnmapNamedBufferDelegate(buffer) == 1;
1566+
}
15571567
}

0 commit comments

Comments
 (0)