簡體   English   中英

計算着色器未寫入緩沖區

[英]Compute Shader not writing to buffer

我正在尋找使用QOpenGLFunctions_4_3_Core OpenGL函數從Qt調用計算着色器的幫助。

具體來說,我對glDispatchCompute(1024, 1, 1);調用glDispatchCompute(1024, 1, 1); 似乎對綁定到它的緩沖區沒有任何影響。 如何在QT中將緩沖區綁定到計算着色器,以便可以將着色器的結果讀回到C ++

我創建了程序並將其與( Squircle.cpp )綁定:

    computeProgram_ = new QOpenGLShaderProgram();
    computeProgram_->addShaderFromSourceFile(QOpenGLShader::Compute, "../app/shaders/pointcloud.comp");
    computeProgram_->bindAttributeLocation("Particles", 0);
    m_ParticlesLoc = 0;

    computeProgram_->link();

然后將我的QOpenGLBuffer與( Squircle.cpp )綁定:

    // Setup our vertex buffer object.
    pointOpenGLBuffer_.create();
    pointOpenGLBuffer_.bind();
    pointOpenGLBuffer_.allocate(pointBuffer_.data(), pointBuffer_.vertexCount() * pointBuffer_.stride_);

然后,我使用( Squircle.cpp )調用計算着色器:

computeProgram_->bind();

// ... 

pointOpenGLBuffer_.bind();

glDispatchCompute(1024, 1, 1);

但是,當我使用read()map() 'ing讀取緩沖區時,值永遠不會改變,它們就是我最初插入的值。

從計算着色器的角度來看,我接受( pointcloud.comp )的輸入:

#version 430

layout(local_size_x = 1024) in;

struct ParticleData
{
    vec4 position;
};

// Particles from previous frame
layout (std430, binding = 0) coherent buffer Particles
{
    ParticleData particles[];
} data;

我可能沒有正確綁定緩沖區嗎? 還是有另一個OpenGL命令要調用以實際調度計算? 我嘗試了不同的用法,等等。

我已經在這里發布了所有相關代碼。

似乎問題出在對緩沖區綁定的理解不正確。

pointOpenGLBuffer_.bind(); 

僅將您的緩沖區綁定到OGL上下文,而不綁定到着色器緩沖區,兩次調用都不會成功。

第二次而不是僅僅綁定,您需要致電

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, pointOpenGLBuffer_.bufferId());

其中0來自您的布局(std430,綁定= 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM