전체 글 498

며칠 쉬면서 한 생각 및 향후 공부 방향성 11월

게임 기술서 쓸 때 참고할 자료 1순위 2순위 3순위로 우선순위 분할. 1순위 11월 안에 끝낼 것 일단 적어도 언리얼 엔진을 사용한 경험이 있다고 말하기 위한 간단한 포폴을 만들기 위해서 현재 보고 있는 인강을 완강하고 언리얼 기술 ppt를 간략히 정리하자. 매일 5시간은 언리얼에 집중하자. 2순위 1) openGL ES 완독 3순위 1) C++ 마이크로 소프트 정리 - 포인터 정리 2) DLL 이론 정리 3) 구현 https://learn.microsoft.com/ko-kr/visualstudio/get-started/csharp/tutorial-wpf?view=vs-2022 C#에서 WPF를 사용하는 Hello World 앱 - Visual Studio (Windows)WPF(Windows Pres..

<memory> smart pointer

smart pointer 스마트 포인터는 헤더 파일의 std namespace에 정의된다. smart pointer는 포인터처럼 행동하는 클래스 객체이지만, 몇 가지 추가 기능을 지닌다. 이번 게시물에서는 예시를 통해 동적 메모리 대입을 관리하기 위한 스마트 포인터 템플릿에 대하여 알아볼 것이다. 가령 어떠한 함수가 원시 포인터를 사용한다고 가정하면, 마지막에 delete 구문을 빼먹었거나, 혹은 delete 구문 전에 오류가 나면 대입된 메모리가 해제되지 못한다. 지역 변수는 스택 메모리부터 삭제된다. 그래서 포인터가 차지하고 있던 메모리가 해제되고 이때, 포인터가 지시하는 메모리도 함께 해제된다면 좋을 것이다. 이러한 과정을 거치기 위해서는 포인터의 수명이 다했을 때 프로그램이 어떤 추가 조치를 취해..

const 및 volatile 포인터

const 및 volatile 키워드는 포인터 처리 방법을 변경한다.const 키워드 초기화 후에는 포인터를 수정할 수 없으므로 포인터가 수정되지 않도록 보호한다. volatile C/C++ 프로그래밍 언어에서 이 키워드는 최적화 등 컴파일러의 재량을 제한하는 역할을 한다.따라서, volatile 키워드는 인터럽트 서비스 루틴과의 통신에 사용되는 다중 처리나 전역 데이터 영역에서 접근할 수 있는 공유 메모리에서 개체를 선언하는 데 유용하다.  volatile  키워드는 개체 상태가 예기치 않게 변경되는 경우 예상 가능한 프로그램 성능을 보장하는 유일한 방법이다.

volatile

volatile 란? 하드웨어에 의해 프로그램에서 수정할 수 있는 개체를 선언하는 데 사용할 수 있는 형식 한정자이다. volatile declarator; 일반적으로 volatile은 컴파일러 최적화를 제한하는 용도로 사용한다. 컴파일러는 훌륭하게 최적화하지만, volatile를 사용해서 최적화를 제한해야 하는 상황이 있다. 즉, volatile int t 구문은 변수 t의 값은 프로그램을 수행하는 어느 순간에나 외적인 요인에 의해 값이 변할 수 있음을 컴파일러에게 알려 주어, 컴파일러가 변수 t의 값을 사용할 때 주의하도록 만든다. (주로 하드웨어를 제어하는 프로그램에서 발생하는데, 변수가 특정 하드웨어의 레지스터나 포트를 가리키는 겨웅에 사용한다) 특히 volatile로 정의된 변수는 레지스터에 할..

포인터

포인터 포인터란? 포인터는 개체의 메모리 주소를 저장하는 변수이다. 포인터는 세 가지 기본 목적으로 C 및 C++에서 광범위하게 사용된다. 힙에 새 개체를 할당하려면 함수를 다른 함수에 전달하려면 배열 또는 기타 데이터 구조의 요소를 반복한다 원시포인터 원시 포인터란( = raw pointer)? 원시 포인터( = raw pointer )는 스마트 포인터와 같이 캡슐화 개체에 의해 수명이 제어되지 않는 포인터다. 원시 포인터는 즉, 값에 비포인터 변수의 주소를 할당하거나 nullptr을 할당할 수 있다. 값이 할당되지 않은 포인터는 임의 데이터가 포함이 된다. 포인터를 역참조하여 포인터가 가리키는 개체의 값을 검색하는 것 또한 가능하다. 멤버 엑세스 연산자는 개체의 멤버에 대한 엑세스를 제공한다. * 역..

