/// <summary> /// /// </summary> //private void CreateDepthStencil() { // // Get the format of the depth stencil surface of our main render target. // D3D.Surface surface = device.DepthStencilSurface; // D3D.SurfaceDescription desc = surface.Description; // // Create a depth buffer for our render target, it must be of // // the same format as other targets !!! // depthBuffer = device.CreateDepthStencilSurface( // srcWidth, // srcHeight, // // TODO: Verify this goes through, this is ridiculous // (D3D.DepthFormat)desc.Format, // desc.MultiSampleType, // desc.MultiSampleQuality, // false); //} private void CreateNormalTexture() { // we must have those defined here Debug.Assert(srcWidth > 0 && srcHeight > 0); // determine which D3D9 pixel format we'll use D3D.Format d3dPixelFormat = ChooseD3DFormat(); // at this point, Ogre checks to see if this texture format works, // but we go on and figure out the rest of our info first. // set the appropriate usage based on the usage of this texture D3D.Usage d3dUsage = ((usage & TextureUsage.RenderTarget) == TextureUsage.RenderTarget) ? D3D.Usage.RenderTarget : D3D.Usage.None; // how many mips to use? int numMips = numRequestedMipmaps + 1; // Check dynamic textures if ((usage & TextureUsage.Dynamic) != 0) { if (CanUseDynamicTextures(d3dUsage, ResourceType.Textures, d3dPixelFormat)) { d3dUsage |= D3D.Usage.Dynamic; dynamicTextures = true; } else { dynamicTextures = false; } } // check if mip maps are supported on hardware mipmapsHardwareGenerated = false; if (devCaps.TextureCaps.SupportsMipMap) { if (((usage & TextureUsage.AutoMipMap) == TextureUsage.AutoMipMap) && numRequestedMipmaps > 0) { // use auto.gen. if available mipmapsHardwareGenerated = this.CanAutoGenMipMaps(d3dUsage, ResourceType.Textures, d3dPixelFormat); if (mipmapsHardwareGenerated) { d3dUsage |= D3D.Usage.AutoGenerateMipMap; numMips = 0; } } } else { // no mip map support for this kind of texture numMipmaps = 0; numMips = 1; } // check texture requirements D3D.TextureRequirements texRequire = new D3D.TextureRequirements(); texRequire.Width = srcWidth; texRequire.Height = srcHeight; texRequire.NumberMipLevels = numMips; texRequire.Format = d3dPixelFormat; // NOTE: Although texRequire is an out parameter, it actually does // use the data passed in with that object. TextureLoader.CheckTextureRequirements(device, d3dUsage, Pool.Default, out texRequire); numMips = texRequire.NumberMipLevels; d3dPixelFormat = texRequire.Format; Debug.Assert(normTexture == null); Debug.Assert(texture == null); log.InfoFormat("Created normal texture {0}", this.Name); // create the texture normTexture = new D3D.Texture( device, srcWidth, srcHeight, numMips, d3dUsage, d3dPixelFormat, d3dPool); // store base reference to the texture texture = normTexture; // set the final texture attributes D3D.SurfaceDescription desc = normTexture.GetLevelDescription(0); SetFinalAttributes(desc.Width, desc.Height, 1, D3DHelper.ConvertEnum(desc.Format)); if (mipmapsHardwareGenerated) texture.AutoGenerateFilterType = GetBestFilterMethod(); }
/// <summary> /// /// </summary> private void LoadNormalTexture() { Debug.Assert(textureType == TextureType.OneD || textureType == TextureType.TwoD); using (AutoTimer auto = new AutoTimer(textureLoadMeter)) { // DDS load? if (name.EndsWith(".dds")) { Stream stream = TextureManager.Instance.FindResourceData(name); // use D3DX to load the image directly from the stream int numMips = numRequestedMipmaps + 1; // check if mip map volume textures are supported if (!(devCaps.TextureCaps.SupportsMipMap)) { // no mip map support for this kind of textures :( numMipmaps = 0; numMips = 1; } // Determine D3D pool to use D3D.Pool pool; if ((usage & TextureUsage.Dynamic) != 0) pool = D3D.Pool.Default; else pool = D3D.Pool.Managed; Debug.Assert(normTexture == null); Debug.Assert(texture == null); // Trace.TraceInformation("Loaded normal texture {0}", this.Name); normTexture = TextureLoader.FromStream(device, stream, 0, 0, numMips, D3D.Usage.None, D3D.Format.Unknown, pool, Filter.Triangle | Filter.Dither, Filter.Box, 0); // store a ref for the base texture interface texture = normTexture; // set the image data attributes SurfaceDescription desc = normTexture.GetLevelDescription(0); d3dPool = desc.Pool; // set src and dest attributes to the same, we can't know SetSrcAttributes(desc.Width, desc.Height, 1, D3DHelper.ConvertEnum(desc.Format)); SetFinalAttributes(desc.Width, desc.Height, 1, D3DHelper.ConvertEnum(desc.Format)); isLoaded = true; internalResourcesCreated = true; } else { // find & load resource data into stream Stream stream = TextureManager.Instance.FindResourceData(name); int pos = name.LastIndexOf('.'); string ext = name.Substring(pos + 1); Image img = Image.FromStream(stream, ext); LoadImage(img); stream.Dispose(); } } // using }