Qt中使用GLEW进行OpenGL开发

本文介绍如何在Qt中使用GLEW进行OpenGL开发,包括创建Qt项目、设置OpenGL上下文、检测OpenGL版本等步骤,并提供了一个简单的背景颜色变化测试示例。

为什么要使用GLEW

因为工作需求绘制视频,原本使用的Qt(我使用的是5.9.8的版本)自带的QOpenGL进行视频绘制,但是在稳定行测试中经常会出现界面不更新的情况。找了很久也没有好的解决方案,后来干脆使用GLEW进行OpenGL的开发。
目前Qt的OpenGL多少会存在些问题或者不完善。

使用VS创建Qt项目

1.创建一个Widget窗口即可。

#include <QtWidgets/QWidget>
#include "ui_GLEW4QT.h"

class GLEW4QT : public QWidget
{
   
   
	Q_OBJECT

public:
	GLEW4QT(QWidget *parent = Q_NULLPTR);

private:
	Ui::GLEW4QTClass ui;
};

设置Widget

GLEW4QT::GLEW4QT(QWidget *parent)
	: QWidget(parent, Qt::MSWindowsOwnDC)
{
   
   
	setAttribute(Qt::WA_PaintOnScreen);
	setAttribute(Qt::WA_NoSystemBackground);
	setAutoFillBackground(true);

	ui.setupUi(this);
}

1.在构造函数中设置一个Qt::MSWindowsOwnDC( 在窗口上为窗口提供自己的显示上下文)。
2.设置属性Qt::WA_PaintOnScreen,设置该属性后需要重新实现paintEngine函数。
3.设置Qt::WA_NoSystemBackground属性。
4.设置自动填充背景

重新实现paintEngine

直接返回NULL即可

virtual QPaintEngine* paintEngine() const {
   
    return NULL; }

添加GLEW库到工程

GLEW下载地址: 传送门
引入头文件

#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/wglew.h>

#ifdef GLEW_STATIC
//使用静态库
#pragma comment(lib, "glew32s.lib")
#else
//使用动态库
#pragma comment(lib, "glew32.lib")
#endif
#pragma comment(lib, "opengl32.lib")

注意:如果使用glew静态库则需要在#include <GL/glew.h>前定义GLEW_STATIC

设置OpenGL上下文

设置GL像素格式

创建静态函数设置

/*
 * 设置GL像素格式
 */
static bool SetupPixelFormat(HDC dc)
{
   
   
	//像素格式描述符,渲染的像素格式
	PIXELFORMATDESCRIPTOR pfd;
	ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR));
	pfd.nVersion = 1;
	pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
	pfd.cColorBits = 32;
	pfd.cDepthBits = 24;
	pfd.cStencilBits = 8;
	pfd.iPixelType = PFD_TYPE_RGBA;
	pfd.iLayerType = PFD_MAIN_PLANE;
	pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

	int pixelformat = 0;
	if ((pixelformat = ChoosePixelFormat(dc, &pfd)) == 0)
		return false;

	if (SetPixelFormat
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sttplay666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值