Hi,

I am trying to get a minimal SSBO example running. I took a look at the osgSSBO 
example and tried to extract the required steps to upload a float array to the 
shader:


Code:

        osg::ref_ptr<osg::Geometry> fsQuad = 
osgDeferred::Util::createFullScreenQuad();
        fsQuad->getOrCreateStateSet()->setAttributeAndModes(
            osgDeferred::Util::loadProgram("assets/shader/FsQuad.vert",
                                           "assets/shader/SSBO.frag"));

        osg::ref_ptr<osg::ShaderStorageBufferObject> ssbo = new 
osg::ShaderStorageBufferObject();
        osg::ref_ptr<osg::FloatArray> data = new osg::FloatArray();
        data->push_back(1.0f);
        data->push_back(0.0f);
        data->push_back(0.0f);
        data->push_back(1.0f);

        data->setBufferObject(ssbo.get());
        // ssbo->addBufferData(data.get());

        osg::ref_ptr<osg::ShaderStorageBufferBinding> ssbb = new 
osg::ShaderStorageBufferBinding(0,
                ssbo.get(), 0, sizeof(GLfloat) * 4);
        fsQuad->getOrCreateStateSet()->setAttributeAndModes(ssbb.get())




SSBO.frag

Code:

#version 450 core

in vec2 vTexCoord;
out vec4 outColor;

layout(std430, binding = 0) coherent buffer ColorSSBO {
    vec4 color;
};

void main() {
        outColor = color;
        //outColor = vec4(1,0,0,1);
}




This code does not work, i.e. the screen is black and not red.
Looking at the OpenGL commands I see
glGenBuffers(1, [1])
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 1)

and repeating every frame:
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1, 0, 16);

But there is never any data uploaded.
Am I missing something? The osgSSBO example is running fine, at least I see a 
spinning ball of particles.

Thank you!

Cheers,
Marius[/code]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=66158#66158





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to