升级水插件
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
namespace WaveHarmonic.Crest
|
||||
{
|
||||
interface ICommandWrapper : IPropertyWrapper
|
||||
{
|
||||
void SetInvertCulling(bool invert);
|
||||
void DrawFullScreenTriangle(Material material, int pass, MaterialPropertyBlock block = null);
|
||||
void DrawMesh(Mesh mesh, Matrix4x4 matrix, Material material, int pass = -1, MaterialPropertyBlock block = null);
|
||||
}
|
||||
|
||||
|
||||
readonly struct CommandWrapper : ICommandWrapper
|
||||
{
|
||||
public CommandBuffer Commands { get; }
|
||||
public CommandWrapper(CommandBuffer commands) => Commands = commands;
|
||||
public void SetFloat(int param, float value) => Commands.SetGlobalFloat(param, value);
|
||||
public void SetFloatArray(int param, float[] value) => Commands.SetGlobalFloatArray(param, value);
|
||||
public void SetTexture(int param, Texture value) => Commands.SetGlobalTexture(param, value);
|
||||
public void SetVector(int param, Vector4 value) => Commands.SetGlobalVector(param, value);
|
||||
public void SetVectorArray(int param, Vector4[] value) => Commands.SetGlobalVectorArray(param, value);
|
||||
public void SetMatrix(int param, Matrix4x4 value) => Commands.SetGlobalMatrix(param, value);
|
||||
public void SetInteger(int param, int value) => Commands.SetGlobalInteger(param, value);
|
||||
public void SetBoolean(int param, bool value) => Commands.SetGlobalInteger(param, value ? 1 : 0);
|
||||
|
||||
public void GetBlock() { }
|
||||
public void SetBlock() { }
|
||||
|
||||
public void SetInvertCulling(bool invert) => Commands.SetInvertCulling(invert);
|
||||
|
||||
public void DrawFullScreenTriangle(Material material, int pass = -1, MaterialPropertyBlock block = null)
|
||||
{
|
||||
Commands.DrawProcedural
|
||||
(
|
||||
Matrix4x4.identity,
|
||||
material,
|
||||
pass,
|
||||
MeshTopology.Triangles,
|
||||
vertexCount: 3,
|
||||
instanceCount: 1,
|
||||
block
|
||||
);
|
||||
}
|
||||
|
||||
public void DrawMesh(Mesh mesh, Matrix4x4 matrix, Material material, int pass = -1, MaterialPropertyBlock block = null)
|
||||
{
|
||||
Commands.DrawMesh
|
||||
(
|
||||
mesh,
|
||||
matrix,
|
||||
material,
|
||||
submeshIndex: 0,
|
||||
pass,
|
||||
block
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_6000_0_OR_NEWER
|
||||
readonly struct RasterCommandWrapper : ICommandWrapper
|
||||
{
|
||||
public RasterCommandBuffer Commands { get; }
|
||||
public RasterCommandWrapper(RasterCommandBuffer commands) => Commands = commands;
|
||||
public void SetFloat(int param, float value) => Commands.SetGlobalFloat(param, value);
|
||||
public void SetFloatArray(int param, float[] value) => Commands.SetGlobalFloatArray(param, value);
|
||||
// WARNING: bypasses RG checks. Only use for textures external to RG.
|
||||
public void SetTexture(int param, Texture value) => Commands.m_WrappedCommandBuffer.SetGlobalTexture(param, value);
|
||||
public void SetVector(int param, Vector4 value) => Commands.SetGlobalVector(param, value);
|
||||
public void SetVectorArray(int param, Vector4[] value) => Commands.SetGlobalVectorArray(param, value);
|
||||
public void SetMatrix(int param, Matrix4x4 value) => Commands.SetGlobalMatrix(param, value);
|
||||
public void SetInteger(int param, int value) => Commands.SetGlobalInteger(param, value);
|
||||
public void SetBoolean(int param, bool value) => Commands.SetGlobalInteger(param, value ? 1 : 0);
|
||||
|
||||
public void GetBlock() { }
|
||||
public void SetBlock() { }
|
||||
|
||||
public void SetInvertCulling(bool invert) => Commands.SetInvertCulling(invert);
|
||||
|
||||
public void DrawFullScreenTriangle(Material material, int pass, MaterialPropertyBlock block = null)
|
||||
{
|
||||
Commands.DrawProcedural
|
||||
(
|
||||
Matrix4x4.identity,
|
||||
material,
|
||||
pass,
|
||||
MeshTopology.Triangles,
|
||||
vertexCount: 3,
|
||||
instanceCount: 1,
|
||||
block
|
||||
);
|
||||
}
|
||||
|
||||
public void DrawMesh(Mesh mesh, Matrix4x4 matrix, Material material, int pass = -1, MaterialPropertyBlock block = null)
|
||||
{
|
||||
Commands.DrawMesh
|
||||
(
|
||||
mesh,
|
||||
matrix,
|
||||
material,
|
||||
submeshIndex: 0,
|
||||
pass,
|
||||
block
|
||||
);
|
||||
}
|
||||
}
|
||||
#endif // UNITY_6000_0_OR_NEWER
|
||||
}
|
||||
Reference in New Issue
Block a user