Na wstępie dzięki że zajrzeliście:)
Zacząłem się uczyć DirectX i utknąłem nie wiem co jest nie tak, problem polega na tym że po kompilacji program się uruchamia i śmiga bez problemu ale kiedy uruchamiam plik *.exe wyskakuje okienko z tym czy wysłać informacje do microsoftu czy nie, a i korzystam z visual c++ 2008.
załączam do tego kod okna:
#include <d3dx9.h>
HWND hwnd;
IDirect3D9* d3d9;
IDirect3DDevice9* d3dd9;
bool NoweOkno();
LRESULT CALLBACK Proc(HWND, UINT, WPARAM, LPARAM);
struct OurVertex
{
float x, y, z;
float rhw;
D3DCOLOR color;
};
const DWORD OURVERT_FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;
IDirect3DVertexBuffer9* d3dvb;
ID3DXEffect* pEffect;
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
NoweOkno();
d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.BackBufferWidth = GetSystemMetrics(0);
d3dpp.BackBufferHeight = GetSystemMetrics(1);
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3d9 -> CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&d3dd9);
OurVertex vertex[] = { {200.0f, 500.0f, 0.0f, 1.0f, 0xffff0000},
{400.0f, 100.0f, 0.0f, 1.0f, 0xff00ff00},
{600.0f, 500.0f, 0.0f, 1.0f, 0xff0000ff} };
d3dd9 -> CreateVertexBuffer(sizeof(vertex),
D3DUSAGE_DYNAMIC,
OURVERT_FVF,
D3DPOOL_DEFAULT,
&d3dvb,
0);
void* data;
d3dvb -> Lock(0, 3*sizeof(OurVertex), &data, D3DLOCK_DISCARD);
memcpy(data, (void*)vertex, sizeof(vertex));
d3dvb -> Unlock();
ID3DXBuffer* pErrs;
D3DXCreateEffectFromFile(d3dd9, L"Shader.fx", 0, 0, 0, 0, &pEffect, &pErrs);
if (pErrs)
{
// MessageBox(hwnd, (char*)pErrs->GetBufferPointer(), "zóo", 0);
pErrs->Release();
}
MSG msgs;
for(;;)
{
if(PeekMessage(&msgs, 0, 0, 0, PM_REMOVE))
{
if(msgs.message == WM_QUIT) break;
TranslateMessage(&msgs);
DispatchMessage(&msgs);
}
else
{
d3dd9 -> Clear(0, 0, D3DCLEAR_TARGET, 0xff000000, 1, 0);
d3dd9 -> BeginScene();
UINT passes;
D3DXHANDLE tech;
pEffect->FindNextValidTechnique(0, &tech);
pEffect->SetTechnique(tech);
pEffect->Begin(&passes,0);
for (UINT pass = 0; pass < passes; pass++)
{
pEffect->BeginPass(pass);
d3dd9 -> SetFVF(OURVERT_FVF);
d3dd9 -> SetStreamSource(0, d3dvb, 0, sizeof(OurVertex));
d3dd9 -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
pEffect->EndPass();
}
pEffect->End();
d3dd9 -> EndScene();
d3dd9 -> Present(0, 0, 0, 0);
}
}
pEffect->Release();
d3dvb -> Release();
d3dd9 -> Release();
d3d9 -> Release();
}
bool NoweOkno()
{
WNDCLASSEX wc;
TCHAR Name[] = TEXT("by Zwodnik");
HINSTANCE hInst = GetModuleHandle(0);
ZeroMemory(&wc, sizeof(wc));
wc.cbSize = sizeof(wc);
wc.hInstance = hInst;
wc.lpfnWndProc = Proc;
wc.lpszClassName = Name;
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
if(!RegisterClassEx(&wc)) return 0;
hwnd = CreateWindowEx(0,
Name,
Name,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
hInst,
0);
return 1;
}
LRESULT CALLBACK Proc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, msg, wPar, lPar);
}
i kod shadera:
void vsmain(float4 pos : POSITION,
float4 color : COLOR,
out float4 oPos : POSITION,
out float4 oColor : COLOR)
{
oPos = pos;
oColor = color;
}
float4 psmain(float4 color : COLOR) : COLOR
{
return color;
}
technique std
{
pass
{
VertexShader = compile vs_2_0 vsmain();
PixelShader = compile ps_2_0 psmain();
}
}
Bardzo proszę o pomoc i jeszcze raz dzieki ;]