Оптимизация Qt6 OpenGL ES с низким FPS для BananaPi_BPI-F3C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Оптимизация Qt6 OpenGL ES с низким FPS для BananaPi_BPI-F3

Сообщение Anonymous »

У меня есть плата разработки risc-v с аппаратным ускорением для GLES (3.2).
Полноэкранные тесты glmark2 дают 150+ FPS без ошибок

Код: Выделить всё

~ glmark2-es2-wayland --fullscreen
=======================================================
glmark2 2023.01
=======================================================
OpenGL Information
GL_VENDOR:      Imagination Technologies
GL_RENDERER:    PowerVR B-Series BXE-2-32
GL_VERSION:     OpenGL ES 3.2 build 23.2@6460340
Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=8 samples=0
Surface Size:   1920x1080 fullscreen
=======================================================
[build] use-vbo=false: FPS: 159 FrameTime: 6.320 ms
[build] use-vbo=true: FPS: 229 FrameTime: 4.385 ms
[texture] texture-filter=nearest: FPS: 223 FrameTime: 4.496 ms
[texture] texture-filter=linear: FPS: 221 FrameTime: 4.530 ms
[texture] texture-filter=mipmap: FPS: 219 FrameTime: 4.568 ms
[shading] shading=gouraud: FPS: 195 FrameTime: 5.148 ms
[shading] shading=blinn-phong-inf: FPS: 189 FrameTime: 5.312 ms
[shading] shading=phong: FPS: 147 FrameTime: 6.820 ms
[shading] shading=cel: FPS: 132 FrameTime: 7.603 ms
[bump] bump-render=high-poly: FPS: 135 FrameTime: 7.432 ms
[bump] bump-render=normals: FPS: 215 FrameTime: 4.666 ms
[bump] bump-render=height: FPS: 202 FrameTime: 4.970 ms
...
Но простая программа Qt (вращающиеся стрелки) дает мне 80 FPS сверху.
main.cpp

Код: Выделить всё

#include "mainwindow.h"
#include "openglwidget.h"
#include 

#include 

static QSurfaceFormat createFormat(){
QSurfaceFormat format;

// Инициализация OpenGL ES
format.setRenderableType(QSurfaceFormat::OpenGLES);
// format.setProfile(QSurfaceFormat::CoreProfile);
// format.setVersion(3,0);
format.setDepthBufferSize(0);
format.setStencilBufferSize(0);
format.setSamples(0);
format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
format.setSwapInterval(0);
return format;
}

int main(int argc, char *argv[])
{
QSurfaceFormat format = createFormat();
QSurfaceFormat::setDefaultFormat(format);
QApplication a(argc, argv);
MainWindow w; // default window
OpenGLWidget* widget = new OpenGLWidget;
w.setCentralWidget(widget);
// w.show();
w.showFullScreen();
return a.exec();
}
openglwidget.cpp

Код: Выделить всё

void OpenGLWidget::initializeGL()
{
initializeOpenGLFunctions();
glDisable(GL_DEPTH_TEST);

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);

// init Shader Program
program = new QOpenGLShaderProgram(this);
program->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/vertex.glsl");
program->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/fragment.glsl");
program->link();

float k_a = 0.05f;
// Triangle vert
GLfloat vertices[] = {
0.000f, 1.0f * k_a,  // Верхняя точка
-0.005f, 0.0f,  // Левая точка
0.005f, 0.0f   // Правая точка
};

// VAO
vao = new QOpenGLVertexArrayObject(this);
vao->create();
vao->bind();

// VBO
vbo = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
vbo->create();
vbo->bind();
vbo->allocate(vertices, sizeof(vertices));

// VAO->Program
program->setAttributeBuffer("aPos", GL_FLOAT, 0, 2, sizeof(GLfloat) * 2);
program->enableAttributeArray("aPos");

vao->release();

// Update timer
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, qOverload(&OpenGLWidget::update));
timer->start(1);

time.start();

}

void OpenGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);

program->bind();

for (int i = -100; i setUniformValue("model", modelMatrix);

vao->bind();

glDrawArrays(GL_TRIANGLES, 0, 3);

vao->release();
}

program->release();

angle += 1.0f;

frameCount++;
double currentTime = time.elapsed() / 1000.0;
if (currentTime - lastTime >= 1.0) {
fps = (double)frameCount / (currentTime - lastTime);
qDebug() 

Подробнее здесь: [url]https://stackoverflow.com/questions/79193757/qt6-opengl-es-low-fps-optimization-for-bananapi-bpi-f3[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»