adapt examples for new BindImageTexture

This commit is contained in:
Julien Valentin
2018-01-02 18:15:25 +01:00
parent 8a84ee7660
commit f9b1c614bc
2 changed files with 14 additions and 5 deletions

View File

@@ -151,6 +151,7 @@
#include <osg/Image>
#include <osg/Texture>
#include <osg/TextureBuffer>
#include <osg/BindImageTexture>
#include <osg/BufferIndexBinding>
#include <osg/ComputeBoundsVisitor>
#include <osg/LightSource>
@@ -321,9 +322,9 @@ struct IndirectTarget
{
indirectCommandTextureBuffer = new osg::TextureBuffer(indirectCommands.get());
indirectCommandTextureBuffer->setInternalFormat( GL_R32I );
indirectCommandTextureBuffer->bindToImageUnit(index, osg::Texture::READ_WRITE);
indirectCommandTextureBuffer->setUnRefImageDataAfterApply(false);
indirectCommandImageBinding=new osg::BindImageTexture(index, indirectCommandTextureBuffer, osg::BindImageTexture::READ_WRITE, GL_R32I);
// add proper primitivesets to geometryAggregators
if( !useMultiDrawArraysIndirect ) // use glDrawArraysIndirect()
@@ -365,7 +366,8 @@ struct IndirectTarget
instanceTarget = new osg::TextureBuffer(instanceTargetImage);
instanceTarget->setInternalFormat( internalFormat );
instanceTarget->bindToImageUnit(OSGGPUCULL_MAXIMUM_INDIRECT_TARGET_NUMBER+index, osg::Texture::READ_WRITE);
instanceTargetimagebinding = new osg::BindImageTexture(OSGGPUCULL_MAXIMUM_INDIRECT_TARGET_NUMBER+index, instanceTarget, osg::BindImageTexture::READ_WRITE, internalFormat);
}
@@ -374,6 +376,7 @@ struct IndirectTarget
std::string uniformName = uniformNamePrefix + char( '0' + index );
osg::Uniform* uniform = new osg::Uniform(uniformName.c_str(), (int)index );
stateset->addUniform( uniform );
stateset->setAttribute(indirectCommandImageBinding);
stateset->setTextureAttribute( index, indirectCommandTextureBuffer.get() );
@@ -389,6 +392,8 @@ struct IndirectTarget
osg::Uniform* uniform = new osg::Uniform(uniformName.c_str(), (int)(OSGGPUCULL_MAXIMUM_INDIRECT_TARGET_NUMBER+index) );
stateset->addUniform( uniform );
stateset->setAttribute(instanceTargetimagebinding);
stateset->setTextureAttribute( OSGGPUCULL_MAXIMUM_INDIRECT_TARGET_NUMBER+index, instanceTarget.get() );
}
@@ -400,9 +405,11 @@ struct IndirectTarget
osg::ref_ptr< osg::DefaultIndirectCommandDrawArrays > indirectCommands;
osg::ref_ptr<osg::TextureBuffer> indirectCommandTextureBuffer;
osg::ref_ptr<osg::BindImageTexture> indirectCommandImageBinding;
osg::ref_ptr< AggregateGeometryVisitor > geometryAggregator;
osg::ref_ptr<osg::Program> drawProgram;
osg::ref_ptr< osg::TextureBuffer > instanceTarget;
osg::ref_ptr<osg::BindImageTexture> instanceTargetimagebinding;
unsigned int maxTargetQuantity;
};
@@ -1713,4 +1720,3 @@ int main( int argc, char **argv )
return viewer.run();
}