Ooogles عبارة عن غلاف دلفي رفيع للغاية موجه للكائنات حول OpenGL-ES 2.0 مع تأثير قريب من الصفر على الأداء. يمكن استخدامه أيضًا لإنشاء تطبيقات OpenGL لمنصات سطح المكتب باستخدام مجموعة OpenGL-ES الفرعية من OpenGL.
لا يزال هذا المجمع منخفض المستوى جدًا. إنه ليس "محرك عرض" أو إطار عمل عالي المستوى، لذلك لا تزال بحاجة إلى معرفة OpenGL.
تتمثل الأهداف الرئيسية لـ Ooogles في جعل استخدام OpenGL-ES أسهل وأقل عرضة للأخطاء، وتقديم تقارير عن الأخطاء في تصميمات DEBUG
وتجربة Code Insight أفضل في Delphi IDE.
تتمتع Ooogles بالميزات التالية:
TGLTexture
و TGLShader
، مما يمنع هذه الأنواع من الأخطاء.GL_INVALID_ENUM
. يستخدم هذا المجمّع تعدادات دلفي الحقيقية بدلاً من ذلك، مما يمنع معظم هذه الأخطاء.DEBUG
، سيكشف عن هذه الأخطاء من خلال الاستثناءات، وسيقوم أيضًا بتسجيل أي تحذيرات إلى وحدة تحكم التصحيح.gl
الثابتة (التي تعمل بشكل أشبه بمساحة الاسم). على سبيل المثال، يتم تغليف واجهة برمجة التطبيقات OpenGL API glClear
بالطريقة gl.Clear
.DEBUG
الشرطي، وتمكين التأكيدات (التكوين الافتراضي لإصدارات Debug)، يتم فحص كل استدعاء OpenGL بحثًا عن الأخطاء، ويتم ظهور استثناء عند حدوث خطأ، مما يشير إلى نوع الخطأ والطريقة التي حدث بها. عندما لا يتم تعريف DEBUG
، أو يتم تعطيل التأكيدات، تتم إزالة كافة تعليمات التحقق من الأخطاء من الإصدار بحيث لا يكون لها أي تأثير على الأداء.DEBUG
مع تمكين التأكيدات، سيتم تسجيل التحذيرات إلى وحدة التحكم في التصحيح إذا نسيت ربط كائن قبل استخدامه (أو عندما يكون كائن مختلف عن الكائن الذي تستخدمه مرتبطًا حاليًا).ExamplesCommon
. لا يوفر المجمع ميزات ذات مستوى أعلى مثل إدارة موارد OpenGL التلقائية. تحتاج إلى تحرير موارد OpenGL بنفسك عندما لا تعود بحاجة إليها. عادةً ما يتم إنشاء الموارد باستخدام طريقة تسمى New
ويتم إصدارها باستخدام طريقة تسمى Delete
. على سبيل المثال:
var
Texture: TGLTexture;
begin
Texture.New;
// Do something with texture
Texture.Delete;
end ;
قد أقوم بإضافة إدارة الموارد التلقائية في المستقبل إذا وعندما تحصل دلفي على دعم لمحددات السجل النهائية.
كما أن المجمّع يدعم الإصدار 2.0 من OpenGL-ES فقط. وهو لا يدعم الإصدار 1 "القديم" من خط أنابيب عرض الوظيفة الثابتة. يمكنني إضافة دعم للإصدار 3.0 وما فوق بمجرد أن يتم تقديمه بواسطة دلفي ليصبح أكثر انتشارًا.
لا يحتوي هذا المجمع على أي تبعيات بخلاف الحاجة إلى مكتبة FastMath. توفر هذه المكتبة (من بين أشياء أخرى) حسابات رياضية سريعة جدًا للمتجهات والمصفوفات، مما يجعلها مثالية للاستخدام في تطبيقات (OpenGL) عالية الأداء.
للبدء:
FM_COLUMN_MAJOR
إلى مشروعك (لجميع التكوينات - جميع الأنظمة الأساسية). يتيح ذلك تخزين المصفوفات في الأعمدة الرئيسية، وهو أمر أكثر منطقية لتطبيقات OpenGL.InitOoogles
. يعد هذا ضروريًا لمحاكاة 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 |
glAttachShader | TGLProgram.AttachShader |
glBindAttribLocation | TGLvertexAttrib.Bind |
glBindBuffer | TGLBuffer.Bind |
glBindFramebuffer | TGLframebuffer.Bind |
glBindTexture | TGLTexture.Bind |
glBlendColor | gl.BlendColor |
glBlendEquation | gl.BlendEquation |
glBlendEquationSeparate | gl.BlendEquationSeparate |
glBlendFunc | gl.BlendFunc |
glBlendFuncSeparate | gl.BlendFuncSeparate |
glBufferData | TGLBuffer.Data |
glBufferSubData | TGLBuffer.SubData |
glCheckFramebufferStatus | TGLframebuffer.Status |
glClear | GL.Clear |
glClearColor | gl.ClearColor |
glClearDepthf | gl.ClearDepth |
glClearStencil | gl.ClearStencil |
glColorMask | gl.ColorMask |
glCompileShader | TGLShader.Compile |
glCompressedTexImage2D | TGLTexture.UploadCompressed |
glCompressedTexSubImage2D | TGLTexture.SubUploadCompressed |
glCopyTexImage2D | TGLTexture.نسخ |
glCopyTexSubImage2D | TGLTexture.SubCopy |
glCreateProgram | TGLProgram.New |
glCreateShader | TGLShader.New |
com.glCullFace | gl.CullFace |
glDeleteBuffers | TGLBuffer.Delete |
glDeleteFramebuffers | TGLframebuffer.Delete |
glDeleteProgram | TGLProgram.Delete |
glDeleteRenderbuffers | TGLRenderbuffer.Delete |
glDeleteShader | TGLShader.Delete |
glDeleteTextures | TGLTexture.Delete |
glDepthFunc | gl.DepthFunc |
com.glDepthMask | gl.DepthMask |
glDepthRangef | gl.DepthRange |
glDetachShader | TGLProgram.DetachShader |
glDisable | gl.Disable |
glDisableVertexAttribArray | TGLvertexAttrib.Disable |
glDrawArrays | gl.DrawArrays |
glDrawElements | gl.DrawElements |
glEnable | gl.Enable |
glEnableVertexAttribArray | TGLvertexAttrib.Enable |
glFinish | gl.Finish |
com.glFlush | gl.Flush |
glFramebufferRenderbuffer | TGLFramebuffer.AttachRenderbuffer |
glFramebufferTexture2D | TGLframebuffer.AttachTexture |
glFrontFace | gl.FrontFace |
glGenBuffers | TGLBuffer.New |
glGenFramebuffers | TGLframebuffer.New |
glGenRenderbuffers | TGLRenderbuffer.New |
glGenTextures | TGLTexture.New |
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 (في وضع التصحيح) |
glGetProgramiv | TGLProgram.Get* |
glGetRenderbufferParameteriv | TGLRenderbuffer.Get* |
glGetShaderInfoLog | TGLShader (في وضع التصحيح) |
glGetShaderSource | TGLShader.GetSource |
glGetShaderiv | TGLShader.Get* |
glGetString | الحصول على* |
جلجيتكسباراميتر* | TGLTexture.Get* |
com.glGetUniform | TGLuniform.GetValue |
glGetUniformLocation | TGLuniform.Init |
جلجيتفيرتيكساتريب* | تي جي إلفيرتيكس أتريب.جيت* |
glGetVertexAttribPointerv | TGLvertexAttrib.GetOffset/GetData |
glHint | TGLTexture.MipmapHint |
glisBuffer | ليست هناك حاجة |
glIsEnabled | gl.IsEnabled |
glisFramebuffer | ليست هناك حاجة |
glisProgram | ليست هناك حاجة |
glisRenderbuffer | ليست هناك حاجة |
com.glIsShader | ليست هناك حاجة |
glisTexture | ليست هناك حاجة |
glLineWidth | gl.LineWidth |
glLinkProgram | TGLProgram.Link |
glPixelStorei | gl.PixelStore |
glPolygonOffset | gl.PolygonOffset |
glReadPixels | TGLframebuffer.ReadPixels |
glReleaseShaderCompiler | TGLShader.ReleaseCompiler |
glRenderbufferStorage | TGLRenderbuffer.Storage |
glSampleCoverage | gl.SampleCoverage |
glScissor | gl.Scissor |
glShaderSource | TGLShader.SetSource |
glStencilFunc | gl.StencilFunc |
glStencilFuncSeparate | gl.StencilFuncSeparate |
glStencilMask | gl.StencilMask |
glStencilMaskSeparate | gl.StencilMaskSeparate |
glStencilOp | gl.StencilOp |
glStencilOpSeparate | gl.StencilOpSeparate |
glTexImage2D | TGLTexture.Upload |
glTexParameter | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
glTexSubImage2D | TGLTexture.SubUpload |
جلونيفورم* | TGLUniform.SetValue/SetValues |
glUseProgram | TGLProgram.Use |
glValidateProgram | TGLProgram.Validate |
جلفيرتيكس أتريب* | TGLvertexAttrib.SetValue |
glVertexAttribPointer | TGLvertexAttrib.SetConfig/SetData |
com.glViewport | gl.Viewport |