// Initializes Phonon Manager Component, in particular various Phonon API handles contained within Phonon // Manager Container. Initialize will be performed only once despite repeated calls to Initialize without // calls to Destroy. public void Initialize(bool initializeRenderer, PhononManager phononManager) { if (refCounter != 0) { return; } ++refCounter; bool useOpenCL; int numComputeUnits; ComputeDeviceType deviceType; deviceType = phononManager.ComputeDeviceSettings(out numComputeUnits, out useOpenCL); SimulationSettings simulationSettings = phononManager.SimulationSettings(); GlobalContext globalContext = phononManager.GlobalContext(); RenderingSettings renderingSettings = phononManager.RenderingSettings(); try { computeDevice.Create(useOpenCL, deviceType, numComputeUnits); } catch (Exception e) { throw e; } probeManager.Create(); if (scene.Create(computeDevice, simulationSettings, globalContext) == Error.None) { try { environment.Create(computeDevice, simulationSettings, scene, probeManager, globalContext); } catch (Exception e) { throw e; } if (initializeRenderer) { environmentRenderer.Create(environment, renderingSettings, simulationSettings, globalContext); } } if (initializeRenderer) { binauralRenderer.Create(environment, renderingSettings, globalContext); } }