어째서.. dx9.0 후면버퍼에 직접 접근해서 메모리 값 변경하는 것 보다

7.0에 있는 direct draw에서의 후면버퍼에 직접 접근해서 메모리값 변경하는게 더 빠르고 퍼포먼스가 좋게 나오지;;

이런식으로 후면버퍼 픽셀 하나하나 값 바꿔서 검정화면으로 바꾸는데 이 코드 넣자마자 엄청 느리니 환장할 지경...
 for(int i = 0; i < 640; i++)
 {
  for(int j = 0; j < 480; j++)
  {
    imageData[i+(j * (lockedRect.Pitch/4))] = 0;
  }
 }//원래 1280 * 860이었는데 너무 느려서 640*480으로 바꿈. 근데 별 차이 없이 느린듯.. 아.. 이 코드 전엔 프레임 날라다니는데
  // 후면버퍼 지우는 이 코드 넣으면 프레임 한 20?


 

이 코드말고 dx에서 기본지원되는 함수로 후면버퍼 지우면 엄청 빠르던데.. 이건 cpu가 아니라 gpu를 사용하는걸테니 그러려니 해도
왜 direct draw에서 구현한 비슷한 프로그램의 소스코드가 훨씬 빠른거지????


완전히 같은 소스코드는 아니지만 거기선 수작업으로 후면버퍼 지우는데도 이정도의 성능저하는 안 일어남;

후면버퍼 한 두세번 수작업으로 지워도 프레임 많이 안 떨어져야 정상 아니야?;;

 

해상도는 같고 dx7은 32비트가 아니라 16비트이긴 한데 이 차이가 그리 클 것 같진 않고...

dx7은 프레임 막 무한대로 뻗어 나가는데

dx9로 저리 구현하면 프레임 한 20 나올듯;

혹시 배열에 값을 넣는 저 연산이 그리 리소스를 많이 잡아먹나 해서 아무 의미없는 배열을 변경하는 코드로 바꿨더니 전과는 다르게 엄청 빠르게 돌아감..

후면버퍼의 배열의 값을 바꿀때만 시스템에 부하가 걸리고 아무 의미없는 배열의 값을 바꿀때엔 별로 부하가 안걸림..

혹시 후면버퍼의 값을 포인터로 접근해서 바꿀 때마다 자동으로 인식해서 무슨 연산이 일어나는건 아니겠지?? 비쥬얼베이직도 아닌데 ㅠㅜㅠㅜㅜ

 

아... 뭐야 이거 ㅠㅜㅠㅜㅠㅜ 고생고생해서 9.0으로 넘어온 보람이 없어...

저거 왜 그런거야??? 존잘 고수님 누가 설명 좀..