diff options
| author | Yong He <yonghe@outlook.com> | 2021-01-14 15:48:54 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-14 15:48:54 -0800 |
| commit | f834f25794cfb746079e92d58c7410b767c57208 (patch) | |
| tree | 583a86d4cb2e446c2c06f9d786996d10647baf84 /tools/graphics-app-framework | |
| parent | ac76997690a39605b2b8fbd63de9cbbbc2af2a73 (diff) | |
COM-ify all slang-gfx interfaces. (#1656)
* COM-ify all slang-gfx interfaces.
Diffstat (limited to 'tools/graphics-app-framework')
| -rw-r--r-- | tools/graphics-app-framework/gui.cpp | 66 | ||||
| -rw-r--r-- | tools/graphics-app-framework/gui.h | 11 | ||||
| -rw-r--r-- | tools/graphics-app-framework/model.cpp | 22 | ||||
| -rw-r--r-- | tools/graphics-app-framework/model.h | 6 | ||||
| -rw-r--r-- | tools/graphics-app-framework/window.h | 13 | ||||
| -rw-r--r-- | tools/graphics-app-framework/windows/win-window.cpp | 6 |
6 files changed, 71 insertions, 53 deletions
diff --git a/tools/graphics-app-framework/gui.cpp b/tools/graphics-app-framework/gui.cpp index 3d6039f27..777614d58 100644 --- a/tools/graphics-app-framework/gui.cpp +++ b/tools/graphics-app-framework/gui.cpp @@ -133,13 +133,13 @@ GUI::GUI(Window* window, IRenderer* inRenderer) spDestroyCompileRequest(slangRequest); spDestroySession(slangSession); - gfx::ShaderProgram::KernelDesc kernelDescs[] = + gfx::IShaderProgram::KernelDesc kernelDescs[] = { { gfx::StageType::Vertex, vertexCode, vertexCodeEnd }, { gfx::StageType::Fragment, fragmentCode, fragmentCodeEnd }, }; - gfx::ShaderProgram::Desc programDesc; + gfx::IShaderProgram::Desc programDesc; programDesc.pipelineType = gfx::PipelineType::Graphics; programDesc.kernels = &kernelDescs[0]; programDesc.kernelCount = 2; @@ -160,21 +160,21 @@ GUI::GUI(Window* window, IRenderer* inRenderer) // - List<DescriptorSetLayout::SlotRangeDesc> descriptorSetRanges; - descriptorSetRanges.add(DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer)); - descriptorSetRanges.add(DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::SampledImage)); - descriptorSetRanges.add(DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::Sampler)); + Slang::List<IDescriptorSetLayout::SlotRangeDesc> descriptorSetRanges; + descriptorSetRanges.add(IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer)); + descriptorSetRanges.add(IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::SampledImage)); + descriptorSetRanges.add(IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::Sampler)); - DescriptorSetLayout::Desc descriptorSetLayoutDesc; + IDescriptorSetLayout::Desc descriptorSetLayoutDesc; descriptorSetLayoutDesc.slotRangeCount = descriptorSetRanges.getCount(); descriptorSetLayoutDesc.slotRanges = descriptorSetRanges.getBuffer(); descriptorSetLayout = renderer->createDescriptorSetLayout(descriptorSetLayoutDesc); - List<PipelineLayout::DescriptorSetDesc> pipelineDescriptorSets; - pipelineDescriptorSets.add(PipelineLayout::DescriptorSetDesc(descriptorSetLayout)); + Slang::List<IPipelineLayout::DescriptorSetDesc> pipelineDescriptorSets; + pipelineDescriptorSets.add(IPipelineLayout::DescriptorSetDesc(descriptorSetLayout)); - PipelineLayout::Desc pipelineLayoutDesc; + IPipelineLayout::Desc pipelineLayoutDesc; pipelineLayoutDesc.descriptorSetCount = pipelineDescriptorSets.getCount(); pipelineLayoutDesc.descriptorSets = pipelineDescriptorSets.getBuffer(); pipelineLayoutDesc.renderTargetCount = 1; @@ -209,31 +209,31 @@ GUI::GUI(Window* window, IRenderer* inRenderer) io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); { - gfx::TextureResource::Desc desc; - desc.init2D(Resource::Type::Texture2D, Format::RGBA_Unorm_UInt8, width, height, 1); - desc.setDefaults(Resource::Usage::PixelShaderResource); + gfx::ITextureResource::Desc desc; + desc.init2D(IResource::Type::Texture2D, Format::RGBA_Unorm_UInt8, width, height, 1); + desc.setDefaults(IResource::Usage::PixelShaderResource); ptrdiff_t mipRowStrides[] = { ptrdiff_t(width * 4 * sizeof(unsigned char)) }; void* subResourceData[] = { pixels }; - TextureResource::Data initData; + ITextureResource::Data initData; initData.mipRowStrides = mipRowStrides; initData.numMips = 1; initData.numSubResources = 1; initData.subResources = subResourceData; - auto texture = renderer->createTextureResource(Resource::Usage::PixelShaderResource, desc, &initData); + auto texture = renderer->createTextureResource(IResource::Usage::PixelShaderResource, desc, &initData); - gfx::ResourceView::Desc viewDesc; + gfx::IResourceView::Desc viewDesc; viewDesc.format = desc.format; - viewDesc.type = ResourceView::Type::ShaderResource; + viewDesc.type = IResourceView::Type::ShaderResource; auto textureView = renderer->createTextureView(texture, viewDesc); io.Fonts->TexID = (void*) textureView.detach(); } { - SamplerState::Desc desc; + ISamplerState::Desc desc; samplerState = renderer->createSamplerState(desc); } } @@ -263,20 +263,20 @@ void GUI::endFrame() // Allocate transient vertex/index buffers to hold the data for this frame. - gfx::BufferResource::Desc vertexBufferDesc; + gfx::IBufferResource::Desc vertexBufferDesc; vertexBufferDesc.init(vertexCount * sizeof(ImDrawVert)); - vertexBufferDesc.setDefaults(Resource::Usage::VertexBuffer); - vertexBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write; + vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer); + vertexBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; auto vertexBuffer = renderer->createBufferResource( - Resource::Usage::VertexBuffer, + IResource::Usage::VertexBuffer, vertexBufferDesc); - gfx::BufferResource::Desc indexBufferDesc; + gfx::IBufferResource::Desc indexBufferDesc; indexBufferDesc.init(indexCount * sizeof(ImDrawIdx)); - indexBufferDesc.setDefaults(Resource::Usage::IndexBuffer); - indexBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write; + indexBufferDesc.setDefaults(IResource::Usage::IndexBuffer); + indexBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; auto indexBuffer = renderer->createBufferResource( - Resource::Usage::IndexBuffer, + IResource::Usage::IndexBuffer, indexBufferDesc); { @@ -297,12 +297,12 @@ void GUI::endFrame() } // Allocate a transient constant buffer for projection matrix - gfx::BufferResource::Desc constantBufferDesc; + gfx::IBufferResource::Desc constantBufferDesc; constantBufferDesc.init(sizeof(glm::mat4x4)); - constantBufferDesc.setDefaults(Resource::Usage::ConstantBuffer); - constantBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write; + constantBufferDesc.setDefaults(IResource::Usage::ConstantBuffer); + constantBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; auto constantBuffer = renderer->createBufferResource( - Resource::Usage::ConstantBuffer, + IResource::Usage::ConstantBuffer, constantBufferDesc); { @@ -371,7 +371,7 @@ void GUI::endFrame() auto descriptorSet = renderer->createDescriptorSet(descriptorSetLayout); descriptorSet->setConstantBuffer(0, 0, constantBuffer); descriptorSet->setResource(1, 0, - (gfx::ResourceView*) command->TextureId); + (gfx::IResourceView*) command->TextureId); descriptorSet->setSampler(2, 0, samplerState); @@ -394,8 +394,8 @@ GUI::~GUI() auto& io = ImGui::GetIO(); { - RefPtr<ResourceView> textureView; - textureView.attach((ResourceView*) io.Fonts->TexID); + ComPtr<IResourceView> textureView; + textureView.attach((IResourceView*) io.Fonts->TexID); textureView = nullptr; } diff --git a/tools/graphics-app-framework/gui.h b/tools/graphics-app-framework/gui.h index fa6fda1d1..4fd1ca150 100644 --- a/tools/graphics-app-framework/gui.h +++ b/tools/graphics-app-framework/gui.h @@ -6,10 +6,11 @@ #include "window.h" #include "slang-com-ptr.h" #include "external/imgui/imgui.h" +#include "source/core/slang-basic.h" namespace gfx { -struct GUI : RefObject +struct GUI : Slang::RefObject { GUI(Window* window, IRenderer* renderer); ~GUI(); @@ -19,10 +20,10 @@ struct GUI : RefObject private: Slang::ComPtr<IRenderer> renderer; - RefPtr<PipelineState> pipelineState; - RefPtr<DescriptorSetLayout> descriptorSetLayout; - RefPtr<PipelineLayout> pipelineLayout; - RefPtr<SamplerState> samplerState; + Slang::ComPtr<IPipelineState> pipelineState; + Slang::ComPtr<IDescriptorSetLayout> descriptorSetLayout; + Slang::ComPtr<IPipelineLayout> pipelineLayout; + Slang::ComPtr<ISamplerState> samplerState; }; } // gfx diff --git a/tools/graphics-app-framework/model.cpp b/tools/graphics-app-framework/model.cpp index 6a61c64e5..6984a6818 100644 --- a/tools/graphics-app-framework/model.cpp +++ b/tools/graphics-app-framework/model.cpp @@ -97,7 +97,7 @@ namespace std namespace gfx { -RefPtr<TextureResource> loadTextureImage( +ComPtr<ITextureResource> loadTextureImage( IRenderer* renderer, char const* path) { @@ -178,17 +178,17 @@ RefPtr<TextureResource> loadTextureImage( int mipCount = (int) mipRowStrides.size(); - TextureResource::Desc desc; - desc.init2D(Resource::Type::Texture2D, format, extentX, extentY, mipCount); + ITextureResource::Desc desc; + desc.init2D(IResource::Type::Texture2D, format, extentX, extentY, mipCount); - TextureResource::Data initData; + ITextureResource::Data initData; initData.numSubResources = mipCount; initData.numMips = mipCount; initData.subResources = &subresourceInitData[0]; initData.mipRowStrides = &mipRowStrides[0]; auto texture = renderer->createTextureResource( - Resource::Usage::PixelShaderResource, + IResource::Usage::PixelShaderResource, desc, &initData); @@ -538,22 +538,22 @@ Result ModelLoader::load( modelData.meshCount = int(meshes.size()); modelData.meshes = meshes.data(); - BufferResource::Desc vertexBufferDesc; + IBufferResource::Desc vertexBufferDesc; vertexBufferDesc.init(modelData.vertexCount * sizeof(Vertex)); - vertexBufferDesc.setDefaults(Resource::Usage::VertexBuffer); + vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer); modelData.vertexBuffer = renderer->createBufferResource( - Resource::Usage::VertexBuffer, + IResource::Usage::VertexBuffer, vertexBufferDesc, flatVertices.data()); if(!modelData.vertexBuffer) return SLANG_FAIL; - BufferResource::Desc indexBufferDesc; + IBufferResource::Desc indexBufferDesc; indexBufferDesc.init(modelData.indexCount * sizeof(Index)); - vertexBufferDesc.setDefaults(Resource::Usage::IndexBuffer); + vertexBufferDesc.setDefaults(IResource::Usage::IndexBuffer); modelData.indexBuffer = renderer->createBufferResource( - Resource::Usage::IndexBuffer, + IResource::Usage::IndexBuffer, indexBufferDesc, flatIndices.data()); if(!modelData.indexBuffer) return SLANG_FAIL; diff --git a/tools/graphics-app-framework/model.h b/tools/graphics-app-framework/model.h index 446f57943..44c8f0aab 100644 --- a/tools/graphics-app-framework/model.h +++ b/tools/graphics-app-framework/model.h @@ -17,7 +17,7 @@ struct ModelLoader glm::vec3 specularColor; float specularity; - RefPtr<TextureResource> diffuseMap; + ComPtr<ITextureResource> diffuseMap; }; struct Vertex @@ -39,8 +39,8 @@ struct ModelLoader struct ModelData { - RefPtr<BufferResource> vertexBuffer; - RefPtr<BufferResource> indexBuffer; + ComPtr<IBufferResource> vertexBuffer; + ComPtr<IBufferResource> indexBuffer; PrimitiveTopology primitiveTopology; int vertexCount; int indexCount; diff --git a/tools/graphics-app-framework/window.h b/tools/graphics-app-framework/window.h index e6f886f42..2e216aacf 100644 --- a/tools/graphics-app-framework/window.h +++ b/tools/graphics-app-framework/window.h @@ -57,6 +57,7 @@ struct WindowDesc }; Window* createWindow(WindowDesc const& desc); +void destroyWindow(Window* window); void showWindow(Window* window); void* getPlatformWindowHandle(Window* window); @@ -104,13 +105,23 @@ int runWindowsApplication( void* instance, int showCommand); +#ifdef _MSC_VER +#ifdef _DEBUG +# define GFX_DUMP_LEAK _CrtDumpMemoryLeaks(); +#endif +#endif +#ifndef GFX_DUMP_LEAK +#define GFX_DUMP_LEAK +#endif #define GFX_UI_MAIN(APPLICATION_ENTRY) \ int __stdcall WinMain( \ void* instance, \ void* /* prevInstance */, \ void* /* commandLine */, \ int showCommand) { \ - return gfx::runWindowsApplication(&(APPLICATION_ENTRY), instance, showCommand); \ + auto result = gfx::runWindowsApplication(&(APPLICATION_ENTRY), instance, showCommand); \ + GFX_DUMP_LEAK \ + return result; \ } #else diff --git a/tools/graphics-app-framework/windows/win-window.cpp b/tools/graphics-app-framework/windows/win-window.cpp index 45315a27a..7433603cb 100644 --- a/tools/graphics-app-framework/windows/win-window.cpp +++ b/tools/graphics-app-framework/windows/win-window.cpp @@ -293,6 +293,12 @@ Window* createWindow(WindowDesc const& desc) return window; } +void destroyWindow(Window* window) +{ + DestroyWindow(window->handle); + delete window; +} + void showWindow(Window* window) { ShowWindow(window->handle, SW_SHOW); |
