コード例 #1
0
        /// <summary>
        /// Проверить текстуру кадрового буфера
        /// </summary>
        private void CheckSurfaceTexture()
        {
            if (GlSurfaceTextureId <= 0 || GlSurfaceFramebuffer <= 0)
            {
                GlSurfaceFramebuffer = GL.GenFramebuffer();
                GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, GlSurfaceFramebuffer);

                GlSurfaceTextureId = GL.GenTexture();
                GL.BindTexture(TextureTarget.Texture2D, GlSurfaceTextureId);

                GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb,
                              ViewBehaviourConsts.BASE_SURFACE_WIDTH, ViewBehaviourConsts.BASE_SURFACE_HEIGHT, 0, PixelFormat.Rgb,
                              PixelType.UnsignedByte, IntPtr.Zero);

                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter,
                                (int)TextureMinFilter.Nearest);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter,
                                (int)TextureMinFilter.Nearest);

                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS,
                                (int)TextureWrapMode.Clamp);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT,
                                (int)TextureWrapMode.Clamp);

                GL.FramebufferTexture2D(FramebufferTarget.DrawFramebuffer, FramebufferAttachment.ColorAttachment0,
                                        TextureTarget.Texture2D, GlSurfaceTextureId, 0);

                _glSurfaceDrawBuffers = DrawBufferMode.ColorAttachment0;
                GL.DrawBuffer(_glSurfaceDrawBuffers);
            }
        }
コード例 #2
0
        public void AttachColorTexture(int index, DeviceTexture2D texture)
        {
            Bind();
            Debug.Assert(texture is OpenGLESTexture2D);
            OpenGLESTexture2D glTex = (OpenGLESTexture2D)texture;

            _colorTextures[index] = glTex;
            GL.ActiveTexture(TextureUnit.Texture0);
            Utilities.CheckLastGLES3Error();
            glTex.Bind();
            GL.FramebufferTexture2D(
                FramebufferTarget.Framebuffer,
                FramebufferAttachment.ColorAttachment0,
                TextureTarget2d.Texture2D,
                glTex.ID,
                0);
            GL.BindTexture(TextureTarget.Texture2D, 0);
            Utilities.CheckLastGLES3Error();
            DrawBufferMode mode = DrawBufferMode.ColorAttachment0 + index;

            GL.DrawBuffers(1, ref mode);
            Utilities.CheckLastGLES3Error();

            Unbind();
        }
コード例 #3
0
        public void ApplyPostRender()
        {
            // Removed thread guards because of performance
            //DefaultOpenTKBackendPlugin.GuardSingleThreadState();

            if (!this.pendingPostRender)
            {
                return;
            }

            // Resolve multisampling to the main FBO
            if (this.samples > 0)
            {
                GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, this.handleMsaaFBO);
                GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, this.handleMainFBO);
                for (int i = 0; i < this.targetInfos.Count; i++)
                {
                    GL.ReadBuffer((ReadBufferMode)((int)ReadBufferMode.ColorAttachment0 + i));

                    DrawBufferMode mode = (DrawBufferMode)((int)DrawBufferMode.ColorAttachment0 + i);
                    GL.DrawBuffers(1, ref mode);

                    GL.BlitFramebuffer(
                        0, 0, this.targetInfos.Data[i].Target.Width, this.targetInfos.Data[i].Target.Height,
                        0, 0, this.targetInfos.Data[i].Target.Width, this.targetInfos.Data[i].Target.Height,
                        ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest);
                }
            }

            // Generate mipmaps for the target textures
            int lastTexId = -1;

            for (int i = 0; i < this.targetInfos.Count; i++)
            {
                if (!this.targetInfos.Data[i].Target.HasMipmaps)
                {
                    continue;
                }

                if (lastTexId == -1)
                {
                    GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
                    GL.GetInteger(GetPName.TextureBinding2D, out lastTexId);
                }

                int texId = this.targetInfos.Data[i].Target.Handle;
                GL.BindTexture(TextureTarget.Texture2D, texId);
                GL.GenerateMipmap(TextureTarget.Texture2D);
            }

            // Reset OpenGL state
            if (lastTexId != -1)
            {
                GL.BindTexture(TextureTarget.Texture2D, lastTexId);
            }
            ApplyGLBind(curBound);

            this.pendingPostRender = false;
        }
