Trix Temat założony przez niniejszego użytkownika |
[DirectX]Wersja June 2010 (9), a wersja (8) » 2011-09-26 20:22:40 Mam taki kod: #include <d3dx8.h> #include <mmsystem.h> #include <direct.h>
#pragma comment(lib, "d3d8.lib") #pragma comment(lib, "d3dx8.lib") #pragma comment(lib, "winmm.lib")
LPDIRECT3D8 g_pD3D = NULL; LPDIRECT3DDEVICE8 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER8 g_pVB = NULL; LPDIRECT3DTEXTURE8 g_pTexture = NULL;
D3DXMATRIX matWorldX; D3DXMATRIX matWorldY; D3DXMATRIX matWorldXT;
struct CUSTOMVERTEX { FLOAT x; FLOAT y; FLOAT z; DWORD color; FLOAT tx; FLOAT ty; };
#define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1 )
HRESULT InitD3D( HWND hWnd ) { if( NULL ==( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DDISPLAYMODE d3ddm; if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, & d3ddm ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( & d3dpp, sizeof( d3dpp ) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, & d3dpp, & g_pd3dDevice ) ) ) { return E_FAIL; } g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE ); g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE ); return S_OK; }
HRESULT InitGeometry() { CUSTOMVERTEX g_Vertices[] = { { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 3.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 3.0f, 3.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 3.0f, 3.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 3.0f, 0.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFF0000, 0.0f, 1.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFF0000, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFF0000, 1.0f, 1.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFF0000, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFF0000, 1.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFF0000, 1.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, }; if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, "Media/tex.bmp", & g_pTexture ) ) ) { return E_FAIL; } if( FAILED( g_pd3dDevice->CreateVertexBuffer( 36 * sizeof( CUSTOMVERTEX ), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, & g_pVB ) ) ) { return E_FAIL; } VOID * pVertices; if( FAILED( g_pVB->Lock( 0, sizeof( g_Vertices ),( BYTE ** ) & pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, g_Vertices, sizeof( g_Vertices ) ); g_pVB->Unlock(); return S_OK; }
VOID Cleanup() { if( g_pTexture != NULL ) g_pTexture->Release(); if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); }
VOID SetupMatrices() { D3DXMATRIX matView; D3DXMatrixLookAtLH( & matView, & D3DXVECTOR3( 0.0f, 0.0f, - 6.0f ), & D3DXVECTOR3( 0.0f, 0.0f, 0.0f ), & D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) ); g_pd3dDevice->SetTransform( D3DTS_VIEW, & matView ); D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH( & matProj, D3DX_PI / 4, 400.0f / 400.0f, 1.0f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, & matProj ); }
VOID Render() { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0 ); g_pd3dDevice->BeginScene(); D3DXMatrixRotationX( & matWorldX, timeGetTime() / 1500.0f ); D3DXMatrixRotationY( & matWorldY, timeGetTime() / 1500.0f ); g_pd3dDevice->SetTexture( 0, g_pTexture ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof( CUSTOMVERTEX ) ); g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->SetTransform( D3DTS_WORLD, &( matWorldX * matWorldY ) ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 12 ); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; case WM_KEYDOWN: switch( wParam ) { case VK_ESCAPE: PostQuitMessage( 0 ); break; } } return DefWindowProc( hWnd, msg, wParam, lParam ); }
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) { WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( & wc ); HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 06 - Texture", WS_OVERLAPPEDWINDOW, 100, 100, 350, 350, GetDesktopWindow(), NULL, wc.hInstance, NULL ); if( SUCCEEDED( InitD3D( hWnd ) ) ) { if( SUCCEEDED( InitGeometry() ) ) { ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); SetupMatrices(); MSG msg; ZeroMemory( & msg, sizeof( msg ) ); while( msg.message != WM_QUIT ) { if( PeekMessage( & msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } else Render(); } } } Cleanup(); UnregisterClass( "D3D Tutorial", wc.hInstance ); return 0; }
Lecz na dysku mam wersje June 2010 (9) Jak przejść między wersją 8 na 9? W prościejszych kodach sobie radziłem lecz teraz błędy mi wywala :) ------ Build started: Project: ddraw- testy, Configuration: Debug Win32 ------ main.cpp c:\programy w c++\ddraw- testy\ddraw- testy\main.cpp(135): error C2660: 'IDirect3DDevice9::CreateVertexBuffer' : function does not take 5 arguments c:\programy w c++\ddraw- testy\ddraw- testy\main.cpp(141): error C2664: 'IDirect3DVertexBuffer9::Lock' : cannot convert parameter 3 from 'BYTE **' to 'void **' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast c:\programy w c++\ddraw- testy\ddraw- testy\main.cpp(200): error C2065: 'D3DTSS_MINFILTER' : undeclared identifier c:\programy w c++\ddraw- testy\ddraw- testy\main.cpp(201): error C2065: 'D3DTSS_MAGFILTER' : undeclared identifier c:\programy w c++\ddraw- testy\ddraw- testy\main.cpp(203): error C2660: 'IDirect3DDevice9::SetStreamSource' : function does not take 3 arguments c:\programy w c++\ddraw- testy\ddraw- testy\main.cpp(204): error C2664: 'IDirect3DDevice9::SetVertexShader' : cannot convert parameter 1 from 'int' to 'IDirect3DVertexShader9 *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Kod w którym wystąpił powyższy błąd(przekształcony ten pierwszy: #include <d3dx9.h> #include <mmsystem.h> #include <direct.h>
#pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #pragma comment(lib, "winmm.lib")
LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; LPDIRECT3DTEXTURE9 g_pTexture = NULL;
D3DXMATRIX matWorldX; D3DXMATRIX matWorldY; D3DXMATRIX matWorldXT;
struct CUSTOMVERTEX { FLOAT x; FLOAT y; FLOAT z; DWORD color; FLOAT tx; FLOAT ty; };
#define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1 )
HRESULT InitD3D( HWND hWnd ) { if( NULL ==( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DDISPLAYMODE d3ddm; if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, & d3ddm ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( & d3dpp, sizeof( d3dpp ) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, & d3dpp, & g_pd3dDevice ) ) ) { return E_FAIL; } g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE ); g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE ); return S_OK; }
HRESULT InitGeometry() { CUSTOMVERTEX g_Vertices[] = { { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 3.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 3.0f, 3.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 3.0f, 3.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 3.0f, 0.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFF0000, 0.0f, 1.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFF0000, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFF0000, 1.0f, 1.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFF0000, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFF0000, 1.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFF0000, 1.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, { - 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { 1.0f, 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, { - 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 0.0f, 1.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { - 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 0.0f, 0.0f, }, { 1.0f, - 1.0f, 1.0f, 0xFFFFFFFF, 1.0f, 1.0f, }, { 1.0f, - 1.0f, - 1.0f, 0xFFFFFFFF, 1.0f, 0.0f, }, }; if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, "Media/tex.bmp", & g_pTexture ) ) ) { return E_FAIL; } if( FAILED( g_pd3dDevice->CreateVertexBuffer( 36 * sizeof( CUSTOMVERTEX ), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, & g_pVB ) ) ) { return E_FAIL; } VOID * pVertices; if( FAILED( g_pVB->Lock( 0, sizeof( g_Vertices ),( BYTE ** ) & pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, g_Vertices, sizeof( g_Vertices ) ); g_pVB->Unlock(); return S_OK; }
VOID Cleanup() { if( g_pTexture != NULL ) g_pTexture->Release(); if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); }
VOID SetupMatrices() { D3DXMATRIX matView; D3DXMatrixLookAtLH( & matView, & D3DXVECTOR3( 0.0f, 0.0f, - 6.0f ), & D3DXVECTOR3( 0.0f, 0.0f, 0.0f ), & D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) ); g_pd3dDevice->SetTransform( D3DTS_VIEW, & matView ); D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH( & matProj, D3DX_PI / 4, 400.0f / 400.0f, 1.0f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, & matProj ); }
VOID Render() { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0 ); g_pd3dDevice->BeginScene(); D3DXMatrixRotationX( & matWorldX, timeGetTime() / 1500.0f ); D3DXMatrixRotationY( & matWorldY, timeGetTime() / 1500.0f ); g_pd3dDevice->SetTexture( 0, g_pTexture ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof( CUSTOMVERTEX ) ); g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->SetTransform( D3DTS_WORLD, &( matWorldX * matWorldY ) ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 12 ); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; case WM_KEYDOWN: switch( wParam ) { case VK_ESCAPE: PostQuitMessage( 0 ); break; } } return DefWindowProc( hWnd, msg, wParam, lParam ); }
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) { WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( & wc ); HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 06 - Texture", WS_OVERLAPPEDWINDOW, 100, 100, 350, 350, GetDesktopWindow(), NULL, wc.hInstance, NULL ); if( SUCCEEDED( InitD3D( hWnd ) ) ) { if( SUCCEEDED( InitGeometry() ) ) { ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); SetupMatrices(); MSG msg; ZeroMemory( & msg, sizeof( msg ) ); while( msg.message != WM_QUIT ) { if( PeekMessage( & msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } else Render(); } } } Cleanup(); UnregisterClass( "D3D Tutorial", wc.hInstance ); return 0; }
Kod który po przekształceniu działa poprawnie: #include <d3d9.h>
#pragma comment(lib, "d3d9.lib")
LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; };
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
HRESULT InitD3D( HWND hWnd ) { if( NULL ==( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DDISPLAYMODE d3ddm; if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, & d3ddm ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( & d3dpp, sizeof( d3dpp ) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, & d3dpp, & g_pd3dDevice ) ) ) { return E_FAIL; } return S_OK; }
HRESULT InitVB() { CUSTOMVERTEX g_Vertices[] = { { 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, }, { 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, }; if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, & g_pVB, NULL ) ) ) { return E_FAIL; } VOID * pVertices; if( FAILED( g_pVB->Lock( 0, sizeof( g_Vertices ),( void ** ) & pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, g_Vertices, sizeof( g_Vertices ) ); g_pVB->Unlock(); return S_OK; }
VOID Cleanup() { if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); }
VOID Render() { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 ); g_pd3dDevice->BeginScene(); g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) ); g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); }
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) { WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( & wc ); HWND hWnd = CreateWindow( "D3D tutorial", "D3D tutorial 02 - Vertices", WS_OVERLAPPEDWINDOW, 100, 100, 350, 350, GetDesktopWindow(), NULL, wc.hInstance, NULL ); if( SUCCEEDED( InitD3D( hWnd ) ) ) { if( SUCCEEDED( InitVB() ) ) { ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); MSG msg; ZeroMemory( & msg, sizeof( msg ) ); while( msg.message != WM_QUIT ) { if( PeekMessage( & msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } else Render(); } } } Cleanup(); UnregisterClass( "D3D Tutorial", wc.hInstance ); return 0; }
Przepraszam za tak duże ilości kodu lecz chcę byście wszystko ujrzeli :) |