문제

Direct3D의 화면에 2D 이미지를 그리려고 시도하고 있습니다. 이는 화면을 채우도록 투사 된 직사각형 광고판 다각형에 텍스처를 매핑하여 수행해야한다고 가정합니다. (나는 관심이 없거나 Direct2d를 사용할 수 없음) SDK에서 찾은 모든 텍스처 정보는 파일에서 비트 맵을로드하고 해당 비트 맵을 사용하기 위해 텍스처를 할당하는 것을 설명하지만 아직 조작 할 방법을 찾지 못했습니다. 픽셀에 의한 비트 맵 픽셀로서의 텍스처.

내가 정말로 좋아하는 것은 다음과 같은 기능입니다

void TextureBitmap::SetBitmapPixel(int x, int y, DWORD color);

텍스처 객체에서 픽셀을 직접 설정할 수 없다면 비트 맵인 DWORL 배열 주위를 유지 한 다음 모든 프레임에 텍스처를 할당해야합니까?

마지막으로, 처음에는 CPU 에서이 작업을 수행 할 것이라고 가정하지만 픽셀 당 색상 계산은 아마도 GPU에서 수행 될 수 있습니다. 단일 픽셀의 색상을 텍스처로 설정하는 HLSL 코드입니까, 아니면 픽셀 셰이더가 디스플레이 픽셀을 수정하는 데 유용합니까?

감사.

도움이 되었습니까?

해결책

첫째, 직접적인 질문 :

기술적으로 픽셀을 질감으로 설정할 수 있습니다. 사용이 필요합니다 잠금을 선정합니다 그리고 잠금 해제 API.

D3D 컨텍스트에서 '잠금'은 일반적으로 자원을 GPU 메모리에서 시스템 메모리로 전송하는 것을 의미합니다 (렌더링 작업에 참여하는 데 비활성화). 잠긴 후에는 인구가 많은 버퍼를 원하는대로 수정 한 다음 잠금을 해제하여 수정 된 데이터를 GPU로 다시 전송할 수 있습니다. 일반적으로 잠금은 매우 비싼 작업으로 간주되었지만 그 이후로 PCIE 2.0 그것은 아마도 더 이상 큰 관심사가 아닐 것입니다. 또한 작은 (1 픽셀) rect를 잠금 할 두 번째 인수로 지정할 수 있으므로 무시할만한 데이터 볼륨의 메모리 전송이 필요합니다. 오래된 Nvidia 운전자에서는 그렇지 않았습니다).

이를 달성하는보다 효율적이고 코드 집약적 인 방법은 실제로 GPU를 떠나지 않는 것입니다. 만약 너라면 질감을 만듭니다 rendertarget (즉, d3dusage_rendertarget을 그것의로 지정합니다. 용법 인수), 그 다음, 당신은 그것을 뽑기 전에 파이프 라인의 대상으로 설정하고 셰이더를 작성할 수 있습니다 (아마도 전달 매개 변수) 픽셀을 페인트합니다. 이러한 렌더링 대상 사용은 표준으로 간주되며 주변에서 많은 코드 샘플을 찾을 수 있어야합니다. 그러나 이미 성능 문제에 직면하지 않는 한 단일 2D 광고판의 과잉이라고 말합니다.

HTH.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top