Idioma

iPhoneOSGameView.CreateFrameBuffer Método

Definição

Cria o framebuffer para que as operações OpenGL possam ser executadas.

protected virtual void CreateFrameBuffer();
abstract member CreateFrameBuffer : unit -> unit
override this.CreateFrameBuffer : unit -> unit

Exceções

ContextRenderingApi não foi inicializado.

A instância foi Dispose(Boolean) invocada nela.

Comentários

Esse método é invocado para criar uma IGraphicsContext implementação, criar um EAGLContexte inicializar o contexto GL para que existam um framebuffer e renderbuffer para chamadas GL futuras.

Esse método é invocado por: LayoutSubviews(), e Run()Run(Double).

<block subset="none" type="behaviors"> Este método executa as seguintes operações:

  1. Configure os Layer's DrawableProperties. LayerRetainsBacking é usado para definir a RetainedBacking propriedade, enquanto LayerColorFormat é usado para definir a ColorFormat propriedade.
  2. ConfigureLayer(CAEAGLLayer) é invocado.
  3. O GraphicsContext é criado, que, por sua vez, cria um EAGLContext. O EAGLContext pode ser recuperado por meio da EAGLContext propriedade.
  4. Um renderbuffer é criado e associado ao contexto GL como a RenderbufferOes propriedade. O renderbuffer é acessível por meio de Renderbuffer.
  5. RenderBufferStorage(nuint, CAEAGLLayer) é invocado para associar o renderbuffer acima a EAGLContext.
  6. Um framebuffer é criado e associado ao contexto GL como a FramebufferOes propriedade. O framebuffer é acessível por meio de Framebuffer.
  7. O framebuffer e o renderbuffer são associados: GL.Oes.FramebufferRenderbuffer (All.FramebufferOes, All.ColorAttachment0Oes, All.RenderbufferOes, renderbuffer);
  8. Size é inicializado com base no valor atual Bounds .
  9. GL.Viewport(0, 0, Size.Width, Size.Height) é invocado.
  10. GL.Scissor(0, 0, Size.Width, Size.Height) é invocado.
</block><block subset="none" type="overrides">

Os herdadores podem substituir ou ConfigureLayer(CAEAGLLayer)esse método para adicionar lógica de construção adicional (por exemplo, para adicionar um buffer de profundidade). Se apenas a camada precisar ser configurada, substitua ConfigureLayer; caso contrário, substitua esse método e chame essa implementação para criar o framebuffer e o renderbuffer.

O fallback do OpenGLES inteligente pode ser executado alterando o ContextRenderingApi caso de ocorrer um erro. Por exemplo:

<exemplo>

protected override CreateFrameBuffer()
{
    try {
        ContextRenderingApi = EAGLRenderingAPI.OpenGLES2;
        base.CreateFrameBuffer();
    } catch (Exception) {
        // device doesn't support OpenGLES 2.0; retry with 1.1:
        ContextRenderingApi = EAGLRenderingAPI.OpenGLES1;
        base.CreateFrameBuffer();
    }
}

</example></block>

Aplica-se a