/// <summary> /// Changes the texture size. /// </summary> /// <remarks> /// This operation may also change the size of all mipmap levels, including from the parent /// and other possible child textures, to ensure that all sizes are consistent. /// </remarks> /// <param name="width">The new texture width</param> /// <param name="height">The new texture height</param> /// <param name="depthOrLayers">The new texture depth (for 3D textures) or layers (for layered textures)</param> public void ChangeSize(int width, int height, int depthOrLayers) { width <<= _firstLevel; height <<= _firstLevel; if (Info.Target == Target.Texture3D) { depthOrLayers <<= _firstLevel; } else { depthOrLayers = _viewStorage.Info.DepthOrLayers; } _viewStorage.RecreateStorageOrView(width, height, depthOrLayers); foreach (Texture view in _viewStorage._views) { int viewWidth = Math.Max(1, width >> view._firstLevel); int viewHeight = Math.Max(1, height >> view._firstLevel); int viewDepthOrLayers; if (view.Info.Target == Target.Texture3D) { viewDepthOrLayers = Math.Max(1, depthOrLayers >> view._firstLevel); } else { viewDepthOrLayers = view.Info.DepthOrLayers; } view.RecreateStorageOrView(viewWidth, viewHeight, viewDepthOrLayers); } }