Ooogles es un contenedor Delphi ultradelgado orientado a objetos alrededor de OpenGL-ES 2.0 con un impacto casi nulo en el rendimiento. También se puede utilizar para crear aplicaciones OpenGL para plataformas de escritorio utilizando el subconjunto OpenGL-ES de OpenGL.
Este contenedor todavía es de nivel bastante bajo. No es un "motor de renderizado" ni un marco de alto nivel, por lo que aún necesita conocimientos de OpenGL.
Los principales objetivos de Ooogles son hacer que sea más fácil y menos propenso a errores el uso de OpenGL-ES, ofreciendo informes de errores en compilaciones DEBUG
y una mejor experiencia de Code Insight en Delphi IDE.
Ooogles tiene las siguientes características:
TGLTexture
y TGLShader
, evitando este tipo de errores.GL_INVALID_ENUM
. En su lugar, este contenedor utiliza enumeraciones verdaderas de Delphi, lo que evita la mayoría de estos errores.DEBUG
, expondrá esos errores a través de excepciones y también registrará cualquier advertencia en la consola de depuración.gl
estática (que actúa más como un espacio de nombres). Por ejemplo, la API OpenGL glClear
está incluida en el método gl.Clear
.DEBUG
y las aserciones habilitadas (la configuración predeterminada para las compilaciones de depuración), se verifica cada llamada de OpenGL en busca de errores y se genera una excepción cuando ocurre un error, indicando el tipo de error y en qué método ocurrió. Cuando DEBUG
no está definido o las aserciones están deshabilitadas, todo el código de verificación de errores se elimina de la compilación, por lo que no tiene ningún impacto en el rendimiento.DEBUG
con las aserciones habilitadas, se registrarán advertencias en la consola de depuración si olvida vincular un objeto antes de usarlo (o cuando un objeto diferente al que está utilizando está actualmente vinculado).ExamplesCommon
. El contenedor no proporciona funciones de nivel superior, como la gestión automática de recursos OpenGL. Debe liberar los recursos OpenGL usted mismo cuando ya no los necesite. Los recursos generalmente se crean usando un método llamado New
y se liberan usando un método llamado Delete
. Por ejemplo:
var
Texture: TGLTexture;
begin
Texture.New;
// Do something with texture
Texture.Delete;
end ;
Es posible que agregue administración automática de recursos en el futuro siempre que Delphi obtenga soporte para finalizadores de registros.
Además, el contenedor solo es compatible con OpenGL-ES versión 2.0. No es compatible con la canalización de renderizado de funciones fijas de la versión 1 "antigua". Puedo agregar soporte para la versión 3.0 y superiores una vez que Delphi lo ofrezca y se vuelva más común.
Este contenedor no tiene más dependencias que la biblioteca FastMath. Esta biblioteca ofrece (entre otras cosas) cálculos matemáticos vectoriales y matriciales muy rápidos, lo que la hace ideal para su uso en aplicaciones de alto rendimiento (OpenGL).
Para empezar:
FM_COLUMN_MAJOR
a su proyecto (para Todas las configuraciones - Todas las plataformas). Esto permite el almacenamiento de matrices en columnas principales, lo que tiene más sentido para aplicaciones OpenGL.InitOoogles
. Esto es necesario para emular OpenGL-ES en plataformas OpenGL. Si su aplicación utiliza múltiples contextos, debe llamar a InitOoogles una vez para cada contexto (después de actualizarlo). Eche un vistazo a las unidades Sample.Platform.*
para ver ejemplos de cuándo llamar a esto.Winapi.OpenGL
, iOSapi.OpenGLES
, etc.). Para facilitar el uso de las unidades OpenGL correctas, lo más sencillo es incluir el archivo 'OpenGL.inc' en las cláusulas de uso, como en: uses
{ $INCLUDE 'OpenGL.inc' }
Neslib.Ooogles;
Sólo asegúrese de "usar" al menos otra unidad después del archivo de inclusión.
La siguiente es una lista de las clases principales (en realidad, registros) utilizadas en Ooogles, junto con enlaces a su documentación:
attribute
en un sombreador de vértices.uniform
en un sombreador de vértices o fragmentos.Si domina OpenGL, puede que le resulte útil la siguiente tabla para traducir de una API de OpenGL a un método de Ooogles. Todo debería ser bastante sencillo.
OpenGL | Ooogles |
---|---|
glActiveTextura | TGLTexture.BindToTextureUnit |
glAttachShader | TGLProgram.AttachShader |
glBindAttribUbicación | TGLVertexAttrib.Bind |
glBindBuffer | TGLBuffer.Bind |
glBindFramebuffer | TGLFramebuffer.Bind |
glBindTextura | TGLTextura.Enlazar |
glBlendColor | gl.BlendColor |
glBlendEcuación | gl.BlendEcuación |
glBlendEquationSeparate | gl.BlendEquationSeparate |
glBlendFunc | gl.BlendFunc |
glBlendFuncSeparate | gl.BlendFuncSeparate |
glBufferData | TGLBuffer.Datos |
glBufferSubData | TGLBuffer.SubDatos |
glCheckFramebufferStatus | TGLFramebuffer.Estado |
glBorrar | gl.Borrar |
glClearColor | gl.ClearColor |
glClearDepthf | gl.ClearDepth |
glClearStencil | gl.ClearStencil |
glColorMáscara | gl.ColorMask |
glCompileShader | TGLShader.Compilar |
glCompressedTexImage2D | TGLTexture.UploadCompressed |
glCompressedTexSubImage2D | TGLTexture.SubUploadComprimido |
glCopyTexImage2D | TGLTextura.Copiar |
glCopyTexSubImage2D | TGLTextura.SubCopy |
glCrearPrograma | Programa TGL.Nuevo |
glCrearShader | TGLShader.Nuevo |
glCullCara | gl.CullFace |
glDeleteBuffers | TGLBuffer.Eliminar |
glDeleteFramebuffers | TGLFramebuffer.Eliminar |
glDeletePrograma | TGLProgram.Eliminar |
glDeleteRenderbuffers | TGLRenderbuffer.Eliminar |
glDeleteShader | TGLShader.Eliminar |
glDeleteTexturas | TGLTextura.Eliminar |
glDepthFunc | gl.DepthFunc |
glProfundidadMáscara | gl.DepthMask |
glDepthRangef | gl.DepthRange |
glDetachShader | TGLProgram.DetachShader |
glDesactivar | gl.Desactivar |
glDisableVertexAttribArray | TGLVertexAttrib.Disable |
glDrawArrays | gl.DrawArrays |
glDrawElements | gl.DrawElements |
glHabilitar | gl.Habilitar |
glEnableVertexAttribArray | TGLVertexAttrib.Enable |
glFinalizar | gl.Finalizar |
glFlush | gl.flush |
glFramebufferRenderbuffer | TGLFramebuffer.AttachRenderbuffer |
glFramebufferTextura2D | TGLFramebuffer.AttachTexture |
glFrontalCara | gl.FrontalFace |
glGenBuffers | TGLBuffer.Nuevo |
glGenFramebuffers | TGLFramebuffer.Nuevo |
glGenRenderbuffers | TGLRenderbuffer.Nuevo |
glGenTexturas | TGLTextura.Nuevo |
glGenerarMipmap | TGLTexture.GenerateMipmap |
glGetBooleanv | varios métodos Get* |
glGetFloatv | varios métodos Get* |
glGetIntegerv | varios métodos Get* |
glGetActiveAttrib | TGLProgram.GetAttributeInfo |
glGetActiveUniforme | TGLProgram.GetUniformInfo |
glGetAttachedShaders | TGLProgram.GetAttachedShaders |
glGetAttribUbicación | TGLVertexAttrib.Init |
glGetBufferParameteriv | TGLBuffer.Obtener* |
glGetError | gl.GetError |
glGetFramebufferAttachmentParameteriv | TGLFramebuffer.Get* |
glGetProgramInfoLog | Programa TGL (en modo DEBUG) |
glGetProgramiv | TGLProgram.Get* |
glGetRenderbufferParameteriv | TGLRenderbuffer.Obtener* |
glGetShaderInfoLog | TGLShader (en modo DEPURACIÓN) |
glGetShaderFuente | TGLShader.GetSource |
glGetShaderiv | TGLShader.Obtener* |
glGetString | gl.Obtener* |
glGetTexParametro* | TGLTextura.Obtener* |
glGetUniforme | TGLUniforme.GetValue |
glGetUbicación uniforme | TGLUniforme.Init |
glGetVertexAttrib* | TGLVertexAttrib.Get* |
glGetVertexAttribPointerv | TGLVertexAttrib.GetOffset/GetData |
glSugerencia | TGLTexture.MipmapHint |
glIsBuffer | no es necesario |
glIsEnabled | gl.IsEnabled |
glIsFramebuffer | no es necesario |
Programa glIs | no es necesario |
glIsRenderbuffer | no es necesario |
glIsShader | no es necesario |
glIsTextura | no es necesario |
glLineWidth | gl.LineWidth |
Programa glLink | TGLPrograma.Enlace |
glPixelStorei | gl.PixelStore |
glPolygonOffset | gl.PolygonOffset |
glReadPixels | TGLFramebuffer.ReadPixels |
glReleaseShaderCompiler | TGLShader.ReleaseCompiler |
glRenderbufferAlmacenamiento | TGLRenderbuffer.Almacenamiento |
glCobertura de muestra | gl.Cobertura de muestra |
glTijera | gl.tijera |
glShaderFuente | TGLShader.SetSource |
glStencilFunc | gl.StencilFunc |
glStencilFuncSeparate | gl.StencilFuncSeparate |
glStencilMáscara | gl.StencilMáscara |
glStencilMáscaraSeparado | gl.StencilMaskSeparate |
glStencilOp | gl.StencilOp |
glStencilOpSeparate | gl.StencilOpSeparate |
glTexImage2D | TGLTextura.Subir |
glTexParametro | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
glTexSubImage2D | TGLTextura.SubSubir |
glUniforme* | TGLUniforme.SetValue/SetValues |
glUseProgram | Uso del programa TGL |
glValidatePrograma | Programa TGL.Validar |
glVertexAttrib* | TGLVertexAttrib.SetValue |
glVertexAttribPointer | TGLVertexAttrib.SetConfig/SetData |
glVista | gl.Vista |