Skip to content
This repository was archived by the owner on Mar 22, 2025. It is now read-only.

Commit f2c190b

Browse files
committed
Fixed c_renderer_pipeline::end.
Added i_frame_buffer::set_from_external. Added stored_frame_buffer in i_state_pipeline.
1 parent 3e17e4a commit f2c190b

File tree

14 files changed

+58
-3
lines changed

14 files changed

+58
-3
lines changed

backends/directx11/src/null-render-backend-directx11.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ namespace ntl::render::directx11 {
158158
context->ClearState();
159159
backend::renderer->create_objects();
160160

161-
auto res = swap_chain->ResizeBuffers(0, render::shared::viewport.x, render::shared::viewport.y, DXGI_FORMAT_UNKNOWN, 0);
161+
HRESULT res = swap_chain->ResizeBuffers(0, render::shared::viewport.x, render::shared::viewport.y, DXGI_FORMAT_UNKNOWN, 0);
162162
backend::renderer->end_resize_viewport();
163163
resize_buffers = false;
164164
}

backends/directx11/src/null-render-backend-directx11/internal/frame-buffer/frame-buffer.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
#include "frame-buffer.h"
22

33
namespace ntl::render::directx11 {
4+
void c_frame_buffer::set_from_external(void* external_resource) {
5+
if(render_target == external_resource) return;
6+
if(render_target) destroy();
7+
render_target = (ID3D11RenderTargetView*)external_resource;
8+
render_target->AddRef();
9+
10+
ID3D11Resource* resource{ };
11+
render_target->GetResource(&resource);
12+
resource->QueryInterface<ID3D11Texture2D>(&render_target_texture);
13+
resource->Release();
14+
}
15+
416
void c_frame_buffer::create() {
517
if(!empty()) return;
18+
if(type == backend::e_frame_buffer_type::external) return;
619

720
//@note: creating texture for render target
821
if(type == backend::e_frame_buffer_type::postprocessing) {

backends/directx11/src/null-render-backend-directx11/internal/frame-buffer/frame-buffer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ namespace ntl::render::directx11 {
1616
void* get_surface() override { return render_target_texture; }
1717
void* get_texture() override { return shader_resource_view; }
1818

19+
void set_from_external(void* external_resource) override;
20+
1921
public:
2022
void create() override;
2123
void destroy() override;

backends/directx11/src/null-render-backend-directx11/state-pipeline/state-pipeline.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace ntl::render::directx11 {
1414

1515
void c_state_pipeline::save_state() {
1616
shared.context->OMGetRenderTargets(1, &saved_state.render_target_view, &saved_state.depth_stencil_view);
17+
stored_frame_buffer->set_from_external(saved_state.render_target_view);
1718

1819
saved_state.scissor_rects_count = saved_state.viewports_count = D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE;
1920
shared.context->RSGetScissorRects(&saved_state.scissor_rects_count, saved_state.scissor_rects);

backends/directx9/src/null-render-backend-directx9/internal/frame-buffer/frame-buffer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
#include "frame-buffer.h"
22

33
namespace ntl::render::directx9 {
4+
void c_frame_buffer::set_from_external(void* external_resource) {
5+
if(surface == external_resource) return;
6+
if(surface) destroy();
7+
surface = (IDirect3DSurface9*)external_resource;
8+
surface->AddRef();
9+
}
10+
411
void c_frame_buffer::create() {
512
if(!empty()) return;
13+
if(type == backend::e_frame_buffer_type::external) return;
614

715
//@note: creating texture for render target
816
if(type == backend::e_frame_buffer_type::postprocessing) {

backends/directx9/src/null-render-backend-directx9/internal/frame-buffer/frame-buffer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ namespace ntl::render::directx9 {
1313
void* get_surface() override { return surface; }
1414
void* get_texture() override { return texture; }
1515

16+
void set_from_external(void* external_resource) override;
17+
1618
public:
1719
void create() override;
1820
void destroy() override;

backends/directx9/src/null-render-backend-directx9/state-pipeline/state-pipeline.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ namespace ntl::render::directx9 {
5656
shared.device->GetVertexDeclaration(&vertex_declaration);
5757
shared.device->GetStreamSource(0, &vertex_buffer, &vertex_offset, &vertex_stride);
5858
shared.device->GetIndices(&index_buffer);
59+
60+
stored_frame_buffer->set_from_external(framebuffer);
5961
}
6062

6163
void c_state_pipeline::restore_state() {

backends/opengl3/src/null-render-backend-opengl3/internal/frame-buffer/frame-buffer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace ntl::render::opengl3 {
55
void c_frame_buffer::create() {
66
if(!empty()) return;
7+
if(type == backend::e_frame_buffer_type::external) return;
78

89
if(type == backend::e_frame_buffer_type::postprocessing) {
910
opengl::gen_framebuffers(1, &fbo);

backends/opengl3/src/null-render-backend-opengl3/internal/frame-buffer/frame-buffer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ namespace ntl::render::opengl3 {
1111
void* get_surface() override { return (void*)fbo; }
1212
void* get_texture() override { return (void*)fbo_attachment; }
1313

14+
void set_from_external(void* external_resource) override { fbo = (std::uint32_t)external_resource; }
15+
1416
public:
1517
void create() override;
1618
void destroy() override;

backends/opengl3/src/null-render-backend-opengl3/state-pipeline/state-pipeline.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ namespace ntl::render::opengl3 {
6363
//@note: rasterizer save
6464
saved_rasterizer.enable_scissor_test = opengl::is_enabled(opengl::e_scissor_test);
6565
saved_rasterizer.enable_multisample = opengl::is_enabled(opengl::e_multisample);
66+
67+
stored_frame_buffer->set_from_external((void*)saved_state.draw_fbo);
6668
}
6769

6870
void c_state_pipeline::restore_state() {

0 commit comments

Comments
 (0)