Próbuję utworzyć bufor renderowania poza ekranem w OpenGL ES na telefonie iPhone. Został utworzony bufor tak:Rysowanie bufora renderowania poza ekranem w OpenGL ES (iPhone)
glGenFramebuffersOES(1, &offscreenFramebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
glGenRenderbuffersOES(1, &offscreenRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, offscreenRenderbuffer);
Ale jestem zdezorientowany, jak czynią przechowywanie. Dokumentacja Apple mówi, że należy użyć metody EAGLContext renderBufferStorage: fromDrawable:, ale wydaje się, że działa to tylko dla jednego bufora renderowania (główny ekran jest wyświetlany). Jeśli używam normalnej funkcji OpenGL glRenderBufferStorageOES, to nie mogę tego wyświetlić. Oto kod:
// this is in the initialization section:
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight);
// and this is when I'm trying to draw to it and display it:
glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
GLfloat vc[] = {
0.0f, 0.0f, 0.0f,
10.0f, 10.0f, 10.0f,
0.0f, 0.0f, 0.0f,
-10.0f, -10.0f, -10.0f,
};
glLoadIdentity();
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vc);
glDrawArrays(GL_LINES, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
Robiąc to w ten sposób nic nie jest wyświetlane na ekranie. Jednakże, jeśli przełączę odwołania do "offscreen ... Buffer" na bufory, które zostały utworzone za pomocą metody renderBufferStorage, to działa dobrze.
Wszelkie sugestie?
Piszę grę, w której rysuję rzeczy na ekranie, które powinny być trwałe od ramki do ramki. Chciałbym narysować te trwałe rzeczy do bufora poza ekranem, a następnie na każdej klatce "rozlać" to na ekran i narysować nietrwałe/niestałe rzeczy na wierzchu. Naprawdę chciałbym uniknąć konieczności utrzymywania listy trwałych obiektów i ponownego ich tworzenia w każdej klatce, ponieważ liczba obiektów może być bardzo szybko bardzo nieporęczna. –
David, rozwiązałeś to? Mam do czynienia z tym samym problemem. – vargonian