ทำไมการโทรทุก OpenGL นำหน้าด้วย "q" ในรหัสต้นฉบับ Doom 3 พวกเขามีฟังก์ชั่นที่กำหนดเองหรือห้องสมุดที่แตกต่างกันและถ้าเป็นเช่นนั้นทำไมใช้ที่มากกว่า OpenGL? การค้นหาของ Google ใด ๆ เกิดขึ้นกับโมดูล Qt OpenGL ซึ่งฉันคิดว่าไม่มีส่วนเกี่ยวข้องกับมัน
ทำไมการโทรทุก OpenGL นำหน้าด้วย "q" ในรหัสต้นฉบับ Doom 3 พวกเขามีฟังก์ชั่นที่กำหนดเองหรือห้องสมุดที่แตกต่างกันและถ้าเป็นเช่นนั้นทำไมใช้ที่มากกว่า OpenGL? การค้นหาของ Google ใด ๆ เกิดขึ้นกับโมดูล Qt OpenGL ซึ่งฉันคิดว่าไม่มีส่วนเกี่ยวข้องกับมัน
คำตอบ:
สำหรับการอ้างอิง - 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
คำนำหน้า
id
ไม่ดี (คุณพูดถูกเกี่ยวกับการใช้อักษรตัวพิมพ์ใหญ่) ถึงแม้ว่าen.wikipedia.org/wiki/Id_Techยังเขียนด้วยช่องว่างในแหล่งที่มาทั้งหมดที่ฉันสามารถหาได้