Ooogles เป็นเครื่องห่อ Delphi ที่เน้นวัตถุบางเฉียบรอบๆ OpenGL-ES 2.0 โดยมีผลกระทบต่อประสิทธิภาพการทำงานเกือบเป็นศูนย์ นอกจากนี้ยังสามารถใช้เพื่อสร้างแอปพลิเคชัน OpenGL สำหรับแพลตฟอร์มเดสก์ท็อปโดยใช้ชุดย่อย OpenGL-ES ของ OpenGL
กระดาษห่อนี้ยังคงค่อนข้างต่ำ ไม่ใช่ "เครื่องมือการเรนเดอร์" หรือเฟรมเวิร์กระดับสูง ดังนั้นคุณยังต้องมีความรู้เกี่ยวกับ OpenGL
เป้าหมายหลักของ Ooogles คือการทำให้การใช้ OpenGL-ES ง่ายขึ้นและมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลง โดยนำเสนอการรายงานข้อผิดพลาดใน DEBUG
builds และประสบการณ์ Code Insight ที่ดีขึ้นใน Delphi IDE
Ooogles มีคุณสมบัติดังต่อไปนี้:
TGLTexture
และ TGLShader
เพื่อป้องกันข้อผิดพลาดประเภทนี้GL_INVALID_ENUM
Wrapper นี้ใช้ Delphi enums จริงแทน เพื่อป้องกันข้อผิดพลาดเหล่านี้ส่วนใหญ่DEBUG
จะแสดงข้อผิดพลาดเหล่านั้นผ่านข้อยกเว้น และจะบันทึกคำเตือนใดๆ ไปยังคอนโซลการดีบักด้วยgl
แบบคงที่ (ซึ่งทำหน้าที่เหมือนเนมสเปซมากกว่า) ตัวอย่างเช่น OpenGL API glClear
ถูกรวมไว้ในเมธอด gl.Clear
DEBUG
และเปิดใช้งานการยืนยัน (การกำหนดค่าเริ่มต้นสำหรับบิลด์ Debug) ทุกการเรียก OpenGL จะถูกตรวจสอบหาข้อผิดพลาด และข้อยกเว้นจะเกิดขึ้นเมื่อมีข้อผิดพลาดเกิดขึ้น โดยระบุประเภทของข้อผิดพลาดและวิธีการที่เกิดขึ้น เมื่อไม่ได้กำหนด DEBUG
หรือการยืนยันถูกปิดใช้งาน รหัสตรวจสอบข้อผิดพลาดทั้งหมดจะถูกลบออกจากบิลด์ ดังนั้นจึงไม่มีผลกระทบต่อประสิทธิภาพการทำงานDEBUG
โดยเปิดใช้งานการยืนยัน คำเตือนจะถูกบันทึกไว้ในคอนโซลการดีบัก หากคุณลืมผูกอ็อบเจ็กต์ก่อนใช้งาน (หรือเมื่ออ็อบเจ็กต์อื่นนอกเหนือจากที่คุณกำลังใช้ถูกผูกไว้ในปัจจุบัน)ExamplesCommon
Wrapper ไม่มี คุณลักษณะระดับที่สูงกว่า เช่น การจัดการทรัพยากร OpenGL อัตโนมัติ คุณต้องเผยแพร่ทรัพยากร OpenGL ด้วยตนเองเมื่อไม่ต้องการใช้อีกต่อไป โดยปกติทรัพยากรจะถูกสร้างขึ้นโดยใช้วิธีการที่เรียกว่า New
และเผยแพร่โดยใช้วิธีการที่เรียกว่า Delete
ตัวอย่างเช่น:
var
Texture: TGLTexture;
begin
Texture.New;
// Do something with texture
Texture.Delete;
end ;
ฉันอาจเพิ่มการจัดการทรัพยากรอัตโนมัติในอนาคตหากและเมื่อ Delphi ได้รับการสนับสนุนสำหรับผู้สรุปบันทึก
นอกจากนี้ Wrapper ยังรองรับเฉพาะ OpenGL-ES เวอร์ชัน 2.0 เท่านั้น ไม่รองรับไปป์ไลน์การเรนเดอร์ฟังก์ชันคงที่ "เก่า" เวอร์ชัน 1 ฉันอาจเพิ่มการรองรับสำหรับเวอร์ชัน 3.0 ขึ้นไปเมื่อ Delphi กลายเป็นกระแสหลักมากขึ้น
Wrapper นี้ไม่มีการขึ้นต่อกันอื่นใดนอกจากต้องใช้ไลบรารี FastMath ไลบรารีนี้นำเสนอการคำนวณทางคณิตศาสตร์แบบเวกเตอร์และเมทริกซ์ที่รวดเร็วมาก (เหนือสิ่งอื่นใด) ซึ่งทำให้เหมาะอย่างยิ่งสำหรับการใช้งานในแอปพลิเคชันประสิทธิภาพสูง (OpenGL)
ในการเริ่มต้น:
FM_COLUMN_MAJOR
ให้กับโปรเจ็กต์ของคุณ (สำหรับการกำหนดค่าทั้งหมด - ทุกแพลตฟอร์ม) ซึ่งช่วยให้สามารถจัดเก็บเมทริกซ์แบบคอลัมน์หลักได้ ซึ่งเหมาะสมกว่าสำหรับแอปพลิเคชัน OpenGLInitOoogles
สิ่งนี้จำเป็นสำหรับการจำลอง OpenGL-ES บนแพลตฟอร์ม OpenGL หากแอปพลิเคชันของคุณใช้หลายบริบท คุณต้องเรียก InitOoogles หนึ่งครั้งสำหรับแต่ละบริบท (หลังจากทำให้เป็นปัจจุบัน) ดูที่หน่วย Sample.Platform.*
เพื่อดูตัวอย่างว่าเมื่อใดควรเรียกสิ่งนี้Winapi.OpenGL
, iOSapi.OpenGLES
เป็นต้น) เพื่อให้ง่ายต่อการใช้หน่วย OpenGL ที่ถูกต้อง จะง่ายที่สุดหากคุณรวมไฟล์ 'OpenGL.inc' ในส่วนคำสั่งการใช้งานของคุณแทน ดังเช่นใน: uses
{ $INCLUDE 'OpenGL.inc' }
Neslib.Ooogles;
เพียงตรวจสอบให้แน่ใจว่าคุณ "ใช้" อย่างน้อยหนึ่งหน่วยอื่นหลังไฟล์รวม
ต่อไปนี้เป็นรายการคลาสหลัก (บันทึกจริง) ที่ใช้ใน Ooogles พร้อมด้วยลิงก์ไปยังเอกสารประกอบ:
attribute
ในเชเดอร์จุดยอดuniform
ในจุดยอดหรือเชเดอร์ส่วนหากคุณเชี่ยวชาญ OpenGL คุณอาจพบว่าตารางต่อไปนี้มีประโยชน์ในการแปลจาก OpenGL API ไปเป็นเมธอด Ooogles ทุกอย่างควรจะตรงไปตรงมา
OpenGL | อู้เกิลส์ |
---|---|
glActiveTexture | TGLTexture.BindToTextureUnit |
glแนบShader | TGLProgram.AttachShader |
glBindAttribLocation | TGLVertexAttrib.Bind |
glBindBuffer | TGLBuffer.ผูก |
glBindFramebuffer.glBindFramebuffer | TGLFramebuffer.ผูก |
glBindTexture | TGLTexture.ผูก |
glBlendColor | gl.BlendColor |
สมการ glBlend | gl.ผสมผสานสมการ |
glBlendEquationแยกกัน | gl.BlendEquationSeparate |
glBlendFunc | gl.BlendFunc |
glBlendFuncแยก | gl.BlendFuncแยก |
glBufferData | TGLBuffer.Data |
glBufferSubData | TGLBuffer.SubData |
glCheckFramebufferStatus | TGLFramebuffer.สถานะ |
glclear | gl.เคลียร์ |
glClearColor | gl.เคลียร์คัลเลอร์ |
glClearDepthf | gl.ClearDepth |
glClearลายฉลุ | gl.เคลียร์สเตนซิล |
glColorMask | gl.ColorMask |
glCompileShader | TGLShader.คอมไพล์ |
glCompressedTexImage2D | TGLTexture.อัปโหลดบีบอัด |
glCompressedTexSubImage2D | TGLTexture.SubUploadCompressed |
glCopyTexImage2D | TGLTexture.คัดลอก |
glCopyTexSubImage2D | TGLTexture.SubCopy |
glCreateProgram | TGLProgram ใหม่ |
glCreateShader | TGLSShader ใหม่ |
glCullFace | gl.CullFace |
glDeleteBuffers | TGLBuffer ลบ |
glDeleteFramebuffers | TGLFramebuffer ลบ |
โปรแกรม glDelete | TGLProgram ลบ |
glDeleteRenderbuffers | TGLRenderbuffer ลบ |
glDeleteShader | TGLShader ลบ |
glDeleteพื้นผิว | TGLTexture ลบ |
glDepthFunc | gl.DepthFunc |
glDepthMask | gl.DepthMask |
glDepthRangef | gl.DepthRange |
glDetachShader | TGLProgram.DetachShader |
glปิดการใช้งาน | gl.ปิดใช้งาน |
glDisableVertexAttribArray | TGLVertexAttrib.ปิดการใช้งาน |
glDrawArrays | gl.DrawArrays |
glDrawElements | gl.DrawElements |
glเปิดใช้งาน | gl.เปิดใช้งาน |
glEnableVertexAttribArray | TGLVertexAttrib.เปิดใช้งาน |
glFinish | gl.เสร็จสิ้น |
glflush | gl.ฟลัช |
glFramebufferRenderbuffer | TGLFramebuffer.AttachRenderbuffer |
glFramebufferTexture2D | TGLFramebuffer.AttachTexture |
glFrontFace | gl.FrontFace |
glGenBuffers | TGLBuffer.ใหม่ |
glGenFramebuffers | TGLFramebuffer ใหม่ |
glGenRenderbuffers | TGLRenderbuffer ใหม่ |
glGenTextures | TGLTexture ใหม่ |
glGenerateMipmap | TGLTexture.GenerateMipmap |
glGetBooleanv | วิธีการ Get* ต่างๆ |
glGetFloatv | วิธีการ Get* ต่างๆ |
glGetIntegerv | วิธีการ Get* ต่างๆ |
glGetActiveAttrib | TGLProgram.GetAttributeInfo |
glGetActiveUniform | TGLProgram.GetUniformInfo |
glGetAttachedShaders | TGLProgram.GetAttachedShaders |
glGetAttribLocation | TGLVertexAttrib.Init |
glGetBufferParameteriv | TGLBuffer.Get* |
glGetError | gl.GetError |
glGetFramebufferAttachmentParameteriv | TGLFramebuffer.Get* |
glGetProgramInfoLog | TGLProgram (ในโหมด DEBUG) |
glGetProgramiv | TGLProgram.Get* |
glGetRenderbufferParameteriv | TGLRenderbuffer.Get* |
glGetShaderInfoLog | TGLShader (ในโหมด DEBUG) |
glGetShaderSource | TGLShader.GetSource |
glGetShaderiv | TGLShader.Get* |
glGetString | gl.รับ* |
พารามิเตอร์ glGetTex* | TGLTexture.Get* |
glGetUniform | TGLUniform.GetValue |
glGetUniformLocation | TGLUuniform.Init |
glGetVertexAttrib* | TGLVertexAttrib.Get* |
glGetVertexAttribPointerv | TGLVertexAttrib.GetOffset/GetData |
glคำแนะนำ | TGLTexture.MipmapHint |
glIsBuffer | ไม่จำเป็น |
glIsเปิดใช้งานแล้ว | gl.เปิดใช้งานแล้ว |
glIsFramebuffer | ไม่จำเป็น |
glIsโปรแกรม | ไม่จำเป็น |
glIsRenderbuffer | ไม่จำเป็น |
glIsShader | ไม่จำเป็น |
glIsTexture | ไม่จำเป็น |
glLineWidth | gl.LineWidth |
โปรแกรม glLink | TGLProgram.Link |
glPixelStorei | gl.PixelStore |
glPolygonOffset | gl.PolygonOffset |
glReadPixels | TGLFramebuffer.ReadPixels |
glReleaseShaderคอมไพเลอร์ | TGLShader.ReleaseCompiler |
การจัดเก็บ glRenderbuffer | TGLRenderbuffer.การจัดเก็บ |
glSampleCoverage | gl.SampleCoverage |
glscissor | gl.กรรไกร |
glShaderSource | TGLShader.SetSource |
glลายฉลุFunc | gl.StencilFunc |
glStencilFuncแยก | gl.StencilFuncSeparate |
glลายฉลุมาสก์ | gl.ลายฉลุมาสก์ |
glStencilMaskแยก | gl.StencilMaskSeparate |
glลายฉลุOp | gl.ลายฉลุOp |
glStencilOpSeparate | gl.ลายฉลุOpSeparate |
glTexImage2D | TGLTexture.อัพโหลด |
พารามิเตอร์ glTex | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
glTexSubImage2D | TGLTexture.SubUpload |
glยูนิฟอร์ม* | TGLUniform.SetValue/SetValues |
glUseProgram | TGLProgram.การใช้งาน |
gl ตรวจสอบโปรแกรม | TGLProgram ตรวจสอบ |
glVertexAttrib* | TGLVertexAttrib.SetValue |
glVertexAttribPointer | TGLVertexAttrib.SetConfig/SetData |
glViewport | gl.วิวพอร์ต |