Пример #1
0
 public FrameBufferObject(int width, int height, TextureUnit textureUnit, string description)
 {
     SetFrameBufferHandles(width, height, textureUnit, description);
     GL.GenTextures(1, out mFboTexture);
     SetupFrameBufferTexture();
     GL.Ext.GenFramebuffers(1, out fbo_handle);
 }
Пример #2
0
 public void Use(TextureUnit unit)
 {
     if(!Generated)
     {
         Handle = GL.GenTexture();
         GL.Enable(EnableCap.TextureCubeMapSeamless);
         GL.BindTexture(TextureTarget.TextureCubeMap, Handle);
         GL.TexImage2D(TextureTarget.TextureCubeMapPositiveX, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, BitmapPosX);
         GL.TexImage2D(TextureTarget.TextureCubeMapPositiveY, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, BitmapPosY);
         GL.TexImage2D(TextureTarget.TextureCubeMapPositiveZ, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, BitmapPosZ);
         GL.TexImage2D(TextureTarget.TextureCubeMapNegativeX, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, BitmapNegX);
         GL.TexImage2D(TextureTarget.TextureCubeMapNegativeY, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, BitmapNegY);
         GL.TexImage2D(TextureTarget.TextureCubeMapNegativeZ, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, BitmapNegZ);
         GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear);
         GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
         GL.GenerateMipmap(GenerateMipmapTarget.TextureCubeMap);
         GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
         GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
         GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapR, (int)TextureWrapMode.Repeat);
         FreeCPU();
         Generated = true;
     }
     GL.ActiveTexture(unit);
     GL.BindTexture(TextureTarget.TextureCubeMap, Handle);
 }
Пример #3
0
 public VertexElement(VertexElementFormat type, VertexElementUsage kind, TextureUnit unit)
     : this()
 {
     Type = type;
     Kind = kind;
     Unit = unit;
 }
Пример #4
0
 public Texture this[TextureUnit texUnit]
 {
     get
     {
         if (!_textures.ContainsKey(texUnit)) return null;
         return _textures[texUnit];
     }
 }
Пример #5
0
 public TerrainTexture(TextureUnit unit, int sideVertexCount, string sourceFormat, int maxLevels)
     : base(unit, GetImageArray(sourceFormat, maxLevels, sideVertexCount))
 {
     this.MinFilter = TextureMinFilter.Nearest;
     this.MagFilter = TextureMagFilter.Nearest;
     this.WrapS = TextureWrapMode.ClampToBorder;
     this.WrapT = TextureWrapMode.ClampToBorder;
 }
Пример #6
0
        /// <summary>
        /// Binds the <see cref="Sampler"/> to the <see cref="P:TextureUnit"/>.
        /// </summary>
        public Binding Bind(TextureUnit textureUnit)
        {
            this.VerifyAccess();

            this.textureUnit = textureUnit;
            GL.BindSampler(textureUnit, this);
            return new Binding(this);
        }
Пример #7
0
 public static void ActiveTexture(TextureUnit textureUnit)
 {
     if (textureUni != textureUnit)
     {
         textureUni = textureUnit;
         GL.ActiveTexture(textureUnit);
     }
 }
Пример #8
0
        public SamplerEffectUniform(EffectPass pass, ProgramUniform uniform, TextureUnit textureUnit)
            : base(pass, uniform)
        {
            Contract.Requires<ArgumentNullException>(pass != null);
            Contract.Requires<ArgumentNullException>(uniform != null);
            Contract.Requires<ArgumentOutOfRangeException>(textureUnit >= TextureUnit.Zero);

            this.TextureUnit = textureUnit;
        }
Пример #9
0
        public TextureArray(TextureUnit unit, ImageArray images)
            : base(unit, images)
        {
            dirtyRegions = new HashSet<Region2D>[images.Depth];

            for (int i = 0; i < dirtyRegions.Length; i++)
            {
                dirtyRegions[i] = new HashSet<Region2D>();
            }
        }
Пример #10
0
        public void ChangeResolution(int width, int height, TextureUnit textureUnit, string description)
        {
            //Detach(); // monster crash fix ?

            SetFrameBufferHandles(width, height, textureUnit, description);

            Detach();

            SetupFrameBufferTexture();
        }
Пример #11
0
        public void Use(TextureUnit unit)
        {
            if(!Generated)
            {
                Handle = GL.GenTexture();
                GL.BindTexture(TextureTarget.Texture2D, Handle);
                GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, Width, Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, Data);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);

                Generated = true;
            }
            GL.ActiveTexture(unit);
            GL.BindTexture(TextureTarget.Texture2D, Handle);
        }
