Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

1

08.12.2013, 15:12

DirectX11 + wxWidgets 3.0

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.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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 =this->STSystem->CreateScene((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: Scene wegmachen
}

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
}

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


Und die Erstellung der SwapChain:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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?

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

2

08.12.2013, 20:34

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ß