FCT
载入中...
搜索中...
未找到
VK_Sampler.cpp
浏览该文件的文档.
1
2
3
#include "
../ThirdParty.h
"
4
#include "
../Context/VK_Context.h
"
5
#include "
VK_Sampler.h
"
6
7
namespace
FCT
8
{
9
namespace
RHI
10
{
11
VK_Sampler::VK_Sampler
(
VK_Context
* ctx)
12
:
m_ctx
(ctx),
m_sampler
(nullptr)
13
{
14
}
15
16
VK_Sampler::~VK_Sampler
()
17
{
18
if
(
m_sampler
) {
19
m_ctx
->getDevice().destroySampler(
m_sampler
);
20
m_sampler
=
nullptr
;
21
}
22
}
23
24
void
VK_Sampler::create
()
25
{
26
if
(
m_sampler
) {
27
m_ctx
->getDevice().destroySampler(
m_sampler
);
28
m_sampler
=
nullptr
;
29
}
30
31
vk::SamplerCreateInfo samplerInfo;
32
samplerInfo.setMagFilter(
toVkFilter
(
m_magFilter
));
33
samplerInfo.setMinFilter(
toVkFilter
(
m_minFilter
));
34
samplerInfo.setMipmapMode(
toVkMipmapMode
(
m_mipmapFilter
));
35
36
samplerInfo.setAddressModeU(
toVkAddressMode
(
m_addressModeU
));
37
samplerInfo.setAddressModeV(
toVkAddressMode
(
m_addressModeV
));
38
samplerInfo.setAddressModeW(
toVkAddressMode
(
m_addressModeW
));
39
40
samplerInfo.setMipLodBias(
m_mipLodBias
);
41
samplerInfo.setAnisotropyEnable(
m_anisotropyEnable
);
42
samplerInfo.setMaxAnisotropy(
m_maxAnisotropy
);
43
44
samplerInfo.setCompareEnable(
m_compareEnable
);
45
samplerInfo.setCompareOp(
toVkCompareOp
(
m_compareOp
));
46
47
samplerInfo.setMinLod(
m_minLod
);
48
samplerInfo.setMaxLod(
m_maxLod
);
49
50
samplerInfo.setBorderColor(
toVkBorderColor
(
m_borderColor
));
51
samplerInfo.setUnnormalizedCoordinates(
m_unnormalizedCoordinates
);
52
53
try
{
54
m_sampler
=
m_ctx
->getDevice().createSampler(samplerInfo);
55
}
56
catch
(
const
std::exception& e) {
57
ferr
<<
"Failed to create sampler: "
<< e.what() << std::endl;
58
m_sampler
=
nullptr
;
59
}
60
}
61
62
vk::Filter
VK_Sampler::toVkFilter
(
FilterMode
mode)
const
63
{
64
switch
(mode) {
65
case
FilterMode::Nearest
:
66
return
vk::Filter::eNearest;
67
case
FilterMode::Linear
:
68
return
vk::Filter::eLinear;
69
default
:
70
return
vk::Filter::eLinear;
71
}
72
}
73
74
vk::SamplerMipmapMode
VK_Sampler::toVkMipmapMode
(
FilterMode
mode)
const
75
{
76
switch
(mode) {
77
case
FilterMode::Nearest
:
78
return
vk::SamplerMipmapMode::eNearest;
79
case
FilterMode::Linear
:
80
return
vk::SamplerMipmapMode::eLinear;
81
default
:
82
return
vk::SamplerMipmapMode::eLinear;
83
}
84
}
85
86
vk::SamplerAddressMode
VK_Sampler::toVkAddressMode
(
AddressMode
mode)
const
87
{
88
switch
(mode) {
89
case
AddressMode::Repeat
:
90
return
vk::SamplerAddressMode::eRepeat;
91
case
AddressMode::MirroredRepeat
:
92
return
vk::SamplerAddressMode::eMirroredRepeat;
93
case
AddressMode::ClampToEdge
:
94
return
vk::SamplerAddressMode::eClampToEdge;
95
case
AddressMode::ClampToBorder
:
96
return
vk::SamplerAddressMode::eClampToBorder;
97
case
AddressMode::MirrorClampToEdge
:
98
return
vk::SamplerAddressMode::eMirrorClampToEdge;
99
default
:
100
return
vk::SamplerAddressMode::eRepeat;
101
}
102
}
103
104
vk::CompareOp
VK_Sampler::toVkCompareOp
(
CompareOp
op)
const
105
{
106
switch
(op) {
107
case
CompareOp::Never
:
108
return
vk::CompareOp::eNever;
109
case
CompareOp::Less
:
110
return
vk::CompareOp::eLess;
111
case
CompareOp::Equal
:
112
return
vk::CompareOp::eEqual;
113
case
CompareOp::LessOrEqual
:
114
return
vk::CompareOp::eLessOrEqual;
115
case
CompareOp::Greater
:
116
return
vk::CompareOp::eGreater;
117
case
CompareOp::NotEqual
:
118
return
vk::CompareOp::eNotEqual;
119
case
CompareOp::GreaterOrEqual
:
120
return
vk::CompareOp::eGreaterOrEqual;
121
case
CompareOp::Always
:
122
return
vk::CompareOp::eAlways;
123
default
:
124
return
vk::CompareOp::eNever;
125
}
126
}
127
128
vk::BorderColor
VK_Sampler::toVkBorderColor
(
BorderColor
color
)
const
129
{
130
switch
(
color
) {
131
case
BorderColor::TransparentBlack
:
132
return
vk::BorderColor::eFloatTransparentBlack;
133
case
BorderColor::OpaqueBlack
:
134
return
vk::BorderColor::eFloatOpaqueBlack;
135
case
BorderColor::OpaqueWhite
:
136
return
vk::BorderColor::eFloatOpaqueWhite;
137
default
:
138
return
vk::BorderColor::eFloatOpaqueBlack;
139
}
140
}
141
}
142
}
ThirdParty.h
VK_Context.h
VK_Sampler.h
FCT::RHI::VK_Sampler::m_ctx
VK_Context * m_ctx
定义
VK_Sampler.h:25
FCT::RHI::VK_Sampler::toVkMipmapMode
vk::SamplerMipmapMode toVkMipmapMode(FilterMode mode) const
定义
VK_Sampler.cpp:74
FCT::RHI::VK_Sampler::VK_Sampler
VK_Sampler(VK_Context *ctx)
定义
VK_Sampler.cpp:11
FCT::RHI::VK_Sampler::m_sampler
vk::Sampler m_sampler
定义
VK_Sampler.h:26
FCT::RHI::VK_Sampler::create
void create() override
定义
VK_Sampler.cpp:24
FCT::RHI::VK_Sampler::~VK_Sampler
~VK_Sampler()
定义
VK_Sampler.cpp:16
FCT::RHI::VK_Sampler::toVkCompareOp
vk::CompareOp toVkCompareOp(CompareOp op) const
定义
VK_Sampler.cpp:104
FCT::RHI::VK_Sampler::toVkAddressMode
vk::SamplerAddressMode toVkAddressMode(AddressMode mode) const
定义
VK_Sampler.cpp:86
FCT::RHI::VK_Sampler::toVkFilter
vk::Filter toVkFilter(FilterMode mode) const
定义
VK_Sampler.cpp:62
FCT::RHI::VK_Sampler::toVkBorderColor
vk::BorderColor toVkBorderColor(BorderColor color) const
定义
VK_Sampler.cpp:128
FCT::Sampler::m_addressModeU
AddressMode m_addressModeU
定义
Sampler.h:132
FCT::Sampler::m_addressModeW
AddressMode m_addressModeW
定义
Sampler.h:134
FCT::Sampler::m_borderColor
BorderColor m_borderColor
定义
Sampler.h:146
FCT::Sampler::m_maxLod
float m_maxLod
定义
Sampler.h:144
FCT::Sampler::m_anisotropyEnable
bool m_anisotropyEnable
定义
Sampler.h:137
FCT::Sampler::m_magFilter
FilterMode m_magFilter
定义
Sampler.h:128
FCT::Sampler::m_maxAnisotropy
float m_maxAnisotropy
定义
Sampler.h:138
FCT::Sampler::m_minFilter
FilterMode m_minFilter
定义
Sampler.h:129
FCT::Sampler::m_compareOp
CompareOp m_compareOp
定义
Sampler.h:141
FCT::Sampler::m_compareEnable
bool m_compareEnable
定义
Sampler.h:140
FCT::Sampler::m_minLod
float m_minLod
定义
Sampler.h:143
FCT::Sampler::m_addressModeV
AddressMode m_addressModeV
定义
Sampler.h:133
FCT::Sampler::m_unnormalizedCoordinates
bool m_unnormalizedCoordinates
定义
Sampler.h:147
FCT::Sampler::m_mipLodBias
float m_mipLodBias
定义
Sampler.h:136
FCT::Sampler::m_mipmapFilter
FilterMode m_mipmapFilter
定义
Sampler.h:130
FCT::VK_Context
定义
VK_Context.h:11
FCT::RHI
定义
CommandBufferGraph.h:14
FCT
定义
Enums.h:8
FCT::ferr
std::ostream & ferr
定义
OutStream.cpp:9
FCT::ClearType::color
@ color
定义
ClearTypes.h:11
FCT::FilterMode
FilterMode
定义
Sampler.h:5
FCT::FilterMode::Linear
@ Linear
定义
Sampler.h:7
FCT::FilterMode::Nearest
@ Nearest
定义
Sampler.h:6
FCT::BorderColor
BorderColor
定义
Sampler.h:29
FCT::BorderColor::TransparentBlack
@ TransparentBlack
定义
Sampler.h:30
FCT::BorderColor::OpaqueWhite
@ OpaqueWhite
定义
Sampler.h:32
FCT::BorderColor::OpaqueBlack
@ OpaqueBlack
定义
Sampler.h:31
FCT::CompareOp
CompareOp
定义
Sampler.h:18
FCT::CompareOp::NotEqual
@ NotEqual
定义
Sampler.h:24
FCT::CompareOp::Less
@ Less
定义
Sampler.h:20
FCT::CompareOp::Always
@ Always
定义
Sampler.h:26
FCT::CompareOp::Never
@ Never
定义
Sampler.h:19
FCT::CompareOp::GreaterOrEqual
@ GreaterOrEqual
定义
Sampler.h:25
FCT::CompareOp::Greater
@ Greater
定义
Sampler.h:23
FCT::CompareOp::LessOrEqual
@ LessOrEqual
定义
Sampler.h:22
FCT::CompareOp::Equal
@ Equal
定义
Sampler.h:21
FCT::AddressMode
AddressMode
定义
Sampler.h:10
FCT::AddressMode::MirrorClampToEdge
@ MirrorClampToEdge
定义
Sampler.h:15
FCT::AddressMode::MirroredRepeat
@ MirroredRepeat
定义
Sampler.h:12
FCT::AddressMode::Repeat
@ Repeat
定义
Sampler.h:11
FCT::AddressMode::ClampToEdge
@ ClampToEdge
定义
Sampler.h:13
FCT::AddressMode::ClampToBorder
@ ClampToBorder
定义
Sampler.h:14
src
RHI
VK_Sampler.cpp
制作者
1.14.0