我正在尝试使用采用 Surface 和 X、Y 位置进行渲染的方法来渲染表面。问题是当表面在屏幕之外一个小像素时,它根本不会渲染。
这是为什么?我正在尝试搜索 DirectX 剪辑,但根本找不到任何东西。
void Draw(LPDIRECT3DSURFACE9 src, int x, int y)
{
D3DSURFACE_DESC desc;
src->GetDesc(&desc);
D3DVIEWPORT9 viewport;
Device->GetViewport(&viewport);
int vX = viewport.X;
int vY = viewport.Y;
int vWidth = viewport.X + viewport.Width;
int vHeight = viewport.Y + viewport.Height;
RECT source;
source.left = max(x, vX);
source.right = min(source.left + desc.Width, vWidth);
source.top = max(y, vY);
source.bottom = min(source.top + desc.Height, vHeight);
RECT destination;
destination.left = max(x, vX);
destination.right = min(destination.left + desc.Width + x, vWidth);
destination.top = max(y, vY);
destination.bottom = min(destination.top + desc.Height + y, vHeight);
Device->StretchRect(src, &source, BackBuffer, &destination, D3DTEXF_POINT);
};
...并且 X = 100, Y = 100 不起作用,但 -100 起作用,但它不能正确拉伸。
所需效果的示例图像:
我也一直在尝试将 *pSourceRect 和 *pDestRect 设置为可以剪切表面但没有任何运气的东西。
我正在使用 DirectX9。