ฉันควรใช้รหัส OpenGL เวอร์ชันใดพิจารณาถึงความเข้ากันได้และประสิทธิภาพ [ปิด]


19

เมื่อข้อมูลจำเพาะ OpenGL อัปเดตพวกเขาจะเพิ่มคุณสมบัติเท่านั้น ดังนั้นตามทฤษฎีแล้วฮาร์ดแวร์ล่าสุดและยิ่งใหญ่ที่สุดที่รองรับโปรไฟล์ Core และ Compatibility ควรเรียกใช้โค้ด OpenGL1.1 ที่เก่ามาก สิ่งนี้กลายเป็นจริง ฉันใช้เวลา 12 เดือนในการเรียนรู้ OpenGL1.1 และเข้าใจอย่างเป็นธรรม

ฉันได้อ่านไม่กี่บทของหนึ่งในหนังสือ OpenGL4.2 ใหม่ที่แปลกใหม่ คุณสมบัติเกือบทั้งหมดที่ฉันเชื่อถือได้เลิกใช้แล้ว (เช่นรายการดิสเพลย์) ซึ่งให้ฉันคิดว่ามีวิธีที่ดีกว่าในการทำสิ่งเหล่านี้ทั้งหมด

ให้พิจารณาว่า 1.1 มีแนวโน้มที่จะได้รับการสนับสนุนโดยฮาร์ดแวร์ทันสมัยทั้งหมด 1.1 ได้รับการปล่อยตัวในปี 1992 ผมไม่ได้เข้ารหัสวิธีที่ยากเพียงแค่ให้การสนับสนุนเครื่องคอมพิวเตอร์อายุ 20 ปี :-p ฉันคิดว่ามันสมเหตุสมผลที่จะสมมติว่านักเล่นเกมส่วนใหญ่ใช้ฮาร์ดแวร์ที่พื้นในช่วงกลางอายุประมาณ 5 ปี

ฉันคิดว่าวิธีการที่ใหม่กว่านั้นได้รับการออกแบบมาให้เป็นหนึ่งในสองสิ่งที่เป็นสากล: ประสิทธิภาพที่ดีขึ้นหรือง่ายต่อการเขียนโค้ด ฉันอ่านบางที่มันไม่เคยทั้งสอง! XD

OpenGL รุ่นใดที่ได้รับการสนับสนุนอย่างกว้างขวางที่สุดโดยฮาร์ดแวร์อายุประมาณ 5 ปี เวอร์ชันใดที่เหมาะสมที่สุดที่จะใช้เนื่องจากข้อพิจารณาเหล่านี้

คำตอบ:


19

จากการพิจารณาของคุณฉันก็โผล่ขึ้นมาเพื่อดูว่าข้อกำหนดของ OpenGL สำหรับแต่ละรุ่นออกมาเมื่อใดและยังรวมถึงข้อมูลเชิงลึกโดยรวมจากสิ่งที่ฉันได้เห็น

OpenGL 3 ซึ่งเปิดตัว FBO VAO และสิ่งอื่น ๆ ได้เปิดตัวเมื่อวันที่ 11 กรกฎาคม 2551 เกือบ 5 ปีที่แล้ว แน่นอนว่าคุณไม่สามารถคาดหวังว่าการ์ดทั้งหมดหลังจากวันนั้นจะสามารถใช้งาน OpenGL 3 ได้ทันที

ลองดูที่การสำรวจฮาร์ดแวร์ของ Steam 40% นั้นเป็น DirectX 10 เนื่องจาก OpenGL 3 จำเป็นต้องใช้การ์ดกราฟิกที่คล้ายกันจึงปลอดภัยที่จะถือว่าการ์ด DirectX 10 ส่วนใหญ่สามารถทำงานได้อย่างน้อย OpenGL 3

