Plein ecran + affichage de texte

Soyez le premier à donner votre avis sur cette source.

Vue 11 643 fois - Téléchargée 488 fois

Description

Necessite les librairies de Direct3D de DirectX8.
telechargables gratuitement sur le site de microsoft avec la SDK DirectX8.

Source / Exemple :


/*** Lightness1024! ProgrammatO 01/02/2001 17:38:31 ***

      • Base de programme Directx8 plein ecran ***/
#include <d3d8.h> #include <D3dx8core.h> #ifdef UNICODE #define _tWinMain wWinMain #else #define _tWinMain WinMain #endif // Variables globales: LPDIRECT3D8 g_pD3D = NULL; // pour faire l'objet d3d8 LPDIRECT3DDEVICE8 g_pd3dDevice = NULL; // le materiel de rendu LPDIRECT3DVERTEXBUFFER8 g_pVB = NULL; // la zone des vertices (non utilisé encore) // Initialisation de Direct3D HRESULT InitD3D( HWND hWnd ) { // Create the D3D object, which is needed to create the D3DDevice. if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) ) return E_FAIL; // Get the current desktop display mode D3DDISPLAYMODE d3ddm; d3ddm.Width = 1024; d3ddm.Height = 768; d3ddm.Format = D3DFMT_R5G6B5; d3ddm.RefreshRate = 0; // Au cas où on veut détecter les paramètres courants: /*if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) ) return E_FAIL;*/ D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = FALSE; d3dpp.BackBufferWidth = 1024; d3dpp.BackBufferHeight = 768; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.hDeviceWindow = hWnd; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; d3dpp.BackBufferCount = 1; d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; d3dpp.EnableAutoDepthStencil = FALSE; //d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // software : D3DDEVTYPE_REF if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) { return E_FAIL; } // c bon // le debut de l'initialisation du vertex buffer //if (FAILED (g_pd3dDevice->CreateVertexBuffer (3, return S_OK; } // Nettoie tout le bordel VOID Cleanup() { if( g_pd3dDevice != NULL) g_pd3dDevice->Release(); if( g_pD3D != NULL) g_pD3D->Release(); } // Calcul du rendu VOID Render() { if( NULL == g_pd3dDevice ) return; LPD3DXFONT pD3DXFont; LOGFONT lf; ZeroMemory (&lf, sizeof(LOGFONT)); lf.lfHeight = 200; lf.lfWeight = 45; if (FAILED (D3DXCreateFontIndirect(g_pd3dDevice, &lf, &pD3DXFont))) return; RECT rct; rct.left = 0; rct.top = 0; rct.bottom = 768; rct.right = 1024; // Clear the backbuffer g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(128,128,128), 1.0f, 0 ); // Begin the scene g_pd3dDevice->BeginScene(); // Trucs a tracer: pD3DXFont->DrawText (TEXT("hello world"), -1, &rct, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(255, 255, 255)); // End the scene g_pd3dDevice->EndScene(); // Present the backbuffer contents to the display g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); } //----------------------------------------------------------------------------- // Name: MsgProc() // Desc: The window's message handler //----------------------------------------------------------------------------- LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; case WM_PAINT: Render(); ValidateRect( hWnd, NULL ); return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } //----------------------------------------------------------------------------- // Name: WinMain() // Desc: The application's entry point //----------------------------------------------------------------------------- INT WINAPI _tWinMain( HINSTANCE /*hInst*/, HINSTANCE, LPTSTR, INT ) { // Register the window class WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, TEXT("D3D Tutorial"), NULL }; RegisterClassEx( &wc ); // Create the application's window HWND hWnd = CreateWindow( TEXT("D3D Tutorial"), TEXT("Essai"), WS_OVERLAPPEDWINDOW, 0, 0, 1024, 768, GetDesktopWindow(), NULL, wc.hInstance, NULL ); // Initialize Direct3D if( SUCCEEDED( InitD3D( hWnd ) ) ) { // Show the window ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); // Enter the message loop MSG msg; while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } // Clean up everything and exit the app Cleanup(); UnregisterClass( TEXT("D3D Tutorial"), wc.hInstance ); return 0; }

Conclusion :


langage C++
le projet pour MS VC++ 6.0 est dans le ZIP (workspace) avec executable compilé en Release pour Win32.
le script de compilation est inscrit dans le log (.plg)

pour infos: lightness1024@aol.com

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_darktoto
Messages postés
14
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
29 août 2006
-
Merci, cette source va me servir de base pour essayer directx 9. Je regrette tout de même que DirectDraw soit à présent Deprecated, c'était vraiment beaucoup plus simple pour la 2d.
cs_Lightness1024!
Messages postés
162
Date d'inscription
jeudi 15 mars 2001
Statut
Membre
Dernière intervention
1 avril 2005
-
de rien ! :)
si je distribue ces sources c'est bien pour aider les gens.
pour DirectX 9 c'est exactement la meme methode.
je conseille de télécharger la SDK pour voir en détail les arguments de chaque fonctions de DirectX c'est tres pratique.

@#
YodaKyce
Messages postés
2
Date d'inscription
dimanche 30 juin 2002
Statut
Membre
Dernière intervention
21 mars 2003
-
Bravo et merci pour ce code,
Enfin un exemple concret pour afficher du texte avec DX8...
Merci bcp :)
cs_Lightness1024!
Messages postés
162
Date d'inscription
jeudi 15 mars 2001
Statut
Membre
Dernière intervention
1 avril 2005
-
c'est normal si je en refait pas de rendu.
si tu veu voir un code d'un programme en DirectX8 qui n'a pas ce problème télécharge les sources de l'alpha13 sur ce site: www.serhum.fr.st
cs_FrancoisB
Messages postés
1
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
14 avril 2002
-
Malheureusement comme moi lorsque tu swap de tache et tu reviens l'ecran est blanc...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.