ISrvBindable CreateNewTexture(Vector2I resolution) { string debugName = string.Format("Debug-mipmap-{0}x{1}", resolution.X, resolution.Y); int mipmapLevels = MyResourceUtils.GetMipmapsCount(Math.Max(resolution.X, resolution.Y)); resolution.X = MyResourceUtils.GetMipmapStride(resolution.X, 0); // this is required by texture compression resolution.Y = MyResourceUtils.GetMipmapStride(resolution.Y, 0); // this is required by texture compression ISrvTexture dstTex = MyManagers.RwTextures.CreateSrv(debugName, resolution.X, resolution.Y, Format.BC7_UNorm_SRgb, mipmapLevels: mipmapLevels); for (int i = 0; i < mipmapLevels; i++) { ISrvBindable srcTex = m_fileTextures[i % m_fileTextures.Length]; Vector2I mipmapResolution = new Vector2I(MyResourceUtils.GetMipmapSize(resolution.X, i), MyResourceUtils.GetMipmapSize(resolution.Y, i)); for (int x = 0; x < mipmapResolution.X; x += srcTex.Size.X) { for (int y = 0; y < mipmapResolution.Y; y += srcTex.Size.Y) { MyRender11.RC.CopySubresourceRegion(srcTex, 0, null, dstTex, i, x, y); } } } return(dstTex); }
// if no file texture can be loaded, the function will return false and default value in parameters bool GetCorrectedFileTextureParams(out MyFileTextureParams parameters) { //parameters = new MyFileTextureParams(); foreach (string filepath in m_listSubresourceFilenames) { if (MyFileTextureParamsManager.LoadFromFile(filepath, out parameters)) { if (MyCompilationSymbols.ReinterpretFormatsStoredInFiles) { if (m_type != MyFileTextureEnum.NORMALMAP_GLOSS) { parameters.Format = MyResourceUtils.MakeSrgb(parameters.Format); } } int skipMipmaps = 0; if (m_type != MyFileTextureEnum.GUI && m_type != MyFileTextureEnum.GPUPARTICLES) { skipMipmaps = MyRender11.RenderSettings.TextureQuality.MipmapsToSkip(parameters.Resolution.X, parameters.Resolution.Y); } if (parameters.Mipmaps > 1) { parameters.Mipmaps -= skipMipmaps; parameters.Resolution.X = MyResourceUtils.GetMipmapSize(parameters.Resolution.X, skipMipmaps); parameters.Resolution.Y = MyResourceUtils.GetMipmapSize(parameters.Resolution.Y, skipMipmaps); } return(true); } } parameters.Format = m_recoverySystem.FormatBytePattern; parameters.Mipmaps = 3; parameters.Resolution = new Vector2I(4, 4); parameters.ArraySize = 1; return(false); }