Пример #12
0
        /// <summary>
        /// Loads the given image as a 32bpp RGBA texture.
        /// </summary>
        public static void LoadTexture(Bitmap bmpTex, TextureUnit slot)
        {
            Debug.WriteLine("loading array texture");
            BitmapData bmpDataTex = bmpTex.LockBits(
                new Rectangle(0, 0, bmpTex.Width, bmpTex.Height),
                ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            Debug.WriteLine("loaded " + bmpTex.Width + "x" + bmpTex.Height + " tex, binding");

            // set it as texture 0
            GL.ActiveTexture(slot);
            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba,
                bmpTex.Width, bmpTex.Height, 0,
                OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.UnsignedByte,
                bmpDataTex.Scan0);

            // clean up
            bmpTex.UnlockBits(bmpDataTex);
            Debug.WriteLine("array texture loaded");
        }
Пример #13
0
        public void Use(TextureUnit unit)
        {
            if(!Generated)
            {
                Handle = GL.GenTexture();
                GL.BindTexture(TextureTarget.Texture3D, Handle);

                GL.TexImage3D(TextureTarget.Texture3D, 0, PixelInternalFormat.R32ui, (int)Size.X, (int)Size.Y, (int)Size.Z, 0, OpenTK.Graphics.OpenGL4.PixelFormat.RedInteger, PixelType.UnsignedInt, new IntPtr(0));
                GL.TexParameter(TextureTarget.Texture3D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
                GL.TexParameter(TextureTarget.Texture3D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);

                GL.TexParameter(TextureTarget.Texture3D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
                GL.TexParameter(TextureTarget.Texture3D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
                GL.TexParameter(TextureTarget.Texture3D, TextureParameterName.TextureWrapR, (int)TextureWrapMode.Repeat);
                Generated = true;
            }
            GL.ActiveTexture(unit);
            GL.BindTexture(TextureTarget.Texture3D, Handle);
        }
Пример #14
0
 protected BoundTexture(TextureUnit unit, Image image)
     : base(image)
 {
     Initialize(unit);
 }
Пример #15
0
 public void BindTexture(TextureUnit samplerID)
 {
     GL.ActiveTexture(samplerID);
     GL.BindTexture(TextureTarget.Texture2D, this.TextureID);
 }
Пример #16
0
 /// <summary>
 /// Binds the texture to the given texture unit at its default texture target.
 /// </summary>
 /// <param name="unit">The texture unit to bind to.</param>
 public void Bind(TextureUnit unit)
 {
     GL.ActiveTexture(unit);
     Bind();
 }
Пример #17
0
 public TextureBinding(Texture source, TextureUnit textureSlot, TextureTarget target)
 {
     texture       = source;
     textureUnit   = textureSlot;
     textureTarget = target;
 }
Пример #18
0
 /// <summary>
 /// Set the active Texture unit
 /// glActiveTexture selects which texture unit subsequent texture state calls will affect. The number of texture units an implementation supports is implementation dependent, but must be at least 80.
 /// </summary>
 /// <param name="texUnit">Specifies which texture unit to make active. The number of texture units is implementation dependent, but must be at least 80. texture must be one of GL_TEXTUREi, where i ranges from 0 (GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1). The initial value is GL_TEXTURE0.</param>
 public static void ActiveTexture(TextureUnit texUnit)
 {
     Delegates.glActiveTexture(texUnit);
 }
Пример #19
0
 public void Bind(TextureUnit slot = TextureUnit.Texture0)
 {
     GL.ActiveTexture(slot);
     GL.BindTexture(TextureTarget.Texture2D, _handle);
 }
Пример #20
0
 internal static bool AtlasTextureIsBound(TextureUnit unit) => last_bound_texture[GetTextureUnitId(unit)] is TextureGLAtlas;
Пример #21
0
 internal static int GetTextureUnitId(TextureUnit unit) => (int)unit - (int)TextureUnit.Texture0;
Пример #22
0
 public TextureBinding(Texture texture, TextureUnit textureSlot, TextureTarget target)
 {
     textureId     = texture != null ? texture.Id : 0;
     textureUnit   = textureSlot;
     textureTarget = target;
 }
Пример #23
0
            public TextureInfo( ShaderProgram shader, String identifier,
                TextureUnit textureUnit = TextureUnit.Texture0 )
            {
                Shader = shader;
                Identifier = identifier;
                UniformLocation = GL.GetUniformLocation( Shader.Program, Identifier );
                TextureUnit = textureUnit;

                Shader.Use();

                int val = int.Parse( TextureUnit.ToString().Substring( "Texture".Length ) );

                GL.Uniform1( UniformLocation, val );

                CurrentTexture = null;
            }
Пример #24
0
 public partial void ClientActiveTexture([Flow(FlowDirection.In)] TextureUnit texture);
Пример #25
0
 public void AddTexture(TextureUnit texUnit, Texture texture)
 {
     _textures.Add(texUnit, texture);
 }
Пример #26
0
 public partial void MultiTexCoord1([Flow(FlowDirection.In)] TextureUnit target, [Flow(FlowDirection.In)] double s);
Пример #27
0
        /// <summary>
        /// Binds the <see cref="Texture"/> to the specified <paramref name="textureUnit"/>.
        /// </summary>
        /// <param name="textureUnit">The <see cref="TextureUnit"/> to bind to.</param>
        public virtual Binding Bind(TextureUnit textureUnit)
        {
            Contract.Requires<ArgumentOutOfRangeException>(textureUnit >= 0);

            this.VerifyAccess();

            this.textureUnit = textureUnit;
            OpenTK.Graphics.OpenGL4.TextureUnit unit = textureUnit;
            GL.ActiveTexture(textureUnit);
            GL.BindTexture(this.Target, this);
            return new Binding(this);
        }
Пример #28
0
 public TextureContainter(TextureContainerMx owner, TextureUnit textureUnit, int textureUnitNo)
 {
     _owner         = owner;
     _textureUnit   = textureUnit;
     _textureUnitNo = textureUnitNo;
 }
Пример #29
0
 public static void MultiTexCoord2Checked(TextureUnit unit, double s, double t)
 {
     if (SupportsFunction("glMultiTexCoord2dARB"))
         GL.Arb.MultiTexCoord2(unit, s, t);
     else
         GL.TexCoord2(s, t);
 }
Пример #30
0
 public static void MultiTexCoord2(TextureUnit target, ref Vector2d v)
 {
     GL.MultiTexCoord2(target, v.X, v.Y);
 }
Пример #31
0
 public void ActivateTextureUnit(TextureUnit textureUnit)
 {
     NativeGl.glActiveTexture((uint)textureUnit);
 }
Пример #32
0
 public static void MultiTexCoord3(TextureUnit target, ref Vector3d v)
 {
     GL.MultiTexCoord3(target, v.X, v.Y, v.Z);
 }
Пример #33
0
 public void Bind(TextureUnit textureSlot = TextureUnit.Texture0)
 {
     _gl.ActiveTexture(textureSlot);
     _gl.BindTexture(TextureTarget.Texture2D, _handle);
 }
Пример #34
0
 public static void MultiTexCoord4(TextureUnit target, ref Vector4d v)
 {
     GL.MultiTexCoord4(target, v.X, v.Y, v.Z, v.W);
 }
Пример #35
0
 public void Bind(TextureUnit t)
 {
     GL.ActiveTexture(t);
     GL.BindTexture(type, id);
 }
Пример #36
0
 public bool TryAddUniformTexture2D(int textureID, string uniformName, ShaderProg shader, TextureUnit unit)
 {
     if (shader.GetUniform(uniformName) != -1)
     {
         GL.ActiveTexture(unit);
         GL.BindTexture(TextureTarget.Texture2D, textureID);
         GL.Uniform1(shader.GetUniform(uniformName), (int)unit - 33984);//convertation of enum to int texture layer
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #37
0
 public void UnbindTexture(TextureUnit samplerID)
 {
     GL.ActiveTexture(samplerID);
     GL.BindTexture(TextureTarget.Texture2D, 0);
 }
Пример #38
0
 /// <summary>
 /// Creates a new instance of <see cref="QFontSharedState"/>
 /// </summary>
 /// <param name="defaultTextureUnit">The default texture unit</param>
 /// <param name="shaderVariables">The shader variables</param>
 public QFontSharedState(TextureUnit defaultTextureUnit, ShaderLocations shaderVariables)
 {
     DefaultTextureUnit = defaultTextureUnit;
     ShaderVariables    = shaderVariables;
 }
Пример #39
0
 public void Use(TextureUnit unit = TextureUnit.Texture0)
 {
     GL.ActiveTexture(unit);
     GL.BindTexture(TextureTarget.Texture2D, Handle);
 }
Пример #40
0
 public TextureAsset(string name, string filename, TextureUnit unit) : base(name, filename, unit)
 {
 }
Пример #41
0
        public void AddTexture( string identifier, TextureUnit unit )
        {
            myTextures.Add( identifier, new TextureInfo( this, identifier,
                unit ) );

            ErrorCheck( "addtexture" );
        }
Пример #42
0
 public void Bind(TextureUnit textureUnit = TextureUnit.Texture0)
 {
     GL.ActiveTexture(textureUnit);
     GL.BindTexture(TextureTarget.Texture2D, Handle);
 }
Пример #43
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TextureUniform"/> class.
 /// </summary>
 /// <param name="name">The name of this uniform.</param>
 /// <param name="texture">The initial <see cref="Texture"/> value of this uniform.</param>
 /// <param name="target">The initial <see cref="TextureUnit"/> used by this uniform.</param>
 public TextureUniform(string name, Texture texture, TextureUnit target = TextureUnit.Texture0)
 {
     this.name = name;
     this.Target = target;
     this.Texture = texture;
 }
Пример #44
0
 /// <summary>
 /// Binds the texture to the given texture unit at its default texture target.
 /// </summary>
 /// <param name="unit">The texture unit to bind to.</param>
 public void Bind(TextureUnit unit)
 {
     GL.ActiveTexture(unit);
     Bind();
 }
Пример #45
0
 public void Use(TextureUnit unit)
 {
     if(!Generated)
     {
         ImageTextureTarget = TextureTarget.Texture2D;
         if(IsDDS)
         {
             uint o = 0;
             ImageDDS.LoadFromByteArray(Bitmap, out o, out ImageTextureTarget);
             Handle = (int)o;
             GL.BindTexture(ImageTextureTarget, Handle);
         }
         else
         {
             Handle = GL.GenTexture();
             GL.BindTexture(ImageTextureTarget, Handle);
             GL.TexImage2D(ImageTextureTarget, 0, PixelInternalFormat.Rgba, Size.Width, Size.Height, 0, OpenTK.Graphics.OpenGL4.PixelFormat.Bgra, PixelType.UnsignedByte, Bitmap);
         }
         if(UseNearestFilter)
         {
             GL.TexParameter(ImageTextureTarget, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
             GL.TexParameter(ImageTextureTarget, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
         }
         else
         {
             GL.TexParameter(ImageTextureTarget, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear);
             GL.TexParameter(ImageTextureTarget, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
             GL.TexParameter(ImageTextureTarget, TextureParameterName.GenerateMipmap, (int)TextureMagFilter.Linear);
             GL.GenerateMipmap((GenerateMipmapTarget)ImageTextureTarget);
             float maxAniso;
             GL.GetFloat((GetPName)OldGL.ExtTextureFilterAnisotropic.MaxTextureMaxAnisotropyExt, out maxAniso);
             GL.TexParameter(ImageTextureTarget, (TextureParameterName)OldGL.ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, maxAniso);
             //GL.TexParameter(ImageTextureTarget, (TextureParameterName)0x9366, 0x8008);
         }
         GL.TexParameter(ImageTextureTarget, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
         GL.TexParameter(ImageTextureTarget, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
         Generated = true;
         Bitmap = null;
     }
     GL.ActiveTexture(unit);
     GL.BindTexture(ImageTextureTarget, Handle);
 }
Пример #46
0
 public static void MultiTexCoord2(TextureUnit target, ref Vector2 v)
 {
     GL.MultiTexCoord2(target, v.X, v.Y);
 }
Пример #47
0
 public static void Unbind(TextureUnit textureUnit = TextureUnit.Texture0)
 {
     GL.ActiveTexture(textureUnit);
     GL.BindTexture(TextureTarget.Texture2D, 0);
 }
Пример #48
0
 public static void MultiTexCoord4(TextureUnit target, ref Vector4 v)
 {
     GL.MultiTexCoord4(target, v.X, v.Y, v.Z, v.W);
 }
Пример #49
0
			public bool ForceState; // the next GL_State will ignore glStateBits and set everything.

			public State()
			{
				int count = TextureUnits.Length;

				for(int i = 0; i < count; i++)
				{
					TextureUnits[i] = new TextureUnit();
				}
			}
Пример #50
0
 /* bind this texture for use in openGL calls */
 public void Bind(TextureUnit unit, Action inner)
 {
     GL.ActiveTexture(unit);
     Bind(inner);
 }
Пример #51
0
 public static void MultiTexCoord3(TextureUnit target, ref Vector3 v)
 {
     GL.MultiTexCoord3(target, v.X, v.Y, v.Z);
 }
Пример #52
0
 public void BindTexture(TextureUnit texUnit)
 {
     mesh.BindTexture(texUnit);
 }
Пример #53
0
 /// <summary>
 /// Sets a uniform texture. Shader must be called beforehand.
 /// </summary>
 public void SetUniform(string Name, TextureUnit Unit)
 {
     int loc = GL.GetUniformLocation(this.Program, Name);
     GL.Uniform1(loc, (int)Unit - (int)TextureUnit.Texture0);
 }
Пример #54
0
 public partial uint BindTexGenParameter([Flow(FlowDirection.In)] TextureUnit unit, [Flow(FlowDirection.In)] TextureCoordName coord, [Flow(FlowDirection.In)] TextureGenParameter value);
Пример #55
0
        /// <summary>
        /// Unbinds the <see cref="Texture"/> from the specified <paramref name="textureUnit"/>.
        /// </summary>
        /// <param name="textureUnit">The <see cref="TextureUnit"/> to unbind from.</param>
        public virtual void Unbind(TextureUnit textureUnit)
        {
            Contract.Requires<ArgumentOutOfRangeException>(textureUnit >= 0);

            this.VerifyAccess();

            GL.ActiveTexture(textureUnit);
            GL.BindTexture(this.Target, 0);
        }
Пример #56
0
 public partial uint BindTextureUnitParameter([Flow(FlowDirection.In)] TextureUnit unit, [Flow(FlowDirection.In)] EXT value);
Пример #57
0
 public void BindTexture(TextureUnit textureUnit)
 {
     GL.ActiveTexture( textureUnit );
     GL.BindTexture( TextureTarget.Texture3D, this.handle );
     GL.ActiveTexture( TextureUnit.Texture0 );
 }
Пример #58
0
 public partial uint BindTextureUnitParameter([Flow(FlowDirection.In)] TextureUnit unit, [Flow(FlowDirection.In)] VertexShaderTextureUnitParameter value);
Пример #59
0
 public static void ActiveTextureChecked(TextureUnit unit)
 {
     if (SupportsFunction("glActiveTextureARB")) GL.Arb.ActiveTexture(unit);
 }
Пример #60
0
        public override void Draw(double deltaTime)
        {
            RenderTexture rt = RenderTexture;

            if (rt == null)
            {
                if (Camera == null)
                {
                    return;
                }
                else
                {
                    rt = Camera.TargetTexture;
                }
            }
            if (!rt.Loaded)
            {
                return;
            }

            // HDR抽出
            hdrRT.Bind(Color4.Black);
            hdrShader.UseShader();
            hdrShader.SetParameter(hdrShader.loc_resolution, hdrRT.Size.ToVector2().Inverse());
            hdrShader.SetParameter(hdrShader.loc_mvp, ref orthoMatrix, false);
            hdrShader.SetParameter(hdrShader.loc_threshold, Threshold);
            hdrShader.SetParameter(TextureUnit.Texture0, rt.ColorDst0);
            Drawer.DrawTextureMesh();
            hdrShader.UnuseShader();

            // HDR画像のぼかし画像を生成
            for (var i = 0; i < BlurNum; i++)
            {
                if (i == 0)
                {
                    blurs[i].SrcTexture = hdrRT.ColorDst0;
                }
                else
                {
                    blurs[i].SrcTexture = blurRTs[i - 1].ColorDst0;
                }
                blurs[i].Draw(deltaTime);
            }

            // Bloom処理
            bloomRT.Bind(Color4.Black);
            bloomShader.UseShader();
            bloomShader.SetParameter(bloomShader.loc_resolution, bloomRT.Size.ToVector2().Inverse());
            bloomShader.SetParameter(bloomShader.loc_mvp, ref orthoMatrix, false);
            bloomShader.SetParameter(bloomShader.loc_intensity, Intensity);
            bloomShader.SetParameter(TextureUnit.Texture0, rt.ColorDst0);
            var units = new TextureUnit[]
            {
                TextureUnit.Texture1,
                TextureUnit.Texture2,
                TextureUnit.Texture3,
                TextureUnit.Texture4,
                TextureUnit.Texture5,
            };

            for (var i = 0; i < 5; i++)
            {
                if (i < BlurNum)
                {
                    bloomShader.SetParameter(units[i], blurRTs[i].ColorDst0);
                }
                else
                {
                    bloomShader.SetParameter(units[i], bloomShader.black);
                }
            }
            Drawer.DrawTextureMesh();
            bloomShader.UnuseShader();

            // 書き出し
            rt.Bind();
            Drawer.DrawTexture(bloomRT.ColorDst0);

            GL.BindTexture(TextureTarget.Texture2D, 0);
        }