/// <summary> /// Generates the normal map. /// </summary> /// <param name="image">The image.</param> /// <param name="libraryData">The library data.</param> /// <param name="request">The request.</param> /// <exception cref="TexLibraryException">Failed to generate the normal map</exception> public void GenerateNormalMap(TexImage image, DxtTextureLibraryData libraryData, NormalMapGenerationRequest request) { Log.Debug("Generating Normal Map ... "); ScratchImage scratchImage = new ScratchImage(); HRESULT hr = Utilities.ComputeNormalMap(libraryData.DxtImages, libraryData.DxtImages.Length, ref libraryData.Metadata, CNMAP_FLAGS.CNMAP_CHANNEL_RED, request.Amplitude, DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM, scratchImage); if (hr != HRESULT.S_OK) { Log.Error("Failed to generate the normal map : " + hr); throw new TextureToolsException("Failed to generate the normal map : " + hr); } // Creating new TexImage with the normal map data. request.NormalMap = new TexImage(); DxtTextureLibraryData normalMapLibraryData = new DxtTextureLibraryData(); request.NormalMap.LibraryData[this] = normalMapLibraryData; normalMapLibraryData.DxtImages = scratchImage.GetImages(); normalMapLibraryData.Metadata = scratchImage.metadata; normalMapLibraryData.Image = scratchImage; UpdateImage(request.NormalMap, normalMapLibraryData); request.NormalMap.DisposingLibrary = this; }