mirror of
https://github.com/GMMan/DrawingSongHLE.git
synced 2025-12-17 01:16:11 +01:00
55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
|
|
public class Framebuffer : MonoBehaviour
|
|
{
|
|
Texture2D texture;
|
|
ushort[] framebuffer;
|
|
byte[] frameBufferSubmit;
|
|
|
|
public SpriteRenderer spriteRenderer;
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
texture = new Texture2D(Config.FRAMEBUFFER_WIDTH, Config.FRAMEBUFFER_HEIGHT, TextureFormat.RGB565, false);
|
|
texture.filterMode = FilterMode.Point;
|
|
framebuffer = new ushort[Config.FRAMEBUFFER_WIDTH * Config.FRAMEBUFFER_HEIGHT];
|
|
frameBufferSubmit = new byte[framebuffer.Length * 2];
|
|
var sprite = Sprite.Create(texture, new Rect(0, 0, Config.FRAMEBUFFER_WIDTH, Config.FRAMEBUFFER_HEIGHT),
|
|
new Vector2(0.5f, 0.5f), 100);
|
|
spriteRenderer.sprite = sprite;
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
|
|
public void FrameUpdate()
|
|
{
|
|
Buffer.BlockCopy(framebuffer, 0, frameBufferSubmit, 0, frameBufferSubmit.Length);
|
|
texture.LoadRawTextureData(frameBufferSubmit);
|
|
texture.Apply();
|
|
// Clear framebuffer after uploading
|
|
for (int i = 0; i < framebuffer.Length; ++i)
|
|
framebuffer[i] = 0;
|
|
}
|
|
|
|
public void SetPixel(int x, int y, ushort color)
|
|
{
|
|
y = Config.FRAMEBUFFER_HEIGHT - 1 - y;
|
|
framebuffer[y * Config.FRAMEBUFFER_WIDTH + x] = color;
|
|
}
|
|
|
|
public ushort GetPixel(int x, int y)
|
|
{
|
|
y = Config.FRAMEBUFFER_HEIGHT - 1 - y;
|
|
return framebuffer[y * Config.FRAMEBUFFER_WIDTH + x];
|
|
}
|
|
}
|