FCT
载入中...
搜索中...
未找到
AutoViewport.cpp
浏览该文件的文档.
1
#include "
../Context/Context.h
"
2
#include "
./Window.h
"
3
namespace
FCT
4
{
5
AutoViewport::AutoViewport
()
6
{
7
8
}
9
10
AutoViewport::AutoViewport
(
Vec2
windowSize,
Vec2
viewportSize)
11
{
12
m_needReviewport
=
false
;
13
resize
(windowSize.
x
,windowSize.
y
);
14
m_dstViewportWidth
= viewportSize.
x
;
15
m_dstViewPortHeight
= viewportSize.
y
;
16
m_viewportOffsetX
= 0.0f;
17
m_viewportOffsetY
= 0.0f;
18
}
19
20
void
AutoViewport::ctx
(
FCT::Context
*
ctx
)
21
{
22
this->
m_ctx
=
ctx
;
23
}
24
25
void
AutoViewport::window
(
Window
* wnd)
26
{
27
m_wnd
= wnd;
28
}
29
30
void
AutoViewport::enable
(
bool
enable
)
31
{
32
if
(
m_resizeCallBack
)
33
{
34
m_wnd
->getCallBack()->removeResizeCallback(
m_resizeCallBack
);
35
}
36
m_resizeCallBack
=
m_wnd
->getCallBack()->addResizeCallback([
this
](
Window
* w,
int
width,
int
height)
37
{
38
resize
(width,height);
39
});
40
}
41
42
void
AutoViewport::resize
(
int
width,
int
height)
43
{
44
m_windowWidth
=
static_cast<
float
>
(width);
45
m_windowHeight
=
static_cast<
float
>
(height);
46
m_needReviewport
=
true
;
47
}
48
49
void
AutoViewport::computeViewport
()
50
{
51
float
targetAspect =
m_dstViewportWidth
/
m_dstViewPortHeight
;
52
float
windowAspect =
m_windowWidth
/
m_windowHeight
;
53
54
if
(windowAspect > targetAspect) {
55
m_viewportHeight
=
m_windowHeight
;
56
m_viewportWidth
=
m_windowHeight
* targetAspect;
57
m_viewportOffsetX
= (
m_windowWidth
-
m_viewportWidth
) / 2.0f;
58
m_viewportOffsetY
= 0.0f;
59
}
else
{
60
m_viewportWidth
=
m_windowWidth
;
61
m_viewportHeight
=
m_windowWidth
/ targetAspect;
62
m_viewportOffsetX
= 0.0f;
63
m_viewportOffsetY
= (
m_windowHeight
-
m_viewportHeight
) / 2.0f;
64
}
65
}
66
67
void
AutoViewport::submit
(
RHI::CommandBuffer
* cmdBuf)
68
{
69
if
(
m_needReviewport
) {
70
computeViewport
();
71
m_needReviewport
=
false
;
72
}
73
cmdBuf->
viewport
(
FCT::Vec2
(
m_viewportOffsetX
,
m_viewportOffsetY
),
FCT::Vec2
(
m_viewportOffsetX
+
m_viewportWidth
,
m_viewportOffsetY
+
m_viewportHeight
));
74
cmdBuf->
scissor
(
FCT::Vec2
(
m_viewportOffsetX
,
m_viewportOffsetY
),
FCT::Vec2
(
m_viewportOffsetX
+
m_viewportWidth
,
m_viewportOffsetY
+
m_viewportHeight
));
75
}
76
77
78
bool
AutoViewport::wndPosToViewportPos
(
Vec2
wndPos,
Vec2
& viewportPos)
const
79
{
80
Vec2
srcViewportPos(0.0f, 0.0f);
81
srcViewportPos.
x
= (wndPos.
x
-
m_viewportOffsetX
) /
m_viewportWidth
;
82
srcViewportPos.
y
= (wndPos.
y
-
m_viewportOffsetY
) /
m_viewportHeight
;
83
viewportPos = srcViewportPos *
Vec2
(
m_dstViewportWidth
,
m_dstViewPortHeight
);
84
return
srcViewportPos.
x
>= 0.0f && srcViewportPos.
x
<= 1.0f && srcViewportPos.
y
>= 0.0f && srcViewportPos.
y
<= 1.0f;
85
}
86
}
87
88
89
Context.h
Window.h
FCT::AutoViewport::m_ctx
FCT::Context * m_ctx
定义
AutoViewport.h:32
FCT::AutoViewport::m_viewportHeight
float m_viewportHeight
定义
AutoViewport.h:29
FCT::AutoViewport::m_needReviewport
bool m_needReviewport
定义
AutoViewport.h:26
FCT::AutoViewport::m_viewportWidth
float m_viewportWidth
定义
AutoViewport.h:29
FCT::AutoViewport::m_wnd
Window * m_wnd
定义
AutoViewport.h:33
FCT::AutoViewport::ctx
void ctx(FCT::Context *ctx)
定义
AutoViewport.cpp:20
FCT::AutoViewport::AutoViewport
AutoViewport()
定义
AutoViewport.cpp:5
FCT::AutoViewport::wndPosToViewportPos
bool wndPosToViewportPos(Vec2 wndPos, Vec2 &viewportPos) const
定义
AutoViewport.cpp:78
FCT::AutoViewport::m_dstViewPortHeight
float m_dstViewPortHeight
定义
AutoViewport.h:27
FCT::AutoViewport::m_windowWidth
float m_windowWidth
定义
AutoViewport.h:28
FCT::AutoViewport::computeViewport
void computeViewport()
定义
AutoViewport.cpp:49
FCT::AutoViewport::m_resizeCallBack
CallBackEventHandler::CallbackId m_resizeCallBack
定义
AutoViewport.h:31
FCT::AutoViewport::resize
void resize(int width, int height)
定义
AutoViewport.cpp:42
FCT::AutoViewport::m_windowHeight
float m_windowHeight
定义
AutoViewport.h:28
FCT::AutoViewport::window
void window(Window *wnd)
定义
AutoViewport.cpp:25
FCT::AutoViewport::m_viewportOffsetX
float m_viewportOffsetX
定义
AutoViewport.h:30
FCT::AutoViewport::submit
void submit(RHI::CommandBuffer *cmdBuf)
定义
AutoViewport.cpp:67
FCT::AutoViewport::m_dstViewportWidth
float m_dstViewportWidth
定义
AutoViewport.h:27
FCT::AutoViewport::m_viewportOffsetY
float m_viewportOffsetY
定义
AutoViewport.h:30
FCT::AutoViewport::enable
void enable(bool enable)
定义
AutoViewport.cpp:30
FCT::Context
定义
Context.h:98
FCT::RHI::CommandBuffer
定义
CommandBuffer.h:34
FCT::RHI::CommandBuffer::scissor
virtual void scissor(Vec2 lt, Vec2 rb)=0
FCT::RHI::CommandBuffer::viewport
virtual void viewport(Vec2 lt, Vec2 rb)=0
FCT::Window
定义
Window.h:66
FCT
定义
Enums.h:8
FCT::DataType::Vec2
@ Vec2
定义
DataTypes.h:18
FCT::Vec2
定义
Vec.h:9
FCT::Vec2::x
float x
定义
Vec.h:10
FCT::Vec2::y
float y
定义
Vec.h:10
src
UI
AutoViewport.cpp
制作者
1.14.0