public Result CreateImageView(MgImageViewCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgImageView pView) { if (pCreateInfo == null) { throw new ArgumentNullException("pCreateInfo"); } if (pCreateInfo.Image == null) { throw new ArgumentNullException("pCreateInfo.Image", "pCreateInfo.Image is null"); } var originalImage = (IGLImage)pCreateInfo.Image; if (originalImage == null) { throw new InvalidCastException("pCreateInfo.Image is not GLImage"); } if (pCreateInfo.SubresourceRange == null) { throw new ArgumentNullException("pCreateInfo.SubresourceRange", "pCreateInfo.SubresourceRange is null"); } int textureId = mEntrypoint.ImageView.CreateImageView(originalImage, pCreateInfo); pView = new GLImageView(textureId, mEntrypoint.ImageView); return(Result.SUCCESS); }
public AmtImageView(MgImageViewCreateInfo pCreateInfo) { if (pCreateInfo == null) { throw new ArgumentNullException(nameof(pCreateInfo)); } if (pCreateInfo.Image == null) { throw new ArgumentNullException(nameof(pCreateInfo.Image)); } var bImage = (AmtImage)pCreateInfo.Image; mImageView = bImage.OriginalTexture.CreateTextureView( AmtFormatExtensions.GetPixelFormat(pCreateInfo.Format), TranslateTextureType(pCreateInfo.ViewType), GenerateLevelRange(pCreateInfo.SubresourceRange), GenerateSliceRange(pCreateInfo.SubresourceRange)); }
public int CreateImageView(IGLImage image, MgImageViewCreateInfo pCreateInfo) { var internalFormat = mImgFormat.GetGLFormat(pCreateInfo.Format, true); var textureTarget = GetGLTextureTarget(pCreateInfo.ViewType); int textureId = GL.GenTexture(); mErrHandler.LogGLError("GL.CreateTextures (AFTER)"); GL.TextureView( textureId, textureTarget, image.OriginalTextureId, (PixelInternalFormat)internalFormat.InternalFormat, (int)pCreateInfo.SubresourceRange.BaseMipLevel, (int)pCreateInfo.SubresourceRange.LevelCount, (int)pCreateInfo.SubresourceRange.BaseArrayLayer, (int)pCreateInfo.SubresourceRange.LayerCount); mErrHandler.LogGLError("GL.TextureView (AFTER)"); return(textureId); }
public Result CreateImageView(MgImageViewCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgImageView pView) { pView = new AmtImageView(pCreateInfo); return(Result.SUCCESS); }
void loadTexture(string fileName, MgFormat format) { IMgImageTools imageTools = new Magnesium.MgImageTools(); IMgTextureGenerator optimizer = new Magnesium.MgStagingBufferOptimizer(mManager.Configuration, imageTools); IKTXTextureLoader loader = new KTXTextureManager(optimizer, mManager.Configuration); using (var fs = System.IO.File.OpenRead(fileName)) { var result = loader.Load(fs); // Create sampler // In Vulkan textures are accessed by samplers // This separates all the sampling information from the // texture data // This means you could have multiple sampler objects // for the same texture with different settings // Similar to the samplers available with OpenGL 3.3 var samplerCreateInfo = new MgSamplerCreateInfo { MagFilter = MgFilter.LINEAR, MinFilter = MgFilter.LINEAR, MipmapMode = MgSamplerMipmapMode.LINEAR, AddressModeU = MgSamplerAddressMode.REPEAT, AddressModeV = MgSamplerAddressMode.REPEAT, AddressModeW = MgSamplerAddressMode.REPEAT, MipLodBias = 0.0f, CompareOp = MgCompareOp.NEVER, MinLod = 0.0f, BorderColor = MgBorderColor.FLOAT_OPAQUE_WHITE, }; // Set max level-of-detail to mip level count of the texture var mipLevels = (uint)result.Source.Mipmaps.Length; samplerCreateInfo.MaxLod = (float)mipLevels; // Enable anisotropic filtering // This feature is optional, so we must check if it's supported on the device //mManager.Configuration.Partition. if (mFeatures.SamplerAnisotropy) { // Use max. level of anisotropy for this example samplerCreateInfo.MaxAnisotropy = mPhysicalDeviceProperties.Limits.MaxSamplerAnisotropy; samplerCreateInfo.AnisotropyEnable = true; } else { // The device does not support anisotropic filtering samplerCreateInfo.MaxAnisotropy = 1.0f; samplerCreateInfo.AnisotropyEnable = false; } IMgSampler sampler; var err = mManager.Configuration.Device.CreateSampler(samplerCreateInfo, null, out sampler); Debug.Assert(err == Result.SUCCESS); // Create image view // Textures are not directly accessed by the shaders and // are abstracted by image views containing additional // information and sub resource ranges var viewCreateInfo = new MgImageViewCreateInfo { Image = result.TextureInfo.Image, // TODO : FETCH VIEW TYPE FROM KTX ViewType = MgImageViewType.TYPE_2D, Format = result.Source.Format, Components = new MgComponentMapping { R = MgComponentSwizzle.R, G = MgComponentSwizzle.G, B = MgComponentSwizzle.B, A = MgComponentSwizzle.A, }, // The subresource range describes the set of mip levels (and array layers) that can be accessed through this image view // It's possible to create multiple image views for a single image referring to different (and/or overlapping) ranges of the image SubresourceRange = new MgImageSubresourceRange { AspectMask = MgImageAspectFlagBits.COLOR_BIT, BaseMipLevel = 0, BaseArrayLayer = 0, LayerCount = 1, LevelCount = mipLevels, } }; IMgImageView view; err = mManager.Configuration.Device.CreateImageView(viewCreateInfo, null, out view); Debug.Assert(err == Result.SUCCESS); texture = new Texture { image = result.TextureInfo.Image, imageLayout = result.TextureInfo.ImageLayout, deviceMemory = result.TextureInfo.DeviceMemory, sampler = sampler, width = result.Source.Width, height = result.Source.Height, mipLevels = mipLevels, view = view, descriptor = new MgDescriptorImageInfo { ImageLayout = MgImageLayout.GENERAL, ImageView = view, Sampler = sampler, } }; } }
public Result CreateImageView(MgImageViewCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgImageView pView) { throw new NotImplementedException(); }