private ComputeShaderCreatedParametersContainer CreateParameters( ComputeShaderParametersContainer parametersContainer) { var createdParameters = new ComputeShaderCreatedParametersContainer(); foreach (var pair in parametersContainer.ArleadyCreatedTextures) { createdParameters.AddTexture(pair.Key, pair.Value); } foreach (var pair in parametersContainer.ComputeShaderTextureTemplates) { createdParameters.AddTexture(pair.Key, CreateTexture(pair.Value)); } foreach (var pair in parametersContainer.ArleadyCreatedComputeBufferTemplates) { createdParameters.AddBuffer(pair.Key, pair.Value); } foreach (var pair in parametersContainer.ComputeBufferTemplates) { var createdBuffer = CreateBuffer(pair.Value); if (pair.Value.BufferData != null) { createdBuffer.SetData(pair.Value.BufferData); } createdParameters.AddBuffer(pair.Key, createdBuffer); } return(createdParameters); }
private static void FinalizeParameters( ComputeShaderParametersContainer parametersContainer, ComputeShaderCreatedParametersContainer createdParameters, ComputeBufferRequestedOutParameters outParameters) { foreach (var pair in createdParameters.Textures) { if (outParameters.IsRequestedTextureId(pair.Key)) { outParameters.AddTexture(pair.Key, pair.Value); } else { if (!parametersContainer.ArleadyCreatedTextures.ContainsKey(pair.Key)) { (pair.Value as RenderTexture)?.Release(); } } } foreach (var pair in createdParameters.Buffers) { if (outParameters.IsRequestedBufferId(pair.Key)) { outParameters.AddBuffer(pair.Key, pair.Value); } else { if (!parametersContainer.ArleadyCreatedComputeBufferTemplates.ContainsKey(pair.Key)) { //pair.Value.Dispose();//todo repair } } } }
public void SetCreatedParameters(ComputeShaderCreatedParametersContainer createdParametersContainer) { foreach (var pair in _parametersUsageContainer.IntGlobals) { _shader.SetInt(pair.Key, pair.Value); } foreach (var pair in _parametersUsageContainer.FloatGlobals) { _shader.SetFloat(pair.Key, pair.Value); } foreach (var pair in _parametersUsageContainer.VectorGlobals) { _shader.SetVector(pair.Key, pair.Value); } foreach (var usage in _parametersUsageContainer.BufferUsages) { var buffer = createdParametersContainer.RetriveBuffer(usage.BufferId); foreach (var kernelHandle in usage.Handles) { var handleId = _kernelNameTranslationMap[kernelHandle].HandleId; _shader.SetBuffer(handleId, usage.BufferName, buffer); } } foreach (var usage in _parametersUsageContainer.TextureUsages) { var texture = createdParametersContainer.RetriveTexture(usage.TextureId); foreach (var bufferHandle in usage.Handles) { var handleId = _kernelNameTranslationMap[bufferHandle].HandleId; _shader.SetTexture(handleId, usage.TextureName, texture); } } }