Directly copy vertex and index data too
This commit is contained in:
parent
4a21fd1cda
commit
89bb979704
3 changed files with 16 additions and 14 deletions
|
@ -1,3 +1,5 @@
|
|||
using System;
|
||||
|
||||
namespace Ryujinx.Graphics.Gal
|
||||
{
|
||||
public interface IGalRasterizer
|
||||
|
@ -45,9 +47,9 @@ namespace Ryujinx.Graphics.Gal
|
|||
|
||||
void SetPrimitiveRestartIndex(uint Index);
|
||||
|
||||
void CreateVbo(long Key, byte[] Buffer);
|
||||
void CreateVbo(long Key, int DataSize, IntPtr HostAddress);
|
||||
|
||||
void CreateIbo(long Key, byte[] Buffer);
|
||||
void CreateIbo(long Key, int DataSize, IntPtr HostAddress);
|
||||
|
||||
void SetVertexArray(int Stride, long VboKey, GalVertexAttrib[] Attribs);
|
||||
|
||||
|
|
|
@ -211,28 +211,28 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
|||
GL.PrimitiveRestartIndex(Index);
|
||||
}
|
||||
|
||||
public void CreateVbo(long Key, byte[] Buffer)
|
||||
public void CreateVbo(long Key, int DataSize, IntPtr HostAddress)
|
||||
{
|
||||
int Handle = GL.GenBuffer();
|
||||
|
||||
VboCache.AddOrUpdate(Key, Handle, (uint)Buffer.Length);
|
||||
VboCache.AddOrUpdate(Key, Handle, (uint)DataSize);
|
||||
|
||||
IntPtr Length = new IntPtr(Buffer.Length);
|
||||
IntPtr Length = new IntPtr(DataSize);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, Handle);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, Length, Buffer, BufferUsageHint.StreamDraw);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, Length, HostAddress, BufferUsageHint.StreamDraw);
|
||||
}
|
||||
|
||||
public void CreateIbo(long Key, byte[] Buffer)
|
||||
public void CreateIbo(long Key, int DataSize, IntPtr HostAddress)
|
||||
{
|
||||
int Handle = GL.GenBuffer();
|
||||
|
||||
IboCache.AddOrUpdate(Key, Handle, (uint)Buffer.Length);
|
||||
IboCache.AddOrUpdate(Key, Handle, (uint)DataSize);
|
||||
|
||||
IntPtr Length = new IntPtr(Buffer.Length);
|
||||
IntPtr Length = new IntPtr(DataSize);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ElementArrayBuffer, Handle);
|
||||
GL.BufferData(BufferTarget.ElementArrayBuffer, Length, Buffer, BufferUsageHint.StreamDraw);
|
||||
GL.BufferData(BufferTarget.ElementArrayBuffer, Length, HostAddress, BufferUsageHint.StreamDraw);
|
||||
}
|
||||
|
||||
public void SetVertexArray(int Stride, long VboKey, GalVertexAttrib[] Attribs)
|
||||
|
|
|
@ -583,9 +583,9 @@ namespace Ryujinx.HLE.Gpu.Engines
|
|||
|
||||
if (!IboCached || Vmm.IsRegionModified(IboKey, (uint)IbSize, NvGpuBufferType.Index))
|
||||
{
|
||||
byte[] Data = Vmm.ReadBytes(IndexPosition, (uint)IbSize);
|
||||
IntPtr DataAddress = Vmm.GetHostAddress(IndexPosition);
|
||||
|
||||
Gpu.Renderer.Rasterizer.CreateIbo(IboKey, Data);
|
||||
Gpu.Renderer.Rasterizer.CreateIbo(IboKey, IbSize, DataAddress);
|
||||
}
|
||||
|
||||
Gpu.Renderer.Rasterizer.SetIndexArray(IbSize, IndexFormat);
|
||||
|
@ -647,9 +647,9 @@ namespace Ryujinx.HLE.Gpu.Engines
|
|||
|
||||
if (!VboCached || Vmm.IsRegionModified(VboKey, VbSize, NvGpuBufferType.Vertex))
|
||||
{
|
||||
byte[] Data = Vmm.ReadBytes(VertexPosition, VbSize);
|
||||
IntPtr DataAddress = Vmm.GetHostAddress(VertexPosition);
|
||||
|
||||
Gpu.Renderer.Rasterizer.CreateVbo(VboKey, Data);
|
||||
Gpu.Renderer.Rasterizer.CreateVbo(VboKey, (int)VbSize, DataAddress);
|
||||
}
|
||||
|
||||
Gpu.Renderer.Rasterizer.SetVertexArray(Stride, VboKey, Attribs[Index].ToArray());
|
||||
|
|
Loading…
Add table
Reference in a new issue