如何定义QT Opengl framebuffer的大小
How to define the size of QT Opengl framebuffer
在GLFW中我们通过这个命令来定义Opengl framebuffer的大小
GLFWwindow* window = glfwCreateWindow(1920, 1080, "Test Window", NULL, NULL);
这将创建一个大小为 1920 X 1080 的 opengl window,并且 Opengl 的默认帧缓冲区也是相同大小。
我们如何在 QT 中做同样的事情
这就是我目前为 opengl 渲染设置参数的方式。
QGLFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setSampleBuffers(true);
format.setSamples(4);
format.setSwapInterval(1);
QGLFormat::setDefaultFormat(format);
////////////////////////////////// GlWidget Class / //////////////
class GLWidget : public QOpenGLWidget
{
Q_OBJECT;
public:
explicit GLWidget(QWidget *parent = 0);
// ~GLWidget();
void initializeGL() override;
void paintGL() override;
void resizeGL(int w, int h) override;
QTimer timer;
QElapsedTimer elapsedtimer;
private:
int width;
int height;
};
///////////////////////////////////////////////////////////////////////////////////
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
//////////////////////////////////////////////////////////////////////////////////////////
void GLWidget::initializeGL()
{
GLenum GlewInitResult;
glewExperimental = GL_TRUE;
GlewInitResult = glewInit();
if (GLEW_OK != GlewInitResult) // Check if glew is initialized properly
{
QMessageBox msgBox;
msgBox.setText("Not able to Initialize Glew");
msgBox.exec();
}
}
/////////////////////////////////////////// ////////////////////////////////////////////////////
void GLWidget::paintGL()
{
// Painting commands here which are opengl commands using GLEW.
glBindFramebuffer(GL_FRAMEBUFFER, 0); // Render in default framebuffer
glClear(GL_COLOR_BUFFER_BIT);
RenderCube();
}
///////////////////////////////////////////////////////////////////////////////////////////
IN the Main function
QApplication application(argc, argv);
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(3, 2);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
return application.exec();
您可以使用 QOpenGLFramebufferObject
指定大小
The QOpenGLFramebufferObject class encapsulates an OpenGL framebuffer
object
构造函数接受宽度和高度。还有其他重载的构造函数。
在此处查找文档。
https://doc.qt.io/qt-5/qopenglframebufferobject.html#QOpenGLFramebufferObject-5
调用 bool QOpenGLFramebufferObject::bind()
以从系统提供的默认帧缓冲区切换。调用 bool QOpenGLFramebufferObject::release()
返回默认帧缓冲区。
示例:
QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
QOpenGLFramebufferObject* frameBufferObject = new QOpenGLFramebufferObject(1920, 1080, format);
frameBufferObject->bind();
在GLFW中我们通过这个命令来定义Opengl framebuffer的大小
GLFWwindow* window = glfwCreateWindow(1920, 1080, "Test Window", NULL, NULL);
这将创建一个大小为 1920 X 1080 的 opengl window,并且 Opengl 的默认帧缓冲区也是相同大小。
我们如何在 QT 中做同样的事情
这就是我目前为 opengl 渲染设置参数的方式。
QGLFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setSampleBuffers(true);
format.setSamples(4);
format.setSwapInterval(1);
QGLFormat::setDefaultFormat(format);
////////////////////////////////// GlWidget Class / //////////////
class GLWidget : public QOpenGLWidget
{
Q_OBJECT;
public:
explicit GLWidget(QWidget *parent = 0);
// ~GLWidget();
void initializeGL() override;
void paintGL() override;
void resizeGL(int w, int h) override;
QTimer timer;
QElapsedTimer elapsedtimer;
private:
int width;
int height;
};
///////////////////////////////////////////////////////////////////////////////////
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
//////////////////////////////////////////////////////////////////////////////////////////
void GLWidget::initializeGL()
{
GLenum GlewInitResult;
glewExperimental = GL_TRUE;
GlewInitResult = glewInit();
if (GLEW_OK != GlewInitResult) // Check if glew is initialized properly
{
QMessageBox msgBox;
msgBox.setText("Not able to Initialize Glew");
msgBox.exec();
}
}
/////////////////////////////////////////// ////////////////////////////////////////////////////
void GLWidget::paintGL()
{
// Painting commands here which are opengl commands using GLEW.
glBindFramebuffer(GL_FRAMEBUFFER, 0); // Render in default framebuffer
glClear(GL_COLOR_BUFFER_BIT);
RenderCube();
}
///////////////////////////////////////////////////////////////////////////////////////////
IN the Main function
QApplication application(argc, argv);
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(3, 2);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
return application.exec();
您可以使用 QOpenGLFramebufferObject
The QOpenGLFramebufferObject class encapsulates an OpenGL framebuffer object
构造函数接受宽度和高度。还有其他重载的构造函数。 在此处查找文档。
https://doc.qt.io/qt-5/qopenglframebufferobject.html#QOpenGLFramebufferObject-5
调用 bool QOpenGLFramebufferObject::bind()
以从系统提供的默认帧缓冲区切换。调用 bool QOpenGLFramebufferObject::release()
返回默认帧缓冲区。
示例:
QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
QOpenGLFramebufferObject* frameBufferObject = new QOpenGLFramebufferObject(1920, 1080, format);
frameBufferObject->bind();