Etiketler

, , ,

Merhaba arkadaslar bu yazimda directX ile olusturulan bir 
pencerenin arkasina istedigimiz bir resmi koymanin kodlarini 
paylasacagim. Oncelikle begendiginiz bir resmi olusturdugunuz
projenin icine atmaniz ve kodun icindeki :
bkgrd = getSurfaceFromBitmap("./god.jpg"); 
kisminda ki "god.jpg" yere kendi resminizin ismini yazmaniz
gerekiyor.
 
#include <windows.h>
#include <d3d9.h>
#include <d3dx9tex.h>
#include <string>

HINSTANCE hInst;
HWND wndHandle;

bool initWindow(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

// DirectX functions and global variables
HRESULT lastResult;
LPDIRECT3D9 pD3D;
LPDIRECT3DDEVICE9 pd3dDevice;
IDirect3DSurface9* bkgrd;

bool initDirect3D(HWND hwnd);
IDirect3DSurface9* getSurfaceFromBitmap(std::string filename);
void Render(void);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{
 if (!initWindow(hInstance))
 return false;

 if (!initDirect3D(wndHandle))
 return false;

 bkgrd = getSurfaceFromBitmap("./god.jpg");
 if (bkgrd == NULL)
 {
 MessageBox(NULL, "Dosya yok", 
 "Hata", MB_OK);
 return 0;
 }

 // Main message loop:
 // Enter the message loop
 MSG msg; 
 ZeroMemory( &msg, sizeof(msg) );
 while( msg.message!=WM_QUIT )
 {
 if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
 {
 TranslateMessage( &msg );
 DispatchMessage( &msg );
 }
 else
 {
 // call our render function
 Render();
 }
 }

 if( pd3dDevice != NULL) 
 {
 pd3dDevice->Release();
 pd3dDevice = NULL;
 }
 if( pD3D != NULL)
 {
 pD3D->Release();
 pD3D = NULL;
 }

 return (int) msg.wParam;
}

bool initWindow(HINSTANCE hInstance)
{
 WNDCLASSEX wcex;

 wcex.cbSize = sizeof(WNDCLASSEX);
 wcex.style = CS_HREDRAW | CS_VREDRAW;
 wcex.lpfnWndProc = (WNDPROC)WndProc;
 wcex.cbClsExtra = 0;
 wcex.cbWndExtra = 0;
 wcex.hInstance = hInstance;
 wcex.hIcon = 0;
 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 wcex.lpszMenuName = NULL;
 wcex.lpszClassName = "DirectXExample";
 wcex.hIconSm = 0;
 RegisterClassEx(&wcex);

 wndHandle = CreateWindow("DirectXExample", 
 "Ornegimiz", 
 WS_OVERLAPPEDWINDOW,
 CW_USEDEFAULT, 
 CW_USEDEFAULT, 
 640, 
 480, 
 NULL, 
 NULL, 
 hInstance, 
 NULL);
 if (!wndHandle)
 return false;

 ShowWindow(wndHandle, SW_SHOW);
 UpdateWindow(wndHandle);

 return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
WPARAM wParam, 
 LPARAM lParam)
{
 switch (message) 
 {
 case WM_DESTROY:
 PostQuitMessage(0);
 break;
 }
 return DefWindowProc(hWnd, message, wParam, lParam);
}

bool initDirect3D(HWND hwnd)
{
 if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
 {
 lastResult = E_FAIL;
 return false;
 }

 D3DPRESENT_PARAMETERS d3dpp; 
 ZeroMemory( &d3dpp, sizeof(d3dpp) );
 d3dpp.Windowed = TRUE;
 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
 d3dpp.BackBufferCount = 1;
 d3dpp.BackBufferHeight = 480;
 d3dpp.BackBufferWidth = 640;
 d3dpp.hDeviceWindow = hwnd;

 if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, 
 D3DDEVTYPE_HAL, hwnd,
 D3DCREATE_SOFTWARE_VERTEXPROCESSING,
 &d3dpp, &pd3dDevice ) ) )
 {
 lastResult = E_FAIL;
 return false;
 }

 return true;
}

IDirect3DSurface9* getSurfaceFromBitmap(std::string filename)
{
 HRESULT hResult;
 IDirect3DSurface9* surface = NULL;
 D3DXIMAGE_INFO imageInfo;

 // Get the width and height info from this bitmap
 hResult = D3DXGetImageInfoFromFile(filename.c_str(),
 &imageInfo);
 if FAILED (hResult)
 return NULL;

 hResult = pd3dDevice->CreateOffscreenPlainSurface(
imageInfo.Width,
 imageInfo.Height, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT,
 &surface, NULL);
 if (FAILED(hResult))
 return NULL;

 hResult = D3DXLoadSurfaceFromFile(surface, NULL, NULL,
 filename.c_str(),
 NULL, D3DX_DEFAULT, 0, NULL);
 if (FAILED(hResult))
 return NULL;

 return surface;
}

void Render(void)
{
 if( NULL == pd3dDevice )
 return;

 // Clear the backbuffer to a blue color
 pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
 D3DCOLOR_XRGB(0,0,255),
 1.0f, 0 );

 IDirect3DSurface9* backbuffer;
 pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,
 &backbuffer);

 HRESULT hResult = pd3dDevice->StretchRect(bkgrd, NULL,
 backbuffer, NULL,
 D3DTEXF_NONE);
 if (hResult != D3D_OK)
 MessageBox(NULL,"Olmadi", "Hata", MB_OK);

 // Present the backbuffer contents to the display
 pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
Reklamlar