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 ) { }
/// <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); }
public RBRef(GLRenderBuffer buffer) { this.Buffer = buffer; this.Refcount = 1; }
/// <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; }
public RBRef( GLRenderBuffer buffer ) { this.Buffer = buffer; this.Refcount = 1; }
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; }
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) { }