#c #qt #opengl #qt-creator
#c #qt #opengl #qt-creator
Вопрос:
Я пишу приложение OpenGL с использованием Qt, и оно отлично работает на моем рабочем столе, но когда я пытаюсь запустить тот же код на своем ноутбуке, он строит, но ничего не выводит? Вот мой main.cpp
#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>
#include "GLWidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GLWidget window;
window.resize(1050,700);
window.setFixedSize(1050, 700);
window.show();
return app.exec();
}
Я не хочу, чтобы пользователь мог изменять размер окна, следовательно, фиксированный размер. Если я установлю точку останова в последней строке main, она никогда не достигнет ее на моем ноутбуке. Я прошел через код, и сразу после вызова show() (который является просто встроенной функцией) отладчик завершает работу с кодом 0. Я проверил все настройки сборки и запуска проекта, они одинаковы на обеих машинах.
На моем рабочем столе установлен монитор 1920×1080, но мой ноутбук имеет только 1366×768, может ли это иметь какое-либо отношение к этому? Есть ли какая-то внутренняя проверка, происходящая под капотом в Qt, которая зависит от разрешения моих экранов? Это практически единственное, о чем я могу думать.
Комментарии:
1. Может быть, это что-то внутреннее в вашем GLWidget.h?
2. Ваше предположение может быть правильным, @pixelpusher. Вы можете провести простой тест, разделив передаваемые вами размеры на 2 и посмотреть, может ли новое приложение работать как на десктопе, так и на ноутбуке.
3. единственное, что есть в моем GLWidget.h, — это объявление класса. Видя, что тот же код отлично работает на моем рабочем столе, я чувствую, что это скорее проблема среды.
4. Я бы также проверил настройки DPI, если ваш размер, выраженный в пикселях, автоматически масштабируется.
5. Можете ли вы создать GLWidget любого размера на своем ноутбуке? Я думаю, что ваше расследование должно начаться здесь.
Ответ №1:
Я не хочу, чтобы пользователь мог изменять размер окна
Могу я спросить, почему? Могу ли я предположить, что вы хотите, чтобы окно было фиксированного размера, потому что вы хотите использовать OpenGL для создания изображения именно такого размера? Если это так, то я должен вам сказать, что это так не сработает. Реализации OpenGL будут отображать только то, что станет видимым на экране (тест на владение пикселями). Если части окна не видны (а в вашем случае это будет иметь место на ноутбуке), эти пиксели просто не отображаются. Считывание фреймбуфера оставит эти пиксели неопределенными.
Правильный способ решения этой проблемы — использовать либо PBuffer, либо объект Frame Buffer (FBO). FBO проще в использовании, но не так широко поддерживаются в Windows (графика Intel в Windows имеет довольно плохую поддержку FBO). FBO поддерживаются всеми реализациями Linux OpenGL (Mesa (также поддерживает Intel), ATI / AMD и NVidia). В Интернете есть множество руководств по FBO и PBuffer.