示例#1
0
            private bool LessThan(RBFormat other)
            {
                if (this.Format < other.Format)
                {
                    return(true);
                }
                else if (this.Format == other.Format)
                {
                    if (this.Width < other.Width)
                    {
                        return(true);
                    }
                    else if (this.Width == other.Width)
                    {
                        if (this.Height < other.Height)
                        {
                            return(true);
                        }
                        else if (this.Height == other.Height)
                        {
                            if (this.Samples < other.Samples)
                            {
                                return(true);
                            }
                        }
                    }
                }

                return(false);
            }
示例#2
0
        public GLES2SurfaceDesc RequestRenderBuffer(GLenum format, int width, int height, int fsaa)
        {
            var retVal = new GLES2SurfaceDesc();

            retVal.buffer = null;
            if (format != GLenum.None)
            {
                var key = new RBFormat(format, width, height, fsaa);
                if (this.renderBufferMap.ContainsKey(key))
                {
                    retVal.buffer     = this.renderBufferMap[key].buffer;
                    retVal.zoffset    = 0;
                    retVal.numSamples = fsaa;
                }
                else
                {
                    //New one
                    var rb = new GLES2RenderBuffer(format, width, height, fsaa);
                    this.renderBufferMap.Add(key, new RBRef(rb));
                    retVal.buffer     = rb;
                    retVal.zoffset    = 0;
                    retVal.numSamples = fsaa;
                }
            }
            return(retVal);
        }
示例#3
0
        /// <summary>
        ///   Request a render buffer. If format is GL_NONE, return a zero buffer.
        /// </summary>
        /// <param name="format"> </param>
        /// <param name="width"> </param>
        /// <param name="height"> </param>
        /// <param name="fsaa"> </param>
        /// <returns> </returns>
        public GLESSurfaceDescription RequestRenderbuffer(All format, int width, int height, int fsaa)
        {
            var retval = new GLESSurfaceDescription();

            if (format != All.Zero)
            {
                var   key = new RBFormat(format, width, height, fsaa);
                RBRef iter;
                if (this._renderBuffer.TryGetValue(key, out iter))
                {
                    retval.Buffer     = iter.Buffer;
                    retval.ZOffset    = 0;
                    retval.NumSamples = fsaa;
                    iter.RefCount++;
                }
                else
                {
                    // New one
                    var rb = new GLESRenderBuffer(format, width, height, fsaa);
                    this._renderBuffer.Add(key, new RBRef(rb));
                    retval.Buffer     = rb;
                    retval.ZOffset    = 0;
                    retval.NumSamples = fsaa;
                }
            }

            return(retval);
        }
示例#4
0
        /// <summary>
        /// </summary>
        /// <param name="surface"> </param>
        public void ReleaseRenderbuffer(GLESSurfaceDescription surface)
        {
            if (surface.Buffer == null)
            {
                return;
            }

            var   key = new RBFormat(surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height, surface.NumSamples);
            RBRef refval;

            if (this._renderBuffer.TryGetValue(key, out refval))
            {
                // Decrease refcount
                refval.RefCount--;
                if (refval.RefCount == 0)
                {
                    // If refcount reaches zero, delete buffer and remove from map
                    refval.Buffer.Dispose();
                    this._renderBuffer.Remove(key);
                }
                else
                {
                    this._renderBuffer[key] = refval;
                }
            }
        }
示例#5
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);
        }
示例#6
0
        public void RequestRenderBuffer(ref GLES2SurfaceDesc surface)
        {
            if (surface.buffer == null)
            {
                return;
            }

            var key = new RBFormat(surface.buffer.GLFormat, surface.buffer.Width, surface.buffer.Height, surface.numSamples);

            if (this.renderBufferMap.ContainsKey(key))
            {
            }
        }
示例#7
0
        public void ReleaseRenderBuffer(GLES2SurfaceDesc surface)
        {
            if (surface.buffer == null)
            {
                return;
            }

            var key = new RBFormat(surface.buffer.GLFormat, surface.buffer.Width, surface.buffer.Height, surface.numSamples);

            if (this.renderBufferMap.ContainsKey(key))
            {
                this.renderBufferMap[key].buffer.Dispose();
                this.renderBufferMap.Remove(key);
            }
        }
