Esempio n. 1
0
        /// <summary>
        /// ITextureのBltのoverride
        /// </summary>
        /// <remarks>
        /// rateを考慮してのblt
        /// </remarks>
        /// <param name="drawContext"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="srcRect"></param>
        /// <param name="dstSize"></param>
        public void Blt(DrawContext drawContext,float x,float y, Rect srcRect,Size dstSize)
        {
            Point[] points = new Point[4];

            if (srcRect == null)
            {
                srcRect = new Rect(0, 0, Width, Height);
            }
            if (dstSize == null)
            {
                dstSize = new Size(drawContext.ScreenSizeX, drawContext.ScreenSizeY);
            }

            points[0].SetPoint(x,y);
            points[1].SetPoint(x+dstSize.Cx-1,y);
            points[2].SetPoint(x+dstSize.Cx-1,y+dstSize.Cy-1);
            points[3].SetPoint(x,y+dstSize.Cy-1);

            Blt(drawContext,srcRect,points);
        }
Esempio n. 2
0
        /// <summary>
        /// このテクスチャを対象(DrawContext)の(x,y)に転送する。
        ///	転送元(このテクスチャ)の転送元矩形を指定できる。
        /// また、転送先でのサイズを指定できる。
        /// </summary>
        /// <param name="context"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="srcRect"></param>
        /// <param name="dstSize"></param>
        public void Blt(DrawContext context,float x,float y,Rect srcRect,Size dstSize)
        {
            if (!Loaded) return;

            float w = Width;
            float h = Height;

            if (w==0 || h==0) return ;

            if (srcRect == null)
            {
                srcRect = new Rect(0, 0, w, h);
            }

            float wr = WidthRate;
            float hr = HeightRate;

            float left,top,right,bottom;
            left	= (wr * srcRect.Left) / w;
            top		= (hr * srcRect.Top) / h;
            right	= (wr * srcRect.Right) / w;
            bottom	= (hr * srcRect.Bottom) / h;

            float rateX = context.RateX;
            float rateY = context.RateY;

            w = srcRect.Right - srcRect.Left;
            h = srcRect.Bottom - srcRect.Top;

            if (w==0 || h==0) return ;

            //	転送先サイズは指定されているが..
            if (dstSize == null)
            {
            //	dstSize = new Size(context.ScreenSizeX, context.ScreenSizeY);
                w = context.ScreenSizeX;
                h = context.ScreenSizeY;
            } else {
                w = dstSize.Cx;
                h = dstSize.Cy;
            }

            x = x /* * rateX */ + context.OffsetRX;
            y = y /* * rateY */ + context.OffsetRY;

            //	w *= rateX;
            //	h *= rateY;

            Bind();
            Gl.glBegin(Gl.GL_POLYGON);

            //	クリップ処理は、openglに任せたので、もはや不要なのだ
            //	クリップ無し
            Gl.glTexCoord2f(left,top); Gl.glVertex2f(x  ,y  );
            Gl.glTexCoord2f(right,top); Gl.glVertex2f(x+w,y  );
            Gl.glTexCoord2f(right,bottom); Gl.glVertex2f(x+w,y+h);
            Gl.glTexCoord2f(left,bottom); Gl.glVertex2f(x  ,y+h);
            Gl.glEnd();
            Unbind();
        }
Esempio n. 3
0
        /*
        /// <summary>
        /// ���̃e�N�X�`����w���screen��blt����B
        /// </summary>
        /// <param name="drawContext"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <remarks>
        /// visitor�p�^�[���̂��߂Ɏ������Ă���B
        /// SDLWindow.blt����Visitor�Ƃ��ČĂяo�����B
        /// </remarks>
        public void Blt(DrawContext context, float x, float y)
        {
            texture.Blt(context, x +DstOffsetX, y + DstOffsetY, rect);
        }

        /// <summary>
        /// ���̃e�N�X�`����w���screen��blt����B
        /// </summary>
        /// <param name="drawContext"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="srcRect"></param>
        /// <remarks>
        /// visitor�p�^�[���̂��߂Ɏ������Ă���B
        /// SDLWindow.blt����Visitor�Ƃ��ČĂяo�����B
        /// </remarks>
        public void Blt(DrawContext src, float x, float y, Rect srcRect)
        {
            // ����srcRect��rect�̂Ȃ��ł̍��W��Ӗ�����̂ō��W�ϊ���{���K�v������B
            Rect r = Rect.CalcRectInRect(rect, srcRect);

            texture.Blt(src, x + DstOffsetX, y + DstOffsetY, r);
        }
        */
        /// <summary>
        /// ���̃e�N�X�`����w���screen��blt����B
        /// </summary>
        /// <param name="drawContext"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="srcRect"></param>
        /// <param name="dstSize"></param>
        /// <remarks>
        /// visitor�p�^�[���̂��߂Ɏ������Ă���B
        /// SDLWindow.blt����Visitor�Ƃ��ČĂяo�����B
        /// </remarks>
        public void Blt(DrawContext src, float x, float y, Rect srcRect, Size dstSize)
        {
            // ����srcRect��rect�̂Ȃ��ł̍��W��Ӗ�����̂ō��W�ϊ���{���K�v������B
            //	Rect r = Rect.CalcRectInRect(rect, srcRect);
            Rect r = srcRect;

            texture.Blt(src, x + DstOffsetX, y + DstOffsetY, r, dstSize);
        }
Esempio n. 4
0
 ///	<summary>画像の描画(2D)。</summary>
 /// <remarks>
 ///	bltの転送元矩形と転送先サイズの指定できるバージョン。
 ///	srcRectがnullのときはソース全域。
 ///	dstSizeがnullのときは転送先全域(のサイズ)。
 ///
 ///	転送元矩形として、(Right,Top,Left,Bottom)を指定すれば
 ///	左右反転して表示される。(Left,Bottom,Right,Top)を指定すれば
 ///	上下反転して表示される。
 /// </remarks>
 public void Blt(ITexture src, int x, int y, Rect srcRect, Size dstSize)
 {
     if (src != null)
         src.Blt(DrawContext, x, y, srcRect, dstSize);
 }