Ooogles
1.0.0
Ooogles 是围绕 OpenGL-ES 2.0 的超薄面向对象 Delphi 包装器,对性能的影响几乎为零。它还可用于使用 OpenGL 的 OpenGL-ES 子集为桌面平台创建 OpenGL 应用程序。
这个包装器仍然是相当低级的。它不是“渲染引擎”或高级框架,因此您仍然需要 OpenGL 知识。
Ooogles 的主要目标是让 OpenGL-ES 的使用变得更容易、更不易出错,在DEBUG
构建中提供错误报告,并在 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 固定功能渲染管道。一旦 Delphi 提供的版本变得更加主流,我可能会添加对 3.0 及更高版本的支持。
除了需要 FastMath 库之外,该包装器没有任何依赖项。该库提供(除其他外)非常快速的矢量和矩阵数学计算,这使其非常适合在高性能(OpenGL)应用程序中使用。
开始使用:
FM_COLUMN_MAJOR
条件定义添加到您的项目中(对于所有配置 - 所有平台)。这使得矩阵能够按列存储,这对于 OpenGL 应用程序来说更有意义。InitOoogles
。这是在 OpenGL 平台上模拟 OpenGL-ES 所必需的。如果您的应用程序使用多个上下文,则必须为每个上下文调用一次 InitOoogles(在将其设置为当前上下文之后)。查看Sample.Platform.*
单元,了解何时调用它的示例。Winapi.OpenGL
、 iOSapi.OpenGLES
等)。为了更容易地使用正确的 OpenGL 单位,最简单的方法是在 use 子句中包含“OpenGL.inc”文件,如下所示: uses
{ $INCLUDE 'OpenGL.inc' }
Neslib.Ooogles;
只要确保在包含文件之后至少“使用”另一个单元即可。
以下是 Ooogles 中使用的主要类(实际上是记录)的列表,以及其文档的链接:
attribute
标记的变量。uniform
标记的变量。如果您精通 OpenGL,您可能会发现下表有助于从 OpenGL API 转换为 Ooogles 方法。一切都应该非常简单。
OpenGL | 奥格尔斯 |
---|---|
gl活动纹理 | TGLTexture.BindToTextureUnit |
glAttachShader | TGLProgram.AttachShader |
glBindAttribLocation | TGLVertexAttrib.绑定 |
glBindBuffer | TGLBuffer.绑定 |
glBindFramebuffer | TGLFramebuffer.Bind |
gl绑定纹理 | TGL纹理.绑定 |
gl混合颜色 | gl.混合颜色 |
gl混合方程 | gl.混合方程 |
glBlend方程分离 | gl.BlendEquationSeparate |
glBlend函数 | gl.BlendFunc |
glBlendFuncSeparate | gl.BlendFuncSeparate |
glBuffer数据 | TGLBuffer.数据 |
glBuffer子数据 | TGLBuffer.SubData |
glCheckFramebufferStatus | TGLFramebuffer.Status |
清除 | 透明胶 |
gl清除颜色 | gl.ClearColor |
glClearDepthf | gl.ClearDepth |
glClearStencil | gl.ClearStencil |
gl颜色遮罩 | gl.ColorMask |
gl编译着色器 | TGLShader.编译 |
glCompressedTexImage2D | TGLTexture.UploadCompressed |
glCompressedTexSubImage2D | TGLTexture.SubUploadCompressed |
glCopyTexImage2D | TGL纹理.复制 |
glCopyTexSubImage2D | TGLTexture.SubCopy |
gl创建程序 | TGLProgram.New |
gl创建着色器 | TGLShader.New |
glCullFace | gl.CullFace |
glDeleteBuffers | TGLBuffer.删除 |
glDeleteFramebuffers | TGLFramebuffer.删除 |
gl删除程序 | TGL程序.删除 |
glDeleteRenderbuffers | TGLRenderbuffer.删除 |
gl删除着色器 | TGLShader.删除 |
gl删除纹理 | TGL纹理.删除 |
glDepth函数 | gl.DepthFunc |
gl深度掩模 | gl.DepthMask |
gl深度范围 | gl.深度范围 |
glDetachShader | TGLProgram.DetachShader |
禁用gl | gl.禁用 |
glDisableVertexAttribArray | TGLVertexAttrib.Disable |
glDrawArrays | gl.DrawArrays |
gl绘制元素 | gl.DrawElements |
启用gl | gl.启用 |
glEnableVertexAttribArray | TGLVertexAttrib.Enable |
完成 | 完成 |
刷新 | 齐平 |
glFramebuffer渲染缓冲区 | TGLFramebuffer.AttachRenderbuffer |
glFramebufferTexture2D | TGLFramebuffer.AttachTexture |
glFrontFace | gl.前脸 |
glGenBuffers | TGLBuffer.New |
glGen帧缓冲区 | TGLFramebuffer.New |
glGen渲染缓冲区 | TGLRenderbuffer.New |
glGen纹理 | TGLTexture.New |
gl生成Mipmap | TGLTexture.GenerateMipmap |
glGetBooleanv | 各种 Get* 方法 |
glGetFloatv | 各种 Get* 方法 |
glGetIntegerv | 各种 Get* 方法 |
glGetActiveAttrib | TGLProgram.GetAttributeInfo |
glGetActiveUniform | TGLProgram.GetUniformInfo |
glGetAttachedShaders | TGLProgram.GetAttachedShaders |
glGetAttribLocation | TGLVertexAttrib.Init |
glGetBufferParameteriv | TGLBuffer.Get* |
gl获取错误 | gl.GetError |
glGetFramebufferAttachmentParameteriv | TGLFramebuffer.Get* |
glGet程序信息日志 | TGLProgram(在调试模式下) |
glGetProgramiv | TGLProgram.Get* |
glGetRenderbufferParameteriv | TGLRenderbuffer.Get* |
glGetShaderInfoLog | TGLShader(在调试模式下) |
glGetShaderSource | TGLShader.GetSource |
glGetShaderiv | TGLShader.获取* |
gl获取字符串 | gl.获取* |
glGetTexParameter* | TGLTexture.获取* |
glGetUniform | TGLUniform.GetValue |
glGetUniformLocation | TGLUniform.Init |
glGetVertexAttrib* | TGLVertexAttrib.Get* |
glGetVertexAttribPointerv | TGLVertexAttrib.GetOffset/GetData |
GL提示 | TGLTexture.Mipmap 提示 |
缓冲区 | 不需要 |
启用gls | gl.IsEnabled |
glIs帧缓冲区 | 不需要 |
GLIS程序 | 不需要 |
glIs渲染缓冲区 | 不需要 |
GLIS着色器 | 不需要 |
纹理纹理 | 不需要 |
gl线宽 | gl.线宽 |
链接程序 | TGL程序链接 |
glPixelStorei | gl.PixelStore |
gl多边形偏移 | gl.PolygonOffset |
glReadPixels | TGLFramebuffer.ReadPixels |
glReleaseShader编译器 | TGLShader.ReleaseCompiler |
glRenderbuffer存储 | TGLRenderbuffer.Storage |
gl样本覆盖率 | gl.样本覆盖率 |
剪刀 | 剪刀 |
glShader源 | TGLShader.SetSource |
glStencil函数 | gl.StencilFunc |
glStencilFuncSeparate | gl.StencilFuncSeparate |
gl模板蒙版 | gl.StencilMask |
glStencilMaskSeparate | gl.StencilMaskSeparate |
glStencilOp | gl.StencilOp |
glStencilOpSeparate | gl.StencilOpSeparate |
glTexImage2D | TGL纹理.上传 |
glTex参数 | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
glTexSubImage2D | TGLTexture.SubUpload |
glUniform* | TGLUniform.SetValue/SetValues |
glUse程序 | TGL程序.使用 |
gl验证程序 | TGL程序.验证 |
glVertexAttrib* | TGLVertexAttrib.SetValue |
glVertexAttribPointer | TGLVertexAttrib.SetConfig/SetData |
GL视口 | gl.视口 |