示例#8
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;
        }
示例#9
0
        /// <summary>
        /// Request the specific render buffer in case shared somewhere. Ignore
        /// silently if surface.buffer is 0.
        /// </summary>
        /// <param name="surface"></param>
        public void RequestRenderBuffer(GLSurfaceDesc surface)
        {
            if (surface.Buffer == null)
            {
                return;
            }

            var   key = new RBFormat(surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height);
            RBRef value;
            bool  result = this._renderBufferMap.TryGetValue(key, out value);

            Debug.Assert(result);
            lock (this)
            {
                Debug.Assert(value.Buffer == surface.Buffer);
                // Increase refcount
                value.Refcount++;
            }
            LogManager.Instance.Write("Requested renderbuffer with format " + surface.Buffer.GLFormat.ToString() + " of " +
                                      surface.Buffer.Width.ToString() + "x" + surface.Buffer.Height.ToString() +
                                      " with refcount " + value.Refcount.ToString() + ".");
        }
示例#10
0
        /// <summary>
        ///  Release a render buffer. Ignore silently if surface.buffer is null.
        /// </summary>
        /// <param name="surface"></param>
        public void ReleaseRenderBuffer(GLSurfaceDesc surface)
        {
            if (surface.Buffer == null)
            {
                return;
            }

            var   key = new RBFormat(surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height);
            RBRef value;

            if (this._renderBufferMap.TryGetValue(key, out value))
            {
                // Decrease refcount
                value.Refcount--;
                if (value.Refcount == 0)
                {
                    // If refcount reaches zero, delete buffer and remove from map
                    value.Buffer.Dispose();
                    this._renderBufferMap.Remove(key);
                    LogManager.Instance.Write("Destroyed renderbuffer of format {0} of {1}x{2}", key.Format, key.Width, key.Height);
                }
            }
        }
示例#11
0
			private bool LessThan( RBFormat other )
			{
				if ( this.Format < other.Format )
				{
					return true;
				}
				else if ( this.Format == other.Format )
				{
					if ( this.Width < other.Width )
					{
						return true;
					}
					else if ( this.Width == other.Width )
					{
						if ( this.Height < other.Height )
						{
							return true;
						}
						else if ( this.Height == other.Height )
						{
							if ( this.Samples < other.Samples )
							{
								return true;
							}
						}
					}
				}

				return false;
			}
示例#12
0
		public void ReleaseRenderBuffer( GLES2SurfaceDesc surface )
		{
			if ( surface.buffer == null )
			{
				return;
			}

			var key = new RBFormat( surface.buffer.GLFormat, surface.buffer.Width, surface.buffer.Height, surface.numSamples );
			if ( this.renderBufferMap.ContainsKey( key ) )
			{
				this.renderBufferMap[ key ].buffer.Dispose();
				this.renderBufferMap.Remove( key );
			}
		}
示例#13
0
		public void RequestRenderBuffer( ref GLES2SurfaceDesc surface )
		{
			if ( surface.buffer == null )
			{
				return;
			}

			var key = new RBFormat( surface.buffer.GLFormat, surface.buffer.Width, surface.buffer.Height, surface.numSamples );
			if ( this.renderBufferMap.ContainsKey( key ) ) {}
		}
示例#14
0
		/// <summary>
		/// Request the specific render buffer in case shared somewhere. Ignore
		/// silently if surface.buffer is 0.
		/// </summary>
		/// <param name="surface"></param>
		public void RequestRenderBuffer( GLSurfaceDesc surface )
		{
			if ( surface.Buffer == null )
			{
				return;
			}

			var key = new RBFormat( surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height );
			RBRef value;
			bool result = this._renderBufferMap.TryGetValue( key, out value );
			Debug.Assert( result );
			lock ( this )
			{
				Debug.Assert( value.Buffer == surface.Buffer );
				// Increase refcount
				value.Refcount++;
			}
			LogManager.Instance.Write( "Requested renderbuffer with format " + surface.Buffer.GLFormat.ToString() + " of " +
			                           surface.Buffer.Width.ToString() + "x" + surface.Buffer.Height.ToString() +
			                           " with refcount " + value.Refcount.ToString() + "." );
		}
