Собственный код OpenGL ES работает на эмуляторе, но не на реальном устройстве - PullRequest
1 голос
/ 16 сентября 2011

Я программирую приложение OpenGL ES 1.1 на Android ( весь код OpenGL ES - C ++ ).

Тестирование наэмулятор работает нормально, но когда я тестирую его на реальном устройстве (HTC Desire), он не работает (я вижу только черный экран).

Это мой код OpenGL C ++:

RenderingEngine1::RenderingEngine1()
{
    // Create & bind the color buffer so that the caller can allocate its space.
    glGenRenderbuffersOES(1, &m_renderbuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_renderbuffer);
}

void RenderingEngine1::Initialize(int width, int height)
{
    // Create the framebuffer object and attach the color buffer.
    glGenFramebuffersOES(1, &m_framebuffer);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_framebuffer);
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,
                                 GL_COLOR_ATTACHMENT0_OES,
                                 GL_RENDERBUFFER_OES,
                                 m_renderbuffer);

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);

    // Initialize the projection matrix.
    const float maxX = 2;
    const float maxY = 3;
    glOrthof(-maxX, +maxX, -maxY, +maxY, -1, 1);

    glMatrixMode(GL_MODELVIEW);

    // Initialize the rotation animation state.
    OnRotate(DeviceOrientationPortrait);
    m_currentAngle = m_desiredAngle;
}

void RenderingEngine1::Render() const
{
    glClearColor(0.5f, 0.5f, 0.5f, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(m_currentAngle, 0, 0, 1);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &Vertices[0].Position[0]);
    glColorPointer(4, GL_FLOAT, sizeof(Vertex), &Vertices[0].Color[0]);

    GLsizei vertexCount = sizeof(Vertices) / sizeof(Vertex);
    glDrawArrays(GL_TRIANGLES, 0, vertexCount);

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glPopMatrix();
}

Методы JNI находятся в этом коде C ++:

extern "C" {
    IRenderingEngine* m_renderingEngine;

    JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
    {
        return JNI_VERSION_1_4;
    }

    void Java_com_company_tests_MainRenderer_nativeInit( JNIEnv*  env, jobject thiz )
    {
        m_renderingEngine = CreateRenderer1();
        m_renderingEngine->Initialize(480, 800);
    }

    void Java_com_company_tests_MainRenderer_nativeRender( JNIEnv*  env, jobject thiz )
    {
        m_renderingEngine->Render();
    }
}

И у меня также есть два класса Java: один, который наследуется от GLSurfaceView , и средство визуализации, которое реализует GLSurfaceView.Renderer .

Не знаю, почему это не работает на реальном устройстве.

Любой совет?

Если вам нужно что-то еще,пожалуйста, скажите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...