목록Graphics API (38)
서의 공간
핵심 개념 도형이 그려지기 위한 과정은 다음과 같다. 1. 정점 타입 정의, 정점의 개수 결정 정점들을 저장하는 정점 버퍼 생성 정점 버퍼를 파이프라인의 IA단계에 바인드 2. 셰이더의 바이트 코드를 관리하는 ID3DBlob 인터페이스로 셰이더 파일 읽기 정점 및 픽셀 셰이더 생성 정점 및 픽셀 셰이더 파이프라인의 각 셰이더 단계에 바인드(VS, PS) 3. 정점의 각 속성에 대한 정보를 작성한다. Semantic name에 주목 InputLayout 생성, 필요 파라미터로 blob을 필요로 함(셰이더 바이트 코드). InputLayout을 파이프라인의 IA단계에 바인드 4. 백버퍼를 파이프라인의 OM단계에 바인드 5. 정점의 기본 기하 구조를 설정하여 파이프라인의 IA단계에 바인드 6. 뷰포트 생성 뷰..
Exception 부분은 넘어간다. 또한 디버깅을 위해 여러 유틸 클래스가 추가되었지만 생략한다. 여기서 핵심은 Graphics.h의 DrawTestTriangle()함수이다. 삼각형이 어떻게 그려지는지 .cpp 코드 내에서 설명한다. 핵심 개념 1. Microsoft::WRL::ComPtr: 템플릿 매개 변수로 지정된 인터페이스를 나타내는 스마트 포인터 형식을 만든다. ComPtr은 기본 인터페이스 포인터에 대한 참조 횟수를 자동으로 유지하고 참조 횟수가 0이 되면 인터페이스를 해제한다. 즉 자동으로 해제해주기 때문에 인터페이스의 Release() 함수를 사용할 필요가 없다. 2. ID3DBlob: ID3DBlob 인터페이스는 D3DCommon.h 헤더 파일에 ID3D10Blob으로 정의된 인터페이스로..
중요하지 않다고 생각되는 과정은 생략했다. 예를 들어 키보드를 추가하는 부분. 필요하다고 생각되면 추가하겠다. 다음은 현재까지의 프레임워크 구조이다(Graphics 클래스 포함). 재차 확인해야 할 것은 위 그림의 구조는 클래스 간의 '상속'관계를 나타내는 것이 아니라는 점이다. 포함관계라고 생각하자. 핵심 개념 1. ID3D11Device: 장치 인터페이스는 가상 어댑터에 해당한다. 자원을 만드는 데 사용된다. 가상의 디스플레이 어댑터 즉, 그래픽카드인지 아니면 그래픽카드와 나를 연결시켜주는 매개체인 건지 불분명하다. 2. IDXGISwapChain: 렌더링 된 데이터를 출력에 표시하기 전에 저장하기 위한 하나 이상의 표면을 구현한다. 그 표면은 백버퍼라고 한다. 3. ID3D11DeviceContex..
윈도우 클래스를 새롭게 정의하고, 윈도우를 만든다. 전체 프레임워크의 구조는 다음과 같다. 두 의미의 '클래스'가 혼용되어 사용되고 있다. 위 그림의 WindowClass에서 Class의 의미는 C++의 클래스(구조체)가 아니라 화면에 표시할 창을 의미한다. 그리고 WindowClass클래스는 Window클래스의 내부 클래스이다. 문맥상 구분할 것. WinMain함수에서 Window 클래스 객체를 생성하면 Window 클래스의 내부 클래스인 WindowClass의 객체가 생성된다. WindowClass 클래스는 싱글톤 패턴으로 정의되어 윈도우 클래스(화면에 표시할 창)를 정의하고 등록한다. 조금 어려운 부분은 아래에 있는 메시지를 처리하는 부분인데, 일단은 넘어가도 좋다. 천천히 알아볼 것. static..
[출처 위키피디아]: 마이크로소프트 윈도우의 메시지 루프 - 위키백과, 우리 모두의 백과사전 (wikipedia.org) 메시지 루프(message loop)는 윈도우 프로그램에서 메시지를 받아들이는 부분을 뜻하며, 윈도우 기반의 모든 GUI 프로그램에 반드시 포함되는 루틴이다. 윈도우의 GUI 프로그램은 기본적으로 이벤트 드리븐으로 동작한다. 윈도우 시스템은 각각 프로세스에 대해서 개별적인 메시지 큐를 할당한다. 어떤 프로세스가 실행되었을 때 해당 프로세스는 메시지 큐를 부여 받으며, 프로세스에 대해서 사용자의 마우스 입력이나 키보드 입력 등 메시지가 발생했을 때 운영체제가 해당 프로세스의 메시지 큐에 메시지를 넣는다. 또는 프로세스가 이런 메시지들을 스스로 자신의 큐에 추가할 수도 있다. 사용자의 입..
아주 기본적인 윈도우를 만드는 과정을 살핀다. 먼저 하나의 윈도우를 만드는 과정의 전체 흐름이다. [Register window class]: 윈도우의 기반이 되는 윈도우 클래스의 속성을 설정하고, 등록한다. [Create window instance]: 윈도우를 만들고 메모리상에 올린다. [Show the window]: 만든 윈도우를 화면에 표시한다. [Message Loop]: 메시지 루프를 처리한다. 아래 코드는 위 1~3 과정에 대한 코드이다. 각 속성의 의미와 함수의 파라미터는 MSDN을 참고 할 것. #include int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )..