public virtual void Awake() { #if UNITY_EDITOR if (!Application.isPlaying) { CheckPrototypeChanges(); } #endif if (activeManagerList == null) { activeManagerList = new List <GPUInstancerManager>(); } if (SystemInfo.supportsComputeShaders) { if (_visibilityComputeShader == null) { #if !UNITY_EDITOR && UNITY_ANDROID if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan) { _visibilityComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.VISIBILITY_COMPUTE_RESOURCE_PATH_VULKAN); GPUInstancerConstants.DETAIL_STORE_INSTANCE_DATA = true; GPUInstancerConstants.COMPUTE_MAX_LOD_BUFFER = 3; } else { _visibilityComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.VISIBILITY_COMPUTE_RESOURCE_PATH); } _bufferToTextureComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.BUFFER_TO_TEXTURE_COMPUTE_RESOURCE_PATH); _bufferToTextureComputeKernelID = _bufferToTextureComputeShader.FindKernel(GPUInstancerConstants.BUFFER_TO_TEXTURE_KERNEL); #else _visibilityComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.VISIBILITY_COMPUTE_RESOURCE_PATH); #endif _instanceVisibilityComputeKernelIDs = new int[GPUInstancerConstants.VISIBILITY_COMPUTE_KERNELS.Length]; for (int i = 0; i < _instanceVisibilityComputeKernelIDs.Length; i++) { _instanceVisibilityComputeKernelIDs[i] = _visibilityComputeShader.FindKernel(GPUInstancerConstants.VISIBILITY_COMPUTE_KERNELS[i]); } GPUInstancerConstants.TEXTURE_MAX_SIZE = SystemInfo.maxTextureSize; } GPUInstancerConstants.SetupComputeRuntimeModification(); GPUInstancerConstants.SetupComputeSetDataPartial(); } else if (Application.isPlaying) { Debug.LogError("Target Graphics API does not support Compute Shaders. Please refer to Minimum Requirements on GPUInstancer/ReadMe.txt for detailed information."); this.enabled = false; } showRenderedAmount = false; InitializeCameraData(); SetDefaultGPUInstancerShaderBindings(); SetDefaultGPUInstancerBillboardAtlasBindings(); }
public virtual void Awake() { if (GPUInstancerConstants.gpuiSettings == null) { GPUInstancerConstants.gpuiSettings = GPUInstancerSettings.GetDefaultGPUInstancerSettings(); } GPUInstancerConstants.gpuiSettings.SetDefultBindings(); GPUInstancerUtility.SetPlatformDependentVariables(); #if UNITY_EDITOR if (!Application.isPlaying) { CheckPrototypeChanges(); } #endif if (Application.isPlaying && activeManagerList == null) { activeManagerList = new List <GPUInstancerManager>(); } if (SystemInfo.supportsComputeShaders) { if (_visibilityComputeShader == null) { switch (GPUInstancerUtility.matrixHandlingType) { case GPUIMatrixHandlingType.MatrixAppend: _visibilityComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.VISIBILITY_COMPUTE_RESOURCE_PATH_VULKAN); GPUInstancerConstants.DETAIL_STORE_INSTANCE_DATA = true; GPUInstancerConstants.COMPUTE_MAX_LOD_BUFFER = 3; break; case GPUIMatrixHandlingType.CopyToTexture: _visibilityComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.VISIBILITY_COMPUTE_RESOURCE_PATH); _bufferToTextureComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.BUFFER_TO_TEXTURE_COMPUTE_RESOURCE_PATH); _bufferToTextureComputeKernelID = _bufferToTextureComputeShader.FindKernel(GPUInstancerConstants.BUFFER_TO_TEXTURE_KERNEL); break; default: _visibilityComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.VISIBILITY_COMPUTE_RESOURCE_PATH); break; } _instanceVisibilityComputeKernelIDs = new int[GPUInstancerConstants.VISIBILITY_COMPUTE_KERNELS.Length]; for (int i = 0; i < _instanceVisibilityComputeKernelIDs.Length; i++) { _instanceVisibilityComputeKernelIDs[i] = _visibilityComputeShader.FindKernel(GPUInstancerConstants.VISIBILITY_COMPUTE_KERNELS[i]); } GPUInstancerConstants.TEXTURE_MAX_SIZE = SystemInfo.maxTextureSize; _cameraComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.CAMERA_COMPUTE_RESOURCE_PATH); #if UNITY_2017_2_OR_NEWER if (isOcclusionCulling && UnityEngine.XR.XRSettings.enabled && GPUInstancerConstants.gpuiSettings.testBothEyesForVROcclusion) #else if (isOcclusionCulling && UnityEngine.VR.VRSettings.enabled && GPUInstancerConstants.gpuiSettings.testBothEyesForVROcclusion) #endif { _cameraComputeShader = (ComputeShader)Resources.Load(GPUInstancerConstants.CAMERA_VR_COMPUTE_RESOURCE_PATH); } _cameraComputeKernelIDs = new int[GPUInstancerConstants.CAMERA_COMPUTE_KERNELS.Length]; for (int i = 0; i < _cameraComputeKernelIDs.Length; i++) { _cameraComputeKernelIDs[i] = _cameraComputeShader.FindKernel(GPUInstancerConstants.CAMERA_COMPUTE_KERNELS[i]); } } GPUInstancerConstants.SetupComputeRuntimeModification(); GPUInstancerConstants.SetupComputeSetDataPartial(); } else if (Application.isPlaying) { Debug.LogError("Target Graphics API does not support Compute Shaders. Please refer to Minimum Requirements on GPUInstancer/ReadMe.txt for detailed information."); this.enabled = false; } showRenderedAmount = false; InitializeCameraData(); #if UNITY_EDITOR && UNITY_2017_2_OR_NEWER EditorApplication.playModeStateChanged -= HandlePlayModeStateChanged; EditorApplication.playModeStateChanged += HandlePlayModeStateChanged; #endif }