[CPP] final 문법, [DirectX] 엔진 업데이트

라멘커비·2024년 3월 28일
0

어소트락 DirectX

목록 보기
6/24

CPP 문법

final

final 붙인 클래스는 다른 클래스가 상속받을 수 없다.

엔진

다이렉트에서 뭔가를 하려면 근본적으로 2가지 관련되어 있다.
메모리 => Device
렌더링 => Context

렌더링 파이프라인

스왑체인

스왑체인을 만들다보면 내부에서 스왑체인이 스스로 ID3D11Texture2D를 생성한다. 이 텍스처에 뭔가를 그려야만 화면에 나온다.
스왑체인Text2D <= 여기에 그려야 뭐가 나옴
WinAPI로 치면 Window HDC인 것이다.

텍스처, 렌더타겟

ID3D11Texture2D <= DirectX에서 메모리를 의미하는 핸들
ID3D11RenderTargetView <= 이미지(=메모리) 수정 권한(그릴 수 있는 권한)
그릴 수 있는 권한이나 지우는 기능들은 다 렌더타겟으로. 텍스처 그대로는 편집기능을 사용하지 않고 오로지 랜더타겟 뷰로만 사용.

텍스처는 메모리관리 및 정리 기능만 가지고
실질적인 렌더링 대상지정기능과 클리어 등 렌더링과 관련된 기능은 렌더타겟이 가질 것이다.

뭔가 그리기 전에 한 번 화면 지우는 RenderStart함수(안에서 Clear()하고 있음)
RenderEnd로 출력

Actor

UTransformComponent <- USceneComponent 상속
Actor에 USceneComponent* nullptr 들어있음 => Actor는 기본으로 Transform(위치)을 가지고 있지 않고, USceneComponent 포인터를 가지게 될 때 위치를 가지게 됨. (언리얼이 이렇게해서 따라해본거임 + 트랜스폼 필요없는 액터들도 많기 때문에 합리적일 수 있다)

  • std::dyamic_pointer_cast<>()로 shared_ptr을 안전하게 다운캐스팅해서 사용(in AActor::PuchComponent 함수)

GameMode

왜있는지 잘 이해안됨 근데 언리얼가면 이해할거라하심 ㅇㅅㅇ.
=> 그냥 레벨이 만들어질 때 가장 먼저 만들어져서 GetWorld()->SpawnActor해주는 그런 애라고 하심. WinAPI에서 플레이어의 이름을 GameMode로 만들었다고해도 다를 게 없다고 하심.
그냥 맨 처음 만들어지는 액터!!

레벨이 액터 맵(키:order, 값:액터 리스트), GameMode 가짐.
가장먼저 틱 돌도록 order를 INT_MIN로 넣어줌

public std::enable_shared_from_this<URenderer>

shared_ptr로 this를 배출할수 있는 기능을 가진 클래스.
클래스 URenderer에 상속시킴.

ULevel::IsActorConstructer 변수

Level에서 SpawnActor를 하면 IsActorConstructer가 true일 때 액터를 생성하게 되고

액터의 생성자에서 CreateDefaultSubobject함수로 SubObject들을 만든다. 함수 내부에는 ULevel::IsActorConstructer가 true일 때만 만들 수 있도록 구현돼있다.

profile
일단 시작해보자

0개의 댓글