728x90 반응형 전체 글161 DX) 4. IA(InputAssembler) InputAssembler IA단계는 랜더링 파이프 라인에서 가장 먼저 시행되는 단계이다. 이 단계에서 Device에서 생성한 VertexBuffer나 IndexBuffer의 데이터를 읽어들여 Primitive를 조합하여 파이프라인의 다음단계인 VS에 데이터를 전달하는 역할을 한다. 그 밖에도 쉐이더에게 넘겨줄 데이터를 분석한 정보를 넘겨주는 InputLayOut을 추가할수있다. 위와 같은 방식으로 생성된 VertexBuffer와 IndexBuffer, 그리고 InputLayOut을 DeviceContext에서 조립하는것이 IA단계라고 할수 있다. 그러기 위해서는 두 Buffer와 LayOut을 만들어주어야한다. VertexBuffer생성 VertexBuffer는 GPU가 접근가능한 버퍼에 Vertex정.. 게임엔진/DirectX 2023. 3. 3. DX)3.Device 각 기능의 분리 지난 포스팅까지 렌더링에서 필요한 구성이 무엇이 있는가와 어떤 역할을 수행하는지에 대해 알아보았다. 하지만 한 클래스안에 랜더링 과정을 몰아서 랜더링을 하게 될 경우 다음과 같은 것을 고려해보아야한다. 클래스에 종속되어야 되는 것은 무엇인가? 객체에 종속되어야 되는 것은 무엇인가? 리소스에 속해야 되는 것은 무엇인가? 즉, 각 기능에 따라 서로 종속되어야 될것들이 다르기 때문에 한 클래스에 모두 구현 하는 것은 메모리 낭비로 이어질 수 있기에 각 기능을 분리하여야 하며, 이번 포스팅에서는 Device 생성 이 클래스에서는 장치 초기화 관련된 Device장치가 수행하는 것들과 Render Begin/End에 관한 것들을 넣고자한다. //Graphics.h class Graphics { pu.. 게임엔진/DirectX 2023. 3. 3. DX)2.렌더링파이프라인 가이드 DirectXAPI 렌더링을 하기위해서는 먼저 DirectX의 API중에서 Device와 DeviceContext 그리고 SwapChin을 생성해주어야한다. Device는 그래픽 카드를 추상화한 객체이다. 이는 오브젝트의 할당 및 해제, 렌더링, 그래픽 드라이버 및 하드웨어와의 통신을 담당한다. Direct3D 11은 디바이스라는 개념이 2가지로 분리하는데, 하나는 생성을 담당하는 Device Object이고, 다른 하나는 Device Object에서 생성한것들을 설정하거나 제어하는 Device Context Object이다. 이 두 오브젝트를 이용하여 렌더링을 하게 되는데, 만약 후면버퍼를 설정하지 않는다면 WindowAPI때 처럼 렌더링 잔상이 남게 될 것이다. Swapchain은 후면 버퍼를 관리하.. 게임엔진/DirectX 2023. 3. 3. DX)1.렌더링 파이프라인 DirectX DirectX는 Window환경에서 GPU와 같은 H/W를 제어할수 있도록 제공하는 API이다. 이러한 GPU를 사용하려는 목적은 렌더링과 같이 연산량이 많으나 단순한 연산일 경우 CPU는 연산뿐만 아니라 다양한 것을 처리해야 되는데 이런 것을 CPU 혼자 처리하게 될 경우 속도의 저하로 이어질수 있다. 따라서 고급인력인 CPU를 대신하여 CPU보다 싸면서 연산장치가 많은 GPU에게 연산을 시키는 것이 DirectX의 주목적이라고 할 수 있다. 렌더링 파이프라인 렌더링 파이프라인 또는 그래픽스 렌더링 파이프라인이라 부르는 과정은 3차원으로 만들어진 모델을 2차원에 투영하는 렌더링 과정의 프로세스를 표현한 것이다. 아래에서 주황색으로 칠해져 있는 부분은 프로그래머가 코딩으로 제어할수 있는 부.. 게임엔진/DirectX 2023. 2. 11. 윈도우API)18.충돌-1 충돌 충돌은 게임에서 많은 역할을 수행한다. 예를 들자면 물리적인 충돌을 막을 수도 있고 충돌을 판단하여 이벤트를 수행할수도 있다. 이러한 충돌은 상속구조보다는 컴포넌트를 이용하는것이 게임제작에 편리하다. 본 포스팅에서는 이러한 충돌을 컴포넌트를 이용하여 구현해보고자 한다. 콜리전 생성 먼저 생성할 콜리전의 타입을 정의해준다. 일반적으로 2D게임에서는 박스와 스피어 두종류의 콜리전을 사용한다. enum class CollisionType { Box, Sphere, }; 타입을 정의하였으면 콜리전의 베이스들이 될 콜리전 클래스를 정의해준다. class Collision: public Component { public: Collision(CollisionType CType); virtual ~Collisio.. 게임엔진/윈도우API 2023. 1. 25. 윈도우API)17.타일맵 타일맵 2D맵에는 하나의 커다란 이미지를 사용하는 속칭 "통맵"과 작은 단위의 이미지를 이어붙여 만드는 "타일맵"이 존재한다. 여기서 타일맵은 다양한 형태로 활용이된다. 이미지를 불러들여 맵으로써 활용하기도 하지만 특정 범위를 지정하여 콜리전 범위를 지정할수도 있다. 이번포스팅에서는 이러한 콜리전 범위를 표시하는것을 다루고자 한다. 타일맵 계층구조 ResourceBase(Load/Save) Tilemap(vector _tiles) Actor TilemapActor(Tilemap* _tile/bool _showDebug) 타일맵 생성 타일맵은 리소스로써 활용될 예정이다. 그렇기에 ResourceBase를 상속받고 ResourceManager에서 관리되어야 한다. //tilemap.h class tilema.. 게임엔진/윈도우API 2023. 1. 24. 게임서버) 11. IOCP Core IOCP Core 이제 IOCP모델을 서버코어에 넘겨주어야 하기 떄문에 세분화 하여 정리할 필요가 있다. IOCP의 핵심 요약 CreateIocompletionport를 사용하여 (초기화된)CP큐를 생성한다. CP에 연결할 객체(Object)를 생성한다. CreateIocompletionport를 이용하여 생성한 객체를 CP에 등록한다(관찰대상 등록) WSARecv를 사용하여 WorkerThread에게 전송을 맡긴다(이때 WorkerThread에서 마지막에 WSARecv를 호출해야된다) IOCP Core IOCP모델의 CP큐를 담당하는 클래스이다. //IOCPCore.h class IocpObject : public enable_shared_from_this { public: virtual HANDLE .. 게임서버 2023. 1. 17. 게임서버) 8. Select모델 select 모델 select모델은 소켓함수 호출을 미리 알 수 있다면 블로킹/논블로킹에서 했던 불필요한 것을 하지 않아도 된다는 것이다. select모델 순서 0.소켓 셋 초기화 1.ListenSocket(관찰 대상) 등록(읽기,쓰기,예외 설정) 2.세션 소켓 등록 3.Select 옵션 설정(관찰 시작 하나 이상의 소켓이 준비되면 리턴->나머지는 알아서 제거됨(readSet,writeSet,exceptSet)) 4.남은 소켓 체크해서 진행 Select모델 생성 0.소켓 셋 초기화 및 세션생성 먼저 세션과 fd_set을 생성해준다. struct Session //클라이언트의 정보를 서버로 가져오는 역할 { SOCKET socket=INVALID_SOCKET; char recvBuffer[1000]={};.. 게임서버 2023. 1. 13. 게임서버) 7. 논블로킹 소켓 논블로킹 소켓 소켓 관련 시스템 콜에 대하여 네트워크 시스템이 즉시 처리할 수 없는 경우라도 시스템콜이 바로 리턴되어 응용 프로그램이 block되지 않게 하는 소켓 모드이다. 싱글게임이 아닌 온라인 게임과 같이 통신 상대가 여럿이거나 여러가지 작업을 병행하려면 nonblocking 또는 비동기 모드를 사용해야 한다. ioctlsocket function (winsock.h) - Win32 apps The ioctlsocket function (winsock.h) controls the I/O mode of a socket. learn.microsoft.com 서버 논블로킹 소켓 생성 논블로킹 소켓은 블로킹소켓을 생성했을때와 동일한 순서로 생성하되, 바인딩전에 아래와 같은 코드를 설정해주어야 한다. u_l.. 게임서버 2023. 1. 12. 게임서버) 6. 소켓프로그래밍 소켓프로그래밍 //TODO 서버 소켓프로그래밍 순서 0.소켓초기화 1.새로운 소켓 생성 2.소켓에 주소/포트 번호 바인딩 3.Listen설정 4.Accept설정 5.통신 //필요한 헤더파일 #include #include #include // 게임서버 2023. 1. 11. 게임서버) 3.멀티쓰레드 공유자원 멀티 쓰레드 공유자원 공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 어떻게 데이터를 읽거나 쓰느냐에 따라 결과가 달라질 수 있다. 이러한 공유자원을 이해하기 위해서는 일단 메모리의 구조를 이해해야된다. 메모리구조 메모리는 총 4가지 구간으로 나눌수 있는데, 각각의 영역은 다음과 같은 역할을 수행한다. -코드영역: 코드영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트영역이라고도 부른다.CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 되며, 공유하더라도 문제가 되지않는다. 단, 우리가 적은 코드 순서대로 실행되는 것이 아닌 CPU파이프라인에 영향을 받아 순서가 다소 다를수 있다. -스택 영역:스택영역은 함수의.. 게임서버 2023. 1. 6. 게임서버) 2. 멀티쓰레드 멀티쓰레드 //TODO 쓰레드 생성 쓰레드는 다음과 같이 생성이 가능하다. #include std::thread t(실행할 함수); 이런식으로 쓰레드를 생성하고 사용할수 있지만 문제가 발생할 수 있다. 예를 들어 자식 스레드가 아직 실행 중인데 부모 스레드가 종료한되는 경우이다. 기본적으로 메인 스레드가 종료되고도 자식 스레드가 계속 실행 중인 것은 비정상적인 상황으로 본다. 때문에 이 경우, 강제로 오류를 발생시킨다. 이러한 경우를 위해 join() 이라는 함수를 통해 해결할수 있다. 만약 자식쓰레드가 join을 호출하게 되면 부모 스레드는 자식쓰레드가 실행이 끝날 때까지 멈추게 된다. 자식쓰레드의 실행이 끝나면 다시 실행을 재개한다. t.join(); vector를 이용한 다중쓰레드 생성 void T.. 게임서버 2023. 1. 6. 이전 1 ··· 3 4 5 6 7 8 9 ··· 14 다음 728x90 반응형