Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Direct3D 
V
    Опции темы
vinter
Дата 25.3.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



Всем привет,

Есть ли какие нибудь ограничения использования директа в QT? Т.е есть ли какие нибудь негативные стороны его использования там
И еще, поделитись пожалуйста простым примером инициализации директа в QT, если не сложно.
я сделал так, но не рисует :(
exampleqt.h
Код

#include <QtGui/QWidget>
#include <d3d9.h>

class QEvent;


class ExampleQT : public QWidget
{
    Q_OBJECT

public:
    ExampleQT(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~ExampleQT();
    
    void paintEvent(QPaintEvent *);
    void Initialize();

private:
    LPDIRECT3D9 m_pD3D;
    // Само устройство для рисования.
    LPDIRECT3DDEVICE9 m_pd3dDevice;
};



exampleqt.cpp
Код

#include "exampleqt.h"
#include <QtGui/qevent.h>

ExampleQT::ExampleQT(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
}

ExampleQT::~ExampleQT()
{
    if( m_pd3dDevice != NULL) 
        m_pd3dDevice->Release();

    if( m_pD3D != NULL)
        m_pD3D->Release();
}
void ExampleQT::Initialize()
{

    m_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
    
    D3DPRESENT_PARAMETERS d3dpp; 
    
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE; // Устройство будет оконное.
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, topLevelWidget()->winId(),
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &d3dpp, &m_pd3dDevice));
}

void ExampleQT::paintEvent(QPaintEvent *pEvent)
{
    if(m_pd3dDevice == NULL)
        return;
    m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
        D3DCOLOR_XRGB(255, 0, 0), 1.0f, 0 );.
    if(SUCCEEDED(m_pd3dDevice->BeginScene()))
    {
        m_pd3dDevice->EndScene();
    }
    m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

MainWindow.h
Код

#include <QtGui/QMainWindow>
#include "exampleqt.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainWindow()
    {

    }

private:
    ExampleQT m_Dr3d;
};


MainWindow.cpp
Код

MainWindow::MainWindow(QWidget *parent /* = 0 */, Qt::WFlags flags /* = 0 */)
{
    setCentralWidget(&m_Dr3d);
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_NoSystemBackground);
    m_Dr3d.Initialize();
}


main
Код

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    MainWindow w;
    w.show();
    return a.exec();
}



--------------------
Мой блог
PM MAIL WWW   Вверх
just_geek
Дата 26.3.2009, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Наткнулся вот на такое http://www.gamedev.ru/download/?id=8148
PM MAIL   Вверх
vinter
Дата 26.3.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



just_geek, спасибо, сам уже вчера на эту ссылку наткнулся smile


--------------------
Мой блог
PM MAIL WWW   Вверх
vinter
Дата 27.3.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



вопрос туда же: Есть слот, который вызываю по таймеру, в слоте происходит отрисовка средствами Direct3D. В результате все рисует как надо, если я вызываю эту ф-ию(рисования) в paintEvent, то никакой отрисовки не происходит. Вопрос: почему?


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 27.3.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(vinter @ 27.3.2009,  16:51)
вопрос туда же: Есть слот, который вызываю по таймеру, в слоте происходит отрисовка средствами Direct3D. В результате все рисует как надо, если я вызываю эту ф-ию(рисования) в paintEvent, то никакой отрисовки не происходит. Вопрос: почему?

а ты посмотри, как часто PaintEvent возникает.
PM   Вверх
vinter
Дата 27.3.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



bsa, туда попадает, все ф-ии отрисовки выполняются, но результата не видно :(

Это сообщение отредактировал(а) vinter - 27.3.2009, 21:33


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 29.3.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(vinter @ 27.3.2009,  21:33)
bsa, туда попадает, все ф-ии отрисовки выполняются, но результата не видно :(

DirectX, если не ошибаюсь, в первую очередь предназначен для игр. А там нужно рисовать периодично (желательно не реже, чем частота вертикальной развертки монитора). PaintEvent возникает же тогда и только тогда, когда ОС решила, что изображение на экране не соответствует действительности (например, если пользователь свернул, а затем развернул окно, или передвинул перекрывающее окно). Когда ты запускаешь программу, то PaintEvent вызывается 1 раз при создании окна. Затем он вызывается только в случае, если область окна пометить невалидной.
PM   Вверх
vinter
Дата 30.3.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



bsa, я знаю когда окну WM_PAINT приходит, но это к делу не относится. Меня интересует почему не происходит отрисовки по этому событию


--------------------
Мой блог
PM MAIL WWW   Вверх
ecspertiza
Дата 31.3.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



код в студию


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
bsa
Дата 31.3.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Думаю, этой теме здесь не место, так как DirectX ничего общего с разделом не имеет...
PM   Вверх
vinter
Дата 31.3.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



Цитата(bsa @  31.3.2009,  15:09 Найти цитируемый пост)
Думаю, этой теме здесь не место, так как DirectX ничего общего с разделом не имеет...

дело не в директе, дело в QT.. Задал вопрос на профильных форумах, если получу ответ отпишу здесь.

ecspertiza, в первом посту есть код


--------------------
Мой блог
PM MAIL WWW   Вверх
vinter
Дата 9.4.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



Проблема решена и увековечена тут


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 14.4.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



vinter, а что же было?
PM   Вверх
vinter
Дата 17.4.2009, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



bsa, там несколько моментов было. главный - в собранной мной QT не было поддержки direct3d, ну и еще некоторые мелочи. Например, инициализация директа, которую я выполнял в конуструкторе, должна выполняться после вмонтирования в окно и т.д. В ссылке выше, я описал полностью рабочий каркас виджета для директа


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1023 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.