/// <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); }
/// <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(); }
/* /// <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); }
/// <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); }