OpenGL ES เทียบกับ OpenGL


92

อะไรคือความแตกต่างระหว่าง OpenGL ES และ OpenGL?


13
คุณกำลังเปรียบเทียบ OpenGL และ OpenGL ES เวอร์ชันใด
Firas Assaad

3
หากคุณใช้สิ่งของ GL2 ใด ๆ ให้ปิด GLES2 เสมอ มีวิธีต่างๆในการทำสิ่งต่างๆใน GL2 แต่ส่วนใหญ่เป็นวิธีหนึ่งใน GLES2 นอกจากนี้คุณจะไม่ประสบปัญหาในการย้ายข้อมูลด้วยวิธีนี้
zezba9000

อาจซ้ำกันของOpenGL หรือ OpenGL ES
Enamul Hassan

คำตอบ:


55

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

ดูที่นี่: OpenGL_ES


19
สิ่งเหล่านี้ถูกลบออกจาก OpenGL เดสก์ท็อป / เวิร์กสเตชันเวอร์ชันล่าสุดเช่นกัน
Ben Voigt

2
การเปรียบเทียบที่น่าสนใจคือระหว่าง OGL 3 และ GLES 2 ในโหมดทันที OGL 3 จะเลิกใช้งาน (แม้ว่าจะยังคงรองรับ) ฟังก์ชันจำนวนมาก (แม้ว่าจะไม่ใช่ทั้งหมด) ใน OGL 3 มีอยู่ใน GLES 2
nullspace

50

OpenGL ES คือ opengl api สำหรับระบบฝังตัว มันง่ายกว่า opengl ปกติในแง่ของจำนวนฟังก์ชัน api แต่อาจใช้งานยากกว่าเนื่องจากคุณจะต้องใช้บัฟเฟอร์จุดยอดและเขียนเฉดสีเพิ่มเติม

เมื่อคุณใช้ opengl ปกติคุณสามารถใช้ glBegin และ glEnd เพื่อปิดล้อมไพรเมอร์เรขาคณิตที่คุณต้องการวาด แต่เมื่อใช้ Opengl ES คุณจะต้องใช้บัฟเฟอร์จุดยอด ฉันเดาว่านี่เป็นปัญหาด้านประสิทธิภาพ

ปัจจุบันมี Opengl ES สองเวอร์ชันโดยเวอร์ชัน 1.1 สามารถรองรับเฉพาะไปป์ไลน์การแสดงผลคงที่ในขณะที่เวอร์ชัน 2.0 รองรับ glsl shader อย่างไรก็ตามมันไม่มีท่อส่งการแสดงผลแบบตายตัว กล่าวอีกนัยหนึ่งคุณจะต้องเขียน shader ของคุณเองสำหรับทุกสิ่ง

Opengl ES ส่วนใหญ่จะใช้กับโทรศัพท์มือถือและเว็บ (webgl) ตามข้อมูลจำเพาะไดรเวอร์ opengl บนเดสก์ท็อปของคุณสามารถรองรับ opengl es apis ทั้งหมดได้


3
คุณไม่ต้องใช้จุดยอดบัฟเฟอร์ฉันไม่คิดว่า คุณสามารถใช้อาร์เรย์จุดสุดยอดโหมดทันทีได้เช่นกัน ฉันผิดเหรอ?
Gravity

ใช่คุณไม่จำเป็นต้องใช้บัฟเฟอร์จุดสุดยอด
Stanislav Ageev

2
"เมื่อคุณใช้ opengl ปกติคุณสามารถใช้ glBegin และ glEnd เพื่อปิดล้อมรูปทรงเรขาคณิตดั้งเดิมที่คุณต้องการวาดได้" ไม่ใช่ในกรณีที่คุณต้องการให้โค้ดของคุณใช้งานร่วมกันได้และไม่ใช่ในกรณีที่คุณใช้ Mac ซึ่งฉัน น;)
Jerfov2

39

เช่นเดียวกับการเพิ่มว่า OpenGL 3.3 และ OpenGL ES 2.0 นั้นส่วนใหญ่ทำงานร่วมกันได้โดยใช้คุณสมบัติย่อยของ OpenGL 3.3 เอ็นจิ้น C ++ ที่กำหนดเองของฉันใช้การเรียก API เดียวกันโดยมีคำจำกัดความบางประการสำหรับ Android / IOS / Windows / OSX / Linux

ความแตกต่างที่สำคัญ ได้แก่ :

  • ขาดการรองรับ shader รูปทรงเรขาคณิต
  • ไม่มีการผสมขั้นต่ำ / สูงสุด (อาจมีส่วนขยายสำหรับสิ่งนี้)
  • ไม่มี Quad List ดั้งเดิม
  • รูปแบบพื้นผิวที่ จำกัด มากขึ้น (โดยเฉพาะอย่างยิ่งเกี่ยวกับทศนิยม)
  • glGetTexImage ไม่พร้อมใช้งาน
  • ไม่มีข้อเสนอแนะการเปลี่ยนแปลงเช่นเดียวกับคุณสมบัติขั้นสูงอื่น ๆ

