private bool Initialize(TextureManager manager, D3d.Format format, int size, bool dynamic, bool mipmap) { D3d.Pool d3dPool = D3d.Pool.Managed; D3d.Usage d3dUsage = manager.GetUsageFlags(dynamic, mipmap, false); try { d3dTexture = new D3d.CubeTexture(manager.Device.D3dDevice, size, manager.GetMipLevelCount(mipmap), d3dUsage, format, d3dPool); this.Initialize(manager, format, size, size, 6, d3dTexture); return(true); } catch (D3d.InvalidCallException e) { log.Warning("Unable to create cube texture: {0}", e.Message); } catch (D3d.OutOfVideoMemoryException e) { log.Warning("Unable to create cube texture: {0}", e.Message); } catch (OutOfMemoryException e) { log.Warning("Unable to create cube texture: {0}", e.Message); } return(false); }
private bool Initialize(TextureManager manager, D3d.Format format, int size, bool mipmap,int multisample ) { D3d.Pool d3dPool = D3d.Pool.Default; D3d.Usage d3dUsage = manager.GetUsageFlags( false,mipmap,true ); try { d3dTexture = new D3d.CubeTexture( manager.Device.D3dDevice,size,manager.GetMipLevelCount(mipmap),d3dUsage,format,d3dPool); // Create depth buffer. d3dDepthBuffer = manager.Device.D3dDevice.CreateDepthStencilSurface(size, size, manager.Device.Settings.depthBufferFormat, (D3d.MultiSampleType)multisample, 0, true); this.Initialize(manager, format, size,size,6, d3dTexture); return true; } catch (D3d.InvalidCallException e) { log.Warning("Unable to create render cube texture: {0}", e.Message); } catch (D3d.OutOfVideoMemoryException e) { log.Warning("Unable to create render cube texture: {0}", e.Message); } catch (OutOfMemoryException e) { log.Warning("Unable to create render cube texture: {0}", e.Message); } return false; }
private bool Initialize(TextureManager manager, D3d.Format format, int size, bool mipmap, int multisample) { D3d.Pool d3dPool = D3d.Pool.Default; D3d.Usage d3dUsage = manager.GetUsageFlags(false, mipmap, true); try { d3dTexture = new D3d.CubeTexture(manager.Device.D3dDevice, size, manager.GetMipLevelCount(mipmap), d3dUsage, format, d3dPool); // Create depth buffer. d3dDepthBuffer = manager.Device.D3dDevice.CreateDepthStencilSurface(size, size, manager.Device.Settings.depthBufferFormat, (D3d.MultiSampleType)multisample, 0, true); this.Initialize(manager, format, size, size, 6, d3dTexture); return(true); } catch (D3d.InvalidCallException e) { log.Warning("Unable to create render cube texture: {0}", e.Message); } catch (D3d.OutOfVideoMemoryException e) { log.Warning("Unable to create render cube texture: {0}", e.Message); } catch (OutOfMemoryException e) { log.Warning("Unable to create render cube texture: {0}", e.Message); } return(false); }
private bool Initialize(TextureManager manager, D3d.Format format, int size, bool dynamic, bool mipmap) { D3d.Pool d3dPool = D3d.Pool.Managed; D3d.Usage d3dUsage = manager.GetUsageFlags( dynamic,mipmap,false ); try { d3dTexture = new D3d.CubeTexture( manager.Device.D3dDevice,size,manager.GetMipLevelCount(mipmap),d3dUsage,format,d3dPool); this.Initialize(manager, format, size,size,6, d3dTexture); return true; } catch (D3d.InvalidCallException e) { log.Warning("Unable to create cube texture: {0}", e.Message); } catch (D3d.OutOfVideoMemoryException e) { log.Warning("Unable to create cube texture: {0}", e.Message); } catch (OutOfMemoryException e) { log.Warning("Unable to create cube texture: {0}", e.Message); } return false; }
public static void FillTexture(CubeTexture texture, Fill3DTextureCallback callbackFunction) { throw new NotImplementedException(); }
public static void FillTexture(CubeTexture texture, TextureShader textureShader) { throw new NotImplementedException(); }
/// <summary> /// /// </summary> private void CreateCubeTexture() { // 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.CubeTexture, d3dPixelFormat)) { d3dUsage |= D3D.Usage.Dynamic; dynamicTextures = true; } else { dynamicTextures = false; } } // check if mip maps are supported on hardware mipmapsHardwareGenerated = false; if (devCaps.TextureCaps.SupportsMipCubeMap) { if (((usage & TextureUsage.AutoMipMap) == TextureUsage.AutoMipMap) && numRequestedMipmaps > 0) { // use auto.gen. if available mipmapsHardwareGenerated = this.CanAutoGenMipMaps(d3dUsage, ResourceType.CubeTexture, 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(cubeTexture == null); Debug.Assert(texture == null); log.InfoFormat("Created normal texture {0}", this.Name); // create the texture cubeTexture = new D3D.CubeTexture( device, srcWidth, numMips, d3dUsage, d3dPixelFormat, d3dPool); // store base reference to the texture texture = cubeTexture; // set the final texture attributes D3D.SurfaceDescription desc = cubeTexture.GetLevelDescription(0); SetFinalAttributes(desc.Width, desc.Height, 1, D3DHelper.ConvertEnum(desc.Format)); if (mipmapsHardwareGenerated) texture.AutoGenerateFilterType = GetBestFilterMethod(); }
protected override void FreeInternalResourcesImpl() { if (texture != null) { texture.Dispose(); texture = null; } if (normTexture != null) { normTexture.Dispose(); normTexture = null; } if (cubeTexture != null) { cubeTexture.Dispose(); cubeTexture = null; } if (volumeTexture != null) { volumeTexture.Dispose(); volumeTexture = null; } foreach (IDisposable buf in managedObjects) buf.Dispose(); managedObjects.Clear(); }
/// <summary> /// /// </summary> private void LoadCubeTexture() { Debug.Assert(this.TextureType == TextureType.CubeMap); 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.SupportsMipCubeMap)) { // 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(cubeTexture == null); Debug.Assert(texture == null); // load the cube texture from the image data stream directly cubeTexture = TextureLoader.FromCubeStream(device, stream, (int)stream.Length, 0, numMips, D3D.Usage.None, D3D.Format.Unknown, pool, Filter.Triangle | Filter.Dither, Filter.Box, 0); // store off a base reference texture = cubeTexture; // set the image data attributes SurfaceDescription desc = cubeTexture.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; stream.Dispose(); } else { // Load from 6 separate files // Let Axiom use its own codecs ConstructCubeFaceNames(name); List<Image> images = new List<Image>(); int pos = name.LastIndexOf('.'); string ext = name.Substring(pos + 1); for (int i = 0; i < 6; ++i) { // find & load resource data into stream Stream stream = TextureManager.Instance.FindResourceData(cubeFaceNames[i]); images.Add(Image.FromStream(stream, ext)); stream.Dispose(); } LoadImages(images); } } // using }