예제 #1
0
        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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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);
        }
예제 #4
0
 public Result CreateImageView(MgImageViewCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgImageView pView)
 {
     pView = new AmtImageView(pCreateInfo);
     return(Result.SUCCESS);
 }
예제 #5
0
        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,
                    }
                };
            }
        }
예제 #6
0
 public Result CreateImageView(MgImageViewCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgImageView pView)
 {
     throw new NotImplementedException();
 }