AudioSelector

This commit is contained in:
ntr committed 2022-06-13 21:47:41 +10:00
1 parent 0df6510da7
commit 0cac336db2
24 files changed
+590 -412

No files matched your search

+71
View File
@@ -0,0 +1,71 @@
using UnityEngine;
using System.Collections.Generic;
using Assets.WasapiAudio.Scripts.Unity;
[RequireComponent(typeof(Material))]
public class ThemeShaderBinder : MonoBehaviour
{
public Material material;
public Preferences preferences;
private Texture2D _texture;
private Color[] _colorCache;
private int textureSize = 128;
private Gradient _theme;
private void Start() {
if (preferences == null) {
Debug.Log("Theme Shader Binder needs Preferences.");
gameObject.SetActive(false);
}
}
private void Update() {
UpdateTexture();
UpdateBinding();
}
public Color DecomposeHdrColor(Color linearColorHdr) {
var maxColorComponent = linearColorHdr.maxColorComponent;
float scaleFactor = 191f / maxColorComponent;
float exposure = Mathf.Log(255f / scaleFactor) / Mathf.Log(2f);
float factor = 1f / exposure;
if (exposure <= 1f) {
return linearColorHdr;
}
float r = linearColorHdr.r * factor;
float g = linearColorHdr.g * factor;
float b = linearColorHdr.b * factor;
return new Color(r, g, b, linearColorHdr.a);
}
private void UpdateTexture() {
if (_theme == preferences.Theme()) return;
Debug.Log("Reinitialising Theme texture...");
_texture = new Texture2D(textureSize, 1);
_theme = preferences.Theme();
_colorCache = new Color[textureSize];
_texture.name = $"ThemeTexture{textureSize}";
_texture.wrapMode = TextureWrapMode.Clamp;
for (int i = 0; i < textureSize; i++) {
if (_theme == null) return;
Color color = DecomposeHdrColor(_theme.Evaluate((float)i / (float)textureSize));
// Color color = _theme.Evaluate((float)i / (float)textureSize);
_colorCache[i] = color;
}
_texture.SetPixels(_colorCache);
_texture.Apply();
}
public void UpdateBinding() {
UpdateTexture();
material.SetFloat("_ThemeSize", textureSize);
material.SetTexture("_ThemeTexture", _texture);
}
}