| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- using OpenTK.Graphics.OpenGL;
- using System;
- namespace Ryujinx.Graphics.Gal.OpenGL
- {
- class OGLConstBuffer : IGalConstBuffer
- {
- private const long MaxConstBufferCacheSize = 64 * 1024 * 1024;
- private OGLCachedResource<OGLStreamBuffer> Cache;
- public OGLConstBuffer()
- {
- Cache = new OGLCachedResource<OGLStreamBuffer>(DeleteBuffer, MaxConstBufferCacheSize);
- }
- public void LockCache()
- {
- Cache.Lock();
- }
- public void UnlockCache()
- {
- Cache.Unlock();
- }
- public void Create(long Key, long Size)
- {
- OGLStreamBuffer Buffer = new OGLStreamBuffer(BufferTarget.UniformBuffer, Size);
- Cache.AddOrUpdate(Key, Buffer, Size);
- }
- public bool IsCached(long Key, long Size)
- {
- return Cache.TryGetSize(Key, out long CachedSize) && CachedSize == Size;
- }
- public void SetData(long Key, long Size, IntPtr HostAddress)
- {
- if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
- {
- Buffer.SetData(Size, HostAddress);
- }
- }
- public void SetData(long Key, byte[] Data)
- {
- if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
- {
- Buffer.SetData(Data);
- }
- }
- public bool TryGetUbo(long Key, out int UboHandle)
- {
- if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
- {
- UboHandle = Buffer.Handle;
- return true;
- }
- UboHandle = 0;
- return false;
- }
- private static void DeleteBuffer(OGLStreamBuffer Buffer)
- {
- Buffer.Dispose();
- }
- }
- }
|