Skip to content

Commit

Permalink
Plugin example: Fix some access violations
Browse files Browse the repository at this point in the history
  • Loading branch information
praydog committed Mar 18, 2024
1 parent 38fa684 commit 8b2fc9f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
21 changes: 18 additions & 3 deletions examples/renderlib/rendering/d3d11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@ bool D3D11::initialize() {
}

void D3D11::render_imgui() {
auto draw_data = ImGui::GetDrawData();

if (draw_data == nullptr) {
return;
}

ComPtr<ID3D11DeviceContext> context{};
float clear_color[]{0.0f, 0.0f, 0.0f, 0.0f};

Expand All @@ -67,14 +73,23 @@ void D3D11::render_imgui() {
device->GetImmediateContext(&context);
context->ClearRenderTargetView(this->rt_rtv.Get(), clear_color);
context->OMSetRenderTargets(1, this->rt_rtv.GetAddressOf(), NULL);
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
ImGui_ImplDX11_RenderDrawData(draw_data);

// Set the back buffer to be the render target.
context->OMSetRenderTargets(1, this->bb_rtv.GetAddressOf(), nullptr);
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
ImGui_ImplDX11_RenderDrawData(draw_data);
}

void D3D11::render_imgui_vr(ID3D11DeviceContext* context, ID3D11RenderTargetView* rtv) {
if (context == nullptr || rtv == nullptr) {
return;
}

auto draw_data = ImGui::GetDrawData();
if (draw_data == nullptr) {
return;
}

context->OMSetRenderTargets(1, &rtv, NULL);
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
ImGui_ImplDX11_RenderDrawData(draw_data);
}
10 changes: 8 additions & 2 deletions examples/renderlib/rendering/d3d12.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,13 @@ bool D3D12::initialize() {
return true;
}

void D3D12::render_imgui() {
void D3D12::render_imgui() {
auto draw_data = ImGui::GetDrawData();

if (draw_data == nullptr) {
return;
}

auto& cmd = this->cmds[this->frame_count++ % this->cmds.size()];

if (cmd.fence_event != nullptr && cmd.fence != nullptr && cmd.fence->GetCompletedValue() < cmd.fence_value) {
Expand Down Expand Up @@ -166,7 +172,7 @@ void D3D12::render_imgui() {
rts[0] = this->get_cpu_rtv(device, (D3D12::RTV)bb_index);
cmd.list->OMSetRenderTargets(1, rts, FALSE, NULL);
cmd.list->SetDescriptorHeaps(1, this->srv_desc_heap.GetAddressOf());
ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), cmd.list.Get());
ImGui_ImplDX12_RenderDrawData(draw_data, cmd.list.Get());
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
cmd.list->ResourceBarrier(1, &barrier);
Expand Down

0 comments on commit 8b2fc9f

Please sign in to comment.