SteamAudio/Scripts/Runtime/ProbeBatch.cs
2024-05-14 04:06:02 +02:00

152 lines
4.0 KiB
C#
Executable File

//
// Copyright 2017-2023 Valve Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#if STEAMAUDIO_ENABLED
using System;
using UnityEngine;
namespace SteamAudio
{
public class ProbeArray
{
IntPtr mProbeArray = IntPtr.Zero;
public ProbeArray(Context context)
{
API.iplProbeArrayCreate(context.Get(), out mProbeArray);
}
public ProbeArray(ProbeArray probeArray)
{
mProbeArray = API.iplProbeArrayRetain(probeArray.mProbeArray);
}
~ProbeArray()
{
Release();
}
public void Release()
{
API.iplProbeArrayRelease(ref mProbeArray);
}
public IntPtr Get()
{
return mProbeArray;
}
public void GenerateProbes(Scene scene, ProbeGenerationParams probeGenerationParams)
{
API.iplProbeArrayGenerateProbes(mProbeArray, scene.Get(), ref probeGenerationParams);
}
public int GetNumProbes()
{
return API.iplProbeArrayGetNumProbes(mProbeArray);
}
public Sphere GetProbe(int index)
{
return API.iplProbeArrayGetProbe(mProbeArray, index);
}
}
public class ProbeBatch
{
Context mContext = null;
IntPtr mProbeBatch = IntPtr.Zero;
public ProbeBatch(Context context)
{
mContext = context;
API.iplProbeBatchCreate(context.Get(), out mProbeBatch);
}
public ProbeBatch(Context context, SerializedData dataAsset)
{
mContext = context;
var serializedObject = new SerializedObject(context, dataAsset);
var status = API.iplProbeBatchLoad(context.Get(), serializedObject.Get(), out mProbeBatch);
if (status != Error.Success)
{
Debug.LogError(string.Format("Unable to load Probe Batch from {0}.", dataAsset.name));
mProbeBatch = IntPtr.Zero;
}
serializedObject.Release();
}
public ProbeBatch(ProbeBatch probeBatch)
{
mContext = probeBatch.mContext;
mProbeBatch = API.iplProbeBatchRetain(probeBatch.mProbeBatch);
}
~ProbeBatch()
{
Release();
}
public void Release()
{
API.iplProbeBatchRelease(ref mProbeBatch);
mContext = null;
}
public IntPtr Get()
{
return mProbeBatch;
}
public int Save(SerializedData dataAsset, bool flush = true)
{
var serializedObject = new SerializedObject(mContext);
API.iplProbeBatchSave(mProbeBatch, serializedObject.Get());
var size = (int) serializedObject.GetSize();
serializedObject.WriteToFile(dataAsset, flush);
serializedObject.Release();
return size;
}
public void AddProbeArray(ProbeArray probeArray)
{
API.iplProbeBatchAddProbeArray(mProbeBatch, probeArray.Get());
}
public void Commit()
{
API.iplProbeBatchCommit(mProbeBatch);
}
public void RemoveData(BakedDataIdentifier identifier)
{
API.iplProbeBatchRemoveData(mProbeBatch, ref identifier);
}
public UIntPtr GetDataSize(BakedDataIdentifier identifier)
{
return API.iplProbeBatchGetDataSize(mProbeBatch, ref identifier);
}
}
}
#endif