示例#15
0
		/// <summary>
		///  Release a render buffer. Ignore silently if surface.buffer is null.
		/// </summary>
		/// <param name="surface"></param>
		public void ReleaseRenderBuffer( GLSurfaceDesc surface )
		{
			if ( surface.Buffer == null )
			{
				return;
			}

			var key = new RBFormat( surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height );
			RBRef value;
			if ( this._renderBufferMap.TryGetValue( key, out value ) )
			{
				// Decrease refcount
				value.Refcount--;
				if ( value.Refcount == 0 )
				{
					// If refcount reaches zero, delete buffer and remove from map
					value.Buffer.Dispose();
					this._renderBufferMap.Remove( key );
					LogManager.Instance.Write( "Destroyed renderbuffer of format {0} of {1}x{2}", key.Format, key.Width, key.Height );
				}
			}
		}
示例#16
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;
		}
示例#17
0
		/// <summary>
		/// </summary>
		/// <param name="surface"> </param>
		public void ReleaseRenderbuffer( GLESSurfaceDescription surface )
		{
			if ( surface.Buffer == null )
			{
				return;
			}

			var key = new RBFormat( surface.Buffer.GLFormat, surface.Buffer.Width, surface.Buffer.Height, surface.NumSamples );
			RBRef refval;
			if ( this._renderBuffer.TryGetValue( key, out refval ) )
			{
				// Decrease refcount
				refval.RefCount--;
				if ( refval.RefCount == 0 )
				{
					// If refcount reaches zero, delete buffer and remove from map
					refval.Buffer.Dispose();
					this._renderBuffer.Remove( key );
				}
				else
				{
					this._renderBuffer[ key ] = refval;
				}
			}
		}
示例#18
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;
		}
示例#19
0
		/// <summary>
		///   Request a render buffer. If format is GL_NONE, return a zero buffer.
		/// </summary>
		/// <param name="format"> </param>
		/// <param name="width"> </param>
		/// <param name="height"> </param>
		/// <param name="fsaa"> </param>
		/// <returns> </returns>
		public GLESSurfaceDescription RequestRenderbuffer( All format, int width, int height, int fsaa )
		{
			var retval = new GLESSurfaceDescription();
			if ( format != All.Zero )
			{
				var key = new RBFormat( format, width, height, fsaa );
				RBRef iter;
				if ( this._renderBuffer.TryGetValue( key, out iter ) )
				{
					retval.Buffer = iter.Buffer;
					retval.ZOffset = 0;
					retval.NumSamples = fsaa;
					iter.RefCount++;
				}
				else
				{
					// New one
					var rb = new GLESRenderBuffer( format, width, height, fsaa );
					this._renderBuffer.Add( key, new RBRef( rb ) );
					retval.Buffer = rb;
					retval.ZOffset = 0;
					retval.NumSamples = fsaa;
				}
			}

			return retval;
		}
示例#20
0
		public GLES2SurfaceDesc RequestRenderBuffer( GLenum format, int width, int height, int fsaa )
		{
			var retVal = new GLES2SurfaceDesc();
			retVal.buffer = null;
			if ( format != GLenum.None )
			{
				var key = new RBFormat( format, width, height, fsaa );
				if ( this.renderBufferMap.ContainsKey( key ) )
				{
					retVal.buffer = this.renderBufferMap[ key ].buffer;
					retVal.zoffset = 0;
					retVal.numSamples = fsaa;
				}
				else
				{
					//New one
					var rb = new GLES2RenderBuffer( format, width, height, fsaa );
					this.renderBufferMap.Add( key, new RBRef( rb ) );
					retVal.buffer = rb;
					retVal.zoffset = 0;
					retVal.numSamples = fsaa;
				}
			}
			return retVal;
		}