summaryrefslogtreecommitdiffstats
path: root/tools/platform
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-03-10 10:58:15 -0800
committerGitHub <noreply@github.com>2021-03-10 10:58:15 -0800
commit6ef4054f8a8aea4ec61481057fa7e16aaecde6d7 (patch)
tree66edcae112faff7276c2595865463698bde277fd /tools/platform
parent2765861cdc104e6104a31cf9e20800b8d1dfae26 (diff)
Swapchain resize and rename to `IDevice` (#1741)
* Swapchain resize * Fix.
Diffstat (limited to 'tools/platform')
-rw-r--r--tools/platform/gui.cpp37
-rw-r--r--tools/platform/gui.h4
-rw-r--r--tools/platform/model.cpp14
-rw-r--r--tools/platform/model.h2
-rw-r--r--tools/platform/window.h6
-rw-r--r--tools/platform/windows/win-window.cpp7
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;