Direct3d9의 모든 프레임에서 버텍스 버퍼를 잠궈 블렌드 셰이프 코드의 데이터로 채 웁니다. 내 음영 처리는 두 단계를 사용하므로 하나의 쉐이더로 한 번 렌더링 한 다음 다른 쉐이더와 첨가제 블렌드를 그립니다.Z- 파이팅 Direct3D9, 다이나믹 버퍼 만 사용
저의 이유 때문에 두 번째 드로잉 호출에서 데이터가 (분명히) 약간 다릅니다. 왜냐하면 두 번째 패스가 가끔 '첫 번째'뒤에 렌더링되는 z- 싸움이 번쩍이기 때문입니다.
이것은 모두 하나의 스레드에서 수행되며 렌더링 호출이 오랜 시간 동안 버퍼가 잠금 해제됩니다. 또한 쉐이더 명령에 대한 변경이 일어나지 않으므로 두 호출에서 데이터가 정확히이되어야합니다. 블렌드 쉐이프가 변경되지 않으면 z- 파이팅이 수행되지 않습니다.
필자는 쉐이더에서 깊이를 조금씩 밀어 넣었지만, 이것은 매우 비 효과적 인 해결책입니다.
왜이 데이터가 변경 될 수 있습니까? DirectX가 잠금을 해제 한 후 왜 버퍼에서 데이터를 변경할 수 있습니까? 변경하지 않도록 강제 할 수 있습니까?