mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 04:34:26 -07:00
Initial commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
// Alloy Physical Shader Framework
|
||||
// Copyright 2013-2017 RUST LLC.
|
||||
// http://www.alloy.rustltd.com/
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Alloy
|
||||
{
|
||||
public class AlloyTextureReader{
|
||||
private static Material s_passthroughMat;
|
||||
|
||||
protected static Material PassthroughMaterial {
|
||||
get {
|
||||
if (s_passthroughMat == null) {
|
||||
s_passthroughMat = new Material(Shader.Find("Hidden/AlloyPassthroughBlit")) { hideFlags = HideFlags.HideAndDontSave };
|
||||
}
|
||||
|
||||
return s_passthroughMat;
|
||||
}
|
||||
}
|
||||
|
||||
private static Material s_normMat;
|
||||
|
||||
protected static Material NormalMaterial {
|
||||
get {
|
||||
if (s_normMat == null) {
|
||||
s_normMat = new Material(Shader.Find("Hidden/AlloyNormalBlit"));
|
||||
|
||||
s_normMat.hideFlags = HideFlags.HideAndDontSave;
|
||||
}
|
||||
|
||||
return s_normMat;
|
||||
}
|
||||
}
|
||||
|
||||
public static Texture2D GetReadable(Texture texture, bool normalMap) {
|
||||
if (texture == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var texImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;
|
||||
|
||||
if (texImporter == null) {
|
||||
Debug.LogError("Couldn't find packed map texture in asset database!");
|
||||
return null;
|
||||
}
|
||||
|
||||
bool isEditorInLinearSpace = PlayerSettings.colorSpace == ColorSpace.Linear;
|
||||
bool linear = isEditorInLinearSpace && texImporter.sRGBTexture;
|
||||
|
||||
Shader.SetGlobalFloat("_EditorIsLinear", linear ? 1.0f : 0.0f);
|
||||
|
||||
var render = new RenderTexture(texture.width, texture.height, 0, RenderTextureFormat.ARGB32);
|
||||
Graphics.Blit(texture, render, normalMap ? NormalMaterial : PassthroughMaterial);
|
||||
|
||||
var readTex = new Texture2D(texture.width, texture.height, TextureFormat.ARGB32, false, false);
|
||||
|
||||
Graphics.SetRenderTarget(render);
|
||||
readTex.ReadPixels(new Rect(0, 0, texture.width, texture.height), 0, 0, false);
|
||||
Graphics.SetRenderTarget(null);
|
||||
|
||||
Object.DestroyImmediate(render);
|
||||
|
||||
readTex.hideFlags = HideFlags.HideAndDontSave;
|
||||
|
||||
return readTex;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user