编写基于Qt的GLSL程序需要注意的几点
最近尝试着编写基于Qt和GLSL的小例子,遇到了一些小问题,在这里给大家分享一下,希望大家不要重蹈覆辙。
首先,如果出现“ERROR: Duplicate function definitions for “main”; prototype: “main()”found.”错误,如下图:
这是在链接GLSL的时候出错了,大体意思是类似于VisualStudio中的LNK2005这样的错误。究其原因,是因为我们正在运行一个GLSL程序,在运行中无法链接成功。此时我们需要手动卸载我们的着色器,如下面这条语句:
m_ShaderProgram.release( );
m_ShaderProgram.removeShader( m_pVertexShader );
这样再使用m_ShaderProgram.link( )方法链接就不会出现错误了。
然后,如果在运行的时候出现“QOpenGLFunctions created with non-current context”异常,那么需要注意着色器变量的存储。我尝试过,把QOpenGLShader作为对象作为类实例成员存储或者作为全局(静态)变量存储都会导致这个错误。于是我放弃了建立QOpenGLShader对象,改为了QOpenGLShader指针。而QOpenGLShaderProgram则没有这个限制。
其实最佳实践是,使用QOpenGLShaderProgram的实例作为类的数据成员,QOpenGLShader的指针作为类的数据成员。
完整的开发Qt和OpenGL的博客将在下一篇中详细阐述。
演示程序下载地址:这里
源代码下载地址:这里
分享到:
相关推荐
下面是我就来介绍一下如何开发基于Qt和GLSL的程序。 我制作的这个小例子还带了一个着色器编辑器。支持即时编译链接着色器,支持在GLSL规定的语法高亮,有关语法高亮的内容,感兴趣的同学可以下载一下。
下面是我就来介绍一下如何开发基于Qt和GLSL的程序。 我制作的这个小例子还带了一个着色器编辑器。支持即时编译链接着色器,支持在GLSL规定的语法高亮,有关语法高亮的内容,感兴趣的同学可以下载一下。
完整的glsl程序,可以正确运行,是初学者的良好指导
本资源没什么用,不要下载,只是看视频时GLSL的代码,主要是跟着B站视频学习的OPenGL着色器的基础。没有实际作用,仅供自己回看方便使用。
简单的GLSL的Retinex的程序,原理较为简答,使用Opencv读取图像,不足之处是Retinex的核函数较为简单,同时归一化时最大,最小像素选取未很好解决。
This directory contains the Qt3D project for Qt5: * Qt3D QML bindings and * Qt3D C++ APIs Building Qt3D ================== Qt5 is a rapidly changing bleeding edge environment. This branch is our ...
本资源是演示程序,大家可以免积分下载。 ------------------------------------------ 公告板技术的核心在于计算模型矩阵。OpenGL的固定渲染管线是维持了模型视图矩阵和投影矩阵两套矩阵,而Direct3D的固定渲染管线...
qml-glsl-coder:基于Qt QML的GLSL片段着色器的实时编辑器
在Qt框架下,用现代OpenGL实现的双面渲染,渲染对象是常见的茶壶模型,详见CSDN博客现代OpenGL+Qt学习笔记之八:GLSL双面渲染。
投影纹理可以实现许多有趣的效果,比如模仿聚光效果,用glsl实现可以更加灵活。
适用于初学者,了解GLSL编程所需的文件与基础代码
GLSL GPU opengl GLSL GPU opengl
基于国产GPU的GLSL编译器设计.pdf
该文档由于GLSL学习用,特别适合新手,如果喜欢研究OpenGL手机游戏开发的,可以下载看看
这是一个简单的GLSL着色程序的完整代码,GLSL需要显卡支持OpenGL版本2.0以上
hlsl2glsl hlsl转换为glsl图形化工具hlsl2glsl hlsl转换为glsl图形化工具
一个简单的GLSL编程示例,用于引导初学者建立第一个GLSL程序
vs2019 glsl提示工具个高亮和显示行号
现代OpenGL+Qt写的一个示例程序,主要用GLSL函数实现Phong光照模型,此外可以通过鼠标控制模型的旋转和缩放。对应博文现代OpenGL+Qt学习笔记之七:Phong光照及在GLSL中使用函数。
基于 Robert Menzel 的语法高亮文件。 安装说明可