Ooogles — это ультратонкая объектно-ориентированная оболочка Delphi вокруг OpenGL-ES 2.0, практически не влияющая на производительность. Его также можно использовать для создания приложений OpenGL для настольных платформ с использованием подмножества OpenGL-ES OpenGL.
Эта оболочка все еще находится на довольно низком уровне. Это не «движок рендеринга» или платформа высокого уровня, поэтому вам все равно понадобятся знания OpenGL.
Основные цели Ooogles — сделать использование OpenGL-ES проще и менее подверженным ошибкам, предлагая отчеты об ошибках в сборках DEBUG и улучшая возможности Code Insight в Delphi IDE.
Ooogles имеет следующие особенности:
TGLTexture и TGLShader , предотвращая подобные ошибки.GL_INVALID_ENUM . Вместо этого эта оболочка использует настоящие перечисления Delphi, предотвращая большинство этих ошибок.DEBUG эти ошибки будут выявляться посредством исключений, а также будут записываться любые предупреждения на консоль отладки.gl (который больше похож на пространство имен). Например, OpenGL API glClear заключен в метод gl.Clear .DEBUG и включенными утверждениями (конфигурация по умолчанию для отладочных сборок) каждый вызов OpenGL проверяется на наличие ошибок, и при возникновении ошибки возникает исключение с указанием типа ошибки и метода, в котором она произошла. Если DEBUG не определен или утверждения отключены, весь код проверки ошибок удаляется из сборки, поэтому он не оказывает никакого влияния на производительность.DEBUG с включенными утверждениями в консоль отладки будут записываться предупреждения, если вы забудете привязать объект перед его использованием (или если в данный момент привязан объект, отличный от того, который вы используете).ExamplesCommon . Оболочка не предоставляет функции более высокого уровня, такие как автоматическое управление ресурсами OpenGL. Вам необходимо самостоятельно освободить ресурсы OpenGL, когда они вам больше не нужны. Ресурсы обычно создаются с помощью метода New и освобождаются с помощью метода Delete . Например:
var
Texture: TGLTexture;
begin
Texture.New;
// Do something with texture
Texture.Delete;
end ;Я могу добавить автоматическое управление ресурсами в будущем, если и когда Delphi получит поддержку финализаторов записей.
Кроме того, оболочка поддерживает только OpenGL-ES версии 2.0. Он не поддерживает «старый» конвейер рендеринга с фиксированными функциями версии 1. Я могу добавить поддержку версии 3.0 и выше, как только Delphi станет более распространенной.
Эта оболочка не имеет никаких зависимостей, кроме требования библиотеки 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, следующая таблица может оказаться полезной для перевода с API OpenGL на метод Ooogles. Все должно быть довольно просто.
| OpenGL | Оооглс |
|---|---|
| glActiveTexture | TGLTexture.BindToTextureUnit |
| glAttachShader | TGLProgram.AttachShader |
| глбиндаттриблокация | 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 |
| глбуффердата | ТГЛБуффер.Данные |
| глбуфферсубдата | TGLBuffer.SubData |
| glCheckFramebufferStatus | TGLFramebuffer.Status |
| glClear | гл.Очистить |
| glClearColor | гл.ClearColor |
| glClearDepthf | gl.ClearDepth |
| glClearStencil | gl.ClearStencil |
| glColorMask | gl.ColorMask |
| glCompileShader | TGLShader.Compile |
| glCompressedTexImage2D | TGLTexture.UploadCompressed |
| glCompressedTexSubImage2D | TGLTexture.SubUploadCompressed |
| glCopyTexImage2D | TGLTexture.Copy |
| glCopyTexSubImage2D | TGLTexture.SubCopy |
| glCreateProgram | TGLProgram.New |
| глкреатешейдер | TGLShader.Новый |
| glCullFace | гл.CullFace |
| glDeleteBuffers | TGLBuffer.Delete |
| glDeleteFramebuffers | TGLFramebuffer.Delete |
| глделетепрограмма | TGLProgram.Delete |
| glDeleteRenderbuffers | TGLRenderbuffer.Delete |
| глделетешейдер | TGLShader.Delete |
| glDeleteTextures | TGLTexture.Delete |
| glDepthFunc | gl.DepthFunc |
| glDepthMask | gl.DepthMask |
| glDepthRangef | gl.DepthRange |
| glDetachShader | TGLProgram.DetachShader |
| glDisable | гл.Отключить |
| glDisableVertexAttribArray | TGLVertexAttrib.Отключить |
| glDrawArrays | гл.DrawArrays |
| glDrawElements | gl.DrawElements |
| glEnable | гл.Включить |
| glEnableVertexAttribArray | TGLVertexAttrib.Enable |
| глфиниш | гл.Готово |
| глФлеш | гл.Flush |
| glFramebufferRenderbuffer | TGLFramebuffer.AttachRenderbuffer |
| glFramebufferTexture2D | TGLFramebuffer.AttachTexture |
| glFrontFace | гл.FrontFace |
| glGenBuffers | TGLBuffer.Новый |
| glGenFramebuffers | TGLFramebuffer.Новый |
| glGenRenderbuffers | TGLRenderbuffer.Новый |
| glGenTextures | TGLTexture.Новый |
| glGenerateMipmap | TGLTexture.GenerateMipmap |
| glGetBooleanv | различные методы Get* |
| glGetFloatv | различные методы Get* |
| glGetIntegerv | различные методы Get* |
| глжетактивеаттриб | TGLProgram.GetAttributeInfo |
| glGetActiveUniform | TGLProgram.GetUniformInfo |
| glGetAttachedShaders | TGLProgram.GetAttachedShaders |
| glGetAttribLocation | TGLVertexAttrib.Init |
| glGetBufferParameteriv | TGLBuffer.Get* |
| глжетеррор | гл.GetError |
| glGetFramebufferAttachmentParameteriv | TGLFramebuffer.Get* |
| glGetProgramInfoLog | TGLProgram (в режиме ОТЛАДКИ) |
| glGetProgramiv | TGLProgram.Get* |
| glGetRenderbufferParameteriv | TGLRenderbuffer.Get* |
| глжетшейдеринфолог | TGLShader (в режиме DEBUG) |
| glGetShaderSource | TGLShader.GetSource |
| glGetShaderiv | TGLShader.Get* |
| глжетстринг | gl.Get* |
| glGetTexParameter* | TGLTexture.Get* |
| glGetUniform | TGLUniform.GetValue |
| glGetUniformLocation | TGLUniform.Init |
| glGetVertexAttrib* | TGLVertexAttrib.Get* |
| глжетвертексаттрибпоинтерв | TGLVertexAttrib.GetOffset/GetData |
| глХинт | TGLTexture.MipmapHint |
| glIsBuffer | не нужен |
| GLISEnabled | гл.IsEnabled |
| glIsFramebuffer | не нужен |
| GLISProgram | не нужен |
| glIsRenderbuffer | не нужен |
| GLISShader | не нужен |
| glIsTexture | не нужен |
| гллиневидс | gl.LineWidth |
| glLinkProgram | TGLProgram.Link |
| glPixelStorei | gl.PixelStore |
| glPolygonOffset | gl.PolygonOffset |
| glReadPixels | TGLFramebuffer.ReadPixels |
| glReleaseShaderCompiler | TGLShader.ReleaseCompiler |
| glRenderbufferStorage | TGLRenderbuffer.Хранилище |
| glSampleCoverage | gl.SampleCoverage |
| glScissor | гл.Ножницы |
| glShaderSource | TGLShader.SetSource |
| glStencilFunc | gl.StencilFunc |
| glStencilFuncSeparate | gl.StencilFuncSeparate |
| glStencilMask | gl.StencilMask |
| glStencilMaskSeparate | gl.StencilMaskSeparate |
| glStencilOp | gl.StencilOp |
| glStencilOpSeparate | gl.StencilOpSeparate |
| glTexImage2D | TGLTexture.Загрузить |
| glTexParameter | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
| glTexSubImage2D | TGLTexture.SubUpload |
| glUniform* | TGLUniform.SetValue/SetValues |
| glUseProgram | TGLProgram.Use |
| glValidateProgram | TGLProgram.Validate |
| glVertexAttrib* | TGLVertexAttrib.SetValue |
| глвертексаттрибпоинтер | TGLVertexAttrib.SetConfig/SetData |
| glViewport | гл.Вьюпорт |