본문 바로가기
TIL

[TIL] 20221102 성장일지

by 마두식 2022. 11. 2.
반응형
C/C++
  • String 클래스 만들기

 

  • explict

-  C++ 에서 원하지 않는 암시적 변환을 할 수 없도록 컴파일러에게 명시할 때 사용하는 키워드
-  생성자가 복사 생성자의 형태로도 호출되는 것을 막아준다.

 

  • mutable

-  const 함수 내부에서는 멤버 변수들의 값을 바꾸는 것이 불가능하다.
-  만약 멤버 변수를 mutable로 선언하였다면 const 함수에서도 이들 값을 바꿀 수 있다.
-  함수의 의미 상 읽기 작업을 수행하는 함수더라도 내부에서 특정 변수를 변경해야만 하는 경우가 있을 수 있다. 이런 경우 mutable 키워드를 사용한다.

=>  예시 : 씹어먹는 C ++ - <4 - 6. 클래스의 explicit 과 mutable 키워드> (modoocode.com)

 

  • assert

-  디버깅 모드에서 개발자가 오류가 생기면 치명적일 것이라는 곳에 심어놓는 에러 검출용 코드
-  assert 함수를 이용해서 오류가 발생할 것 같은 곳에 넣어둔다면 프로그램이 저절로 개발자에게 알려줌
-  assert 함수에 걸리게 되면 버그 발생위치, call stack 등 여러 정보를 알 수 있다.
-  assert 함수는 디버그 모드에서만 컴파일 되기 때문에, 다른 코드에 영향을 주지 않는 코드만 넣어야 한다.

 

  • 익명 네임스페이스

 

 

DirectX 11
  • 예제 분석

-  CALLBACK 원형

#define CALLBACK __stdcall


-  cdecl 방식

-  C/C++ 에서 사용되는 방식으로 함수를 호출한 쪽에서 스택을 정리
-  가변길이 파라미터를 전달할 수 있다. printf(), scanf() 등
=>  일반적으로 함수를 호출하는 방식


-  stdcall 방식

-  WIN32 API에서 사용되는 방식, 호출 당한 함수 쪽에서 스택을 정리
-  가변길이 파라미터는 전달할 수 없다.
=>  이벤트에 의해 메시지가 발생했을 때, OS에서 호출하는 함수
=>  즉, 어떠한 이벤트 발생시 운영체제에게 호출당하는 함수


-  WNDCLASS 구조체의 멤버 lpfnWndProc

-  윈도우 프로시저를 지정하는데, 이 멤버에 지정하는 함수의 원형은 다음과 같다.
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)
=>  * MainWndProc 이라는 함수명은 프로그래머가 임의로 정할 수 있는것
=>  wc.lpfnWndProc = MainWndProc; // 함수 주소값 넘김
=>  lpfnWndProc : 메시지 처리 함수 지정
=>  메시지가 발생하면 여기서 지정한 함수가 호출된다.


-  HINSTANCE

-  HINSTANCE 핸들은 실행되고 있는 Win32 프로그램이 메모리 상에 올라가있는 시작 주소 값을 갖고 있다.
-  리소스들을 로드하는 함수들에서 이 핸들 값을 많이 참조한다
=> 메모리상에 올라가있는 실행 모듈들(exe, dll 등) 중 HINSTANCE가 가리키는 주소에 올라가 있는 실행 모듈에서 그 리소스를 읽어오라고 지정해주는 것
-  HINSTANCE는 프로그램의 인스턴스 식별자(핸들)
-  실행파일 형태로 껍데기에 불과한 프로그램이 메모리에 실제로 구현된 실체



HWND

-  프로그램의 윈도우 식별자(핸들)를 의미.
-  해당 프로그램의 윈도우들을 구분하기 위한 식별 값.
-  윈도우와 프로그램에는 차이가 있다.
=>  윈도우 프로그래밍에서 하나의 프로그램에는 많은 위도우들을 가질 수 있기 때문

=>  참고 링크 : [API/MFC] HINSTANCE & HWND의 차이 (tistory.com)

 

  • 렌더링 파이프라인(Chapter 5)

-  현재 가상 카메라에 비친 3차원 장면의 모습에 근거해서 2차원 이미지를 생성하는 데 필요한 일련의 단계들 전체

 

 

 


 

 

 

  • 예제 프로그램 Alt-Enter 문제 발생

=>  코드 전체적으로 뜯어봤지만 정확하게 뭐가 문제인지 모르겠음

=>  기본적으로 DXGI는 Alt-Enter 키를 누르면 화면 모드가 전환되는 것을 지원함.

=>  화면 모드 전환시 WM_SIZE 메시지를 발생시키므로 윈도우 사이즈 갱신에 따른 버퍼를 새로 만드는 일반적인 처리만 하면 된다고 함.

참고 링크 : DirectX 11 기초 (Tutorial) - DXGI 기능 ( 윈도우 사이즈 갱신, 화면 전환, 그래픽 환경 조사) : 네이버 블로그 (naver.com)

=>  예제 코드에서는 해당 부분이 처리가 된 것 같은데도 Alt-Enter를 눌러서 전체화면 모드로 전환시 정상적으로 화면이 출력되지 않음

=>  예제 D3DApp.cpp 코드의 WM_SIZE 처리에 else 구문에 있는 OnResize() 함수 호출 부분을 주석처리하면 정상적으로 동작이 되긴 하나 이게 맞는 것인지는 모르겠음.

 

  • DXGI_MWA_NO_WINDOW_CHANGES 플래그와 DXGI_MWA_NO_ALT_ENTER 플래그의 차이 파악하기

=>  연습문제 푸는 도중에 해당 플래그들을 사용하는 부분이 있었음

=>  둘 중 어느 키워드를 사용하든 얼핏 봤을 땐 똑같이 실행이 됨

=>  어떤 차이가 있는지 찾아봐야겠음.

 

 

 

예제 프레임워크를 전체적으로 뜯어보고 어떻게 구동하는지 간략하게는 이해했지만 아직 완벽히 이해하진 못했음.

연습문제도 조금 풀어봤지만 구글 검색 없이는 손대기 힘든 수준

 

계속 프레임워크에 대해서만 공부하고 있기엔 시간이 부족하니 이 상태로 일단 진행하면서 모르는 부분이 추가적으로 생길 때마다 공부해나갈 예정

 

반응형

'TIL' 카테고리의 다른 글

[TIL] 20221104 성장일지  (0) 2022.11.05
[TIL] 20221103 성장일지  (0) 2022.11.03
[TIL] 20221101 성장일지  (0) 2022.11.01
[TIL] 20221028 성장일지  (0) 2022.10.28
[TIL] 20221026 성장일지  (0) 2022.10.26

댓글