diff options
| author | Yong He <yonghe@outlook.com> | 2021-03-10 10:58:15 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-10 10:58:15 -0800 |
| commit | 6ef4054f8a8aea4ec61481057fa7e16aaecde6d7 (patch) | |
| tree | 66edcae112faff7276c2595865463698bde277fd /tools/platform | |
| parent | 2765861cdc104e6104a31cf9e20800b8d1dfae26 (diff) | |
Swapchain resize and rename to `IDevice` (#1741)
* Swapchain resize
* Fix.
Diffstat (limited to 'tools/platform')
| -rw-r--r-- | tools/platform/gui.cpp | 37 | ||||
| -rw-r--r-- | tools/platform/gui.h | 4 | ||||
| -rw-r--r-- | tools/platform/model.cpp | 14 | ||||
| -rw-r--r-- | tools/platform/model.h | 2 | ||||
| -rw-r--r-- | tools/platform/window.h | 6 | ||||
| -rw-r--r-- | tools/platform/windows/win-window.cpp | 7 |
6 files changed, 39 insertions, 31 deletions
diff --git a/tools/platform/gui.cpp b/tools/platform/gui.cpp index cf7e74acc..5c210f460 100644 --- a/tools/platform/gui.cpp +++ b/tools/platform/gui.cpp @@ -40,10 +40,10 @@ void setNativeWindowHook(Window* window, WNDPROC proc); GUI::GUI( Window* window, - IRenderer* inRenderer, + IDevice* inDevice, ICommandQueue* inQueue, IFramebufferLayout* framebufferLayout) - : renderer(inRenderer) + : device(inDevice) , queue(inQueue) { ImGui::CreateContext(); @@ -151,7 +151,7 @@ GUI::GUI( programDesc.kernels = &kernelDescs[0]; programDesc.kernelCount = 2; - auto program = renderer->createProgram(programDesc); + auto program = device->createProgram(programDesc); vertexShaderBlob->release(); fragmentShaderBlob->release(); @@ -161,7 +161,7 @@ GUI::GUI( {"U", 1, Format::RG_Float32, offsetof(ImDrawVert, uv) }, {"U", 2, Format::RGBA_Unorm_UInt8, offsetof(ImDrawVert, col) }, }; - auto inputLayout = renderer->createInputLayout( + auto inputLayout = device->createInputLayout( &inputElements[0], SLANG_COUNT_OF(inputElements)); @@ -176,7 +176,7 @@ GUI::GUI( descriptorSetLayoutDesc.slotRangeCount = descriptorSetRanges.getCount(); descriptorSetLayoutDesc.slotRanges = descriptorSetRanges.getBuffer(); - descriptorSetLayout = renderer->createDescriptorSetLayout(descriptorSetLayoutDesc); + descriptorSetLayout = device->createDescriptorSetLayout(descriptorSetLayoutDesc); Slang::List<IPipelineLayout::DescriptorSetDesc> pipelineDescriptorSets; pipelineDescriptorSets.add(IPipelineLayout::DescriptorSetDesc(descriptorSetLayout)); @@ -186,7 +186,7 @@ GUI::GUI( pipelineLayoutDesc.descriptorSets = pipelineDescriptorSets.getBuffer(); pipelineLayoutDesc.renderTargetCount = 1; - pipelineLayout = renderer->createPipelineLayout(pipelineLayoutDesc); + pipelineLayout = device->createPipelineLayout(pipelineLayoutDesc); TargetBlendDesc targetBlendDesc; targetBlendDesc.color.srcFactor = BlendFactor::SrcAlpha; @@ -208,7 +208,7 @@ GUI::GUI( // TODO: need to set up blending state... - pipelineState = renderer->createGraphicsPipelineState(pipelineDesc); + pipelineState = device->createGraphicsPipelineState(pipelineDesc); // Initialize the texture atlas unsigned char* pixels; @@ -229,19 +229,20 @@ GUI::GUI( initData.numSubResources = 1; initData.subResources = subResourceData; - auto texture = renderer->createTextureResource(IResource::Usage::PixelShaderResource, desc, &initData); + auto texture = + device->createTextureResource(IResource::Usage::PixelShaderResource, desc, &initData); gfx::IResourceView::Desc viewDesc; viewDesc.format = desc.format; viewDesc.type = IResourceView::Type::ShaderResource; - auto textureView = renderer->createTextureView(texture, viewDesc); + auto textureView = device->createTextureView(texture, viewDesc); io.Fonts->TexID = (void*) textureView.detach(); } { ISamplerState::Desc desc; - samplerState = renderer->createSamplerState(desc); + samplerState = device->createSamplerState(desc); } { @@ -255,7 +256,7 @@ GUI::GUI( colorAccess.storeOp = IRenderPassLayout::AttachmentStoreOp::Store; desc.renderTargetAccess = &colorAccess; desc.renderTargetCount = 1; - renderPass = renderer->createRenderPassLayout(desc); + renderPass = device->createRenderPassLayout(desc); } } @@ -288,15 +289,14 @@ void GUI::endFrame(IFramebuffer* framebuffer) vertexBufferDesc.init(vertexCount * sizeof(ImDrawVert)); vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer); vertexBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; - auto vertexBuffer = renderer->createBufferResource( - IResource::Usage::VertexBuffer, - vertexBufferDesc); + auto vertexBuffer = + device->createBufferResource(IResource::Usage::VertexBuffer, vertexBufferDesc); gfx::IBufferResource::Desc indexBufferDesc; indexBufferDesc.init(indexCount * sizeof(ImDrawIdx)); indexBufferDesc.setDefaults(IResource::Usage::IndexBuffer); indexBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; - auto indexBuffer = renderer->createBufferResource( + auto indexBuffer = device->createBufferResource( IResource::Usage::IndexBuffer, indexBufferDesc); auto cmdBuf = queue->createCommandBuffer(); @@ -323,9 +323,8 @@ void GUI::endFrame(IFramebuffer* framebuffer) constantBufferDesc.init(sizeof(glm::mat4x4)); constantBufferDesc.setDefaults(IResource::Usage::ConstantBuffer); constantBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; - auto constantBuffer = renderer->createBufferResource( - IResource::Usage::ConstantBuffer, - constantBufferDesc); + auto constantBuffer = + device->createBufferResource(IResource::Usage::ConstantBuffer, constantBufferDesc); { float L = draw_data->DisplayPos.x; @@ -389,7 +388,7 @@ void GUI::endFrame(IFramebuffer* framebuffer) renderEncoder->setScissorRects(1, &rect); // TODO: This should be a dynamic/transient descriptor set... - auto descriptorSet = renderer->createDescriptorSet(descriptorSetLayout, gfx::IDescriptorSet::Flag::Transient); + auto descriptorSet = device->createDescriptorSet(descriptorSetLayout, gfx::IDescriptorSet::Flag::Transient); descriptorSet->setConstantBuffer(0, 0, constantBuffer); descriptorSet->setResource(1, 0, (gfx::IResourceView*) command->TextureId); diff --git a/tools/platform/gui.h b/tools/platform/gui.h index d22da3299..970f3a4e8 100644 --- a/tools/platform/gui.h +++ b/tools/platform/gui.h @@ -13,7 +13,7 @@ namespace platform { struct GUI : Slang::RefObject { GUI(Window* window, - gfx::IRenderer* renderer, + gfx::IDevice* device, gfx::ICommandQueue* queue, gfx::IFramebufferLayout* framebufferLayout); ~GUI(); @@ -22,7 +22,7 @@ struct GUI : Slang::RefObject void endFrame(gfx::IFramebuffer* framebuffer); private: - Slang::ComPtr<gfx::IRenderer> renderer; + Slang::ComPtr<gfx::IDevice> device; Slang::ComPtr<gfx::ICommandQueue> queue; Slang::ComPtr<gfx::IRenderPassLayout> renderPass; Slang::ComPtr<gfx::IPipelineState> pipelineState; diff --git a/tools/platform/model.cpp b/tools/platform/model.cpp index f28577631..287f80958 100644 --- a/tools/platform/model.cpp +++ b/tools/platform/model.cpp @@ -98,7 +98,7 @@ namespace gfx { ComPtr<ITextureResource> loadTextureImage( - IRenderer* renderer, + IDevice* device, char const* path) { int extentX = 0; @@ -187,10 +187,8 @@ ComPtr<ITextureResource> loadTextureImage( initData.subResources = &subresourceInitData[0]; initData.mipRowStrides = &mipRowStrides[0]; - auto texture = renderer->createTextureResource( - IResource::Usage::PixelShaderResource, - desc, - &initData); + auto texture = + device->createTextureResource(IResource::Usage::PixelShaderResource, desc, &initData); free(data); @@ -262,7 +260,7 @@ Result ModelLoader::load( if(objMaterial.diffuse_texname.length()) { materialData.diffuseMap = loadTextureImage( - renderer, + device, objMaterial.diffuse_texname.c_str()); } @@ -542,7 +540,7 @@ Result ModelLoader::load( vertexBufferDesc.init(modelData.vertexCount * sizeof(Vertex)); vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer); - modelData.vertexBuffer = renderer->createBufferResource( + modelData.vertexBuffer = device->createBufferResource( IResource::Usage::VertexBuffer, vertexBufferDesc, flatVertices.data()); @@ -552,7 +550,7 @@ Result ModelLoader::load( indexBufferDesc.init(modelData.indexCount * sizeof(Index)); vertexBufferDesc.setDefaults(IResource::Usage::IndexBuffer); - modelData.indexBuffer = renderer->createBufferResource( + modelData.indexBuffer = device->createBufferResource( IResource::Usage::IndexBuffer, indexBufferDesc, flatIndices.data()); diff --git a/tools/platform/model.h b/tools/platform/model.h index 412f10a1d..8cff2c67d 100644 --- a/tools/platform/model.h +++ b/tools/platform/model.h @@ -66,7 +66,7 @@ struct ModelLoader }; ICallbacks* callbacks = nullptr; - Slang::ComPtr<IRenderer> renderer; + Slang::ComPtr<IDevice> device; LoadFlags loadFlags = 0; float scale = 1.0f; diff --git a/tools/platform/window.h b/tools/platform/window.h index c776c3ffa..e4a867f0b 100644 --- a/tools/platform/window.h +++ b/tools/platform/window.h @@ -146,11 +146,17 @@ struct Rect int width, height; }; +enum class WindowStyle +{ + Default, FixedSize, +}; + struct WindowDesc { char const* title = nullptr; int width = 0; int height = 0; + WindowStyle style = WindowStyle::Default; }; class Window : public Slang::RefObject diff --git a/tools/platform/windows/win-window.cpp b/tools/platform/windows/win-window.cpp index 0362a6839..8822a6393 100644 --- a/tools/platform/windows/win-window.cpp +++ b/tools/platform/windows/win-window.cpp @@ -310,7 +310,12 @@ public: Win32PlatformWindow(const WindowDesc& desc) { DWORD windowExtendedStyle = 0; - DWORD style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU; + style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU; + if (desc.style == WindowStyle::Default) + { + style |= WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME; + } + HINSTANCE instance = (HINSTANCE)GetModuleHandle(0); RECT windowRect; |
