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