นอกจากนี้ยังมีความแตกต่างอื่น ๆ อีกมากมาย แต่ครอบคลุมประเด็นสำคัญหลายประการ


7
ฉันคิดว่าเราสามารถแก้ไขโพสต์นี้อย่างช้าๆเพื่อรวมการเรียกใช้ฟังก์ชันที่ขาดหายไปทั้งหมด และรุ่นที่จะเปรียบเทียบควรเป็น 3.3 และ ES 2.0 เนื่องจากเปิดตัวในปีเดียวกัน
CoffeDeveloper

8

OpenGL ES หมายถึงไลบรารีกราฟิกแบบเปิดสำหรับระบบฝังตัว (OpenGL ES หรือ GLES) เป็นชุดย่อยของอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันการแสดงผลกราฟิกคอมพิวเตอร์ OpenGL (API) สำหรับการแสดงผลกราฟิกคอมพิวเตอร์ 2D และ 3D เช่นที่ใช้โดยวิดีโอเกมโดยปกติจะเร่งด้วยฮาร์ดแวร์โดยใช้ หน่วยประมวลผลกราฟิก (GPU) ออกแบบมาสำหรับระบบฝังตัวเช่นสมาร์ทโฟนแท็บเล็ตคอมพิวเตอร์คอนโซลวิดีโอเกมและพีดีเอ

OpenGL | เว็บไซต์อย่างเป็นทางการของ ES: http://www.opengl.org/

คุณสามารถรับข้อมูลเพิ่มเติมได้จาก wiki: http://en.wikipedia.org/wiki/OpenGL_ES


6

ตรวจสอบภาพรวม OpenGL ES ที่นี่: http://www.khronos.org/opengles/

กล่าวโดยย่อ ES เป็นส่วนย่อยของ Open GL สำหรับ "ระบบฝังตัว" ความแตกต่างเฉพาะจะขึ้นอยู่กับเวอร์ชันและชุดคุณลักษณะที่คุณกำลังเปรียบเทียบ


5

รีจิสทรี OpenGL ES มีความแตกต่างของ API โดยละเอียดระหว่าง OpenGL ES และ OpenGL เวอร์ชันที่เกี่ยวข้อง:

อย่างไรก็ตามไม่มีเอกสารที่มีความแตกต่างสำหรับ OpenGL ES 3.0


4

ฉันคิดว่าคุณจะได้รับคำตอบที่ดีกว่าถ้าคุณถามว่า "OpenGL และ OpenGL ES ต่างกันอย่างไร"

มีความแตกต่างที่ลึกซึ้งระหว่าง OpenGL ES 1.1 และ ES 2.0, OpenGL 1.5 และ 2.0 และ OpenGL 3.0 และ 4.0

ตามที่คนอื่นอธิบาย ES ถูกเขียนขึ้นสำหรับระบบฝังตัว นอกจากนี้ยังแสดงถึง "การทำความสะอาดบ้าน" ครั้งแรกของข้อกำหนด GL ตั้งแต่เริ่มก่อตั้ง OpenGL มี a) หลายวิธีในการทำสิ่งเดียวกัน (เช่นคุณสามารถวาดรูปสี่เหลี่ยม / สี่เหลี่ยมผืนผ้าได้สองวิธีที่แตกต่างกันและทำให้ภาพพิกเซลแตกต่างกันสองวิธี ฯลฯ ) ES นั้นง่ายกว่า OpenGL โดยมีคุณสมบัติน้อยกว่าเหมือนคำชี้แจงทั่วไปเนื่องจากออกแบบมาสำหรับฮาร์ดแวร์ที่มีความซับซ้อนน้อยกว่า

ฉันขอให้คุณอย่ามองว่า OpenGL ES 1.1 เป็นอดีตและไม่ได้แสดงถึงวิธีที่ OpenGL หรือ OpenGL ES กำลังก้าวไปในทางสถาปัตยกรรมในอนาคต


4

คำศัพท์และเวอร์ชันค่อนข้างสับสน (โดยเฉพาะสำหรับมือใหม่) สำหรับมุมมองแบบองค์รวมมากขึ้นกับ OpenGL และ OpenGL ES-(GLES) ดูOpenGL - แล้วตอนนี้


1
ลิงก์นี้ยังมีบทช่วยสอนที่ยอดเยี่ยมพร้อมตัวอย่างซึ่งอธิบายได้ดีว่าไปป์ไลน์การ rending ของ OpenGL ทำงานอย่างไร
JustWe

นี่คือลิงค์สำหรับบทช่วยสอน
ap-osd

3