HLSL 의 개요

왜 HLSL를 배우는가? 이유는 유니티 홈페이지를 구경하다가 해당 구문을 찾았다. 유니티는 왜 HLSL을 쓸까? 고민했는데 간단하다.DX를 쓰니, HLSL로 셰이더를 짠 것이다.그럼 만약 회사에 들어가서 그래픽스에 관련된 작업을 해야할 때,HLSL을 써야할 일이 생길 수도 있다는 생각이 들었고,게임업계 관련 채용 공고를 찾아보니 HLSL을 사용한다고 써져있었기에 배운다. 본론 게임 개발자가 되기 위해서는 특화된 여러가지 기술을 요한다.대규모 멀티 프로그래밍,그래픽 API, Direct3D는 렌더링 파이프라인을 사용하여 기본 요소를 그리거나 컴퓨팅 셰이더를 사용하여병렬 작업을 수행하기 위한 하위 수준 API이다. Direct3D 12 API를 사용하려면 D3d12.h를 포함하고,D3d12.li..

언리얼 게임 모드 클래스

언리얼에서 게임을 구현하는 다양한 기능은 플러그인, 모듈 등을 통해서 추가할 수 있다. 하지만 게임 구현의 주춧돌은 역시 게임 모드 클래스이다. 언리얼 게임 모드 클래스 게임에 일시 정지 기능을 추가하고 싶은 경우를 생각해보자. 게임을 일시 정지시키기 위한 모든 로직 및 구현 내용이 하나의 클래스 안에 배치돼야 할 것이다. 게임 모드 클래스는 플레이어가 게임에 입장하면 게임 흐름을 처리하는 역할을 담당하게 된다. 게임 흐름은 게임에서 발생하는 모든 상황(ex. 일시정지, 플레이, 재시작 등 게임 흐름 행동)이 될 수 있다. 이와 비슷하게 멀티플레이어 게임에서는 네트워크와 관련된 게임플레이 로직이 한 곳에 배치돼야 한다. 게임 모드 클래스는 바로 이런 역할을 담당한다. 게임 모드는 게임 로직을 실행하고 플..

UE5 2023.10.27

std::deque

C++ Standard Library 의 deque deque deque란? 덱(deque)은 양방향 큐(double-ended queue)의 약자이다. 벡터는 가변 길이 배열이고, push_front() 또는 pop_front() 같은 함수는 비용이 많이든다. std::deque를 사용하면 이러한 단점을 극복할 수 있다. 덱의 구조 C++ 표준은 어떤 기능의 동작만을 정의할 뿐이며, 어떻게 구현해야 하는지는 정의하지 않는다. deque는 list 혹은 vector보다 구현이 약간 복잡한데, deque는 다른 컨테이너만큼 단순하지는 않기 때문에 실제 구현은 좀 더 다른 형태일 수 있고, 많은 최적화 기법이 적용되었을 수 있다. 그러나 기본 개념은 같다. 즉, 이러한 컨테이너를 구현하려면 연속된 메모리 청..

C++ std::List

C++ Standard Library 의 list std::list list란? std::forward_list는 아주 기본적인 형태로 구현된 연결리스트이다. std::forward_list는 다른 유용한 기능 중에서도 리스트 끝에 원소 추가, 역방향 이동, 리스트 크기 반환 등의 기능은 제공하지 않는다. 이는 메모리를 적게 쓰고 성능을 유지하기 위함이다. 이외에도 std::forward_list의 반복자는 매우 적은 기능만 지원한다. 컨테이너의 크기를 얻어오거나 자료 구조 맨 뒤에 새로운 데이터를 추가하는 등의 기능은 매우 유용하고 빈번하게 사용되지만, std::forward_list에서는 지원되지 않는다. 그러므로 std::forward_list의 단점을 보완하기 위해 std::list를 C++에서 ..