Необходимо сделать несколько плагинов для обработки видео, хотел воспользоваться D3D, но штатными методами работоспособный интерфейс без окна не создать. Собственно вопрос: есть ли какой нибудь хак, позволяющий инициализировать IDirect3DDevice9 и создать несколько RTarget-ов без создания окна?
Если нет, то придется юзать CUDA или OpenCL, что крайне не хотелось бы :)
destrator
Создай невидимое окно.
X512
>
> Создай невидимое окно.
Невидимое - это как? Для свернутого устройство не будет инициализировано. Есть еще какой-то способ скрыть окно, оставив его активным для устройства?
destrator
> Есть еще какой-то способ скрыть окно, оставив его активным для устройства?
Сдвинуть за пределы экрана.
Судя по документации нормального метода нет.
Для обработки видео надо юзать директшоу.
обедени winForms и DirectX и там с окном ты можеш делать что хочеш
X512
> Сдвинуть за пределы экрана.
Это не вариант.
keYMax
> Для обработки видео надо юзать директшоу.
В DShow есть один существенный недостаток - не поддерживаются вершинные и пиксельные шейдеры.
Chaos_Optima
> обедени winForms и DirectX и там с окном ты можеш делать что хочеш
Это managed, а у плагина native модель.
Судя по всему, придется юзать CUDA или OCL, писать свой рендерер или менять подход к реализации эффектов.
> Это managed, а у плагина native модель.
это неважно если используешь managed C++. он работает как с обычным С++ так и с managed
ShowWindow(hWnd, SW_HIDE);
не поможет?
ну или сделать окно без обрамления и размером 1х1, разве что на панели задач всёравно будет его видно (
destrator
> Невидимое - это как?
наверное имеется ввиду SetLayeredWindowAttributes()
Chaos_Optima
> это неважно если используешь managed C++. он работает как с обычным С++ так и с
> managed
И каким образом ты предлагаешь из managed сборки экспортировать функцию __declspec(dllexport) plugMainUnion __stdcall plugMain(DWORD functionCode, DWORD inputValue, DWORD instanceID), чтобы она появилать в таблице импорта.
Smouking
> ShowWindow(hWnd, SW_HIDE);
ничего не происходит
> ну или сделать окно без обрамления и размером 1х1, разве что на панели задач
> всёравно будет его видно (
И сей факт тоже будет неприятен :(
> SetLayeredWindowAttributes()
Тоже в панели задач видно, можно конечно спрятать в трей, но это все - полумеры. Решил остановиться на OCL, правда изучать его лень :(, но CUDA работает только с NV картами.
destrator
> Тоже в панели задач видно
Отображение на панели задач отключается(в Windows NT 5 по крайней мере).
X512
Все равно остаются неприятности, вроде смены фокуса окна во время загрузки. Хотелось бы обойтись без вообще окна, но это, судя по всему, не возможно.
P.S. А вообще это странно. Неужели так сложно было реализовать не отображаемый фрейм-буфер в видеопамяти. Особенно учитывая то, что технология это позволяет.
> И каким образом ты предлагаешь из managed сборки экспортировать функцию __declspec(dllexport) plugMainUnion
> __stdcall plugMain(DWORD functionCode, DWORD inputValue, DWORD instanceID), чтобы она появилать в таблице импорта.
ты пойми managed C++ и просто С++ это одно и тоже просто в Managed C++ добавили возможность использовать .net (всякие ref, ^, gcnew)
ты всё можеш делать как в С++.
destrator
> Неужели так сложно было реализовать не отображаемый фрейм-буфер в видеопамяти.
> Особенно учитывая то, что технология это позволяет.
Просто у разработчиков Direct3D руки кривые... OpenGL позволяет рисовать в bitmap.
Chaos_Optima
> managed C++ и просто С++ это одно и тоже
Уверен, что на системном уравне(не языка программирования!) всё тоже совместимо?
Тема в архиве.