연산

    DirectX와 HLSL간의 행렬 순서와 연산

    예제 프로그램의 셰이더 코드에서는 'World * View * Projection' 순으로 행렬연산을 수행하는게, 내 프로그램에서는 'Project * View * World' 순으로 연산해야 정상적인 결과가 나왔기 때문이다. 컴퓨터에서 다차원 배열로 행렬을 구성할 때, 행렬을 어떤 순서로 접근할 것인지에 대한 순서가 있다. DirectX에서는 행렬 순서가 row-major(행우선)이고, HLSL에서는 column-major(열우선)이다. 위와 같이 행렬을 접근하는 순서가 다르기 때문에, 사용하는 라이브러리에 명시된 순서를 확인하고 그에 맞게 연산을 하지 않으면 제대로 된 결과가 나오지 않는다. 서로간의 행렬 순서가 달랐기 때문에, DirectX에서는 'World * View * Projection' 순..

    C++ 원자적 연산 (atomic)

    뮤텍스를 통해서 전역 변수를 동기화하여 하나씩 증가시킬 수 있다. 그러나 뮤텍스와 같은 lock을 이용하여 개발하는 경우, 사용자가 잘못 사용할 때 교착 상태와 같은 문제를 야기시킬 수 있다. C++11에서는 atomic을 이용하여 뮤텍스와 같이 lock, unlock을 사용하지 않고 값을 증가시키거나 값을 감소시킬 수 있는 기능을 제공하고 있다. atomic : atomic 변수를 선언할 수 있는 데이터형. fetch_add : atomic의 멤버 함수로, 값을 증가시키는 함수. fetch_sub : atomic의 멤버 함수로, 값을 감소시키는 함수. atomic으로 설정된 변수에는 초기에만 값을 대입할 수 있다. 그 이외에는 대입이 불가합니다. 대신 값을 증가, 감소 시키는 역할만 수행한다. 그 이유..