forked from sin365/AxibugEmuOnline
绘制性能优化
This commit is contained in:
parent
e8152500fd
commit
2c12958eb8
@ -12,10 +12,11 @@ namespace AxibugEmuOnline.Client
|
|||||||
|
|
||||||
public string ID => nameof(UguiVideoProvider).GetHashCode().ToString();
|
public string ID => nameof(UguiVideoProvider).GetHashCode().ToString();
|
||||||
|
|
||||||
private int[] m_texRawBuffer = new int[256 * 240];
|
private Color[] m_texRawBuffer = new Color[256 * 240];
|
||||||
private Texture2D m_rawBufferWarper = new Texture2D(256, 240);
|
private Texture2D m_rawBufferWarper = new Texture2D(256, 240);
|
||||||
private RawImage m_image;
|
private RawImage m_image;
|
||||||
private RenderTexture m_drawRT;
|
private RenderTexture m_drawRT;
|
||||||
|
private Color temp = Color.white;
|
||||||
|
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
@ -23,20 +24,21 @@ namespace AxibugEmuOnline.Client
|
|||||||
m_image.texture = RenderTexture.GetTemporary(256, 240, 0, UnityEngine.Experimental.Rendering.GraphicsFormat.B8G8R8A8_UNorm);
|
m_image.texture = RenderTexture.GetTemporary(256, 240, 0, UnityEngine.Experimental.Rendering.GraphicsFormat.B8G8R8A8_UNorm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color GetColor(uint value)
|
public void GetColor(uint value, ref Color res)
|
||||||
{
|
{
|
||||||
var r = 0xFF0000 & value;
|
var r = 0xFF0000 & value;
|
||||||
r >>= 16;
|
r >>= 16;
|
||||||
var b = 0xFF & value;
|
var b = 0xFF & value;
|
||||||
var g = 0xFF00 & value;
|
var g = 0xFF00 & value;
|
||||||
g >>= 8;
|
g >>= 8;
|
||||||
var color = new Color(r / 255f, g / 255f, b / 255f);
|
res.r = r / 255f;
|
||||||
return color;
|
res.g = g / 255f;
|
||||||
|
res.b = b / 255f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
var colors = m_texRawBuffer.Select(w => GetColor((uint)w)).ToArray();
|
var colors = m_texRawBuffer;
|
||||||
m_rawBufferWarper.SetPixels(colors);
|
m_rawBufferWarper.SetPixels(colors);
|
||||||
m_rawBufferWarper.Apply();
|
m_rawBufferWarper.Apply();
|
||||||
Graphics.Blit(m_rawBufferWarper, m_image.texture as RenderTexture);
|
Graphics.Blit(m_rawBufferWarper, m_image.texture as RenderTexture);
|
||||||
@ -76,7 +78,11 @@ namespace AxibugEmuOnline.Client
|
|||||||
|
|
||||||
public void SubmitFrame(ref int[] buffer)
|
public void SubmitFrame(ref int[] buffer)
|
||||||
{
|
{
|
||||||
Array.Copy(buffer, m_texRawBuffer, m_texRawBuffer.Length);
|
for (int i = 0; i < buffer.Length; i++)
|
||||||
|
{
|
||||||
|
GetColor((uint)buffer[i], ref temp);
|
||||||
|
m_texRawBuffer[i] = temp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResizeBegin()
|
public void ResizeBegin()
|
||||||
|
Loading…
Reference in New Issue
Block a user