我试图渲染一个表面,其中需要一个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。
你在哪里使用代码中的x和y?在你的例子中没有显示。请阅读'StrectRect'的[documentation](http://msdn.microsoft.com/en-us/library/windows/desktop/bb174471%28v=vs.85%29.aspx)?有很多限制,从我的简短看看还没有看到相关的东西,但也许它有:) – Gnietschow
您是否尝试过激活调试运行时? (请参阅http://legalizeadulthood.wordpress.com/2009/06/28/direct3d-programming-tip-5-use-the-debug-runtime/)通过OutputDebugString可以产生良好,清晰的消息,说这个案子。 (虽然我害怕我不......我从来没有使用StretchRect。) –
我试过了,但我放弃了。因为如果我将X和Y坐标设置在源矩形或目标矩形中,它就根本不渲染,就像我说的。我试图找到一个算法来裁剪表面大小,以适应视口的大小,但我找不到任何解决方案。 – Deukalion