전체 글 390

D3D12 게임 프로그래밍 입문 - 기본 지식 (1)

Direct3D 12의 개요 응용 프로그램과 그래픽 하드웨어 사이에 Direct3D라는 간접층과 하드웨어 드라이버가 Direct3D 명령들을 시스템의 GPU가 직접 이해하는 고유한 기계어 명령들로 번역해 주므로, 해당 GPU가 Direct3D 12를 지원하는 한, 응용 프로그램 개발자는 GPU의 세부사항을 걱정할 필요가 없다. 단, 이를 위해서는 GPU 제조사들이 Direct3D 명세를 준수하는 드라이버를 제공해야 한다. 이전 버전들에 비한 주된 개선점은 CPU 부담을 크게 줄이고 다중 스레드 지원을 개선하기 위해서 설계를 다시 했다는 점이다. D3D11보다 D3D12가 보다 헐씬 낮은 (즉, GPU 쪽에 더 가까운) 수준의 API가 되었다. D3D12는 이전보다 추상화가 줄었고, 개발자가 손수 관리해야..

그래픽스/DX12 2023.12.20

모던 C++ 함수형 프로그래밍 null 포인터

++ 이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지, 사실 많은 변화가 있었음은 알지만 그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다. 때문에 게시글과 같이 성장하고자 매일 C++에 관련된 포스팅을 하고자 함을 기반으로 필자의 학습에 초점을 두어 작성되는 작성된 게시글이기에 독자 위주의 게시글이라기 보다는, 필자의 독서 기록용 게시글이 취지에 더욱 맞음을 인지해주고 읽어주길 바란다. ++ [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게..

C#

C#은 .NET 환경에서 효과적으로 응용 프로그램을 개발할 수 있도록 설계된 C 언어 계열에 속하는 범용 프로그래밍 언어이다. C#은 C언어와 유사한 간결하고 강력한 문장 구조를 가지고 있으며 C++ 언어와 같이 객체 지향적일 분만 아니라 쉽게 사용자 인터페이스를 쉽게 만들 수 있는 컴포넌트 기능을 제공하고 있습니다. C#은 .NET 환경에 최적화 되어 있고 C# 언어를 위한 많은 클래스 라이브러리가 개발됨에 따라 응용 프로그램을 작성하기가 보다 편리해졌다. C# 언어의 특징으로는 자료 추상화와 델리게이트와 이벤트, 예외 처리, 멀티 스레드 등을 들 수 있다. 자료 추상화란 자료 구조와 더불어 그 자료 구조에서 행할 수 있는 연산을 정의하여 사용자 정의 자료형을 마치 언어 시스템에서 제공한 자료형처럼 사..

모던 C++ 함수형 프로그래밍 decltype

++ 이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지, 사실 많은 변화가 있었음은 알지만 그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다. 때문에 게시글과 같이 성장하고자 매일 C++에 관련된 포스팅을 하고자 함을 기반으로 필자의 학습에 초점을 두어 작성되는 작성된 게시글이기에 독자 위주의 게시글이라기 보다는, 필자의 독서 기록용 게시글이 취지에 더욱 맞음을 인지해주고 읽어주길 바란다. ++ decltype 키워드로 표현식 타입 질의하기 auto 키워드는 변수에 저장된 값이 어떤 타입인지 참고해 변수의 실제 타입을 지정할 수 있다. 또 반환하는 값의 타입을 보고 함수의 반환 타입 역시 추론이 가능하다. auto 와 decltype 키워드를 조합해서 모던 C++을 좀 더 체계적으로 ..

모던 C++ 함수형 프로그래밍 auto

auto 키워드 auto 키워드로 데이터 타입을 자동으로 정의하기 위해서는 일단, 모던 C++ 이전에 auto 키워드는 변수가 자동 지속 기간(automatic storage duration)을 가져야 함을 명시적으로 나타내기 위해 사용했다는 것을 알아두자. ++ 이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지, 사실 많은 변화가 있었음은 알지만 그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다. 때문에 게시글과 같이 성장하고자 매일 C++에 관련된 포스팅을 하고자 함을 기반으로 작성된 게시글이기에 필자의 학습을 초점에 맞춰 작성되기 때문에, 독자 위주의 게시글 이라기 보다는 필자의 독서 기록용 게시글임을 인지해주고 읽어주길 바란다. ++ 자동 지속 기간(automatic stora..

컨테이너 어뎁터, std::stack, std::queue, std::priority_queue

컨테이너 어댑터 이번 게시글에서는 이미 존재하는 컨테이너를 기반으로 만들어진 컨테이너를 알아볼 것이다. 기존 컨테이너를 감싸는 래퍼를 제공하는 데에는 몇 가지 이유가 있다. 코드에 좀 더 의미를 부여하고 싶거나, 또는 특별한 인터페이스를 새롭게 제공하고 싶은 경우가 대표적이다. 이러한 자료 구조 중의 하나가 스택이다. 스택은 데이터 처리와 보관을 위해 LIFO(Last In First Out, 후입선출) 구조를 사용한다. 기능적인 측면에서 스택은 컨테이너의 한족 끝에서만 데이터를 삽입하거나 삭제할 수 있으며, 한쪽 끝이 아닌 위치에 있는 데이터는 접근하거나 변경할 수 없다. 벡터나 덱은 이러한 기능을 기본적으로 지원하기 때문에 스택을 구현하기 위한 용도로 사용할 수 있다. 그러나 벡터나 덱을 직접 스택처..

Delegate 사용방법

델리게이트란? C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형이다. 델리게이트로 C++ 오브젝트 상의 멤버 함수 호출을 일반적이고 유형적으로 안전한 방식으로 할 수 있다. 델리게이트를 사용하여 임의의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있다. 호출하는 곳에서 오브젝트의 유형을 몰라도 무관하다. 델리게이트 오브젝트는 복사시에도 안전성이 보장된다. 델리게이트는 값으로의 전달이 가능하나, heap 영역에서 메모리를 할당하기 때문에 보통 추천할 만 하지는 않다. 가급적이면 델리게이트는 항상 참조로 전달하는 것이 좋다. 델리게이트는 싱글 - 캐스트 (형변환)와 멀티-캐스트 모두 지원되며, 디스크에 안전하게 Serialize 시킬 수..

UE5 2023.12.05

그리디 알고리즘 (2) - 분할 가능 배낭 문제

그리디 - 분할 가능 배낭 문제 그리디 방법으로 풀 수 있는 문제로 널리 알려진 배낭 문제에 대해 알아보겠다. 먼저 0-1 배낭 문제(0-1 knapsack problem)이라고도 부르는 일반 배낭 문제는 NP-완전 문제로 알려져 있어 다항 시간 솔루션을 사용할 수 없다. 그러나 0-1 배낭 문제를 조금 변경한 분할 가능 배낭(fractional kanpsack problem)은 그리디 방식으로 해결할 수 있다. 이 두 가지 문제를 살펴보면서, 문제 정의의 작은 차이가 문제 해결 방법에 큰 변화를 가져올 수 있다는 점을 확인하자. 0-1 배낭 문제 물건들의 집합 O = { ... }이 있고, 여기서 i번째 물건 O[i]의 무게는, W[i]이고, 가격은 V[i]이다. 그리고 최대 무게를 T까지 견딜 수 있..

그리디 알고리즘 - 최단 작업 우선 스케줄링

그리디 알고리즘 그리디 알고리즘은 매 단계에서 '가장 좋아 보이는' 해답을 선택하는 알고리즘이다. 즉, 그리디 방법은 지역적인 최적의 해결 방법으로부터 전역적인 최적의 해결 방법을 구성하는 방식이다. 예를 들어, 네비게이션이 인천국제공항에서 강남역까지 차로 이동하는 최단 경로를 보여주는 것 처럼 말이다. 이 경로상에 있는 임의의 두 지점을 선택할 경우, 이 두 지점의 최단 이동 거리는 처음에 구한 전체 최단 경로를 따라 이동함으로써 구할 수 있다. 전체 최단 경로는 사실상 이 경로상에 존재하는 다수의 지점 사이를 최단 거리 경로로 모두 연결시켜 놓은 것이라고 볼 수 있다. 그러므로 어느 두 지점 사이의 최단 경로를 구하기 위하여 다음과 같은 방법을 사용할 수 있다. 즉, 출발 지점에서 아직 방문하지 않은..