DirectX11 + wxWidgets 3.0

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

DirectX11 + wxWidgets 3.0

Beitrag von Raven280438 »

Hi,

ich habe versucht, in einem wxWidgets 3.0 wxPanel etwas mit Directx11 zu rendern.
Dazu habe ich eine eigene Klasse erstellt, die ich von wxPanel erben lasse. Das Panel hat eine Größe von 100x100 px.
Bei mir ist jedoch die komplette wxFrame, wo das Panel drin liegt schwarz (eigentlich sollte nur die 100x100 px Fläche schwarz sein.

Kann mir jemand sagen, woran das liegen kann? Ich habe im Debugger geprüft, die HWND vom Panel und das in der Swapchain verwendete HWND sind identisch.

Hier mal der Code vom Panel:

Code: Alles auswählen

BEGIN_EVENT_TABLE(STMaker::Widgets::DXPanel, wxPanel)
    EVT_SIZE(STMaker::Widgets::DXPanel::OnSize)
    EVT_PAINT(STMaker::Widgets::DXPanel::OnPaint)
    EVT_ERASE_BACKGROUND(STMaker::Widgets::DXPanel::OnEraseBackground)
    EVT_IDLE(STMaker::Widgets::DXPanel::OnIdle)
END_EVENT_TABLE()

STMaker::Widgets::DXPanel::DXPanel(wxFrame* parent,STEngine::System* system,wxPoint pos, wxSize size) : wxPanel(parent,wxID_ANY,pos,size,wxFULL_REPAINT_ON_RESIZE)
{
	this->STSystem = system;
}

bool STMaker::Widgets::DXPanel::InitDX()
{
	try
	{
		this->STScene = (STEngine::Scene::SingleTileScene*)this->STSystem->CreateScene(STEngine::Scene::SINGLETILE,(HWND)this->GetHWND(),this->GetSize().GetWidth(),this->GetSize().GetHeight(),false);
	}
	catch (STEngine::Exceptions::STException e)
	{
		wxMessageBox(e.GetError(), "CREATE SCENE ERROR", wxOK, this);
		return false;
	}

	return true;
}

void STMaker::Widgets::DXPanel::OnClose(wxCloseEvent &event)
{
	//TODO: Release Scene
}

void STMaker::Widgets::DXPanel::OnIdle(wxIdleEvent &event)
{
    event.RequestMore(true);
	if (this->STScene->Init == true)
	{
		this->STScene->RenderScene();
	}
}

void STMaker::Widgets::DXPanel::OnPaint( wxPaintEvent& WXUNUSED(event) )
{
    wxPaintDC dc(this);

	if (this->STScene->Init == false)
	{
		this->STScene->InitScene();
	}
}

void STMaker::Widgets::DXPanel::OnSize(wxSizeEvent& event)
{
    // Reset the D3D view aspect
	//this->STScene->ResizeScene(event.GetSize().GetWidth(), event.GetSize().GetHeight());
}

void STMaker::Widgets::DXPanel::OnEraseBackground(wxEraseEvent& WXUNUSED(event))
{
    // Do nothing, to avoid flashing on MSW
}
Und die Erstellung der SwapChain:

Code: Alles auswählen

IDXGISwapChain* STEngine::Grafics::D3D::CreateNewSwapChain(HWND hwnd,int width, int height,bool fullscreen)
{
	DXGI_SWAP_CHAIN_DESC scd;
	
    ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC));
	
    scd.BufferCount = 1;
    scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    scd.BufferDesc.Width = width;
    scd.BufferDesc.Height = height;
    scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    scd.OutputWindow = hwnd;
    scd.SampleDesc.Count = 4;
    scd.Windowed = !fullscreen;
    scd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
 
	IDXGISwapChain* swapchain;

	HRESULT hres;
	hres = this->Factory->CreateSwapChain(this->DXDevice,&scd,&swapchain);
	if (FAILED(hres))
	{
		THROW_GraficsException("error_createswapchain","SwapChain konnte nicht erstellt werden!",hres);
		return NULL;
	}

	return swapchain;
}
Kann mir da jemand weiterhelfen? Hab ich vielleicht was wichtiges vergessen?


Gruß
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

Re: DirectX11 + wxWidgets 3.0

Beitrag von Raven280438 »

Hi,

ich habe die wxWidgets-App nochmal neu gemacht, hab aber immernoch das gleiche Problem. Bin mir fast sicher, dass das Problem am DirectX liegt.
Bin schon seit Stunden am debuggen, aber ich find den Fehler nicht.

Hat jemand eine Idee woran das liegen kann?
Ich hab das Projekt mal hochgeladen.


Irgendwer ne Idee?


Gruß
Antworten