Ejemplo n.º 1
0
        /// <summary>
        /// 毎フレームごとの更新処理を行います。
        /// </summary>
        public void DoEnterFrame(TimeSpan elapsedTime)
        {
            if (IsDesignMode)
            {
                return;
            }

            MakeCurrent();

            this.renderBuffer.Clear();

            GLElements
            .Where(_ => _ != null)
            .ForEach(_ =>
            {
                // 一時的にZOrderの下駄をはかせます。
                this.renderBuffer.BaseZOrder = _.BaseZOrder;
                _.DoEnterFrame(elapsedTime, this.renderBuffer);
            });

            TextureDisposer.Update(Context);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// ハンドルが閉じられたときに呼ばれます。
        /// </summary>
        protected override void OnHandleDestroyed(EventArgs e)
        {
            if (IsDesignMode)
            {
                base.OnHandleDestroyed(e);
                return;
            }

            GLElements
            .Where(_ => _ != null)
            .ForEach(_ => _.Terminate());
            GLElements.Clear();

            // このOpenGLに登録されているすべてのテクスチャを削除します。
            if (this.glInitialized)
            {
                // このメソッドに失敗してVisual Studioが落ちることがあるため、
                // 念のため例外を潰しておく
                Util.SafeCall(() => Texture.DeleteAll(Context));
                Util.SafeCall(() => TextureDisposer.Update(Context));
            }

            base.OnHandleDestroyed(e);
        }