Renderbuffer surface. Needs FBO extension.
Inheritance: GLHardwarePixelBuffer
示例#1
0
 public GLDepthBuffer( PoolId poolId, GLRenderSystem renderSystem, GLContext creatorContext,
     GLRenderBuffer depth, GLRenderBuffer stencil, 
     int width, int height, int fsaa, int multiSampleQuality,
     bool manual)
     : base( poolId, 0, width, height, fsaa, "", manual )
 {
 }
示例#2
0
        /// <summary>
        /// Request a render buffer. If format is Gl.GL_NONE, return a zero buffer.
        /// </summary>
        /// <param name="format"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public GLSurfaceDesc RequestRenderBuffer(int format, int width, int height)
        {
            var retval = new GLSurfaceDesc();

            retval.Buffer = null; // Return 0 buffer if GL_NONE is requested
            if (format != Gl.GL_NONE)
            {
                var   key = new RBFormat(format, width, height);
                RBRef value;
                if (this._renderBufferMap.TryGetValue(key, out value))
                {
                    retval.Buffer  = value.Buffer;
                    retval.ZOffset = 0;
                    // Increase refcount
                    value.Refcount++;
                }
                else
                {
                    // New one
                    var rb = new GLRenderBuffer(format, width, height, 0);
                    this._renderBufferMap[key] = new RBRef(rb);
                    retval.Buffer  = rb;
                    retval.ZOffset = 0;
                }
            }
            LogManager.Instance.Write("Requested renderbuffer with format " + format.ToString() + " of " + width.ToString() +
                                      "x" + height.ToString() + ".");
            return(retval);
        }
示例#3
0
 public RBRef(GLRenderBuffer buffer)
 {
     this.Buffer   = buffer;
     this.Refcount = 1;
 }
示例#4
0
		/// <summary>
		/// Request a render buffer. If format is Gl.GL_NONE, return a zero buffer.
		/// </summary>
		/// <param name="format"></param>
		/// <param name="width"></param>
		/// <param name="height"></param>
		/// <returns></returns>
		public GLSurfaceDesc RequestRenderBuffer( int format, int width, int height )
		{
			var retval = new GLSurfaceDesc();

			retval.Buffer = null; // Return 0 buffer if GL_NONE is requested
			if ( format != Gl.GL_NONE )
			{
				var key = new RBFormat( format, width, height );
				RBRef value;
				if ( this._renderBufferMap.TryGetValue( key, out value ) )
				{
					retval.Buffer = value.Buffer;
					retval.ZOffset = 0;
					// Increase refcount
					value.Refcount++;
				}
				else
				{
					// New one
					var rb = new GLRenderBuffer( format, width, height, 0 );
					this._renderBufferMap[ key ] = new RBRef( rb );
					retval.Buffer = rb;
					retval.ZOffset = 0;
				}
			}
			LogManager.Instance.Write( "Requested renderbuffer with format " + format.ToString() + " of " + width.ToString() +
			                           "x" + height.ToString() + "." );
			return retval;
		}
示例#5
0
			public RBRef( GLRenderBuffer buffer )
			{
				this.Buffer = buffer;
				this.Refcount = 1;
			}
示例#6
0
	    public override DepthBuffer CreateDepthBufferFor( RenderTarget renderTarget )
	    {
	        GLDepthBuffer retVal = null;

		    //Only FBO & pbuffer support different depth buffers, so everything
		    //else creates dummy (empty) containers
		    //retVal = mRTTManager->_createDepthBufferFor( renderTarget );
            var fbo = (GLFrameBufferObject)renderTarget["FBO"];

		    if( fbo != null )
		    {
			    //Presence of an FBO means the manager is an FBO Manager, that's why it's safe to downcast
			    //Find best depth & stencil format suited for the RT's format
		        int depthFormat;
                int stencilFormat;
			    ((GLFBORTTManager)(rttManager)).GetBestDepthStencil( fbo.Format,
																		    out depthFormat, out stencilFormat );

			    var depthBuffer = new GLRenderBuffer( depthFormat, fbo.Width,
																    fbo.Height, fbo.FSAA );

			    var stencilBuffer = depthBuffer;
			    if( depthFormat != Gl.GL_DEPTH24_STENCIL8_EXT && stencilBuffer != null ) /* Gl.GL_NONE */
			    {
				    stencilBuffer = new GLRenderBuffer( stencilFormat, fbo.Width,
													    fbo.Height, fbo.FSAA );
			    }

			    //No "custom-quality" multisample for now in GL
			    retVal = new GLDepthBuffer( 0, this, _currentContext, depthBuffer, stencilBuffer,
										    fbo.Width, fbo.Height, fbo.FSAA, 0, false );
		    }

		    return retVal;
	    }
示例#7
0
 public GLDepthBuffer(PoolId poolId, GLRenderSystem renderSystem, GLContext creatorContext, GLRenderBuffer depth,
                      GLRenderBuffer stencil, int width, int height, int fsaa, int multiSampleQuality, bool manual)
     : base(poolId, 0, width, height, fsaa, "", manual)
 {
 }