ความแตกต่างหลักระหว่างทั้งสองคือ OpenGL ES สร้างขึ้นสำหรับระบบฝังตัวเช่นสมาร์ทโฟนในขณะที่ OpenGL เป็นระบบที่ใช้กับเดสก์ท็อป ในระดับการเข้ารหัส OpenGL ES ไม่รองรับฟังก์ชันฟังก์ชันคงที่เช่น glBegin / glEnd เป็นต้น OpenGL สามารถรองรับไปป์ไลน์ฟังก์ชันคงที่ (โดยใช้โปรไฟล์ที่เข้ากันได้)


2

คำตอบที่ทันสมัยสำหรับ ES 3.0 เมื่อเทียบกับ OpenGL 4.6 นั้นแตกต่างจากคำตอบที่ยอมรับ ตอนนี้สิ่งที่คงที่ไปป์ไลน์ทั้งหมดหายไปแล้ว

ES สำหรับ EMBEDDED SYSTEMS นั้นแข็งแกร่งน้อยกว่ามาก


1

OpenGL ES เป็นเพียง OpenGL api สำหรับระบบฝังตัว (OpenGL ES หมายถึง OpenGL Embedded Systems) ดังนั้นจึงเป็นชุดย่อยของ OpenGL และใช้กันอย่างแพร่หลายในโทรศัพท์มือถือและระบบ VR บางระบบจึงออกแบบมาสำหรับฮาร์ดแวร์ที่มีความซับซ้อนน้อย OpenGL ES มีข้อกำหนดและฟังก์ชันน้อยกว่า OpenGL ให้คิดว่าคุณใช้สิ่งที่คุณต้องการสำหรับระบบนั้นเพราะถ้าเราไม่ต้องการฟังก์ชั่นในการทำงานทั้งหมดของเราหรือฮาร์ดแวร์ไม่สามารถจัดการกับมันได้ดังนั้นก็ไม่มีความหมายที่จะเพิ่ม ฟังก์ชั่นนั้น แต่ทำให้การใช้งาน API นี้ยากขึ้นเนื่องจากต้องเขียน Shaders เพิ่มเติมและโค้ดที่ซับซ้อนเพื่อให้ง่ายขึ้นเนื่องจาก OpenGL ES ไม่ได้ให้ Shaders ในไปป์ไลน์กราฟิกเป็น OpenGL OpenGL ES เวอร์ชันล่าสุดคือ 3.2 ตอนนี้สามารถให้การสนับสนุน Tessellation สำหรับรายละเอียดรูปทรงเรขาคณิตเพิ่มเติมเฉดสีเรขาคณิตใหม่ ดังนั้นฉันแนะนำให้คุณเริ่มเรียนรู้หรือใช้ OpenGL ES 3.0+ (ในกรณีที่เป็นภาษาเป้าหมายของคุณ) เพราะในตอนนี้และรุ่นต่อไปจะไม่ใช้เวอร์ชันเก่าที่มีฮาร์ดแวร์และกราฟิกการ์ดที่ทรงพลังกว่าและหากเป้าหมายของคุณคือ OpenGL เริ่มต้นด้วย v3 3+ หรือ 4.0+ หากคุณมีเวลามากขึ้นก็ไม่มีปัญหาในการดูเวอร์ชันเก่าอย่างรวดเร็วเพื่อทำความเข้าใจมากขึ้นว่าสิ่งต่างๆได้รับการพัฒนาอย่างไรและทำไม คุณสามารถตรวจสอบลิงค์นี้เพื่อดูรายละเอียดเพิ่มเติม:https://en.wikipedia.org/wiki/OpenGL_ES


0

บอกง่ายๆว่า opengl เป็นเวอร์ชันเดสก์ท็อปและ opengl es สำหรับระบบฝังตัวเช่นโทรศัพท์มือถือซึ่งมีข้อ จำกัด ด้านหน่วยความจำและประสิทธิภาพมากกว่าคอมพิวเตอร์ opengl es จะใช้งานยากกว่า


0

OpenGLเป็น API กราฟิก 2 มิติและ 3 มิติที่นำแอปพลิเคชันหลายพันรายการมาสู่แพลตฟอร์มคอมพิวเตอร์ที่หลากหลาย

OpenGL ES เป็นชุดย่อยที่กำหนดไว้อย่างดีของ OpenGL บนเดสก์ท็อป

OpenGL® ES เป็น API ข้ามแพลตฟอร์มแบบปลอดค่าลิขสิทธิ์สำหรับกราฟิก 2D และ 3D เต็มรูปแบบบนระบบฝังตัว - รวมถึงคอนโซลโทรศัพท์เครื่องใช้และยานพาหนะ ประกอบด้วยชุดย่อยที่กำหนดไว้อย่างดีของ OpenGL บนเดสก์ท็อป, ...

ดูลิงค์นี้.

ปล

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

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