Я пытаюсь визуализировать 640x360
красный квадрат внутри 1280x720
окна. Проблема в том, что область просмотра OpenGL не будет автоматически находиться внутри области, занимаемой квадратом в оконной системе Qt. То есть, если мой видеообъект имеет размеры 640x360
, область просмотра OpenGl по-прежнему имеет размеры 1280x720
(ПОЧЕМУ?).
В любом случае, я могу исправить это, используя glViewport(this->x, this->y, this->width, this->height);
. Проблема в том, что в OpenGL система координат имеет начало координат в левом нижнем углу, а this->x, this->y, this->width, this->height
от координат объекта в синтаксисе QML, где начало координат находится в верхнем левом углу. Результат таков:
main.qml
import QtQuick 2.0
import OpenGlVideoQtQuick2 1.0
Grid {
columns: 2
spacing: 2
width: 1280
height: 720
OpenGlVideoQtQuick2 {
width: 640
height: 360
}
}
но красный квадрат занимает 3-ю сетку вместо 1-й:
Я мог бы легко исправить это, выполнив glViewport(this->x, WINDOW_HEIGHT-this->y, this->width, this->height);
, где WINDOW_HEIGHT
будет иметь значение 720
, однако я не думаю, что я должен доверять окну просмотра OpenGL, чтобы всегда иметь размер окно, поэтому вместо этого я должен получить размеры окна просмотра OpenGl, но я не думаю, что это возможно.
Я пытался
GLint dims[2] = {9999, 9999};
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, dims);
std::cout << "dimenson x:" << dims[0] << " dimenson y:" << dims[1] << std::endl;
, что дает мне dimenson x:8192 dimenson y:8192
, что не имеет смысла для меня.
Вот код рендеринга OpenGL: https://github.com/lucaszanella/QQuickPaintedItemBug/blob/0a8ef6b5229afa7113ec1e4e3838981042792329/OpenGlVideoQtQuick2.cpp
Вы можете просмотреть весь сборочный проект здесь: https://github.com/lucaszanella/QQuickPaintedItemBug/tree/0a8ef6b5229afa7113ec1e4e3838981042792329