Beispiel #1
0
        /// <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;
        }
Beispiel #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 )
		{
			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;
		}