Текстура с поверхности в DirectX 8.1 - PullRequest
1 голос
/ 22 декабря 2010

Я делаю двойную буферизацию, создавая цель рендеринга с соответствующей глубиной и буфером трафарета, рисуя ее, а затем рисуя полноэкранный, возможно растянутый, четырехугольный буфер в качестве текстуры.* Для этого я использую вызов CreateTexture (), чтобы создать задний буфер, а затем вызов GetSurfaceLevel (), чтобы получить текстуру из Surface.Это прекрасно работает.

Однако я бы хотел использовать CreateRenderTarget () напрямую.Возвращает поверхность.Но тогда мне нужна текстура, чтобы нарисовать квад в переднем буфере.

Проблема в том, что я не могу найти функцию для получения текстуры с поверхности.Я искал документ DX8.1 снова и снова без удачи.Такая функция вообще существует?

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Вы можете создать пустую текстуру, соответствующую размеру и цветовому формату поверхности.Затем скопируйте содержимое поверхности на поверхность текстуры.

Вот фрагмент моего кода 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, но выше метод копирования должен работать.

0 голосов
/ 04 января 2011

Если обратная совместимость является причиной того, что вы используете D3D8, попробуйте вместо этого использовать SwiftShader.http://transgaming.com/business/swiftshader

Это программная реализация D3D9.Вы можете использовать его, когда у вас нет видеокарты.Это стоит около 12 КБ.

...