ใช้ OpenGL หรือ GLSL ล้วนๆ [ปิด]


11

ฉันสนใจที่จะศึกษาการเขียนโปรแกรมกราฟิกจุดเริ่มต้นที่ชัดเจนคือการเรียนรู้ OpenGL แต่การรวบรวมข้อมูลที่กระจัดกระจายรอบ ๆ ฟอรัมและไซต์ดูเหมือนว่าการใช้งาน OpenGL อย่างแท้จริงนั้นจะจางหายไปเนื่องจากสิ่งต่าง ๆ ส่วนใหญ่ pre-3.0 กำลังถูกคัดค้านและอ้างถึงการทบทวนใน Amazon นอกจากนี้หนังสือที่ฉันได้เห็นดูเหมือนว่ายอดเยี่ยมครอบคลุมรุ่นใหม่ แต่เพียงบางส่วนเพราะส่วนที่ดีของหนังสือสอนฟังก์ชั่นที่เลิกใช้แล้วและมีหนังสือเฉพาะสำหรับ GLSL

นี่คือที่ฉันพบปัญหาแรกของฉันฮาร์ดไดรฟ์บางตัวไม่รองรับ GLSL รวมถึงโน้ตบุ๊กที่มี Intel รวมกราฟิกที่ฉันวางแผนไว้ว่าจะใช้ ฟังก์ชั่น

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

ทำให้เกิดความผิดพลาดในการแบ่งส่วนและจากรูปลักษณ์ของมันไดรเวอร์ของฉันไม่รองรับเฉดสี

