Skip to content

Commit ef5debf

Browse files
authored
ko-translation revised (#27)
1 parent 9705e62 commit ef5debf

File tree

4 files changed

+43
-8
lines changed

4 files changed

+43
-8
lines changed

guide/translations/ko-KR/src/rendering/dynamic_rendering.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void App::submit_and_present() {
161161
wait_semaphore_info.setSemaphore(*render_sync.draw)
162162
.setStageMask(vk::PipelineStageFlagBits2::eColorAttachmentOutput);
163163
auto signal_semaphore_info = vk::SemaphoreSubmitInfo{};
164-
signal_semaphore_info.setSemaphore(*render_sync.present)
164+
signal_semaphore_info.setSemaphore(m_swapchain->get_present_semaphore())
165165
.setStageMask(vk::PipelineStageFlagBits2::eColorAttachmentOutput);
166166
submit_info.setCommandBufferInfos(command_buffer_info)
167167
.setWaitSemaphoreInfos(wait_semaphore_info)
@@ -175,8 +175,7 @@ void App::submit_and_present() {
175175
// framebuffer size does not match the Swapchain image size, check it
176176
// explicitly.
177177
auto const fb_size_changed = m_framebuffer_size != m_swapchain->get_size();
178-
auto const out_of_date =
179-
!m_swapchain->present(m_queue, *render_sync.present);
178+
auto const out_of_date = !m_swapchain->present(m_queue);
180179
if (fb_size_changed || out_of_date) {
181180
m_swapchain->recreate(m_framebuffer_size);
182181
}

guide/translations/ko-KR/src/rendering/render_sync.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ using Buffered = std::array<Type, buffering_v>;
1717
struct RenderSync {
1818
// signaled when Swapchain image has been acquired.
1919
vk::UniqueSemaphore draw{};
20-
// signaled when image is ready to be presented.
21-
vk::UniqueSemaphore present{};
2220
// signaled with present Semaphore, waited on before next render.
2321
vk::UniqueFence drawn{};
2422
// used to record rendering commands.
@@ -68,7 +66,6 @@ void App::create_render_sync() {
6866
std::views::zip(m_render_sync, command_buffers)) {
6967
sync.command_buffer = command_buffer;
7068
sync.draw = m_device->createSemaphoreUnique({});
71-
sync.present = m_device->createSemaphoreUnique({});
7269
sync.drawn = m_device->createFenceUnique(fence_create_info_v);
7370
}
7471
}

guide/translations/ko-KR/src/rendering/swapchain_loop.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919

2020
## 가상 프레임
2121

22-
프레임마다 사용되는 모든 동적 자원들은 가상 프레임에 포함됩니다. 애플리케이션은 고정된 개수의 가상 프레임을 가지고 있으며, 매 렌더 패스마다 이를 순환하며 사용합니다. 동기화를 위해 각 프레임은 이전 프레임의 렌더링이 끝날 때 까지 대기하게 만드는 [`vk::Fence`](https://docs.vulkan.org/spec/latest/chapters/synchronization.html#synchronization-fences)가 있어야 합니다. 또한 GPU에서의 이미지를 받아오고, 렌더링, 화면에 나타내는 작업을 동기화하기 위한 2개의[`vk::Semaphore`](https://docs.vulkan.org/spec/latest/chapters/synchronization.html#synchronization-semaphores)가 필요합니다(이 작업들은 CPU측에서 대기할 필요는 없습니다). 명령을 기록하기 위해 가상 프레임마다 [`vk::CommandBuffer`](https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html)를 두어 해당 프레임의 (레이아웃 전환을 포함한) 모든 렌더링 명령을 기록할 것입니다.
22+
프레임마다 사용되는 모든 동적 자원들은 가상 프레임에 포함됩니다. 애플리케이션은 고정된 개수의 가상 프레임을 가지고 있으며, 매 렌더 패스마다 이를 순환하며 사용합니다. 동기화를 위해 각 프레임은 이전 프레임의 렌더링이 끝날 때 까지 대기하게 만드는 [`vk::Fence`](https://registry.khronos.org/vulkan/specs/latest/man/html/VkFence.html)가 있어야 합니다. 또한 GPU에서의 이미지를 받아오는 것과 렌더링하는 작업을 동기화하기 위한 [`vk::Semaphore`](https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphore.html)가 필요합니다(이 작업들은 코드에서 대기할 필요는 없습니다). 명령을 기록하기 위해 가상 프레임마다 [`vk::CommandBuffer`](https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html)를 두어 해당 프레임의 (레이아웃 전환을 포함한) 모든 렌더링 명령을 기록할 것입니다.
23+
24+
25+
화면 표시 작업에도 동기화를 위한 세마포어가 필요하지만, 스왑체인 루프는 각 가상 프레임이 처음 사용될 때 미리 시그널되는 drawn 펜스를 기준으로 대기하기 때문에, 표시용 세마포어는 가상 프레임의 일부가 될 수 없습니다. 아직 시그널되지 않은 표시용 세마포어를 사용하여 이미지를 가져오고 커맨드를 제출하는 것도 가능하지만, 이는 유효하지 않은 동작입니다. 따라서 이러한 세마포어는 스왑체인 이미지(인덱스)와 연결되며, 스왑체인이 재생성될 때 함께 재생성됩니다.
2326

2427
## 이미지 레이아웃
2528

guide/translations/ko-KR/src/rendering/swapchain_update.md

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,42 @@
11
# 스왑체인 업데이트
22

3-
스왑체인에서 이미지를 받아오고 표시하는 작업은 다양한 결과를 반환할 수 있습니다. 우리는 다음과 같은 경우에 한정하여 처리합니다.
3+
세마포어 vector를 추가하고 `recreate()`함수를 통해 이를 할당합니다.
4+
5+
```cpp
6+
void create_present_semaphores();
7+
8+
// ...
9+
// signaled when image is ready to be presented.
10+
std::vector<vk::UniqueSemaphore> m_present_semaphores{};
11+
12+
// ...
13+
auto Swapchain::recreate(glm::ivec2 size) -> bool {
14+
// ...
15+
populate_images();
16+
create_image_views();
17+
// recreate present semaphores as the image count might have changed.
18+
create_present_semaphores();
19+
// ...
20+
}
21+
22+
void Swapchain::create_present_semaphores() {
23+
m_present_semaphores.clear();
24+
m_present_semaphores.resize(m_images.size());
25+
for (auto& semaphore : m_present_semaphores) {
26+
semaphore = m_device.createSemaphoreUnique({});
27+
}
28+
}
29+
```
30+
31+
가져온 이미지에 대응되는 표시용 세마포어를 가져오는 함수를 추가합니다. 이는 렌더링 커맨드 버퍼가 제출될 때 시그널 됩니다.
32+
33+
```cpp
34+
auto Swapchain::get_present_semaphore() const -> vk::Semaphore {
35+
return *m_present_semaphores.at(m_image_index.value());
36+
}
37+
```
38+
39+
스왑체인에서 이미지를 받아오고 표시하는 작업은 다양한 결과를 반환할 수 있습니다. 우리는 다음과 같은 경우로 한정하여 처리하겠습니다.
440

541
- `eSuccess` : 문제가 없습니다.
642
- `eSuboptimalKHR` : 역시 문제가 없습니다(에러는 아니며, 데스크탑 환경에서는 드물게 발생합니다).

0 commit comments

Comments
 (0)