2012-11-20 35 views

Trả lời

11

Nếu ý định của bạn là sử dụng nó làm đầu vào cho trình đổ bóng khác: - chỉ cần đảm bảo bạn đã tạo texture2D với D3D11_BIND_RENDER_TARGET và D3D11_BIND_SHADER_RESOURCE.

  • Kết nối kết cấu làm mục tiêu hiển thị và hiển thị kết quả.
  • Bỏ liên kết đó làm mục tiêu hiển thị và Liên kết nó dưới dạng tài nguyên trình đổ bóng và sử dụng nó trong trình đổ bóng tiếp theo.
  • Chỉ cần lưu ý rằng kết cấu không thể bị ràng buộc làm mục tiêu và tài nguyên cùng một lúc.

Nếu ý định của bạn là truy cập kết cấu trên CPU sử dụng C++ làm mảng pixel, thì bạn phải thực hiện một số công việc. Thật không may, do các kiến ​​trúc GPU hiện tại, không thể truy cập trực tiếp vào pixel của texture2D vì các pixel thực sự tồn tại trong tiềm năng bộ nhớ GPU ở định dạng đặc biệt (định dạng bị lốm đốm).

  • Tạo kết cấu mà GPU có thể hiển thị.
  • Tạo kết cấu dàn dựng (D3D11_USAGE_STAGING) sẽ được sử dụng để nhận đầu ra của GPU.
  • Hiển thị kết cấu GPU.
  • Phát hành ID3D11DeviceContext :: CopyResource() hoặc ID3D11DeviceContext :: CopySubresource()
  • Gọi ID3D11DeviceContext :: Map() trên tài nguyên dàn để truy cập vào pixel.
  • Gọi ID3D11DeviceContext :: Unmap() trên tài nguyên dàn dựng.
  • Gọi ID3D11DeviceContext :: UpdateSubresource() để cập nhật phiên bản của tài nguyên mà GPU có.

Như bạn có thể thấy điều này chắc chắn không phải là một nhóm hoạt động tầm thường và đi ngược lại kiến ​​trúc GPU ngày nay được tối ưu hóa để làm. Tôi chắc chắn sẽ không khuyên bạn nên nó.

Nếu bạn kết thúc đi xuống con đường này, hãy chắc chắn cũng đọc về tất cả những mối quan tâm về hiệu suất bộ nhớ GPU đọc lại đi kèm với: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205132(v=vs.85).aspx#Performance_Considerations

Các vấn đề liên quan