计算着色器

原创 2016年08月31日 05:05:54
struct col{
uint x;
uint y;
uint z;
uint w;
};


layout ( binding = 0 ) buffer bmp{
uvec4 color[];
};


layout(local_size_x = 1) in;


void main(void)
{

uint ID = gl_WorkGroupID.y * gl_NumWorkGroups.x + gl_WorkGroupID.x;

//color[ID] = col(ID * 3,ID * 3 + 1,ID * 3 + 2);


//color[ID] = col(ID * 4,ID * 4 + 1,ID * 4 + 2,ID * 4 + 3);


color[ID] = uvec4(gl_WorkGroupID.x, gl_WorkGroupID.y, gl_NumWorkGroups.x, ID);

}


以上计算着色器当color类型为uvec3或者自定义类型col时,无法正确执行,有没有谁知道怎么回事?谢谢!


对应以下C++代码:

#define EC (4)
const unsigned char * bc = (const unsigned char *)bmp;
ShaderStorageBufferObject ssbo( bmp.W() * bmp.H() * EC * sizeof(int), 0, Buffer::USAGE::DYNAMIC_DRAW);
ssbo.Bind(Buffer::BIND_TARGET::COPY_READ_BUFFER);
unsigned int (*bia)[4288][2848][EC] = (unsigned int (*)[4288][2848][EC])ssbo.MapBuffer(Buffer::BIND_TARGET::COPY_READ_BUFFER,Buffer::MAP_FLAG::READ_WRITE);
unsigned int *bi = (unsigned int *)bia;
for(int i = 0; i < bmp.W() * bmp.H() * EC; ++i)
{
//bi[i] = *bc;
bi[i] = i/EC + i%EC;
}
ssbo.UnmapBuffer(Buffer::BIND_TARGET::COPY_READ_BUFFER);
ssbo.UnBind(Buffer::BIND_TARGET::COPY_READ_BUFFER);
ssbo.BindBase(0);
std::string cstr;
ShaderM::ReadShaderSourceFromFile("shaders/computer.glsl/bmp.glsl", cstr);
CMPProg cmpp(cstr.data());
cmpp.UseProgram();

//cmpp.Dispatch(1,1,16);
cmpp.Dispatch(bmp.W() ,bmp.H() ,1);
//glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT);
glMemoryBarrier(GL_ALL_BARRIER_BITS);
ssbo.Bind(Buffer::BIND_TARGET::COPY_READ_BUFFER);
bia = (unsigned int (*)[4288][2848][EC])ssbo.MapBuffer(Buffer::BIND_TARGET::COPY_READ_BUFFER,Buffer::MAP_FLAG::READ_WRITE);

ssbo.UnmapBuffer(Buffer::BIND_TARGET::COPY_READ_BUFFER);
ssbo.UnBind(Buffer::BIND_TARGET::COPY_READ_BUFFER);


相关文章推荐

compute shader 计算着色器

  • 2015年07月01日 20:14
  • 738KB
  • 下载

使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】

效果如图:关键代码及注释如下:C++ 代码void initialize() { // 计算着色器 GLuint compute_shader = buildShader( &compute_...

OpenGL深入探索——《OpenGL编程指南(原书第8版)》——计算着色器

转载自 《OpenGL编程指南(原书第8版)》——计算着色器 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊人的器件。过去,这种处理器主要被设计用于承担实时图形渲染中海...

《OpenGL编程指南(原书第8版)》——计算着色器

原文  http://www.csdn.net/article/2014-11-21/2822754 主题 OpenGL 数学 概述 由于图形处理器每秒能够进行数以亿计次的计...

OpenGL 着色器语言+源码

  • 2017年11月07日 11:51
  • 48B
  • 下载

【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器 The Graphics Processing Unit

这篇文章是解析计算机图形学界“九阴真经总纲”一般存在的《Real-TimeRendering 3rd》系列文章的第三篇。将带来RTR3第三章内容“Chapter 3 The Graphics Proc...
  • zhmxy555
  • zhmxy555
  • 2017年05月14日 15:26
  • 15365

Unity着色器和屏幕特效开发秘笈

  • 2016年09月10日 21:21
  • 3.5MB
  • 下载

【Unity Shaders】学习笔记之表面着色器(三)

一、表面着色器    1.1 简介   表面着色器代码直接在SubShader中编写,不需要使用Pass,编译器会将代码编译到合适的Pass中    1.2 标签    硬件将通过判...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算着色器
举报原因:
原因补充:

(最多只允许输入30个字)