Ooogles adalah pembungkus Delphi berorientasi objek ultra-tipis di sekitar OpenGL-ES 2.0 dengan dampak hampir nol terhadap kinerja. Itu juga dapat digunakan untuk membuat aplikasi OpenGL untuk platform desktop menggunakan subset OpenGL-ES dari OpenGL.
Pembungkus ini masih level rendah. Ini bukan "mesin rendering" atau kerangka kerja tingkat tinggi, jadi Anda masih memerlukan pengetahuan OpenGL.
Tujuan utama Ooogles adalah untuk mempermudah dan mengurangi rawan kesalahan dalam menggunakan OpenGL-ES, menawarkan pelaporan kesalahan dalam build DEBUG
dan pengalaman Code Insight yang lebih baik dalam Delphi IDE.
Ooogles memiliki beberapa fitur berikut:
TGLTexture
dan TGLShader
, mencegah jenis kesalahan ini.GL_INVALID_ENUM
. Pembungkus ini menggunakan enum Delphi yang sebenarnya, mencegah sebagian besar kesalahan ini.DEBUG
, ini akan mengekspos kesalahan tersebut melalui pengecualian, dan juga akan mencatat peringatan apa pun ke konsol debug.gl
statis (yang berfungsi lebih seperti namespace). Misalnya, OpenGL API glClear
dibungkus dengan metode gl.Clear
.DEBUG
, dan pernyataan diaktifkan (konfigurasi default untuk build Debug), setiap panggilan OpenGL diperiksa kesalahannya, dan pengecualian dimunculkan ketika kesalahan terjadi, yang menunjukkan jenis kesalahan dan metode terjadinya. Ketika DEBUG
tidak ditentukan, atau pernyataan dinonaktifkan, semua kode pemeriksaan kesalahan dihapus dari build sehingga tidak berdampak apa pun terhadap kinerja.DEBUG
dengan pernyataan diaktifkan, peringatan akan dicatat ke konsol debug jika Anda lupa mengikat suatu objek sebelum menggunakannya (atau ketika objek yang berbeda dari yang Anda gunakan saat ini terikat).ExamplesCommon
. Wrapper tidak menyediakan fitur tingkat tinggi seperti manajemen sumber daya OpenGL otomatis. Anda perlu melepaskan sendiri sumber daya OpenGL saat Anda tidak lagi membutuhkannya. Sumber daya biasanya dibuat menggunakan metode yang disebut New
dan dirilis menggunakan metode yang disebut Delete
. Misalnya:
var
Texture: TGLTexture;
begin
Texture.New;
// Do something with texture
Texture.Delete;
end ;
Saya dapat menambahkan manajemen sumber daya otomatis di masa depan jika dan ketika Delphi mendapat dukungan untuk penyelesaian rekaman.
Selain itu, pembungkusnya hanya mendukung OpenGL-ES versi 2.0. Ini tidak mendukung pipeline rendering fungsi tetap versi 1 "lama". Saya dapat menambahkan dukungan untuk versi 3.0 dan yang lebih baru setelah ditawarkan oleh Delphi menjadi lebih umum.
Pembungkus ini tidak memiliki ketergantungan selain memerlukan perpustakaan FastMath. Pustaka ini menawarkan (antara lain) penghitungan matematika vektor dan matriks yang sangat cepat, sehingga ideal untuk digunakan dalam aplikasi berkinerja tinggi (OpenGL).
Untuk memulai:
FM_COLUMN_MAJOR
ke proyek Anda (untuk Semua konfigurasi - Semua platform). Hal ini memungkinkan penyimpanan matriks dalam kolom utama, yang lebih masuk akal untuk aplikasi OpenGL.InitOoogles
. Hal ini diperlukan untuk meniru OpenGL-ES pada platform OpenGL. Jika aplikasi Anda menggunakan beberapa konteks, Anda harus memanggil InitOoogles satu kali untuk setiap konteks (setelah menjadikannya terkini). Lihatlah unit Sample.Platform.*
untuk contoh kapan harus memanggil ini.Winapi.OpenGL
, iOSapi.OpenGLES
, dll). Untuk mempermudah penggunaan unit OpenGL yang benar, akan lebih mudah jika Anda menyertakan file 'OpenGL.inc' dalam klausa penggunaan Anda, seperti pada: uses
{ $INCLUDE 'OpenGL.inc' }
Neslib.Ooogles;
Pastikan Anda "menggunakan" setidaknya satu unit lain setelah file yang disertakan.
Berikut ini adalah daftar kelas utama (sebenarnya catatan) yang digunakan di Ooogles, beserta tautan ke dokumentasinya:
attribute
di vertex shader.uniform
dalam shader titik atau fragmen.Jika Anda fasih menggunakan OpenGL, tabel berikut mungkin berguna untuk menerjemahkan dari OpenGL API ke metode Ooogles. Semuanya harusnya cukup mudah.
OpenGL | Ooogle |
---|---|
glActiveTexture | TGLTexture.BindToTextureUnit |
glAttachShader | TGLProgram.LampirkanShader |
glBindAttribLocation | TGLVertexAttrib.Bind |
glBindBuffer | TGLBuffer.Mengikat |
glBindFramebuffer | TGLFramebuffer.Mengikat |
glBindTekstur | TGLTekstur.Mengikat |
glBlendColor | gl.BlendColor |
glBlendEquation | gl.BlendEquation |
glBlendEquationSeparate | gl.BlendEquationSeparate |
glBlendFunc | gl.BlendFunc |
glBlendFuncSeparate | gl.BlendFuncSeparate |
glBufferData | TGLBuffer.Data |
glBufferSubData | TGLBuffer.SubData |
glCheckFramebufferStatus | TGLFramebuffer.Status |
jelas | gl.Bersih |
glClearColor | gl.ClearColor |
glClearDepthf | gl.ClearDepth |
glClearStensil | gl.ClearStencil |
glColorMask | gl.ColorMask |
glCompileShader | TGLShader.Kompilasi |
glCompressedTexImage2D | TGLTexture.UploadTerkompresi |
glCompressedTexSubImage2D | TGLTexture.SubUploadTerkompresi |
glCopyTexImage2D | TGLTekstur.Salinan |
glCopyTexSubImage2D | TGLTekstur.SubSalinan |
glBuatProgram | TGLProgram.Baru |
glCreateShader | TGLShader.Baru |
glCullFace | gl.CullFace |
glDeleteBuffers | TGLBuffer.Hapus |
glDeleteFramebuffer | TGLFramebuffer.Hapus |
glDeleteProgram | TGLProgram.Hapus |
glDeleteRenderbuffer | TGLRenderbuffer.Hapus |
glDeleteShader | TGLShader.Hapus |
glDeleteTextures | TGLTexture.Hapus |
glDepthFunc | gl.DepthFunc |
glDepthMask | gl.DepthMask |
glDepthRangef | gl.DepthRange |
glDetachShader | TGLProgram.DetachShader |
glNonaktifkan | gl.Nonaktifkan |
glDisableVertexAttribArray | TGLVertexAttrib.Nonaktifkan |
glDrawArrays | gl.DrawArrays |
glDrawElements | gl.DrawElements |
gl Aktifkan | gl.Aktifkan |
glEnableVertexAttribArray | TGLVertexAttrib.Aktifkan |
glSelesai | gl.Selesai |
glFlush | gl.Siram |
glFramebufferRenderbuffer | TGLFramebuffer.LampirkanRenderbuffer |
glFramebufferTexture2D | TGLFramebuffer.LampirkanTekstur |
glFrontFace | gl.FrontFace |
glGenBuffers | TGLBuffer.Baru |
glGenFramebuffer | TGLFramebuffer.Baru |
glGenRenderbuffer | TGLRenderbuffer.Baru |
glGenTekstur | TGLTekstur.Baru |
glGenerateMipmap | TGLTexture.GenerateMipmap |
glGetBooleanv | berbagai metode Dapatkan* |
glGetFloatv | berbagai metode Dapatkan* |
glGetIntegerv | berbagai metode Dapatkan* |
glGetActiveAttrib | TGLProgram.GetAttributeInfo |
glGetActiveUniform | TGLProgram.GetUniformInfo |
glGetAttachedShaders | TGLProgram.GetAttachedShaders |
glGetAttribLocation | TGLVertexAttrib.Init |
glGetBufferParameteriv | TGLBuffer.Dapatkan* |
glGetError | gl.GetError |
glGetFramebufferAttachmentParameteriv | TGLFramebuffer.Dapatkan* |
glGetProgramInfoLog | Program TGL (dalam mode DEBUG) |
glGetProgramiv | TGLProgram.Dapatkan* |
glGetRenderbufferParameteriv | TGLRenderbuffer.Dapatkan* |
glGetShaderInfoLog | TGLShader (dalam mode DEBUG) |
glGetShaderSource | TGLShader.GetSource |
glGetShaderiv.dll | TGLShader.Dapatkan* |
glGetString | gl.Dapatkan* |
glGetTexParameter* | TGLTekstur.Dapatkan* |
glGetUniform | TGLUniform.GetValue |
glGetUniformLocation | TGLUniform.Init |
glGetVertexAttrib* | TGLVertexAttrib.Dapatkan* |
glGetVertexAttribPointerv | TGLVertexAttrib.GetOffset/GetData |
glPetunjuk | TGLTexture.MipmapHint |
glIsBuffer | tidak diperlukan |
glIsEnabled | gl.Diaktifkan |
glIsFramebuffer | tidak diperlukan |
glIsProgram | tidak diperlukan |
glIsRenderbuffer | tidak diperlukan |
glIsShader | tidak diperlukan |
glIsTekstur | tidak diperlukan |
glLebarGaris | gl.Lebar Garis |
glLinkProgram | TGLProgram.Tautan |
glPixelStorei | gl.PixelStore |
glPolygonOffset | gl.PolygonOffset |
glBacaPixels | TGLFramebuffer.ReadPixels |
glReleaseShaderCompiler | TGLShader.ReleaseCompiler |
glRenderbufferStorage | TGLRenderbuffer.Penyimpanan |
glCakupan Sampel | gl.Cakupan Sampel |
glGunting | gl.Gunting |
glShaderSource | TGLShader.SetSource |
glStencilFunc | gl.StencilFunc |
glStencilFuncSeparate | gl.StencilFuncSeparate |
glStencilMask | gl.StencilMask |
glStencilMaskTerpisah | gl.StencilMaskSeparate |
glStencilOp | gl.StencilOp |
glStencilOpSeparate | gl.StencilOpSeparate |
glTexImage2D | TGLTekstur.Unggah |
glTexParameter | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
glTexSubImage2D | TGLTexture.SubUpload |
glSeragam* | TGLUniform.SetValue/SetValues |
glUseProgram | TGLProgram.Gunakan |
glValidasiProgram | TGLProgram.Validasi |
glVertexAttrib* | TGLVertexAttrib.SetValue |
glVertexAttribPointer | TGLVertexAttrib.SetConfig/SetData |
glViewport | gl.Viewport |