전체 글

컴공과 학부생의 이야기
·Graphics
m_swapChain->ResizeBuffers(0, m_width, m_height, DXGI_FORMAT_UNKNOWN, 0);윈도우 화면을 반응형으로 구현하기 backBuffer의 사이즈를 그에 맞게 바꾸기 위해 ResizeBuffers 함수를 이용하였다. 다만 해당 함수를 통해 RTV를 생성한 결과 처음 설정한 사이즈와 똑같은 사이즈를 출력함으로써 문제가 발생하였다. 해당 문제로 인해 DepthStencilView의 사이즈와 RenderTargetView의 사이즈가 달라서, 윈도우 창 크기 변경 시 화면이 정상적으로 출력되지 않는 오류가 발생하였던 것이다.ID3D11Texture2D* backBuffer = nullptr;ID3D11RenderTargetView* rtv = nullptr;HR(m..
·Graphics
Vertex Shader는 정상작동하는 것을 확인할 수 있지만, pixel shader는 did not run이라는 문구와 함께 디버깅도 하지 못하는 경우가 있을 것이다. 이는 프로그램 자체에서 쉐이더가 돌아갈 필요가 없다고 판단하여 작동하지 않는 경우이다. 대표적으로 몇가지 케이스가 있다.1. early depth test2. 완전 엉뚱한데 그리는 경우 1. depth 값이 카메라에 잡히지 않는 곳에 있으면서 생기는 문제이다. 이는 pixel shader에서 SV_DEPTH를 통해 값을 억지로 부여해서 확인해 보는 방법도 있다. 2. 내가 경험한 경우는 2번 케이스였다. 쉐이더로 보내는 cbuffer 값들이 전혀 설정이 되지 않아 IA에서는 모양이 제대로 잡혔지만, VS에서 값을 변환하면서 아에 사라져..
·C++
void func(int& x){ x = 20;}int main(){ int a = 0; func(a); // a = 20}void func(int* px){ *px = 20;}int main(){ int a = 0; func(&a); // a = 20} &(reference)참조 변수 x는 main의 a 변수의 별명이 되어 a의 메모리를 공유하게 된다. 즉, 서로 부르는 이름만 다를 뿐이지 같은 주소를 공유한다. *(pointer)px는 int*로 포인터 타입이다. 해당 타입은 지역변수이자 매개변수이다.참조와 다른 큰 특징은 px는 a와 주소가 다르다는 것이다. *px와 *a가 가르키는 값은 같다. 다만, px와 a의 주소는 다르다는 이야기이다.