You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGL计算着色器无法更新共享缓冲区粒子顶点数据问题求助

问题根源

你的代码存在两个核心错误导致计算着色器未正常执行:

  • 计算着色器未被附着到着色器程序:Shader类的构造逻辑中,仅完成了计算着色器的编译,没有调用glAttachShader将其附着到最终的着色器程序上,链接阶段完全没有包含计算着色器逻辑,自然不会执行粒子更新。
  • OpenGL上下文版本过低:GLFW初始化时指定的OpenGL 3.3版本不支持计算着色器,计算着色器是OpenGL 4.3才加入的核心特性。

修复步骤

  1. 修正Shader类的计算着色器附着逻辑,在编译完成后将其附着到程序:
// 原Shader构造函数内的计算着色器处理逻辑
if(computePath != ""){
    std::string computeCode = loadSourceCode(computePath);
    compute = compileShaderCode("COMPUTE", computeCode);
    glAttachShader(ID, compute); // 新增这行代码
}

注意:这行代码必须放在glLinkProgram(ID)调用之前

  1. 修改GLFW初始化的OpenGL版本配置,改为4.3:
// 替换原来的3.3版本配置
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

可选优化

你当前的粒子位置每帧累加0.01,很快会超出OpenGL裁剪空间的[-1,1]范围导致粒子消失,可在计算着色器中添加边界回绕逻辑:

// 计算着色器main函数内修改
particles[i].pos += vec2(0.01, 0.0);
if(particles[i].pos.x > 1.0) particles[i].pos.x = -1.0;

内容的提问来源于stack exchange,提问作者Frank Weslien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:06:02