OpenGL 3 รองรับการ์ดทุกอย่างกลับสู่ซีรี่ส์ GeForce 8xxx ซึ่งเป็นที่นิยมมากถ้าฉันจำได้ถูกต้อง สิ่งที่น่าสนใจที่ควรทราบก็คือกราฟิก Intel HD 2000 และ 3000 (Sandy Bridge) รองรับ OpenGL 3 เท่านั้นดังนั้นโปรดจำไว้ว่าหากคุณวางแผนที่จะกำหนดเป้าหมายเหล่านั้น

สรุป: OpenGL 3 เป็นเดิมพันที่ดี (โปรดจำไว้ว่านักเล่นเกมส่วนใหญ่ขึ้นอยู่กับกลุ่มเป้าหมายของคุณอาจมีฮาร์ดแวร์ที่ดีกว่าค่าเฉลี่ย)


นี่คือคำตอบที่ดี นั่นเป็นความเข้าใจที่ฉันกำลังมองหา
Suds

3
"สิ่งที่น่าสนใจที่ควรทราบก็คือกราฟิก Intel HD 2000 และ 3000 (Sandy Bridge) รองรับ OpenGL 3 เท่านั้น" หมายเหตุ: รองรับ GL 3.1 เท่านั้น (เพราะ Intel ไม่สนใจ) และเนื่องจากเป็น Intel จึงควรใช้ "การสนับสนุน" ด้วยเม็ดเกลือ ฮาร์ดแวร์ของพวกเขาสามารถรองรับ 3.3 ได้ แต่พวกเขาไม่ได้เปิดเผยสิ่งนั้น (เพราะอีกครั้งพวกเขาไม่สนใจ) ฉันจะหลีกเลี่ยงการใช้ OpenGL 3.x บนฮาร์ดแวร์ของ Intel เลย แน่นอนฉันจะหลีกเลี่ยงการทำสิ่งใดโดยใช้ฮาร์ดแวร์ของ Intel
Nicol Bolas

คำถามนั้นได้รับการหยิบยกขึ้นมา; ตลาดมีฮาร์ดแวร์อิ่มตัวอย่างไร มันคุ้มค่าที่จะไม่ใส่ใจกับกราฟิก Intel และการใช้ OpenGL3.x หรือไม่? หรือมีฮาร์ดแวร์กราฟิก Intel เพียงพอที่จะออกมีความสำคัญ?
Suds

1
ปัญหาหนึ่งคือ OSX 10.7.xรุ่นล่าสุดรองรับเฉพาะ OpenGL 3.2 , 10.6.x รองรับ 3.0 เท่านั้น (หรืออาจเท่ากับ 2.x) 10.5.x แตกต่างกันอย่างมากขึ้นอยู่กับการ์ด 1.3, 1.5 และ 2.0 เป็นไปได้ ระบบเหล่านั้นจะติดอยู่ตลอดเวลาในเวอร์ชัน OpenGL ยกเว้นว่าผู้ใช้จ่ายเงินให้กับ Apple เพื่อการอัพเดท ไม่มีการอัปเดตไดรเวอร์การ์ดแสดงผลหรือเช่นสำหรับ OSX ที่จะอัปเดต OpenGL ปัญหาอื่น ๆ คือชิปเซ็ต Intel บางตัวที่ใช้ในเน็ตบุ๊ก หลายคนเป็นเพียง OpenGL 2.0 หรือแย่กว่านั้น
เดวิดซี. บิชอป

และจากนั้นคุณมี 3DS ซึ่งยังคงโยกย้าย OpenGL 1.1 ...
kirbyfan64sos

8

ฉันจะเริ่มต้นที่นี่: http://store.steampowered.com/hwsurvey

ฉันจะไม่กำหนดเป้าหมายช่วงเวลาเป็นเปอร์เซ็นต์ของผู้ใช้ตัวอย่างเช่นหากคุณกำหนดเป้าหมาย 4cpus คุณจะมีผู้ใช้ถึง 45% แต่ถ้าคุณทำงานเป็น 2 คุณจะได้รับ 90%


