IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Qt et Directx10


Sujet :

Qt

  1. #21
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Tu peut mettre le code de ta widget??

  2. #22
    Membre averti Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    Voila le code de mon widget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    #ifndef DEF_MAFENETREDX
    #define DEF_MAFENETREDX
     
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QTimer>
     
    #include <windows.h>
     
    #include <d3d10.h>
    #include <d3dx10.h>
     
    class MaFenetreDX : public QWidget
    {
        public:
    		MaFenetreDX(QWidget *parent = 0);
    		virtual ~MaFenetreDX();
     
        private:
    		virtual void paintEvent(QPaintEvent *e);
    		virtual void showEvent(QShowEvent *e);
    		virtual void resizeEvent(QResizeEvent *e);
    		virtual void moveEvent(QMoveEvent *e);
     
    		QTimer myTimer; 
     
    		D3D10_DRIVER_TYPE			g_driverType;
    		ID3D10Device*				g_pd3dDevice;
    		IDXGISwapChain*				g_pSwapChain;
    		ID3D10RenderTargetView*		g_pRenderTargetView;
    		ID3D10Effect*				g_pEffect;
    		ID3D10EffectTechnique*		g_pTechnique;
    		ID3D10InputLayout*			g_pVertexLayout;
    		ID3D10Buffer*				g_pVertexBuffer;
    		ID3D10Buffer*               g_pIndexBuffer;
    		ID3D10EffectMatrixVariable* g_pWorldVariable;
    		ID3D10EffectMatrixVariable* g_pViewVariable;
    		ID3D10EffectMatrixVariable* g_pProjectionVariable;
    		D3DXMATRIX                  g_World;
    		D3DXMATRIX                  g_View;
    		D3DXMATRIX                  g_Projection;
     
     
    		// Structures
    		struct SimpleVertex
    		{
    			D3DXVECTOR3 Pos ;
    			D3DXVECTOR4 Color;
    		};
     
    		HRESULT InitDevice() ;
    		void CleanupDevice() ;
    		void Render() ;
     
    		bool initDevice;
     
    };
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    #include "MaFenetreDX.h"
     
    MaFenetreDX :: MaFenetreDX(QWidget *parent) : QWidget(parent)
    {
    	// Mise en place de quelques options pour autoriser le rendu direct dans le widget
        setAttribute(Qt::WA_PaintOnScreen);
        setAttribute(Qt::WA_NoSystemBackground);
     
        setMinimumSize(320, 240);
     
    	this->setWindowTitle("Rendu");
     
     
    	g_driverType = D3D10_DRIVER_TYPE_NULL ;
    	g_pd3dDevice = NULL ;
    	g_pSwapChain = NULL ;
    	g_pRenderTargetView = NULL ;
    	g_pEffect = NULL ;
    	g_pTechnique = NULL ;
    	g_pVertexLayout = NULL ;
    	g_pVertexBuffer = NULL ;
    	g_pIndexBuffer = NULL ;
    	g_pWorldVariable = NULL ;
    	g_pViewVariable = NULL ;
    	g_pProjectionVariable = NULL ;
     
    	initDevice = false;
     
    	myTimer.setInterval(0);
    }
     
    MaFenetreDX :: ~MaFenetreDX()
    {
    	CleanupDevice() ;
    }
     
    void MaFenetreDX :: showEvent(QShowEvent *e)
    {
        InitDevice();
        QWidget::showEvent(e);
     
    	connect(&myTimer, SIGNAL(timeout()), this, SLOT(update()));
        myTimer.start();
    }
     
    void MaFenetreDX :: paintEvent(QPaintEvent *e)
    {
    	if(initDevice)
    	{
    		QWidget::paintEvent(e);
    		Render();
    		update();
    	}
    }
     
    void MaFenetreDX :: moveEvent(QMoveEvent *e)
    {
    	QWidget::moveEvent(e);
        update();
    }
     
    void MaFenetreDX :: resizeEvent(QResizeEvent *e)
    {
    	QWidget::resizeEvent(e);
    	update();
    }
     
    /*-----------------------------------------------------------------
    	Nom		    : InitDevice()
    	Description : Création du Device et l'associe à une Swap Chain
    -----------------------------------------------------------------*/
    HRESULT MaFenetreDX :: InitDevice()
    {
        HRESULT hr = S_OK ;
     
        //RECT rc ;
        //GetClientRect(hWnd, &rc) ;
        //UINT width = rc.right - rc.left ;
        //UINT height = rc.bottom - rc.top ;
    	UINT width = 640 ;
        UINT height = 480 ;
     
        UINT createDeviceFlags = 0 ;
     
    #ifdef _DEBUG
        createDeviceFlags |= D3D10_CREATE_DEVICE_DEBUG ;
    #endif
     
        D3D10_DRIVER_TYPE driverTypes[] =
        {
            D3D10_DRIVER_TYPE_HARDWARE,
            D3D10_DRIVER_TYPE_REFERENCE,
        };
     
        UINT numDriverTypes = sizeof(driverTypes) / sizeof(driverTypes[0]) ;
     
        DXGI_SWAP_CHAIN_DESC sd ;
        ZeroMemory(&sd, sizeof(sd)) ;
        sd.BufferCount = 1 ;
        sd.BufferDesc.Width = width ;
        sd.BufferDesc.Height = height ;
        sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM ;
        sd.BufferDesc.RefreshRate.Numerator = 60 ;
        sd.BufferDesc.RefreshRate.Denominator = 1 ;
        sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT ;
        sd.OutputWindow = this->winId();
        sd.SampleDesc.Count = 1 ;
        sd.SampleDesc.Quality = 0 ;
        sd.Windowed = TRUE ;
     
        for(UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes;   driverTypeIndex++)
        {
            g_driverType = driverTypes[driverTypeIndex] ;
            hr = D3D10CreateDeviceAndSwapChain(NULL, g_driverType, NULL, createDeviceFlags,
                                               D3D10_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice) ;
            if(SUCCEEDED(hr))
                break ;
        }
    }
    Si besoin je pourrais mettre le projet complet en .zip.

    Merci.

  3. #23
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    et si tu vire cette ligne QWidget::paintEvent(e); ?

    D'autre lien trouvé :
    http://lists.trolltech.com/qt-intere...ad00316-0.html
    http://www.krizka.net/2008/04/27/cus...ms-with-qt-44/

    Regarde aussi les source de QGLWidget. Tu trouvera surement des choses.

  4. #24
    Membre averti Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    ok merci je vais regarder tout ça et voir si j'arrive à régler ce problème.

  5. #25
    Membre averti Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    Je viens de faire ca dans mon widget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QPaintEngine *MaFenetreDX :: paintEngine() 
    { 
    	return NULL; 
    }

    mais mon rendu clignote toujours dans le widget.
    Si quelqu'un sait pourquoi qu'il me fasse signe .

    Merci.

  6. #26
    Membre averti Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    Bon voila ça fonctionne enfin.
    En fait il ne fallait pas oublier de déclarer la fonction en constante :

    Dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QPaintEngine *paintEngine() const;
    Dans le .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QPaintEngine *MaFenetreDX:: paintEngine() const
    {
        return 0;
    }
    Voila ce n'était pas grand chose en fin de compte.
    Merci à ceux qui m'ont aidé. (superjaja, Yan)

  7. #27
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Ok. Super. Tu peux remettre le code source final de ton Widget. cela peut servir a beaucoup de monde je pense. Peut etre meme qu'on pourra en faire une question dans la FAQ si tu veux.

    Merci par avance.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  8. #28
    Membre averti Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    Oui pas de problème il faudrait que tu me dises comment faire et je le rédigerai.
    Voila le code complet de mon widget.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #ifndef DEF_MAFENETREDX
    #define DEF_MAFENETREDX
     
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QTimer>
     
    #include <windows.h>
     
    #include <d3d10.h>
    #include <d3dx10.h>
     
    class MaFenetreDX : public QWidget
    {
        public:
    		MaFenetreDX(QWidget *parent = 0);
    		virtual ~MaFenetreDX();
     
        private:
    		virtual void paintEvent(QPaintEvent *e);
    		virtual void showEvent(QShowEvent *e);
    		virtual void resizeEvent(QResizeEvent *e);
    		virtual void moveEvent(QMoveEvent *e);
    		virtual QPaintEngine *paintEngine() const;
     
    		QTimer myTimer; 
     
    		HRESULT InitDevice() ;
    		void CleanupDevice() ;
    		void Render() ;
     
    		bool initDevice;
     
    };
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include "MaFenetreDX.h"
     
    MaFenetreDX :: MaFenetreDX(QWidget *parent) : QWidget(parent)
    {
    	// Mise en place de quelques options pour autoriser le rendu direct dans le widget
        setAttribute(Qt::WA_PaintOnScreen, true);
        setAttribute(Qt::WA_NoSystemBackground, true);
     
        setMinimumSize(320, 240);
     
        initDevice = false;
        this->setWindowTitle("Rendu");
        myTimer.setInterval(0);
    }
     
    MaFenetreDX :: ~MaFenetreDX()
    {
    	CleanupDevice() ;
    }
     
    void MaFenetreDX :: showEvent(QShowEvent *e)
    {
        InitDevice();
        QWidget::showEvent(e);
     
    	connect(&myTimer, SIGNAL(timeout()), this, SLOT(update()));
        myTimer.start();
    }
     
    void MaFenetreDX :: paintEvent(QPaintEvent *e)
    {
    	if(initDevice)
    	{
    		QWidget::paintEvent(e);
    		Render();
    		update();
    	}
    }
     
    QPaintEngine *MaFenetreDX:: paintEngine() const
    {
        return 0;
    }
     
    void MaFenetreDX :: moveEvent(QMoveEvent *e)
    {
    	QWidget::moveEvent(e);
    }
     
    void MaFenetreDX :: resizeEvent(QResizeEvent *e)
    {
    	QWidget::resizeEvent(e);
    }
    Voila, par contre il n'y a pas le code concernant DirectX il y a seulement le nom des fonctions utilisées.
    Si quelqu'un veut le code complet avec les sources je pourrais mettre un zip à disposition.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Directx10 et fichiers format .x
    Par korsakoff69 dans le forum DirectX
    Réponses: 9
    Dernier message: 24/11/2010, 14h30
  2. [Directx10] staging texture2D Map() et RowPitch
    Par DjiZ dans le forum DirectX
    Réponses: 2
    Dernier message: 22/02/2010, 17h15
  3. DirectX10 : Charger un mesh .x
    Par Seb2086 dans le forum DirectX
    Réponses: 5
    Dernier message: 06/08/2009, 17h59
  4. SHADER, HLSL, DIRECTX10, C#, que choisir ?
    Par korsakoff69 dans le forum DirectX
    Réponses: 3
    Dernier message: 15/08/2008, 12h13
  5. Vista [ Problème Directx10 ]
    Par 20cents dans le forum Windows Vista
    Réponses: 6
    Dernier message: 02/12/2006, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo