.[ ČeskéHry.cz ].
Direct3D a WS_CHILD okno

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 21. listopad 2010, 23:12:26    Předmět: Direct3D a WS_CHILD okno Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crusty



Založen: 28. 08. 2007
Příspěvky: 120
Bydliště: Praha

PříspěvekZaslal: 26. listopad 2010, 19:17:21    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 26. listopad 2010, 21:08:01    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 26. listopad 2010, 22:36:45    Předmět: Odpovědět s citátem

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 Twisted Evil
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crusty



Založen: 28. 08. 2007
Příspěvky: 120
Bydliště: Praha

PříspěvekZaslal: 26. listopad 2010, 23:16:27    Předmět: Odpovědět s citátem

aha a v cem to teda pises? nejaky .NET?
_________________
http://www.2ox.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 27. listopad 2010, 00:52:24    Předmět: Odpovědět s citátem

Tipuju C++ Razz
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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 27. listopad 2010, 13:12:31    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna