Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ set(LIBRARY_SOURCES
Src/ModelLoadVBO.cpp
Src/NormalMapEffect.cpp
Src/NPREffect.cpp
Src/NPREffectFactory.cpp
Src/PBREffect.cpp
Src/PBREffectFactory.cpp
Src/pch.h
Expand Down Expand Up @@ -346,7 +347,7 @@ if(WIN32 AND BUILD_SHARED_LIBS)
elseif(XBOX_CONSOLE_TARGET MATCHES "durango")
target_link_libraries(${PROJECT_NAME} PRIVATE kernelx.lib combase.lib d3d12_x.lib xi.lib)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE d3d12.lib)
target_link_libraries(${PROJECT_NAME} PRIVATE d3d12.lib dxguid.lib)
endif()

if(MINGW AND BUILD_XINPUT)
Expand Down
1 change: 1 addition & 0 deletions DirectXTK_Desktop_2022_Win10.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@
<ClCompile Include="Src\GraphicsMemory.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_Desktop_2022_Win10.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,9 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Src\Shaders\CompileShaders.cmd">
Expand Down
2 changes: 1 addition & 1 deletion DirectXTK_Desktop_2026.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
</Folder>
<Project Path="DirectXTK_Desktop_2026.vcxproj" />
<Project Path="DirectXTK_Desktop_2026.vcxproj" Id="3e0e8608-cd9b-4c76-af33-29ca38f2c9f0" />
</Solution>
1 change: 1 addition & 0 deletions DirectXTK_Desktop_2026.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@
<ClCompile Include="Src\GraphicsMemory.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_Desktop_2026.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,9 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Src\Shaders\CompileShaders.cmd">
Expand Down
1 change: 1 addition & 0 deletions DirectXTK_GDKW_2022.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,7 @@
<ClCompile Include="Src\Mouse.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_GDKW_2022.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,9 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Src\Shaders\Common.fxh">
Expand Down
1 change: 1 addition & 0 deletions DirectXTK_GDKX_2022.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,7 @@
<ClCompile Include="Src\Mouse.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_GDKX_2022.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,9 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Src\Shaders\Common.fxh">
Expand Down
1 change: 1 addition & 0 deletions DirectXTK_GDKX_2026.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,7 @@
<ClCompile Include="Src\Mouse.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_GDKX_2026.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,9 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Src\Shaders\Common.fxh">
Expand Down
1 change: 1 addition & 0 deletions DirectXTK_GDK_2022.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,7 @@
<ClCompile Include="Src\Mouse.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_GDK_2022.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,9 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Src\Shaders\Common.fxh">
Expand Down
1 change: 1 addition & 0 deletions DirectXTK_Windows10_2022.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
<ClCompile Include="Src\Mouse.cpp" />
<ClCompile Include="Src\NormalMapEffect.cpp" />
<ClCompile Include="Src\NPREffect.cpp" />
<ClCompile Include="Src\NPREffectFactory.cpp" />
<ClCompile Include="Src\PBREffect.cpp" />
<ClCompile Include="Src\PBREffectFactory.cpp" />
<ClCompile Include="Src\pch.cpp">
Expand Down
3 changes: 3 additions & 0 deletions DirectXTK_Windows10_2022.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -386,5 +386,8 @@
<ClCompile Include="Src\ModelLoadCMO.cpp">
<Filter>Src</Filter>
</ClCompile>
<ClCompile Include="Src\NPREffectFactory.cpp">
<Filter>Src</Filter>
</ClCompile>
</ItemGroup>
</Project>
106 changes: 100 additions & 6 deletions Inc/Effects.h
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,7 @@ namespace DirectX
DIRECTX_TOOLKIT_API void __cdecl SetSpecularTexture(D3D12_GPU_DESCRIPTOR_HANDLE srvDescriptor);

protected:
// Private implementation.
// internal implementation.
class Impl;

std::unique_ptr<Impl> pImpl;
Expand Down Expand Up @@ -663,7 +663,7 @@ namespace DirectX
DIRECTX_TOOLKIT_API void __cdecl SetRenderTargetSizeInPixels(int width, int height);

protected:
// Private implementation.
// Internal implementation.
class Impl;

std::unique_ptr<Impl> pImpl;
Expand All @@ -674,6 +674,7 @@ namespace DirectX
const EffectPipelineStateDescription& pipelineDescription,
bool skinningEnabled);

private:
// Unsupported interface methods.
DIRECTX_TOOLKIT_API void XM_CALLCONV SetAmbientLightColor(FXMVECTOR value) override;
DIRECTX_TOOLKIT_API void XM_CALLCONV SetLightSpecularColor(int whichLight, FXMVECTOR value) override;
Expand Down Expand Up @@ -763,11 +764,13 @@ namespace DirectX
Mode_MatCap, // Material Capture shading
};

DIRECTX_TOOLKIT_API NPREffect(
DIRECTX_TOOLKIT_API inline NPREffect(
_In_ ID3D12Device* device,
uint32_t effectFlags,
const EffectPipelineStateDescription& pipelineDescription,
Mode nprMode = Mode_Cel);
Mode nprMode = Mode_Cel) :
NPREffect(device, effectFlags, pipelineDescription, nprMode, false)
{}

DIRECTX_TOOLKIT_API NPREffect(NPREffect&&) noexcept;
DIRECTX_TOOLKIT_API NPREffect& operator= (NPREffect&&) noexcept;
Expand Down Expand Up @@ -821,19 +824,54 @@ namespace DirectX
DIRECTX_TOOLKIT_API void __cdecl SetRimLightingRange(float start, float end);
DIRECTX_TOOLKIT_API void __cdecl DisableRimLighting();

