Example #1
0
        public void ChangeSize(Vec2i size)
        {
            Size = size;

            if (colorBuffer != -1)
            {
                TextureTarget textureTarget = multisampledColor ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D;
                Ogl.BindTexture(textureTarget, colorBuffer);
                if (multisampledColor)
                {
                    Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb, Size.x, Size.y, true);
                }
                else
                {
                    Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, Size.x, Size.y, 0, PixelFormat.Rgb, PixelType.UnsignedByte, null);
                }
            }

            if (depthBuffer != -1)
            {
                TextureTarget textureTarget = multisampledDepth ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D;
                Ogl.BindTexture(textureTarget, depthBuffer);
                if (multisampledDepth)
                {
                    Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.DepthComponent, Size.x, Size.y, true);
                }
                else
                {
                    Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, Size.x, Size.y, 0, PixelFormat.DepthComponent, PixelType.Float, null);
                }
            }
        }
Example #2
0
        protected override void CalculatePackedData()
        {
            packedData = new byte[6][];

            Ogl.BindTexture(TextureTarget.TextureCubeMap, handle);

            for (int i = 0; i < facesPixels.Length; i++)
            {
                Rgba32[] pixels = facesPixels[i];
                packedData[i] = new byte[pixels.Length * 4];
                for (int p = 0, packedIndex = 0; p < pixels.Length; p++)
                {
                    packedData[i][packedIndex++] = pixels[p].R;
                    packedData[i][packedIndex++] = pixels[p].G;
                    packedData[i][packedIndex++] = pixels[p].B;
                    packedData[i][packedIndex++] = pixels[p].A;
                }

                GL.TexImage2D(TextureTarget.TextureCubeMapPositiveX + i, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, packedData[i]);
            }

            Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear);
            Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear);
            Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge);
            Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge);
            Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapR, TextureWrapMode.ClampToEdge);
            //GL.GenerateMipmap(GenerateMipmapTarget.TextureCubeMap);
        }
Example #3
0
        public void SetSize(Vec2i size)
        {
            width  = size.x;
            height = size.y;

            Ogl.BindTexture(TextureTarget.Texture2D, handle);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, packedData);
            Ogl.GenerateMipmap(GenerateMipmapTarget.Texture2D);
        }
Example #4
0
        public void UseTexture(TextureUnit unit)
        {
            if (HasChanged)
            {
                HasChanged = false;
                CalculatePackedData();
            }

            Ogl.ActiveTexture(unit);
            Ogl.BindTexture(TextureType, Handle);
        }
Example #5
0
        public Texture2D(string path, string name)
        {
            this.handle = Ogl.GenTexture(name);

            Ogl.BindTexture(TextureTarget.Texture2D, handle);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat);

            LoadFromPath(path);
        }
Example #6
0
        private int LoadBitmapOnChar(int width, int height, IntPtr buffer)
        {
            int textureID = Ogl.GenTexture("Char");

            Ogl.BindTexture(TextureTarget.Texture2D, textureID);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.R8, width, height
                           , 0, PixelFormat.Red, PixelType.UnsignedByte, buffer);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear);
            return(textureID);
        }
Example #7
0
        public void SetSize(Vec2i resolution)
        {
            width  = resolution.x;
            height = resolution.y;

            Ogl.BindTexture(TextureTarget.Texture2D, handle);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, width, height, 0, PixelFormat.DepthComponent, PixelType.Float, null);

            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 });
        }
Example #8
0
        protected override void CalculatePackedData()
        {
            packedData = new byte[pixels.Length * 4];
            for (int i = 0, packedIndex = 0; i < pixels.Length; i++)
            {
                packedData[packedIndex++] = pixels[i].R;
                packedData[packedIndex++] = pixels[i].G;
                packedData[packedIndex++] = pixels[i].B;
                packedData[packedIndex++] = pixels[i].A;
            }

            Ogl.BindTexture(TextureTarget.Texture2D, handle);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, packedData);
            Ogl.GenerateMipmap(GenerateMipmapTarget.Texture2D);
        }
Example #9
0
        public DepthTexture(int width, int height, string name)
        {
            handle = Ogl.GenTexture(name);

            Ogl.BindTexture(TextureTarget.Texture2D, handle);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, width, height, 0, PixelFormat.DepthComponent, PixelType.Float, null);

            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 });

            this.width  = width;
            this.height = height;
        }
Example #10
0
        public Texture2D(int width, int height, string name)
        {
            handle = Ogl.GenTexture(name);

            Ogl.BindTexture(TextureTarget.Texture2D, handle);
            Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat);
            Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat);

            this.width  = width;
            this.height = height;

            pixels     = new Rgba32[width * height];
            packedData = new byte[pixels.Length * 4];
        }
Example #11
0
        public void AddDepthBuffer(bool multisampling)
        {
            if (depthBuffer != -1)
            {
                DevConsole.Log(LogType.Error, "Framebuffer already has depth buffer");
                return;
            }

            multisampledDepth = multisampling;
            TextureTarget textureTarget = multisampling ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D;

            depthBuffer = Ogl.GenTexture($"{name} - Depth");

            Ogl.BindTexture(textureTarget, depthBuffer);

            if (multisampling)
            {
                Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.DepthComponent, Size.x, Size.y, true);
            }
            else
            {
                Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, Size.x, Size.y, 0, PixelFormat.DepthComponent, PixelType.Float, null);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 });
            }


            Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle);
            Ogl.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, textureTarget, depthBuffer, 0);

            var error = Ogl.CheckFramebufferStatus(FramebufferTarget.Framebuffer);

            if (error != FramebufferErrorCode.FramebufferComplete)
            {
                DevConsole.Log(LogType.Warning, error);
            }

            Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
Example #12
0
        public void AddColorBuffer(bool multisampling)
        {
            if (colorBuffer != -1)
            {
                DevConsole.Log(LogType.Error, "Framebuffer already has color buffer");
                return;
            }

            multisampledColor = multisampling;
            TextureTarget textureTarget = multisampling ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D;

            colorBuffer = Ogl.GenTexture($"{name} - Color");

            Ogl.BindTexture(textureTarget, colorBuffer);
            if (multisampling)
            {
                Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb, Size.x, Size.y, true);
            }
            else
            {
                Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, Size.x, Size.y, 0, PixelFormat.Rgb, PixelType.UnsignedByte, null);

                Ogl.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat);
                Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat);
            }


            Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle);
            Ogl.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, textureTarget, colorBuffer, 0);

            var error = Ogl.CheckFramebufferStatus(FramebufferTarget.Framebuffer);

            if (error != FramebufferErrorCode.FramebufferComplete)
            {
                DevConsole.Log(LogType.Warning, error);
            }

            Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
Example #13
0
 public void FreeTexture()
 {
     Ogl.BindTexture(TextureType, 0);
 }
Example #14
0
 public void SetRawData(IntPtr data)
 {
     Ogl.BindTexture(TextureTarget.Texture2D, handle);
     Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, data);
     Ogl.GenerateMipmap(GenerateMipmapTarget.Texture2D);
 }