본문 바로가기

전체 글339

25. Compute Shader CPU와 GPU의 핵심적인 차이는 코어의 갯수이다. CPU는 코어가 몇 개 안되지만 GPU는 엄청 많음 (몇 천개 단위..) 하지만 코어 하나의 성능은 CPU가 더 똑똑하다 CPU는 이것 저것 많은 일들을 처리해야 하기 때문 (일당백) 모든 일감이 독립적으로 실행되는 경우 예를 들면 이전의 작업과 지금의 작업이 아무 관련이 없어서 병렬로 실행되어도 아무 문제 없는 경우 GPU에게 단순 작업을 떠넘길 수 있다. UAV(Unordered Access View) - u0~un이 컴퓨트쉐이더에서 사용하는 레지스터이다. 쉐이더코드에서 제공하는 Texture중 RWTexture2D라는 텍스쳐가 있는데, RW는 Read/Write를 의미하며 특이하게도 Write가 가능한 텍스쳐다. 이 텍스쳐는 픽셀 하나하나당 일감을.. 2023. 2. 12.
4. State Pattern 어떤 게임을 예로 들면, 캐릭터가 있고, 캐릭터가 아이템을 획득해서 공격 방식과 이동 속도가 변한다고 가정한다. 그걸 캐릭터 코드에서 해결한다고 하면 아래와 같이 투박하게 처리가 가능할 것이다. class Character { public: void Attack() { if ( normal ) ... if ( item ) ... } void Run() { if ( normal ) ... if ( item ) ... } private: } - 그러나 이렇게 처리하면 모든 아이템에 대해 if 분기문을 걸어줘야 하며, - 기존 코드를 손봐야 하는 문제가 생긴다. (OCP 위반) 이는 상태 패턴을 사용해서 아래와 같이 처리할 수 있다. struct IState { virtual void Attack() = 0;.. 2023. 2. 10.
3. Template Method & Strategy Pattern 변하는 부분을 분리하는 방법 EditBox라는 클래스가 있다. 이 박스에 입력을 받을 때, Name 란에는 문자열만, Phone 란에는 숫자만 입력받게 하고 싶다. 그러려면 EditBox 내부에서 한 글자씩 받아서 그걸 필터하는 함수를 사용해야 하는데, 이 부분을 어떻게 처리하면 좋을까? 1. Template method 패턴 - 가상 함수로 분리하기 - 필터하는 부분을 가상함수로 만들어서 상속받는 클래스에서 재정의한다. - 전체적인 흐름을 Template method 부분이라고 하며, - 가상함수로 재정의되는 부분을 Hook Method라고 한다. - 알고리즘의 전체 구조는 기반 클래스에 정의되며 그 중 특정 단계는 파생 클래스에서 책임진다. 2. Strategy 패턴 - 클래스로 분리하기 - 교체 가.. 2023. 2. 9.
2. 인터페이스와 커플링 나중에 추가된 코드 때문에 기존 코드를 수정해야 한다? 유지보수 차원에서 문제가 될 수 있다! 따라서 코드를 작성할 때 확장성을 고려해야 한다. 객체지향의 SOLID원칙 중 OCP(개방폐쇄법칙) - 기능 확장에는 열려 있고, 코드 수정에는 닫혀 있어야 한다. - 새로운 기능이 추가되어도 기존 코드의 수정이 없어야 한다. #include #include using namespace std; struct ICamera { virtual void take() = 0; virtual ~ICamera() {} } class Camera : public ICamera { public: void take() { cout 2023. 2. 8.