Dziękuję za wypowiedzi.
Postanowiłem jednak, że zastosuję jedną texture i tylko z niej będę rysował pojedyncze elementy.
Z czasem otrzymałem nowy błąd i to mocno irytujący. Przy blokowaniu ekranu (APP_CMD_TERM_WINDOW) muszę zatrzymać program rysowania. Lecz po ponownym uruchomieniu okazuje się, że wszystkie moje tekstury z pamięci karty graficznej zostają usunięte.
void Graphic::terminate()
{
if (m_display != EGL_NO_DISPLAY) {
eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (m_context != EGL_NO_CONTEXT)
eglDestroyContext(m_display, m_context);
if (m_surface != EGL_NO_SURFACE)
eglDestroySurface(m_display, m_surface);
eglTerminate(m_display);
}
m_display = EGL_NO_DISPLAY;
m_context = EGL_NO_CONTEXT;
m_surface = EGL_NO_SURFACE;
setAnimating(false);
}
void Graphic::init()
{
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_NONE
};
EGLint dummy, format;
EGLint numConfigs;
EGLConfig config;
m_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(m_display, 0, 0);
eglChooseConfig(m_display, attribs, &config, 1, &numConfigs);
eglGetConfigAttrib(m_display, config, EGL_NATIVE_VISUAL_ID, &format);
ANativeWindow_setBuffersGeometry(g_platform.getAndroid()->window, 0, 0, format);
m_surface = eglCreateWindowSurface(m_display, config, g_platform.getAndroid()->window, NULL);
m_context = eglCreateContext(m_display, config, NULL, NULL);
if (eglMakeCurrent(m_display, m_surface, m_surface, m_context) == EGL_FALSE) {
LOGE("Unable to eglMakeCurrent");
return;
}
eglQuerySurface(m_display, m_surface, EGL_WIDTH, &m_size.width);
eglQuerySurface(m_display, m_surface, EGL_HEIGHT, &m_size.height);
glViewport(0,0, m_size.width, m_size.height);
glEnable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glMatrixMode(GL_TEXTURE);
glShadeModel(GL_SMOOTH);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0,0,0,1);
setAnimating(true);
}