목록GameDev (8)
코가손의 블로그
Input Assembler 1 정점 들을 CPU에서 GPU로 운반하기 위한 자료구조를 정점버퍼(VertexBuffer)라고 한다 정점 은 위치, 노말, 색상, UV를 담고 있고 구조체가 아니라 바이트 상태로 담고 있다 정점 버퍼의 내용을 D3D11_INPUT_ELEMENT_DESC를 통헤 정점 데이터(구조체)로 조립 정점 데이터를 VertexShader의 Input으로 전달 *D3D11_INPUT_ELEMENT_DESC : 정점 데이터(위치, 노말, 색상, UV), 쉐이더, 알파 블렌딩, z-test여부 등의 설정 *인풋레이아웃 : 그래픽카드는 사용자가 생성한 정점 정보에 대해 모르는 상태, 그래픽카드에 전송할 수 있도록 만든 인터페이스 Vertex Shader MVP(Model View Project..
Condition Variable은 조건을 확인하여 Lock을 잡을지의 여부를 결정한다. Event는 커널 오브젝트 condition_variable은 유저 오브젝트라는 차이가 있다. C++11의 표준이니 왠만하면 Event방식보단 condition_variable방식을 사용하는 것이 좋다. condition_variable을 사용하는 전형적인 단계를 보자면 이렇다. 1) Lock을 잡는다. 2) 공유 변수 값을 수정한다. 3) Lock을 푼다. 4) 조건변수를 통해 다른 쓰레드에게 통지한다. 1) Lock을 잡고 2) 조건 확인, 만족한다면 빠져 나와서 이어서 코드를 진행한다. 아니라면 Lock을 풀어주고 대기상태로 전환한다. mutex m; queue q; condition_variable cv; v..
mutex m; queue q; void Producer() { while (true) { { unique_lock lock(m); q.push_back(100); } this_thread::sleep_for(10000000ms); } } void Consumer() { while (true) { unique_lock lock(m); if (q.empty() == false) { int data = q.front(); q.pop(); cout
Race Condition 두 개 이상의 스레드들이 공유 자원(*임계영역)에 접근하려고 할 때 동기화 매커니즘 없이 접근하려고 경쟁 하는 상황을 Race Condition이라고 한다. Race Condition인 경우, 스레드의 실행 순서를 잘 조절해주지 않으면 이상한 상태, 비정상적인 결과가 발생할 수 있다. 이 문제는 항상 발생하는 것이 아니라 특정한 순서로 수행되었을 때만 발생하여 더욱 문제점을 찾기 어렵다. 그래서 멀티스레드 프로그래밍을 할 경우 특히 동기화 문제를 정말 잘 해결해야 한다. *임계영역 : 공유되는 자원, 문제가 발생하지 않도록 독점을 보장해주어야 하는 영역 동시접근을 해결하기 위한 방법으로 lock, semaphore, monitor, 메시지를 이용한 기법 이 있다. mutex와 ..