private:
// Private implementation.
protected:
// Internal implementation.
class Impl;

std::unique_ptr<Impl> pImpl;

DIRECTX_TOOLKIT_API NPREffect(
_In_ ID3D12Device* device,
uint32_t effectFlags,
const EffectPipelineStateDescription& pipelineDescription,
Mode nprMode,
bool skinningEnabled);

private:
// Unsupported interface methods.
DIRECTX_TOOLKIT_API void XM_CALLCONV SetAmbientLightColor(FXMVECTOR value) override;
DIRECTX_TOOLKIT_API void __cdecl SetLightEnabled(int whichLight, bool value) override;
DIRECTX_TOOLKIT_API void XM_CALLCONV SetLightDiffuseColor(int whichLight, FXMVECTOR value) override;
DIRECTX_TOOLKIT_API void XM_CALLCONV SetLightSpecularColor(int whichLight, FXMVECTOR value) override;
};

class DIRECTX_TOOLKIT_API SkinnedNPREffect : public NPREffect, public IEffectSkinning
{
public:
SkinnedNPREffect(
_In_ ID3D12Device* device,
uint32_t effectFlags,
const EffectPipelineStateDescription& pipelineDescription,
Mode nprMode = Mode_Cel) :
NPREffect(device, effectFlags, pipelineDescription, nprMode, true)
{}

SkinnedNPREffect(SkinnedNPREffect&&) = default;
SkinnedNPREffect& operator= (SkinnedNPREffect&&) = default;

SkinnedNPREffect(SkinnedNPREffect const&) = delete;
SkinnedNPREffect& operator= (SkinnedNPREffect const&) = delete;

~SkinnedNPREffect() override;

// IEffect methods.
void __cdecl Apply(_In_ ID3D12GraphicsCommandList* commandList) override;

// Animation settings.
void __cdecl SetBoneTransforms(_In_reads_(count) XMMATRIX const* value, size_t count) override;
void __cdecl ResetBoneTransforms() override;
};


//------------------------------------------------------------------------------
// Abstract interface to factory texture resources
Expand Down Expand Up @@ -1017,6 +1055,9 @@ namespace DirectX

DIRECTX_TOOLKIT_API void __cdecl EnableInstancing(bool enabled) noexcept;

// Properties.
DIRECTX_TOOLKIT_API ID3D12Device* GetDevice() const noexcept;

private:
// Private implementation.
class Impl;
Expand Down Expand Up @@ -1058,6 +1099,59 @@ namespace DirectX

DIRECTX_TOOLKIT_API void __cdecl EnableInstancing(bool enabled) noexcept;

// Properties.
DIRECTX_TOOLKIT_API ID3D12Device* GetDevice() const noexcept;

private:
// Private implementation.
class Impl;

std::shared_ptr<Impl> pImpl;
};


// Factory for Non-Photorealistic Rendering (NPR)
class NPREffectFactory : public IEffectFactory
{
public:
DIRECTX_TOOLKIT_API NPREffectFactory(_In_ ID3D12Device* device);
DIRECTX_TOOLKIT_API NPREffectFactory(
_In_ ID3D12DescriptorHeap* textureDescriptors,
_In_ ID3D12DescriptorHeap* samplerDescriptors);

DIRECTX_TOOLKIT_API NPREffectFactory(NPREffectFactory&&) noexcept;
DIRECTX_TOOLKIT_API NPREffectFactory& operator= (NPREffectFactory&&) noexcept;

NPREffectFactory(NPREffectFactory const&) = delete;
NPREffectFactory& operator= (NPREffectFactory const&) = delete;

DIRECTX_TOOLKIT_API ~NPREffectFactory() override;

// IEffectFactory methods.
DIRECTX_TOOLKIT_API virtual std::shared_ptr<IEffect> __cdecl CreateEffect(
const EffectInfo& info,
const EffectPipelineStateDescription& opaquePipelineState,
const EffectPipelineStateDescription& alphaPipelineState,
const D3D12_INPUT_LAYOUT_DESC& inputLayout,
int textureDescriptorOffset = 0,
int samplerDescriptorOffset = 0) override;

// Settings.
DIRECTX_TOOLKIT_API void __cdecl ReleaseCache();

DIRECTX_TOOLKIT_API void __cdecl SetSharing(bool enabled) noexcept;

DIRECTX_TOOLKIT_API void __cdecl EnableInstancing(bool enabled) noexcept;

DIRECTX_TOOLKIT_API void __cdecl SetMode(NPREffect::Mode mode) noexcept;

DIRECTX_TOOLKIT_API void __cdecl SetDefaultMatCap(int textureIndex, int samplerIndex) noexcept;

DIRECTX_TOOLKIT_API void __cdecl SetEmissiveAsMatCap(bool value) noexcept;

// Properties.
DIRECTX_TOOLKIT_API ID3D12Device* GetDevice() const noexcept;

private:
// Private implementation.
class Impl;
Expand Down
7 changes: 6 additions & 1 deletion Src/EffectFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ class EffectFactory::Impl
bool mEnableFog;
bool mEnableInstancing;

private:
ComPtr<ID3D12Device> mDevice;

private:
using EffectCache = std::map< std::wstring, std::shared_ptr<IEffect> >;

EffectCache mEffectCache;
Expand Down Expand Up @@ -595,3 +595,8 @@ void EffectFactory::EnableNormalMapEffect(bool enabled) noexcept
{
pImpl->mUseNormalMapEffect = enabled;
}

ID3D12Device* EffectFactory::GetDevice() const noexcept
{
return pImpl->mDevice.Get();
}
Loading
Loading