ทำไมการเรียกฟังก์ชั่น OpenGL ทั้งหมดนำหน้าด้วย“ q” ในซอร์สโค้ด Doom 3


42

ทำไมการโทรทุก OpenGL นำหน้าด้วย "q" ในรหัสต้นฉบับ Doom 3 พวกเขามีฟังก์ชั่นที่กำหนดเองหรือห้องสมุดที่แตกต่างกันและถ้าเป็นเช่นนั้นทำไมใช้ที่มากกว่า OpenGL? การค้นหาของ Google ใด ๆ เกิดขึ้นกับโมดูล Qt OpenGL ซึ่งฉันคิดว่าไม่มีส่วนเกี่ยวข้องกับมัน

คำตอบ:


62

สำหรับการอ้างอิง - qgl.h Doom3 ของ

OpenGL เป็น API เล็กน้อยที่แปลก คุณมักจะต้องทำงานกับพอยน์เตอร์ของฟังก์ชั่นอย่างใดอย่างหนึ่งเนื่องจากการใช้งานมาตรฐานจะไม่มีฟังก์ชั่นใหม่หรือเพราะคุณต้องการทำงานกับส่วนขยาย ตัวอย่างเช่นหากคุณต้องการโทรglCreateShaderแต่ระบบปฏิบัติการที่คุณพัฒนาไม่ได้มาพร้อมกับส่วนหัว GL ใหม่ที่เพียงพอคุณต้องใช้glGetProcAddress("CreateShader")เพื่อโหลดฟังก์ชันออกจากไดรเวอร์ของผู้ใช้ แล้วคุณต้องเก็บตัวชี้ฟังก์ชันนั้นไว้ที่ใดที่หนึ่ง

แม้ว่าสภาพแวดล้อมการพัฒนาของคุณจะมีฟังก์ชั่นเฉพาะเครื่องของผู้ใช้อาจไม่ทำงาน จากนั้นฟังก์ชั่นบางอย่างอาจมาใน 2-3 รูปแบบ (ส่วนขยายผู้ขาย, ส่วนต่อขยาย ARB, ฟังก์ชั่นหลัก) และดังนั้นคุณอาจต้องค้นหาฟังก์ชั่นภายใต้ชื่อที่แตกต่างกัน

ไลบรารี "ตัวโหลด" GL จำนวนมาก (เช่นGLEW ) พยายามที่จะยึดตามแบบแผน GL พวกเขาสร้างฟังก์ชั่น "ของปลอม" ด้วยgl-prefix ปกติและพยายามทำให้โค้ดของคุณทำงานบน OS หรือไดรเวอร์ใด ๆ ที่สนับสนุนคุณสมบัติที่จำเป็นอย่างน่าอัศจรรย์ เป็นหลักแทนที่จะglFooเป็นฟังก์ชั่นที่เกิดขึ้นจริงเป็นเพียงตัวชี้ทั่วโลกฟังก์ชั่นและห้องสมุดโหลด (ระหว่างการเริ่มต้นหรือใช้งานครั้งแรก) การค้นหาFooEXT, FooARBและFooจนกว่าจะพบการดำเนินงานและจากนั้นกำหนดว่าตัวชี้ทั่วโลก รหัสลูกค้าดูเหมือนว่าเป็นเพียงการเรียกใช้ฟังก์ชั่นปกติ แต่มันทั้งหมดได้รับการแก้ไขที่รันไทม์ในระหว่างการเริ่มต้นในทางที่เกี่ยวข้องกับแพลตฟอร์มและไดรเวอร์ที่แตกต่างกันทั้งหมด

ห้องสมุดอื่น ๆ ใส่ฟังก์ชั่นใน namespaces หรือแตกต่างกันเล็กน้อยจากบรรทัดฐาน GL รหัสเขียนรถตักดินของตัวเองเช่นกันเพราะพวกเขาไม่ได้เช่นคนที่มีอยู่หรือ - มีโอกาสมากขึ้น - Quake เพียงถือกำเนิดห้องสมุดอื่น ๆ ที่ ID จะได้ใช้ (คนqในqglยืนแนวโน้ม Quake ซึ่งเป็นครั้งแรกที่เกม id ไฮเทคกับการใช้งาน GL)

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

Doom 3 ซึ่งมีพื้นฐานมาจาก Quake engine นั้นเป็นเรื่องปกติและสมบูรณ์ในการใช้ไลบรารีโหลดเดอร์เพื่อจัดการกับความแปลกประหลาดของ GL บนแพลตฟอร์มที่หลากหลายและในการเลือกใช้qglคำนำหน้า


+1 และความรุ่งโรจน์สำหรับการระบุว่าฉันเขียนidไม่ดี (คุณพูดถูกเกี่ยวกับการใช้อักษรตัวพิมพ์ใหญ่) ถึงแม้ว่าen.wikipedia.org/wiki/Id_Techยังเขียนด้วยช่องว่างในแหล่งที่มาทั้งหมดที่ฉันสามารถหาได้
vaxquis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.