1
คุณเห็น OpenGL ที่ไหน ฉันเห็น DirectX เท่านั้น (ซึ่งเป็นสิ่งที่น่าสนใจหากคุณวางแผนที่จะกำหนดเป้าหมายเฉพาะ Windows)
DMan

ฉันคาดเดาว่าคุณจะทำสิ่งที่ถูกต้องตามพื้นฐานของกราฟิกการ์ด
Jimmy

ใช่ - ฉันไม่เห็นอะไรเกี่ยวกับ OpenGL - แต่คุณสามารถหาได้จากรุ่นของการ์ดหรือจริง ๆ แล้วฉันเชื่อว่าจะมีความสัมพันธ์ระหว่าง DirectX กับ OpenGL ในปริมาณที่เหมาะสม
salmonmoose

3

คำตอบนั้นขึ้นอยู่กับว่าคุณต้องการหรือไม่หรือต้องการใช้งานกราฟิก Intel ที่เผยแพร่ภายในระยะเวลาที่คุณกล่าวถึง

หากคุณทำเช่นนั้นให้ จำกัด ตัวเองไว้ที่ OpenGL 2.1 (หรือแม้กระทั่ง 1.5) หากคุณไม่ทำอย่างนั้น 3.x ก็สมเหตุสมผล

ใช่ OpenGL เวอร์ชันที่เก่ากว่ายังคงทำงานอยู่และใช่จากมุมมองหนึ่งที่พวกเขาสามารถดูง่ายขึ้น จุดที่สิ่งต่าง ๆ หลุดออกไปจากรูปร่างคือเมื่อคุณพยายามทำสิ่งต่าง ๆ (และคุณจะ) ว่าสิ่งเหล่านั้นไม่สนับสนุนอย่างง่ายดายเกินไป OpenGL 1.1 ไม่ใช่วิธีที่ยาก - บ่อยครั้งที่เป็นไปไม่ได้หากคุณต้องการได้ผลลัพธ์ที่แน่นอน


มันเกิดขึ้นกับฉันที่ฉันควรเพิ่มตัวอย่างว่าทำไม 1.1 มักจะเป็นไปไม่ได้ หนึ่งที่สามารถเกี่ยวข้องกับการทำงาน 1.1 ได้อย่างง่ายดายคือการผสมผสานหลายรอบ เนื่องจากคุณไม่มี FBOs และส่วนใหญ่คุณถูก จำกัด ที่ 8 บิตต่อพื้นผิวของส่วนประกอบคุณจะพบว่าเมื่อการผสมผสานผ่านการซ้อนกันคุณจะเริ่มสูญเสียความแม่นยำ ใช้รหัสผ่าน 3/4/5 และผลลัพธ์สุดท้ายจะเริ่มมีลักษณะ (หรือแย่กว่า) กราฟิก 16 บิตหรือ 8 บิต แต่บ่อยครั้งที่ต้องใช้บัตรผ่านหลายครั้งเพื่อจำลองเอฟเฟกต์ระดับสูงขึ้น (พื้นฐานการทำ multitexturing ขั้นพื้นฐานจะเป็นสิ่งที่เราทุกคนคุ้นเคย) ด้วยชุดคุณสมบัติ 1.1
Maximus Minimus

แม้แต่กราฟิก Intel HD (Sandy / Ivy Bridge) รองรับ OpenGL 3.1 เท่านั้นและนั่นเป็นปีที่แล้ว มันลงมาไม่ว่าคุณต้องการสนับสนุนแล็ปท็อปราคาถูก (หรือพลังงานต่ำ)
Steve Howard

2
@SteveHoward: Intel HD Graphics สามารถรองรับ OpenGL 4. source
Janus Troelsen

บทความนั้นประมาณ 3 เดือนหลังจากที่ฉันโพสต์ความคิดเห็นของฉัน
Steve Howard

1

