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 以降が主流になったら、バージョン 3.0 以降のサポートを追加する可能性があります。
このラッパーには、FastMath ライブラリを必要とすること以外に依存関係はありません。このライブラリは、(とりわけ) 非常に高速なベクトルおよび行列の数学計算を提供するため、高性能 (OpenGL) アプリケーションでの使用に最適です。
始めるには:
FM_COLUMN_MAJOR条件定義をプロジェクトに追加します (すべての構成 - すべてのプラットフォームの場合)。これにより、行列の列優先のストレージが有効になり、OpenGL アプリケーションにとってはより合理的になります。InitOooglesを呼び出します。これは、OpenGL プラットフォームで OpenGL-ES をエミュレートするために必要です。アプリケーションが複数のコンテキストを使用する場合は、(コンテキストを最新にした後) 各コンテキストに対して InitOoogles を 1 回呼び出す必要があります。これをいつ呼び出すかの例については、 Sample.Platform.*ユニットを見てください。Winapi.OpenGL 、 iOSapi.OpenGLESなど)。正しい OpenGL ユニットを簡単に使用できるようにするには、次のように、代わりに「OpenGL.inc」ファイルを uses 句に含めるのが最も簡単です。 uses
{ $INCLUDE 'OpenGL.inc' }
Neslib.Ooogles;インクルード ファイルの後に少なくとも 1 つの他のユニットを「使用」するようにしてください。
以下は、Ooogles で使用される主要なクラス (実際にはレコード) のリストとそのドキュメントへのリンクです。
attributeでマークされた変数です。uniformとマークされた変数です。OpenGL に精通している場合は、次の表が OpenGL API から Ooogles メソッドに変換するのに役立つことがわかります。それはすべて非常に簡単なはずです。
| OpenGL | ウーグルス |
|---|---|
| glアクティブテクスチャ | TGLTexture.BindToTextureUnit |
| glAttachShader | TGLProgram.AttachShader |
| glBindAttribLocation | TGLVertexAttrib.Bind |
| glBindBuffer | TGLBuffer.Bind |
| glBindFramebuffer | TGLFramebuffer.Bind |
| glBindTexture | TGLTexture.Bind |
| glブレンドカラー | gl.ブレンドカラー |
| glブレンド方程式 | gl.BlendEquation |
| glBlendEquationSeparate | gl.BlendEquationSeparate |
| glBlendFunc | gl.BlendFunc |
| glBlendFuncSeparate | gl.BlendFuncSeparate |
| glBufferData | TGLBuffer.Data |
| glBufferSubData | TGLBuffer.SubData |
| glCheckFramebufferStatus | TGLフレームバッファ.ステータス |
| glクリア | gl.クリア |
| glクリアカラー | gl.ClearColor |
| glClearDepthf | gl.ClearDepth |
| glクリアステンシル | gl.ClearStencil |
| glColorMask | gl.ColorMask |
| glCompileShader | TGLShader.コンパイル |
| glCompressedTexImage2D | TGLTexture.UploadCompressed |
| glCompressedTexSubImage2D | TGLTexture.SubUploadCompressed |
| glCopyTexImage2D | TGLTexture.Copy |
| glCopyTexSubImage2D | TGLTexture.SubCopy |
| glCreateプログラム | TGLプログラム.新規 |
| glCreateShader | TGLShader.New |
| glカルフェイス | gl.カルフェイス |
| glDeleteBuffers | TGLBuffer.削除 |
| glDeleteFramebuffers | TGLFramebuffer.削除 |
| gl削除プログラム | TGLProgram.削除 |
| glDeleteRenderbuffers | TGLRenderbuffer.Delete |
| glDeleteShader | TGLShader.削除 |
| gl削除テクスチャ | TGLTexture.削除 |
| glDepthFunc | gl.DepthFunc |
| glDepthMask | gl.DepthMask |
| glDepthRangef | gl.DepthRange |
| glDetachShader | TGLProgram.DetachShader |
| gl無効にする | gl.無効にする |
| glDisableVertexAttribArray | TGLVertexAttrib.Disable |
| glDrawArrays | gl.DrawArrays |
| glDrawElements | gl.DrawElements |
| gl有効にする | gl.有効にする |
| glEnableVertexAttribArray | TGLVertexAttrib.Enable |
| gl終了 | gl.仕上げ |
| glフラッシュ | gl.フラッシュ |
| glFramebufferRenderbuffer | TGLFramebuffer.AttachRenderbuffer |
| glFramebufferTexture2D | TGLFramebuffer.AttachTexture |
| glFrontFace | gl.FrontFace |
| glGenバッファー | TGLBuffer.New |
| glGenフレームバッファ | TGLFramebuffer.New |
| glGenRenderbuffers | TGLRenderbuffer.New |
| glGenTextures | TGLTexture.New |
| glGenerateミップマップ | 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 | TGLプログラム (DEBUGモード) |
| glGetProgramiv | TGLProgram.Get* |
| glGetRenderbufferParameteriv | TGLRenderbuffer.Get* |
| glGetShaderInfoLog | TGLShader (デバッグモード) |
| glGetShaderSource | TGLShader.GetSource |
| glGetShaderiv | TGLShader.Get* |
| glGetString | gl.Get* |
| glGetTexParameter* | TGLTexture.Get* |
| glGetUniform | TGLUniform.GetValue |
| glGetUniformLocation | TGLUniform.Init |
| glGetVertexAttrib* | TGLVertexAttrib.Get* |
| glGetVertexAttribPointerv | TGLVertexAttrib.GetOffset/GetData |
| glヒント | TGLTexture.MipmapHint |
| glIsバッファ | 必要ありません |
| glIsEnabled | gl.IsEnabled |
| glIsフレームバッファ | 必要ありません |
| glIsプログラム | 必要ありません |
| glIsRenderbuffer | 必要ありません |
| glIsShader | 必要ありません |
| glIsテクスチャ | 必要ありません |
| glLineWidth | gl.LineWidth |
| glLinkプログラム | TGLプログラム.リンク |
| glPixelStorei | gl.PixelStore |
| glPolygonOffset | gl.PolygonOffset |
| glReadPixels | TGLFramebuffer.ReadPixels |
| glReleaseShaderCompiler | TGLShader.ReleaseCompiler |
| glRenderbufferストレージ | TGLRenderbuffer.Storage |
| glサンプルカバレッジ | gl.SampleCoverage |
| glシザー | gl.シザー |
| glShaderソース | TGLShader.SetSource |
| glStencilFunc | gl.StencilFunc |
| glStencilFuncSeparate | gl.StencilFuncSeparate |
| glステンシルマスク | gl.StencilMask |
| glStencilMaskSeparate | gl.StencilMaskSeparate |
| glStencilOp | gl.StencilOp |
| glStencilOpSeparate | gl.StencilOpSeparate |
| glTexImage2D | TGLTexture.アップロード |
| glTexパラメータ | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
| glTexSubImage2D | TGLTexture.SubUpload |
| glユニフォーム* | TGLUniform.SetValue/SetValues |
| glUseプログラム | TGLプログラム.使用 |
| glValidateプログラム | TGLProgram.Validate |
| glVertexAttrib* | TGLVertexAttrib.SetValue |
| glVertexAttribPointer | TGLVertexAttrib.SetConfig/SetData |
| glViewport | gl.ビューポート |