ดังนั้นคำถามของฉันคือความเป็นไปได้ในการสร้างเกมเฉพาะใน OpenGL คืออะไร ฉันจะหายไปคุณสมบัติที่ดีที่ไม่สามารถถูกแทนที่ได้จากภาษา Shader หรือไม่? และฮาร์ดแวร์ประเภทใด (ฉันหวังว่าจะได้ใช้เกมกับ shaders อย่างถูกต้อง?


1
GLSL เป็น OpenGL ฉันคิดว่าคำถามของคุณเกี่ยวข้องกับว่าฮาร์ดแวร์ที่คุณตั้งใจจะใช้คือรองรับ OpenGL 3 ไม่ใช่ GLSL ที่เข้ากันได้โดยเฉพาะ
deceleratedcaviar

@Daniel ดังนั้นหากฮาร์ดแวร์ / ไดรเวอร์รองรับ OpenGL 3.0 จะเป็น GLSL หรือไม่
ibrabeicker

1
GLSL เป็นส่วนหนึ่งของข้อกำหนด OpenGL 3.0 ดังนั้นใช่แล้ว
deceleratedcaviar

1
คุณพูดว่า "จากหน้าตาของมันไดรเวอร์ของฉันไม่รองรับตัวติดตั้ง" คุณได้รับ OpenGL เวอร์ชันใด คุณโหลดฟังก์ชั่น OpenGL ที่ใช้ได้ทั้งหมดอย่างถูกต้องหรือไม่?
Nicol Bolas

1
@Papavoikos: ถ้ามันกลับ NULL คุณได้มีมากปัญหาที่ใหญ่กว่าว่าจะใช้เฉดสี คุณสร้างบริบท OpenGL ของคุณถูกต้องหรือไม่ เตือนความจำ: คุณไม่สามารถเรียกฟังก์ชัน GL ใด ๆ จนกว่าคุณจะสร้างบริบทที่ถูกต้องและทำให้เป็นปัจจุบัน
Nicol Bolas

คำตอบ:


9

รหัส Shader ชัดเจนและเข้าใจง่ายกว่าระเบียบของ glTexEnv, glTexGen และการเรียกเมทริกซ์พื้นผิวและมีโบนัสที่คุณสามารถแสดงการดำเนินการทางคณิตศาสตร์ตามอำเภอใจได้มากขึ้น (ซึ่งคุณไม่สามารถแก้ไขได้ ไปป์ไลน์ - สิ่งที่คุณเรียกว่า "pure OpenGL") ข้อเสียที่เป็นไปได้เพียงอย่างเดียวคือคุณต้องเขียนโครงสร้างพื้นฐานรองรับจำนวนหนึ่งในรหัสของคุณก่อนที่คุณจะสามารถเริ่มใช้มันในขณะที่ด้วยวิธีเดิมที่คุณสามารถดำน้ำได้อย่างถูกต้องฉันเรียกมันว่า จริง ๆ แล้วคิดว่ามันทำให้คุณเตรียมสิ่งต่าง ๆ และเรียนรู้เพิ่มเติมล่วงหน้า - OpenGL มีชื่อเสียงว่า "ง่าย" และบางครั้งคุณจะเห็นผู้คนถูกหลอกโดยสิ่งนี้และดำน้ำในทันทีโดยไม่รู้ว่าพวกเขากำลังทำอะไรอยู่

คุณสามารถพึ่งพาฮาร์ดแวร์ได้เกือบทุกอย่างที่ปล่อยออกมาในช่วง 5/6/7 ปีที่ผ่านมาเพื่อรับการสนับสนุน shader แต่ในกรณีของ Intels รุ่นเก่า (ซีรี่ส์ 9xx บางรุ่น) - จะไม่เป็น GLSL แต่จะเป็นนามสกุลเก่าของGL_ARB_vertex_programและGL_ARB_fragment_programแทน สิ่งเหล่านี้ใช้ภาษาแอสเซมบลีที่เหมือนภาษาเชดเดอร์ แต่ - เวลาสารภาพ - โดยส่วนตัวแล้วฉันชอบมันมาก อันที่จริงแล้วมันค่อนข้างใช้งานง่ายหากขาดคุณสมบัติที่ทันสมัยมากขึ้น (เช่นการแตกแขนง) และต้องการรหัส shader บรรทัดที่มากขึ้นเพื่อทำสิ่งเดียวกัน โครงสร้างพื้นฐานสนับสนุนที่จำเป็นในโปรแกรมหลักของคุณสำหรับส่วนขยายเหล่านี้มีน้ำหนักเบากว่า GLSL มากเช่นกัน

ไม่ได้บอกว่าฉันจะแนะนำพวกเขาผ่าน GLSL แต่พวกมันเป็นตัวเลือกที่มีถ้าคุณจำเป็นต้องใช้กับฮาร์ดแวร์ระดับนี้และมีประโยชน์ที่จะต้องรู้ว่ามันมีอยู่ซึ่งทำให้ฉันถึงจุดสุดท้าย . คุณแน่ใจหรือไม่ว่าคุณจำเป็นต้องใช้ฮาร์ดแวร์ระดับนี้ (เช่นในโน้ตบุ๊กของคุณคุณอาจละเลยที่จะรับจุดเข้าใช้งานจริง ๆ )?


ฉันเพิกเฉยต่อความจริงที่ว่า Mesa3d ยังคงอยู่ในข้อกำหนดของ OpenGL 2.1 ฉันจะแก้ไข
ibrabeicker

6

ควรสังเกตว่าไม่มี "pure OpenGL" อีกต่อไป

OpenGL ES 2.0 รวบรวมเนื้อหาที่ไม่ใช่ shader ทั้งหมดและเนื่องจาก WebGL อิงตามนั้นจึงใช้ได้กับ shaders เท่านั้น OpenGL 3.0 เลิกใช้งานฟังก์ชั่นคงที่ทั้งหมดและ 3.1 ลบออก (ในโพรไฟล์หลักการใช้งานส่วนใหญ่รองรับโพรไฟล์ความเข้ากันได้ แต่ MacOSX ไม่ได้สำหรับการใช้งาน 3.2)

ดังนั้นฉันจะไม่แนะนำการเรียนรู้ที่ไม่ใช่ shader OpenGL


6

หากคุณเคยเขียนโปรแกรมใด ๆ ในอดีตการเขียนรหัส shader ของคุณเองโดยใช้ GLSL จะสนุกมากขึ้น ตอนแรกฉันพยายามเรียนรู้ฟังก์ชั่นคงที่ OpenGL และมันยากสำหรับฉันเพราะมันไม่สมเหตุสมผล จากนั้นฉันก็พยายามเรียนรู้ GLSL โดยใช้สมุดสีส้มและมันก็ง่ายขึ้นและทำมากขึ้นตั้งแต่นั้นมา แค่ 2 เซ็นต์ของฉัน

ฉันจะไปที่ GLSL แน่นอนเพราะพลังในการเขียนโปรแกรมสำหรับ GPU

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