/// <summary> /// Request the specify render buffer in case shared somewhere. Ignore silently if surface.buffer is null. /// </summary> /// <param name="surface"> </param> public void RequestRenderbuffer(GLESSurfaceDescription surface) { if (surface.Buffer == null) { return; } var key = new RBFormat(surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height, surface.NumSamples); Utilities.Contract.Requires(this._renderBuffer.ContainsKey(key)); Utilities.Contract.Requires(this._renderBuffer[key].Buffer == surface.Buffer); RBRef refval = this._renderBuffer[key]; refval.RefCount++; this._renderBuffer[key] = refval; }
/// <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 ) { GLSurfaceDesc retval = new GLSurfaceDesc(); retval.Buffer = null; // Return 0 buffer if GL_NONE is requested if ( format != Gl.GL_NONE ) { RBFormat key = new RBFormat( format, width, height ); RBRef value; if ( _renderBufferMap.TryGetValue( key, out value ) ) { retval.Buffer = value.Buffer; retval.ZOffset = 0; // Increase refcount value.Refcount++; } else { // New one GLRenderBuffer rb = new GLRenderBuffer( format, width, height, 0 ); _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; }