2011-10-07 39 views
5

Tôi muốn có thể hiển thị trong cửa sổ hiển thị OpenGL bằng DirectX. Điều này là do các tính năng tôi sau chỉ được hỗ trợ trong DirectX.Trộn DirectX và OpenGL

Tôi đã nghe nói rằng có thể làm điều này một vài năm trước và tôi hy vọng nó vẫn có thể thực hiện được.

Tôi tưởng tượng nó sẽ liên quan đến việc trỏ DirectX đến phần chính xác của VRAM và bộ đệm độ sâu chính xác.

Ngoài ra một hướng dẫn hoặc chỉ đơn giản là một lời giải thích sẽ cực kỳ hữu ích.

+0

Tại sao bạn cần xuất nó vào OpenGL? Nếu DirectX có sẵn tại sao không chỉ gắn bó với DX renderer? – glenatron

+0

Chủ yếu là vì tôi yêu cầu các lệnh OpenGL của Windows để hiển thị chính xác bề mặt hiển thị OpenGL trong cửa sổ cửa sổ con. – ceorron

+8

"Điều này là do các tính năng tôi sau chỉ được hỗ trợ trong Direct X." Và những tính năng đó là gì? Tôi biết rất ít tính năng D3D không có sẵn trong OpenGL. –

Trả lời

2

Trộn OpenGL và Direct3D sẽ không hoạt động và AFAIK không bao giờ được sử dụng. Tôi có thể hỏi, tính năng nào của Direct3D mà bạn yêu cầu, OpenGL không cung cấp?

3

Ít nhất NVIDIA có NV_DX_interop extension, cho phép bạn sử dụng Direct3D 9 bộ đệm/kết cấu/bề mặt trực tiếp dưới dạng bộ đệm OpenGL/textures/renderbuffers (do đó là cách khác xung quanh). Nhưng tôi không có bất kỳ kinh nghiệm với điều này và tôi không biết nếu nó được hỗ trợ rộng rãi hoặc thực sự hoạt động tốt.

Nó sẽ là nhiều interresting tính năng mà bạn nghĩ rằng chỉ có sẵn trong Direct3D. Có lẽ chúng tôi có thể cho bạn thấy làm thế nào để đạt được nó với OpenGL, vì không có nhiều tính năng (nếu có) có sẵn trong Direct3D và không có trong OpenGL. Mặc dù nếu bạn có một thẻ ATI, có sẵn và thực sự làm việc một cách chính xác đôi khi có thể là hai điều riêng biệt.

+0

Lưu ý rằng ngay cả khi interop không cho phép bạn kết xuất với cả hai API vào cửa sổ _same_. Nếu bạn có các cửa sổ khác nhau hoặc ngữ cảnh hiển thị ngoài màn hình thì bạn có thể sử dụng nó. Nhưng không phải trên cùng một bề mặt. –

+0

Bạn có thể hiển thị qua OpenGL trên một bề mặt ngoài màn hình, với DirectX ở một bề mặt khác, sau đó sao chép và kết hợp kết cấu của chúng. –

0

Bạn có thể. Ít nhất cho nVIDIA! Kiểm tra NV_DX_interop. Tuy nhiên, tính năng EVERY DirectX được hỗ trợ trong OpenGL vì OpenGL có độ RAW/Thấp hơn DirectX! Chỉ là cách nó được thực hiện có thể khác nhau. Một lần nữa, hãy cho chúng tôi biết tính năng nào của DirectX bạn muốn và tôi có thể cho bạn biết làm thế nào để thực hiện lại nó.

0

Một ví dụ cụ thể về sự khác biệt giữa OpenGL và Direct3D, đó là điều tôi đang nghiên cứu, đó là trong DirectShow (một tập con của Direct3D), có bộ lọc quay video cho máy ảnh Panasonic DVCPRO-HD của tôi. Vì vậy, các luồng trực tiếp được thu thập thông qua API đó, tôi muốn sử dụng làm đầu vào cho các thư viện OpenGL. Một thư viện như vậy là OpenFrameWorks, dựa trên OpenGL. Tôi đang tìm cách xem hiệu quả của việc chuyển khoản này. API video OpenFrameWorks hiện tại sử dụng API DirectShow hơi cũ và không còn được dùng nữa và sử dụng chiến lược bạo lực để nhận pixel từ DirectShow qua OpenFrameWorks.