Вы можете создать пустую текстуру, соответствующую размеру и цветовому формату поверхности.Затем скопируйте содержимое поверхности на поверхность текстуры.
Вот фрагмент моего кода DirectX9 без обработки ошибок и других сложностей.Это фактически создает mipmap-цепочку.Примечание StretchRect , которое выполняет фактическое копирование путем растяжения поверхности в соответствии с геометрией целевой поверхности.
IDirect3DSurface9* srcSurface = renderTargetSurface;
IDirect3DTexture9* tex = textureFromRenderTarget;
int levels = tex->GetLevelCount();
for (int i=0; i<levels; i++)
{
IDirect3DSurface9* destSurface = 0;
tex->GetSurfaceLevel(i, &destSurface);
pd3dd->StretchRect(srcSurface, NULL, destSurface, NULL, D3DTEXF_LINEAR);
}
Но, конечно, это для DirectX 9. Для 8.1 вы можете попробовать CopyRect или Blt.
На Dx9 есть ID3DXRenderToSurface , который может напрямую использовать поверхность из текстуры.Я не уверен, что это возможно с Dx8.1, но выше метод копирования должен работать.