OpenGL Compute Shader靠谱例子及读取二进制Shader,SPIR-V
学OpenGL以来一直苦恼没有像DX那样可以读取二进制Shader使用的方法,除去有时不想公开自己写的牛逼Shader的心理(虽然目前还从没写过什么牛逼的Shader),
主要是不用现场编译,加快读取速度。
好吧,这些其实都是借口,就是TM不想让你看到我写的代码,这才是最主要的原因...
关于SPIR-V,这里有个文章说明。
http://gad.qq.com/program/translateview/7172708
网上的OpenGL教程似乎都没有介绍如何使用OpenGL Compute Shader的,书看的少,似乎OpenGL Programming Guide第8还是第9版有,但是因为那哥们的代码我编译不了,所以无缘一窥。
昨晚在Gayhub下了第9版源码,终于用CMake做为工程发布了,可喜可贺,于是下载下来运行一下,发现不是我想要的效果,虽然没看过这本书,但是这么多年了,这例子还不如网上的OpenGL教程例子靠谱,不得不说...还是不说了,大家都懂...
Shift + Delete
继续搜Gayhub,发现一个Windows下能跑的CS例子,还有youtube演示,应用总算入门级了。
https://github.com/multiprecision/sph_opengl
下载下来,发现是VS2017的工程,强行改成2015,发现用的库又是用2017预编译的,找到2015预编译换上,发现要求OpenGL版本4.6,而我的才4.5,更新老黄家驱动,4.6了,但是发现文件名又不对。
他的文件名为什么用的都是../shader/particle.vert.spv,都是spv扩展,而我下载只有vert没有后面的spv,一个都没有,于是傻呼呼的都把.spv去掉了,还是不行,又把文件名还原了回去。
正懵逼中,发现shader目录下还有一个compile.py文件,打开一看,马个鸡,果然还是得编译才行啊,这不是和DX的那个fxc套路一样么。
正好昨晚想折腾SPIR-V,已经下了glslang
https://github.com/KhronosGroup/glslang
直接Realse页面下,下载glslang-master-windows-x64-Release.zip就行。其实只需要glslangValidator.exe这一个文件而已。
丢到shader目录下,运行python compile.py,如果没装py自己照猫画狗处理下就行了。
发现效率出奇的差,和DX SDK的SPH例子比差太远,不知道是不是跑在集显的原因,虽然显卡设置我已经换成所有程序全都用核显运行了,但是不排除OpenGL选项不智能,以前用OpenCL就有这种情况,核显集显要自己切,不像CUDA会默认用核显。
不管怎么说,没找到原因就先降数量吧,原粒子数2万,去个0就好了
#define SPH_NUM_PARTICLES 2000
再处理下坑爹的窗口大小,笔记本看1000x1000真TM痛苦,白皮似乎很多人喜欢写成1000x1000,不知道是从哪流行起来的。
window = glfwCreateWindow(800, 600, "", nullptr, nullptr);
解决
二进制读取Shader?源码里搜glShaderBinary
OpenGL Compute Shader靠谱例子及读取二进制Shader,SPIR-V的更多相关文章
- 视频和音频播放的演示最简单的例子6:OpenGL广播YUV420P(T经exture,采用Shader)
===================================================== 最简单的视频和音频播放的演示样品系列列表: 最简单的视音频播放演示样例1:总述 最简单的视音 ...
- 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
- (第二章第三部分)TensorFlow框架之读取二进制数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...
- 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但
片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但片元着色器是一个更合适的名字, 因为此时的片元并不是一个真正意义上的像素.
- SQLite数据库如何存储和读取二进制数据
SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...
- 关于NGUI Shader 和 Draw Call的优化 & 模糊shader
序: 1.项目过程中不可避免的需要用到大量Shader 和 UITexture,由于Ngui对Shader支持非常糟糕,导致项目drawCall异常的高 2.Panel裁剪无法裁剪自定义shader内 ...
- python 读取二进制数据到可变缓冲区中
想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...
- C++ 保存读取二进制
一.保存二进制 #include <iostream> #include <fstream> int main(){ float* output = new float[100 ...
- Unity3d之Shader编程:子着色器、通道与标签的写法 & 纹理混合
一.子着色器 Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 我们知道,子着色器 ...
随机推荐
- Linux报错:bash: pip: command not found
$ wget https://bootstrap.pypa.io/get-pip.py$ python get-pip.py$ pip -V #查看pip版本 接下来就可以随便pip安装东西了
- 白话RPC
RPC,这个英文缩写在计算机专业里的意思是:Remote Procedure Call Protocol,远程过程调用协议,字面上的意思就是这个,不过还是有些懵逼. 下面就简单说明一下其内在原理,形象 ...
- 44个Java代码性能优化总结
https://blog.csdn.net/xiang__liu/article/details/79321639 ---稍后有时间整理
- linux 查看端口被占用
linux 查看端口被占用 1.lsof -i : 端口号 用于查看某一端口的占用情况,比如查看8080端口使用情况,lsof -i:8080 如果执行 lsof -i:8080 系统提示 : ...
- 学习excel的使用技巧三快捷键和思路
快捷键 CRTL+回车 是多行执行 思路 关于公式 在空白出 写= 即开始写公式 excel第一行 就是行标 比如 A1 就是excel 表格中第一个 比如来个乘法 =A1*12+b1*13 求和更简 ...
- ABAP-FTP-执行
1.界面 2.程序 ZFID0004_FTP_EXEC 主程序: *&------------------------------------------------------------- ...
- HTTP 中 GET 与 POST 的区别
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. GET和POST是什么?HTTP协议中的两种发送请求的方法. HTTP是什么?HTTP是基于TCP/IP的关 ...
- MySQL master-slave主从复制环境搭建初试
环境为centos 7.2+mysql 5.7,网上教程很多,原理也不复杂(深知自己踩的坑还不够) 正常情况下,配置起来比较简单.另外,根据个人感受,MySQL的复制感觉要比SQL Server的复制 ...
- Quartz使用
背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...
- Python设计模式 - UML - 类图(Class Diagram)
简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系 ...