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.視窗 |