Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 21. listopad 2010, 23:12:26 Předmět: Direct3D a WS_CHILD okno |
|
|
Marně se snažím vytvořit dětské okno s Direct3D. Říkal jsem si, že v tom určitě nebude problém:
(kód je pokrácený)
kód: |
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WNDPROC(WindowProc);
wc.hInstance = app;
wc.lpszClassName = TEXT("EDITOR_CLASS_NAME_D3DWINDOW");
if(!RegisterClassEx(&wc))
{
ThrowError(GetLastError(), TEXT("Nezdařila se registrace třídy okna pro D3D"));
return FALSE;
}
window = CreateWindowEx(NULL, TEXT("EDITOR_CLASS_NAME_D3DWINDOW"), TEXT(""),
WS_CHILD, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
parent, NULL, app, NULL);
if(!window)
{
ThrowError(GetLastError(), TEXT("Nezdařilo se vytvořit okno));
return FALSE;
}
windows[window] = this;
D3DPRESENT_PARAMETERS d3dParam;
ZeroMemory(&d3dParam, sizeof(D3DPRESENT_PARAMETERS));
d3dParam.Windowed = TRUE;
d3dParam.SwapEffect = D3DSWAPEFFECT_FLIP;
d3dParam.BackBufferFormat = D3DFMT_UNKNOWN;
if(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window, D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dParam, &D3DDevice) != D3D_OK)
{
ThrowError(0, TEXT("Nezdařilo se vytvoření D3DDevice"));
return FALSE;
}
if(D3DDevice)
D3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 0, 0);
else
{
ThrowError(0, TEXT("Neexistuje D3DDevice"));
return FALSE;
}
D3DDevice->Present(NULL, NULL, NULL, NULL);
ShowWindow(window, SW_SHOW); |
Jenže CreateDevice mi stále vrací S_FALSE. Když ale změním styl WS_CHILD na WS_OVERLAPPEDWINDOW, tak všechno funguje tak, jak má, jen mám D3D v normálním okně, což nechci. Kde dělám chybu? |
|
Návrat nahoru |
|
|
Crusty
Založen: 28. 08. 2007 Příspěvky: 120 Bydliště: Praha
|
Zaslal: 26. listopad 2010, 19:17:21 Předmět: |
|
|
tahle cast je nejaka zvlastni
kód: |
window = CreateWindowEx(NULL, TEXT("EDITOR_CLASS_NAME_D3DWINDOW"), TEXT(""),
WS_CHILD, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
parent, NULL, app, NULL);
if(!window)
{
ThrowError(GetLastError(), TEXT("Nezdařilo se vytvořit okno));
return FALSE;
}
windows[window] = this;
|
window by melo byt typu HWND kdyz mu prirazujes to co vrati CreateWindowEx() takze ho pak nemuzes pouzit jako index do pole a priradit tam this je take asi spatne. Zkus Directum dat primo to window _________________ http://www.2ox.cz |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 26. listopad 2010, 21:08:01 Předmět: |
|
|
Podle mě je windows typu std::map<HWND, NejakaTrida*>, takže kód by mohl být v pořádku. Každopádně poradit neumím. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 26. listopad 2010, 22:36:45 Předmět: |
|
|
To Crusty: Ano, frca má pravdu. windows je definováno jako std::map<HWND, void*>. Používám to pro přístup k třídě daného okna v proceduře okna.
Problém se mi včera večer podařilo vyřešit; nevím jak moc košer, ale funguje. Jako parametr okna funkci CreateDevice jsem předal nadřazené WS_OVERLAPPED okno a ve funkci Present předávám dětské okno. Je mi záhadou, proč to musí být řešené takto, ale dále to zkoumat (proztím) nebudu. Hlavně že funguje |
|
Návrat nahoru |
|
|
Crusty
Založen: 28. 08. 2007 Příspěvky: 120 Bydliště: Praha
|
Zaslal: 26. listopad 2010, 23:16:27 Předmět: |
|
|
aha a v cem to teda pises? nejaky .NET? _________________ http://www.2ox.cz |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 27. listopad 2010, 00:52:24 Předmět: |
|
|
Tipuju C++
Jinak yaqwsx, doporučuju silně testovat napříč verzema widlí, protože tato "řešení" pak mohou být zdrojem opravdu zajímavých chování. Úplně nejradši bych doporučil testovat všechno i přes wine, protože když to pojede i tam, tak je vysoká šance, že je to opravdu dobře napsané. Vím ale, že tohle zarytým widlákům tohle pod nos moc nejde (nevím, jak jsi na tom ty). _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 27. listopad 2010, 13:12:31 Předmět: |
|
|
Crusty: Píšu v C++
frca: Díky za radu, používat wine pro validaci kódu by mě nikdy nenapadlo. Přece jenom jsem se ale dál snažil tomu přijít na kloub a začínám si myslet, že je to odvislé od grafické karty (zkoušel jsme na hodně stařičké GeForce 5600Fx) |
|
Návrat nahoru |
|
|
|