3

eglMakeCurrent同じスレッドで 2 つの異なるサーフェスをレンダリングする場合、特定のサーフェスをレンダリングする前に、現在のサーフェスをスレッドにバインド解除し、もう一方のサーフェスを現在のスレッドにバインドするために毎回呼び出す必要があります。一方、サーフェスをスレッドにバインド解除する操作は、時間かかりすぎ!

ソースコード:

int DisplayPicture(...)
{   
    if (!eglMakeCurrent(m_glesDisplay ,m_glesSurface, m_glesSurface, m_glesContext))
    {
        return 0;
    }

    glUseProgram(programObject);

    glActiveTexture( GL_TEXTURE0 );
    glUniform1i(m_nUniformLocation[0],0);
    glBindTexture( GL_TEXTURE_2D, 0);

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, nWidth, nHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pData );

    ....

    // Update attribute values.
    glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
    glEnableVertexAttribArray(ATTRIB_VERTEX);
    glVertexAttribPointer(ATTRIB_TEXCOORD, 2, GL_FLOAT, 0, 0, texCoords);
    glEnableVertexAttribArray(ATTRIB_TEXCOORD);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    eglSwapBuffers(m_glesDisplay, m_glesSurface);
    glUseProgram(0);
    return 0;
}

ps: 1. OpenGLES でテクスチャを使用eglMakeCurrent(display, NULL, NULL, NULL)すると時間がかかりますが、なぜですか? 2. 一部のデバイスでは、他のデバイスでは通常の状態にeglMakeCurrent戻りEGL_BAD_ALLOCますが、なぜですか?

4

0 に答える 0