コード例 #4
0
        public static void DrawBuffer(DrawBufferMode mode)
        {
            GL.DrawBuffer(mode);

            if (enableErrorCheck)
            {
                LogErrors();
            }
        }
コード例 #5
0
ファイル: Gbuffer.cs プロジェクト: LongJohnCoder/NMSMV
        //STATIC HELPER METHODS

        public static void copyChannel(int from_fbo, int to_fbo, int sourceSizeX, int sourceSizeY, int destSizeX, int destSizeY,
                                       ReadBufferMode from_channel, DrawBufferMode to_channel)
        {
            GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, from_fbo);
            GL.ReadBuffer(from_channel); //Read color
            GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, to_fbo);
            GL.DrawBuffer(to_channel);   //Write to blur1

            GL.BlitFramebuffer(0, 0, sourceSizeX, sourceSizeY, 0, 0, destSizeX, destSizeY,
                               ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Linear);
        }
コード例 #6
0
        private static void ApplyGLBind(NativeRenderTarget target)
        {
            if (target == null)
            {
                GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
                GL.ReadBuffer(ReadBufferMode.Back);

                DrawBufferMode mode = DrawBufferMode.Back;
                GL.DrawBuffers(1, ref mode);
            }
            else
            {
                GL.BindFramebuffer(FramebufferTarget.Framebuffer, target.samples > 0 ? target.handleMsaaFBO : target.handleMainFBO);
                DrawBufferMode[] buffers = new DrawBufferMode[target.targetInfos.Count];
                for (int i = 0; i < buffers.Length; i++)
                {
                    buffers[i] = (DrawBufferMode)((int)DrawBufferMode.ColorAttachment0 + i);
                }
                GL.DrawBuffers(buffers.Length, buffers);
            }
        }
コード例 #7
0
 public void DrawBuffer(DrawBufferMode mode)
 {
     gl.glDrawBuffer((int)mode);
     CheckException();
 }
コード例 #8
0
ファイル: GLCore.cs プロジェクト: whztt07/DeltaEngine
		public static void DrawBuffer(DrawBufferMode mode)
		{
			glDrawBuffer deleg = BaseGraphicsContext.Current.Loader.Get<glDrawBuffer>();
			if (deleg != null)
				deleg(mode);
		}
コード例 #9
0
 public static Reaction <T> DrawBuffer <T> (this Reaction <T> render, DrawBufferMode mode)
 {
     return(render.DrawBuffer(i => mode));
 }
コード例 #10
0
ファイル: Context.cs プロジェクト: rboissel/ratchet-opengl
 public void DrawBuffer(DrawBufferMode DrawBufferMode)
 {
     _glDrawBuffer((int)DrawBufferMode);
 }
コード例 #11
0
 internal static extern void glDrawBuffer(DrawBufferMode mode);
コード例 #12
0
ファイル: Framebuffer.cs プロジェクト: kindex/labyrinth2
        internal void Bind()
        {
            GL.BindFramebuffer(FramebufferType.Framebuffer, framebuffer);
            GL.Viewport(0, 0, width, height);

            int attachmentCount = 0;
            int temp = attachments;
            while (temp != 0)
            {
                attachmentCount++;
                temp &= temp - 1;
            }

            if (attachmentCount == 0)
            {
                GL.DrawBuffer(DrawBufferMode.None);
            }
            else if (attachmentCount == 1)
            {
                DrawBufferMode drawBuffer = DrawBufferMode.Color0;
                temp = attachments;
                while (temp != 1)
                {
                    temp >>= 1;
                    drawBuffer++;

                }
                GL.DrawBuffer(drawBuffer);
            }
            else
            {
                DrawBufferMode[] buffers = new DrawBufferMode[attachmentCount];

                DrawBufferMode drawBuffer = DrawBufferMode.Color0;
                temp = attachments;

                for (int i = 0; i < attachmentCount; i++)
                {
                    while ((temp & 1) != 1)
                    {
                        temp >>= 1;
                    }
                    temp >>= 1;

                    buffers[i] = drawBuffer++;
                }

                GL.DrawBuffers(buffers);
            }
        }
