2013-09-23 3 views
0

Когда я запускаю PIX, он показывает меня в окне окна просмотра, где мои питимиты рисуются на «экране».d3d9 координаты виджетов после DrawIndexedPrimitive

PIX Window

В DLL D3D9 прокси я называю DrawIndexPrimitive регулярным:

DrawIndexedPrimitive(PrimitiveType,BaseVertexIndex,MinVertexIndex,NumVertices,startIndex,primCount) 

Как я могу получить доступ после этого "видового экрана" точки моих примитивов?

+0

Как вы можете видеть, я упомянул «прокси dll», что означает, что оригинальное приложение не написано мной. Но мне нужны координаты отображения (экрана) определенных объектов. –

+0

Но, как сказал Майкл в своем «ответе», Мэтт сделал что-то вроде этого, и он может получить эти данные без реальной производительности. Поэтому должен быть полезный способ. Только его проект очень сложный, поэтому я не смог отделить часть, которая отвечает за извлечение. –

+0

Мне нужны координаты, чтобы щелкнуть «отфильтрованные» пятна, не имея окна на переднем плане. Pixelsearch с frontbuffer не является альтернативой, поскольку цвета объектов меняются. даже замена текстуры не может решить этого. –

ответ

1

Простой ответ на ваш вопрос Это не возможно восстановить верт информацию от ГПУ, когда он был отправлен в ГПУ. GPU загружает вершины и буферы в сверхбыструю память GDDR, к которой не может получить доступ процессор. Существует одна функция DX для возврата буфера визуализации в обычную память (но это медленный режим), и на самом деле графический процессор просто хочет отправить цель рендеринга на экран.

Глядя на Starcraft блоге ... http://graphics.stanford.edu/~mdfisher/GameAIs.html

Вот почему блоггер, создал драйвер зеркало, что бы захватить DX звонки, как они пошли в ГПУ, чтобы он знал, что был отправлен в ГПУ , и может сохранить его в нормальной памяти.

Затем, как он описывает в разделе под названием «Моделирование шейдеров вершин», он объясняет, как получить дублирующие версии процессоров графических процессоров (отметив, что они будут работать MUCH MUCH медленнее на процессоре). Затем он запускает эмулирует работу, уже сделанную программами GPU vert, на процессоре, поэтому он может иметь вершины в пространстве видового экрана, это обычная память. Я предполагаю, что он работает только с вершинными шейдерами, а не с тесселяционными или пиксельными шейдерами, потому что в вашем вопросе вы только просили вертов.

1

Возможно, этот сайт вам поможет.

Там он написал отличную DLX-перехватку DirectX.

Matt's Webcorner

+0

Спасибо. Я читал его статьи, но структура его «перехватчика» DLL очень сложна, чтобы разделить части, где он вычисляет координаты. –

+0

С моего беглого взгляда это просто захватывает вызовы интерфейса DX. В зависимости от шейдеров, запущенных на графическом процессоре, это может иметь очень мало очевидных подключений к тому, что отображается на экране просмотра. – Strings

Смежные вопросы