Android OpenGL glDrawElements работает на 2.1, но не на 1.6 - PullRequest
1 голос
/ 23 мая 2010

У меня есть очень простой подкласс GLRenderer, который рисует кучу полигонов на экране. На моем Nexus One с установленным 2.1 я вижу именно то, что ожидаю. На моем G1 с установленным 1.6 у меня отображается только glClearColor. Я могу изменить цвет и увидеть, что моя функция onDrawFrame хотя бы частично функционирует.

Я не могу понять хорошее объяснение, поэтому я вставляю свой код onDrawFrame:

public void onDrawFrame(GL10 gl) {
    gl.glClearColor(1.0f, 1.00f, 1.0f, 1.0f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    gl.glLoadIdentity();
    gl.glScalef(zoomLevel, zoomLevel, 1.0f);
    gl.glTranslatef(offsetX, offsetY, -1);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, boothVerticies);
    int i = 0;
    for (Polygon b : allPolygons) {
        if (b.indicies != null) {
            gl.glColor4f(0.6f, 0.6f, 0.6f, 1.0f);
            gl.glDrawElements(GL10.GL_TRIANGLE_FAN, b.numberOfVerticies, GL10.GL_UNSIGNED_SHORT, b.indicies);
            gl.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
            gl.glDrawElements(GL10.GL_LINE_LOOP, b.numberOfVerticies, GL10.GL_UNSIGNED_SHORT, b.indicies);
            if (i++ > 20) break;
        }
    }
}

Моя структура Polygon имеет ShortBuffer, называемый индикаторами, а numberOfVerticies отслеживает количество точек в многоугольнике.

У кого-нибудь есть идеи, почему это может хорошо работать на моем Nexus One, но не на G1?

1 Ответ

4 голосов
/ 24 мая 2010

Проблема была вызвана тем, что по умолчанию GL_VERTEX_ARRAY включен на Nexus One (или 2.1 / 2.2), но он отключен по умолчанию на G1. Чтобы исправить, я просто добавил этот вызов:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
...