나는 렌더링을 위해 Directx 9를 사용하는 게임 엔진을 가지고 있습니다. 주요 업데이트 및 렌더링 루프가 실행되는 동안 스프라이트 그래픽을로드 할 수 있기를 원합니다. 현재 엔진에는 하나의 메인 업데이트와 렌더 루프가 있기 때문에로드가 완료되면 메인 루프가 일시 중지되고 그래픽이로드됩니다.directx에 로더 스레드를 만드는 방법
이 작업을 수행하기 위해 POSIX 스레드를 찾고있었습니다. 스레드 함수를 생성하고 뮤텍스 잠금을 포함 시켰지만 코드 실행시 충돌이 발생합니다.
void GameApp::InternalThreadEntry()
{
pthread_mutex_lock (&mutex);
for(int i = 0; i < MAX_NUMBER; i++)
{
test_loader_sprites[i].loadImage(window1,"Test_Image.tga");
}
has_finishd_loading = true;
pthread_mutex_unlock (&mutex);
}
코드 기능을 렌더링 내 엔진에 충돌 : 여기
스레드 기능입니다. 메인 애플리케이션이 렌더링을 위해 액세스하는 동안 window1 인스턴스의 멤버 인 directx 디바이스가 스레드에 의해로드되기 때문에이 것이 확실합니다.어디가 잘못 됐는지 좀 밝혀 줄래? 새로운 스레드를 사용합니다.
는 마틴
다이렉트 X 9 디바이스는 올바른 작성 플래그'D3DCREATE_MULTITHREADED'를 제공하지 않는 한 스레드로부터 안전하지 않습니다. 성능이 크게 떨어지게되는 것은 물론 나쁜 생각입니다. 가장 좋은 조언은 모든 d3d API 호출을 단일 스레드로 유지하는 것입니다. – galop1n