コード例 #13
0
ファイル: GLFramebuffer.cs プロジェクト: Phyyl/Vildmark
 public void DrawBuffer(DrawBufferMode drawBufferMode)
 {
     GL.DrawBuffer(drawBufferMode);
 }
コード例 #14
0
ファイル: OpenGLNative.cs プロジェクト: suprafun/veldrid
 public static void glDrawBuffer(DrawBufferMode mode) => p_glDrawBuffer(mode);
コード例 #15
0
ファイル: Gbuffer.cs プロジェクト: LongJohnCoder/NMSMV
        public static void copyChannel(int fbo, int sourceSizeX, int sourceSizeY, ReadBufferMode from_channel, DrawBufferMode to_channel)
        {
            GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, fbo);
            GL.ReadBuffer(from_channel); //Read color
            GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, fbo);
            GL.DrawBuffer(to_channel);   //Write to blur1

            //Method 1: Use Blitbuffer
            GL.BlitFramebuffer(0, 0, sourceSizeX, sourceSizeY, 0, 0, sourceSizeX, sourceSizeY,
                               ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest);
        }
コード例 #16
0
 public void ReadBuffer(DrawBufferMode drawBufferMode)
 {
     NativeMethods.ReadBuffer(drawBufferMode);
     CheckForError();
 }
コード例 #17
0
 public unsafe static void NamedFramebufferDrawBuffer(uint framebuffer, DrawBufferMode buf)
 => glNamedFramebufferDrawBuffer(framebuffer, buf);
コード例 #18
0
 public static extern void DrawBuffer( DrawBufferMode mode );
コード例 #19
0
ファイル: GLCore.cs プロジェクト: nagyist/Pencil.Gaming
		internal static extern void glDrawBuffer(DrawBufferMode mode);
コード例 #20
0
ファイル: Buffer.cs プロジェクト: abasilak/phd
 public static void draw(DrawBufferMode mode)
 {
     GL.DrawBuffer(mode);
 }
コード例 #21
0
 internal static extern void ReadBuffer(DrawBufferMode drawBufferMode);
コード例 #22
0
ファイル: GL.cs プロジェクト: Wiladams/NewTOAPIA
 public static void DrawBuffer(DrawBufferMode mode)
 {
     gl.glDrawBuffer((int)mode);
 }
コード例 #23
0
		public static void FramebufferDrawBufferEXT(UInt32 framebuffer, DrawBufferMode mode)
		{
			Debug.Assert(Delegates.pglFramebufferDrawBufferEXT != null, "pglFramebufferDrawBufferEXT not implemented");
			Delegates.pglFramebufferDrawBufferEXT(framebuffer, (Int32)mode);
			CallLog("glFramebufferDrawBufferEXT({0}, {1})", framebuffer, mode);
			DebugCheckErrors();
		}
コード例 #24
0
 public void DrawBuffer(DrawBufferMode mode)
 {
     using (new Bind(this))
         GL.DrawBuffer(mode);
 }
コード例 #25
0
 public static void glDrawBuffer(DrawBufferMode buf)
 {
     i_OpenGL1_0.glDrawBuffer(buf);
 }
コード例 #26
0
 public unsafe static void DrawBuffer(DrawBufferMode mode)
 => glDrawBuffer(mode);
コード例 #27
0
ファイル: Gl.VERSION_1_0.cs プロジェクト: MagmaiKH/OpenGL.Net
		public static void DrawBuffer(DrawBufferMode buf)
		{
			Debug.Assert(Delegates.pglDrawBuffer != null, "pglDrawBuffer not implemented");
			Delegates.pglDrawBuffer((Int32)buf);
			CallLog("glDrawBuffer({0})", buf);
			DebugCheckErrors();
		}
コード例 #28
0
 public void DrawBuffer(DrawBufferMode Buffer)
 {
     //GL.DrawBuffer(Buffer);
     GL.NamedFramebufferDrawBuffer(ID, Buffer);
 }