Ooogles는 성능에 거의 영향을 주지 않는 OpenGL-ES 2.0을 기반으로 하는 매우 얇은 객체 지향 Delphi 래퍼입니다. OpenGL의 OpenGL-ES 하위 집합을 사용하여 데스크톱 플랫폼용 OpenGL 응용 프로그램을 만드는 데에도 사용할 수 있습니다.
이 래퍼는 여전히 매우 낮은 수준입니다. "렌더링 엔진"이나 고급 프레임워크가 아니므로 여전히 OpenGL 지식이 필요합니다.
Ooogles의 주요 목표는 DEBUG
빌드에서 오류 보고를 제공하고 Delphi IDE에서 더 나은 Code Insight 경험을 제공하여 OpenGL-ES 사용을 더 쉽고 오류 발생 가능성을 줄이는 것입니다.
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 | 우글스 |
---|---|
glActiveTexture | TGLTexture.BindToTextureUnit |
glAttachShader | TGLProgram.AttachShader |
glBindAttribLocation | TGLVertexAttrib.Bind |
glBindBuffer | TGLBuffer.Bind |
glBindFramebuffer | TGLFramebuffer.Bind |
glBind텍스처 | TGLTexture.Bind |
glBlendColor | gl.BlendColor |
glBlendEquation | gl.BlendEquation |
glBlendEquationSeparate | gl.BlendEquationSeparate |
glBlendFunc | gl.BlendFunc |
glBlendFuncSeparate | gl.BlendFuncSeparate |
glBufferData | TGLBuffer.Data |
glBufferSubData | TGLBuffer.SubData |
glCheckFramebuffer상태 | TGLFramebuffer.Status |
gl지우기 | gl.Clear |
glClearColor | gl.ClearColor |
glClearDepthf | gl.ClearDepth |
glClearStencil | gl.ClearStencil |
glColorMask | gl.ColorMask |
glCompileShader | TGLShader.Compile |
glCompressedTexImage2D | TGLTexture.Upload압축 |
glCompressedTexSubImage2D | TGLTexture.SubUpload압축 |
glCopyTexImage2D | TGLTexture.Copy |
glCopyTexSubImage2D | TGLTexture.SubCopy |
glCreateProgram | TGLProgram.New |
glCreateShader | TGLShader.New |
glCull얼굴 | gl.CullFace |
glDeleteBuffers | TGLBuffer.삭제 |
glDeleteFramebuffers | TGLFramebuffer.Delete |
glDelete프로그램 | TGLProgram.Delete |
glDeleteRenderbuffers | TGLRenderbuffer.Delete |
glDeleteShader | TGLShader.Delete |
glDelete텍스처 | TGLTexture.Delete |
glDepthFunc | gl.DepthFunc |
glDepth마스크 | gl.DepthMask |
glDepthRangef | gl.DepthRange |
glDetachShader | TGLProgram.DetachShader |
glDisable | gl.Disable |
glDisableVertexAttribArray | TGLVertexAttrib.Disable |
glDrawArrays | gl.DrawArrays |
glDrawElements | gl.DrawElements |
glEnable | gl.활성화 |
glEnableVertexAttribArray | TGLVertexAttrib.Enable |
glFinish | gl.Finish |
glFlush | gl.Flush |
glFramebufferRenderbuffer | TGLFramebuffer.AttachRenderbuffer |
glFramebufferTexture2D | TGLFramebuffer.AttachTexture |
glFrontFace | gl.FrontFace |
glGenBuffer | TGLBuffer.New |
glGenFramebuffers | TGLFramebuffer.New |
glGenRenderbuffers | TGLRenderbuffer.New |
glGen텍스처 | TGLTexture.New |
glGenerateMipmap | TGLTexture.GenerateMipmap |
glGetBooleanv | 다양한 Get* 메소드 |
glGetFloatv | 다양한 Get* 메소드 |
glGetIntegerv | 다양한 Get* 메소드 |
glGetActive속성 | TGLProgram.GetAttributeInfo |
glGetActiveUniform | TGLProgram.GetUniformInfo |
glGetAttachedShaders | TGLProgram.GetAttachedShaders |
glGetAttribLocation | TGLVertexAttrib.Init |
glGetBufferParameteriv | TGLBuffer.Get* |
glGetError | gl.GetError |
glGetFramebufferAttachmentParameteriv | TGLFramebuffer.Get* |
glGetProgramInfoLog | TGLProgram(DEBUG 모드) |
glGetProgramiv | TGLProgram.Get* |
glGetRenderbufferParameteriv | TGLRenderbuffer.Get* |
glGetShaderInfoLog | TGLShader(디버그 모드) |
glGetShaderSource | TGLShader.GetSource |
glGetShaderiv | TGLShader.Get* |
glGetString | gl.Get* |
glGetTex매개변수* | TGLTexture.Get* |
glGetUniform | TGLUniform.GetValue |
glGetUniformLocation | TGLUniform.Init |
glGetVertexAttrib* | TGLVertexAttrib.Get* |
glGetVertexAttribPointerv | TGLVertexAttrib.GetOffset/GetData |
glHint | TGLTexture.MipmapHint |
glIsBuffer | 필요하지 않음 |
glIs활성화됨 | gl.IsEnabled |
glIsFramebuffer | 필요하지 않음 |
glIs프로그램 | 필요하지 않음 |
glIsRenderbuffer | 필요하지 않음 |
glIsShader | 필요하지 않음 |
glIs텍스처 | 필요하지 않음 |
glLineWidth | gl.LineWidth |
glLink프로그램 | TGLProgram.Link |
glPixelStorei | gl.PixelStore |
glPolygonOffset | gl.PolygonOffset |
glReadPixels | TGLFramebuffer.ReadPixels |
glReleaseShader컴파일러 | TGLShader.ReleaseCompiler |
glRenderbuffer저장소 | TGLRenderbuffer.Storage |
glSampleCoverage | gl.SampleCoverage |
gl가위 | gl.가위 |
glShaderSource | TGLShader.SetSource |
glStencilFunc | gl.StencilFunc |
glStencilFuncSeparate | gl.StencilFuncSeparate |
gl스텐실마스크 | gl.StencilMask |
gl스텐실마스크별도 | gl.StencilMaskSeparate |
glStencilOp | gl.StencilOp |
glStencilOpSeparate | gl.StencilOpSeparate |
glTexImage2D | TGLTexture.업로드 |
glTex매개변수 | TGLTexture.MinFilter/MagFilter/WrapS/WrapT |
glTexSubImage2D | TGLTexture.SubUpload |
glUniform* | TGLUniform.SetValue/SetValues |
gl사용프로그램 | TGL프로그램.사용 |
glValidate프로그램 | TGLProgram.Validate |
glVertex속성* | TGLVertexAttrib.SetValue |
glVertexAttribPointer | TGLVertexAttrib.SetConfig/SetData |
gl뷰포트 | gl.뷰포트 |