สิ่งแรก OpenGL 1.1 เช่นรายการที่แสดงจะยังคงทำงานในบริบทใหม่หากคุณมีโปรไฟล์ความเข้ากันได้ (ซึ่งโดยทั่วไปจะเป็นกรณีนี้) ปัญหาเดียวคือถ้าคุณคาดว่าจะพอร์ตไปยัง OpenGL ES ซึ่งเป็นหนึ่งในไลบรารีกราฟิกเฉพาะของคอนโซล (โดยทั่วไปแล้วจะถูกตัดลง OpenGL คล้ายกับ OpenGL ES) หรือแม้กระทั่ง WebGL (ซึ่งจะต้องใช้งานใหม่อีกเล็กน้อย)

ส่วนตัวผมขอแนะนำให้ใช้จุดสุดยอด / ชิ้นส่วน shader และ VBO ของ พวกเขาใช้เวลามานานแล้วและเสนอการปรับปรุงประสิทธิภาพที่ยอดเยี่ยม คุณอาจจะให้กลับง่าย ๆ ถ้าคุณห่อฟังก์ชั่นในชั้นเรียน

คุณยังสามารถเลียนแบบสิ่งต่าง ๆ เช่น Vertex Array Objects


0

ด้วยฮาร์ดแวร์อายุ 5 ปีบางคนยังคงใช้ XP และนั่นหมายความว่าคุณไม่สามารถแม้แต่เขียนโค้ดด้วย DirectX 10 หรือ OpenGL 3 และ OpenGL 3 มีคุณสมบัติมากมายที่คุณจะได้รับประโยชน์อย่างแท้จริงเช่น framebuffers และอื่น ๆ พูดตามตรงฉันจะชนข้อกำหนดของระบบของคุณเพียงเล็กน้อยเพื่อให้คุณสามารถรวมคุณสมบัติเหล่านั้น


8
-1: "ด้วยฮาร์ดแวร์อายุ 5 ปีบางคนยังคงใช้ XP และนั่นหมายความว่าคุณไม่สามารถแม้แต่เขียนโค้ดด้วย DirectX 10 หรือ OpenGL 3" ไม่จริง. OpenGL 3.x ทำงานได้ดีใน XP มีเพียง D3D10 ที่ถูก จำกัด จาก XP เนื่องจากเหตุผล API / ไดรเวอร์ มันไม่เกี่ยวอะไรกับฮาร์ดแวร์
Nicol Bolas

0

เป็นเรื่องปกติสำหรับซอฟต์แวร์ 3 มิติที่จะมีรหัสพา ธ สำหรับทั้งเวอร์ชัน api "พื้นฐาน" และ api "ล่าสุดและยิ่งใหญ่ที่สุด" เวอร์ชัน api

กราฟิกพื้นฐานพื้นฐานรุ่นทั่วไปคือ D3D9 และ OpenGL 2.1 / GLSL 120 ซึ่งทั้งคู่ขาดหายไปอย่างเห็นได้ชัดเพราะรูปทรงเรขาคณิตเพราะฮาร์ดแวร์เก่าไม่รองรับ

ตัวเลือกพื้นฐานอื่นคือ ANGLE ซึ่งก็คือ GLES 2.0 บวก EGL ที่ทำงานบน D3D9, เดสก์ท็อป OpenGL และ mobile GLES 2.0 มันเป็น back back สำหรับ Google chrome และ webgl ใน chrome และ Firefox

http://code.google.com/p/angleproject/

สำหรับเวอร์ชั่นล่าสุดและยิ่งใหญ่ที่คุณเลือกนั่นคือความท้าทายที่มากขึ้น API และฮาร์ดแวร์ที่ใหม่กว่าที่คุณกำหนดเป้าหมายคุณลักษณะที่ดูดีกว่าที่คุณสามารถรองรับได้ - แต่เฉพาะกับฮาร์ดแวร์ล่าสุดและยิ่งใหญ่ที่สุดเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.