draw a triangle using fixed-function pipeline
This commit is contained in:
parent
18270a2ae9
commit
eedf590519
50
main.cpp
50
main.cpp
@ -1,10 +1,25 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <d3d9.h>
|
#include <d3d9.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct CUSTOMVERTEX {
|
||||||
|
float x, y, z, rhw;
|
||||||
|
uint32_t color;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
|
||||||
|
|
||||||
|
const CUSTOMVERTEX 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 },
|
||||||
|
};
|
||||||
|
|
||||||
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
LPDIRECT3D9 g_pD3D = NULL;
|
IDirect3D9 * g_pD3D = NULL;
|
||||||
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
|
IDirect3DDevice9 * g_pd3dDevice = NULL;
|
||||||
|
IDirect3DVertexBuffer9 * g_pVB = NULL;
|
||||||
|
|
||||||
HRESULT InitDirect3D(HWND hwnd)
|
HRESULT InitDirect3D(HWND hwnd)
|
||||||
{
|
{
|
||||||
@ -46,9 +61,11 @@ void Render()
|
|||||||
|
|
||||||
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
|
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
|
||||||
|
|
||||||
if (SUCCEEDED(g_pd3dDevice->BeginScene())) {
|
g_pd3dDevice->BeginScene();
|
||||||
g_pd3dDevice->EndScene();
|
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);
|
g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
@ -83,6 +100,27 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine
|
|||||||
if (!SUCCEEDED(InitDirect3D(hwnd)))
|
if (!SUCCEEDED(InitDirect3D(hwnd)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
res = g_pd3dDevice->CreateVertexBuffer(3 * (sizeof (CUSTOMVERTEX)), // length
|
||||||
|
0, // usage
|
||||||
|
D3DFVF_CUSTOMVERTEX, // FVF
|
||||||
|
D3DPOOL_DEFAULT, // Pool
|
||||||
|
&g_pVB, //ppVertexBuffer
|
||||||
|
NULL //pSharedHandle
|
||||||
|
);
|
||||||
|
if (FAILED(res))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
void * pVertices;
|
||||||
|
res = g_pVB->Lock(0, (sizeof (vertices)), &pVertices, 0);
|
||||||
|
if (FAILED(res))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
memcpy(pVertices, vertices, (sizeof (vertices)));
|
||||||
|
|
||||||
|
g_pVB->Unlock();
|
||||||
|
|
||||||
ShowWindow(hwnd, nCmdShow);
|
ShowWindow(hwnd, nCmdShow);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
|
|
||||||
@ -105,7 +143,7 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
Render();
|
Render();
|
||||||
ValidateRect(hwnd, NULL);
|
//ValidateRect(hwnd, NULL);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user