Tôi đang cố gắng hiển thị HUD qua ứng dụng OpenGL ES 2.0 được viết bằng C trên nền tảng ARM Linux.OpenGL ES 2.0 + Cairo: HUD
Tôi hiện đang sử dụng 2 hình tam giác được đặt gần mặt cắt cắt gần và ốp lát kết cấu lên chúng. Các kết cấu là kích thước của màn hình và chủ yếu là minh bạch, ngoại trừ các phần mà tôi có văn bản trả lại. Các kết cấu được tạo ra bằng cách sử dụng Pango/Cairo
Nếu tôi bật HUD (bỏ ghi chú gọi hàm render_ui), tôi hiện đang đạt hiệu suất 50% (Đi từ 60fps đến 30fps).
Đây là đoạn mã để làm cho HUD:
void render_ui(OGL_STATE_T *state) {
glUseProgram(state->uiHandle);
matIdentity(modelViewMatrix);
matTranslate(modelViewMatrix, 0, 0, -0.51);
const GLfloat *mvMat2 = modelViewMatrix;
glViewport(0,0,state->screen_width, state->screen_height);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glBindBuffer(GL_ARRAY_BUFFER, state->uiVB);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, state->uiIB);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, state->uiTex);
glUniform1i(_uiTexUniform, 0);
glUniformMatrix4fv(_uiProjectionUniform, 1, 0, pMat);
glUniformMatrix4fv(_uiModelViewUniform, 1, 0, mvMat2);
glVertexAttribPointer(_uiPositionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
glVertexAttribPointer(_uiColorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid *) (sizeof(GLfloat) * 3));
glVertexAttribPointer(_uiTexCoordSlot, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid *) (sizeof(GLfloat) * 7));
glEnableVertexAttribArray(_uiPositionSlot);
glEnableVertexAttribArray(_uiColorSlot);
glEnableVertexAttribArray(_uiTexCoordSlot);
glDrawElements(GL_TRIANGLES, uiIndicesArraySize/uiIndicesElementSize,
GL_UNSIGNED_BYTE, 0);
glDisableVertexAttribArray(_uiTexCoordSlot);
glDisable(GL_BLEND);
GLenum err;
if ((err = glGetError()) != GL_NO_ERROR)
printf("There was an error");
}
Cần phải có một cách hợp lý hơn để làm điều này.
GPU trên nền tảng của bạn (PowerVr, Adreno, Mali, Nvidia Tegra ...) là gì? Ngoài ra độ phân giải là gì? –
@VB_overflow Vivante GPU/bo mạch Freescale iMX6. Độ phân giải là 1920x1080. – ReX357