게임 개발 자료

수직 동기화 관련 자료 수집, DirectX SwapChain::Present()

원소랑 2023. 10. 13. 16:16

VBlank (vertical blank)

https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgioutput-waitforvblank

 

IDXGIOutput::WaitForVBlank (dxgi.h) - Win32 apps

Halt a thread until the next vertical blank occurs.

learn.microsoft.com

 

DXGI(DirectX Graphics Infrastructure) 프레젠테이션

https://learn.microsoft.com/ko-kr/windows/win32/direct3ddxgi/d3d10-graphics-programming-guide-dxgi#presentation

 

DXGI 개요 - Win32 apps

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

learn.microsoft.com

 

Android Performance Patterns: Understanding VSYNC

https://www.youtube.com/watch?v=1iaHxmfZGGc 

 

DX IDXGISwapChain::Present()

https://learn.microsoft.com/ko-kr/windows/win32/api/dxgi/nf-dxgi-idxgiswapchain-present

 

IDXGISwapChain::P resent(dxgi.h) - Win32 apps

렌더링된 이미지를 사용자에게 표시합니다.

learn.microsoft.com

 

DXGI_SWAP_EFFECT

https://learn.microsoft.com/ko-kr/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_effect

 

DXGI_SWAP_EFFECT(dxgi.h) - Win32 apps

IDXGISwapChain1::P resent1을 호출한 후 디스플레이 화면에서 픽셀을 처리하는 옵션입니다.

learn.microsoft.com

 

 

Unreal Engine 5 코드 참고

UnrealClient.cpp (1689)

void FViewport::EndRenderFrame(...)

> RHICmdList.EndDrawingViewport(GetViewportRHI(), bPresent, bLockToVsync);

 

SlateRHIRenderer.cpp

inline bool CompositeUIWithHdrRenderTarget(const FViewportInfo* ViewInfo)

> RHICmdList.EndDrawingViewport(ViewportInfo.ViewportRHI, true, DrawCommandParams.bLockToVsync);

 

 

DX11 Tutorial

https://www.rastertek.com/dx11win10tut03.html

void D3DClass::EndScene()
{
	// Present the back buffer to the screen since rendering is complete.
	if(m_vsync_enabled)
	{
		// Lock to screen refresh rate.
		m_swapChain->Present(1, 0);
	}
	else
	{
		// Present as fast as possible.
		m_swapChain->Present(0, 0);
	}

	return;
}

OpenGL Tutorial

https://www.rastertek.com/gl4linuxtut03.html

// Get the current drawable so we can modify the vertical sync swapping.
drawable = glXGetCurrentDrawable();
    
// Turn on or off the vertical sync depending on the input bool value.
if(vsync)
{
    glXSwapIntervalEXT(m_display, drawable, 1);
}
else
{
    glXSwapIntervalEXT(m_display, drawable, 0);
}

 

 

Unreal Engine Lyra 샘플 문서

https://docs.unrealengine.com/5.3/ko/tour-of-lyra-in-unreal-engine/#%EA%B3%A0%EA%B8%89%EA%B7%B8%EB%9E%98%ED%94%BD

수직 동기화(Vertical Sync)
수직 동기화는 항상 전체 프레임을 렌더링 및 프레젠테이션하여 스크린 티어링을 제거합니다. 수직 동기화를 비활성화하면 프레임 레이트와 입력 반응이 향상되지만 수평 화면 테어링이 발생할 수 있습니다. 수직 동기화는 다음 옵션을 통해 토글될 수 있습니다.

 

Unity Engine 의 vSyncCount

https://docs.unity3d.com/2022.3/Documentation/ScriptReference/QualitySettings-vSyncCount.html

 

Unity - Scripting API: QualitySettings.vSyncCount

An integer. vSyncCount specifies the number of screen refreshes your game allows to pass between frames. In the Unity Editor, this corresponds to the VSync Count property under Project Settings > Quality > Other. The default value of vSyncCount is 0. In th

docs.unity3d.com

using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        // Sync the frame rate to the screen's refresh rate
        QualitySettings.vSyncCount = 1;
    }
}

 

팁 강좌
디스플레이 분류| 수직동기화, 그 정체를 파헤쳐보자! 작성 완료: 2016-09-12 2:50

https://coolenjoy.net/bbs/37/123538?sfl=wr_subject&stx=%EC%88%98%EC%A7%81&sop=and 

 

수직동기화, 그 정체를 파헤쳐보자! 작성 완료: 2016-09-12 2:50 > 팁 강좌 | 쿨엔조이

늘 함께하지만, 다소 생소한 메커니즘. "수직동기화" 수직동기화, 그 정체를 파헤쳐보자! "수직동기화가 뭐죠?" "그래픽카드를 업그레이드 하니 화면이 찢어져요!" "수직동기화가 화면을 안찢어

coolenjoy.net

 

수직 동기화의 원리와 설정 방법

https://blog.naver.com/chlrkfka949/222689689535

 

수직 동기화의 원리와 설정 방법

컴퓨터 본체와 모니터는 케이블 하나로 데이터를 주고 받는 관계에 있습니다. 그러니까, 서로는 사실 남이...

blog.naver.com

 

728x90
반응형