Axiom.RenderSystems.OpenGL.GLFBORTTManager._tryFormat C# (CSharp) Method

_tryFormat() private method

private _tryFormat ( int depthFormat, int stencilFormat ) : bool
depthFormat int
stencilFormat int
return bool
		private bool _tryFormat( int depthFormat, int stencilFormat )
		{
			int status, depthRB = 0, stencilRB = 0;
			bool failed = false; // flag on GL errors

			if ( depthFormat != Gl.GL_NONE )
			{
				/// Generate depth renderbuffer
				Gl.glGenRenderbuffersEXT( 1, out depthRB );
				/// Bind it to FBO
				Gl.glBindRenderbufferEXT( Gl.GL_RENDERBUFFER_EXT, depthRB );

				/// Allocate storage for depth buffer
				Gl.glRenderbufferStorageEXT( Gl.GL_RENDERBUFFER_EXT, depthFormat, PROBE_SIZE, PROBE_SIZE );

				/// Attach depth
				Gl.glFramebufferRenderbufferEXT( Gl.GL_FRAMEBUFFER_EXT, Gl.GL_DEPTH_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, depthRB );
			}

			if ( stencilFormat != Gl.GL_NONE )
			{
				/// Generate stencil renderbuffer
				Gl.glGenRenderbuffersEXT( 1, out stencilRB );
				/// Bind it to FBO
				Gl.glBindRenderbufferEXT( Gl.GL_RENDERBUFFER_EXT, stencilRB );
				Gl.glGetError(); // NV hack
				/// Allocate storage for stencil buffer
				Gl.glRenderbufferStorageEXT( Gl.GL_RENDERBUFFER_EXT, stencilFormat, PROBE_SIZE, PROBE_SIZE );
				if ( Gl.glGetError() != Gl.GL_NO_ERROR ) // NV hack
					failed = true;
				/// Attach stencil
				Gl.glFramebufferRenderbufferEXT( Gl.GL_FRAMEBUFFER_EXT, Gl.GL_STENCIL_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, stencilRB );
				if ( Gl.glGetError() != Gl.GL_NO_ERROR ) // NV hack
					failed = true;
			}

			status = Gl.glCheckFramebufferStatusEXT( Gl.GL_FRAMEBUFFER_EXT );
			/// If status is negative, clean up
			// Detach and destroy
			Gl.glFramebufferRenderbufferEXT( Gl.GL_FRAMEBUFFER_EXT, Gl.GL_DEPTH_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, 0 );
			Gl.glFramebufferRenderbufferEXT( Gl.GL_FRAMEBUFFER_EXT, Gl.GL_STENCIL_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, 0 );
			if ( depthRB != 0 )
				Gl.glDeleteRenderbuffersEXT( 1, ref depthRB );
			if ( stencilRB != 0 )
				Gl.glDeleteRenderbuffersEXT( 1, ref stencilRB );

			return status == Gl.GL_FRAMEBUFFER_COMPLETE_EXT && !failed;
		}