DirectX11 ที่ไม่มีหน้าต่างติดอยู่?


13

ฉันแค่สงสัยว่าถ้าเป็นไปได้ที่จะเริ่มต้นและใช้ DX11 หรือ DX9 สำหรับการเรนเดอร์ออฟเซ็ตเท่านั้น - หมายถึงไม่มีหน้าต่างที่แนบมา ฉันตั้งใจจะทำการเปรียบเทียบ GPU ก่อนที่จะเปิดหน้าต่างจริง ในการเปรียบเทียบนี้ฉากทดสอบบางส่วนได้รับการแสดงผล แต่ไม่ควรมองเห็นได้ (ที่จริงขึ้นอยู่กับคะแนนมาตรฐานที่แตกต่างกันเปิดหน้าต่าง)


2
ด้วย D3D11 คุณต้องการที่จะให้หน้าต่างจัดการเมื่อมีการสร้างห่วงโซ่แลกเปลี่ยนให้ดูที่นี่ แต่อาจมีวิธีซ่อนหน้าต่างนี้หรือไม่?
Laurent Couvidou

1
ใช่ฉันรู้แล้วว่า DX11 ต้องใช้มือจับหน้าต่างสำหรับ swapchain - แต่ถ้าคุณแสดงผลนอกจอคุณต้องการ swapchain จริงๆหรือไม่? มีวิธีการเริ่มต้นและเรนเดอร์โดยไม่ใช้ swapchain หรือไม่ - ฉันคิดว่า swapchain นั้นใช้สำหรับการเรนเดอร์หน้าจอ ...
GPUquant

1
ตอนนี้ฉันกำลังพยายามใช้หน้าต่าง 1x1px ซึ่งซ่อนอยู่ แต่มันไม่ใช่วิธีที่ดีที่ฉันจะพูด
GPUquant

คำตอบ:


15

ใช่. คุณสามารถเริ่มต้นอุปกรณ์ Direct3D โดยใช้D3D11CreateDeviceซึ่งไม่ต้องมีหน้าต่าง คุณไม่ได้สร้างเชนการแลกเปลี่ยนเลย คุณยังสามารถสร้างเป้าหมายการแสดงผลแบบออฟไลน์และวาดไปยังเป้าหมายได้ตามปกติ แทนที่จะเรียกPresentสายโซ่แลกเปลี่ยนคุณสามารถโทรID3D11DeviceContext::Flushเพื่อเตะ GPU ด้วยงานที่คุณเข้าคิว

ถ้าคุณต้องการที่จะสร้างหน้าต่างคุณสามารถทำลายอุปกรณ์และสร้างมันด้วยหรือคุณสามารถสร้างห่วงโซ่การแลกเปลี่ยนและแนบไปกับอุปกรณ์ที่มีอยู่ด้วยD3D11CreateDeviceAndSwapChain IDXGIFactory::CreateSwapChain( IDXGIFactoryเป็นวัตถุ COM แยกต่างหากที่จำเป็นต้องสร้างขึ้นด้วยCreateDXGIFactoryก่อน)


+1 โทรFlushแทนการนำเสนอเชนแลกเปลี่ยนนี่มันเรียบร้อย!
Laurent Couvidou

เป็นไปได้ด้วยIDirect3D9::CreateDeviceวิธีD3D9 ด้วยวิธีนี้หรือไม่? ฉันไม่พบD3D9CreateDeviceวิธีที่น่าเศร้า
Vinz

@ Vinzenz ฉันไม่คิดอย่างนั้น D3D9 ไม่แยกแนวคิดของ "อุปกรณ์" และ "สลับโซ่" อย่างที่ D3D10 ขึ้นไปทำ พวกเขาทั้งคู่ถูกรีดลงในวัตถุอุปกรณ์ D3D9 ซึ่งต้องการ a HWNDเพื่อสร้าง
นาธานรีด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.