From Wang Rui, "In the attached files I've added the Compute Shader support for OSG, as well as serializer updates and a new osgcomputeshaders example. My submission also include a setComputeGroups() function in Program for setting compute-shader work groups, and a bindToImageUnit() function in Texture for binding textures as image variables in shaders.
All code are tested on Windows 7 + NVIDIA GFX 570 with the latest GeForce 310.70 Driver (BETA), which could support OpenGL 4.3. Compute shader information can be found at "http://www.opengl.org/registry/specs/ARB/compute_shader.txt" "
This commit is contained in:
@@ -214,6 +214,9 @@ GL2Extensions::GL2Extensions(const GL2Extensions& rhs) : osg::Referenced()
|
||||
|
||||
// ARB_shader_atomic_counters
|
||||
_glGetActiveAtomicCounterBufferiv = rhs._glGetActiveAtomicCounterBufferiv;
|
||||
|
||||
// ARB_compute_shader
|
||||
_glDispatchCompute = rhs._glDispatchCompute;
|
||||
}
|
||||
|
||||
|
||||
@@ -399,6 +402,9 @@ void GL2Extensions::lowestCommonDenominator(const GL2Extensions& rhs)
|
||||
|
||||
// ARB_shader_atomic_counters
|
||||
if(!rhs._glGetActiveAtomicCounterBufferiv) _glGetActiveAtomicCounterBufferiv = 0;
|
||||
|
||||
// ARB_compute_shder
|
||||
if(!rhs._glDispatchCompute) _glDispatchCompute = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -589,6 +595,9 @@ void GL2Extensions::setupGL2Extensions(unsigned int contextID)
|
||||
// ARB_shader_atomic_counters
|
||||
_glGetActiveAtomicCounterBufferiv= 0;
|
||||
|
||||
// ARB_compute_shader
|
||||
_glDispatchCompute= 0;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -794,6 +803,9 @@ void GL2Extensions::setupGL2Extensions(unsigned int contextID)
|
||||
|
||||
// ARB_shader_atomic_counters
|
||||
setGLExtensionFuncPtr(_glGetActiveAtomicCounterBufferiv, "glGetActiveAtomicCounterBufferiv" );
|
||||
|
||||
// ARB_compute_shader
|
||||
setGLExtensionFuncPtr(_glDispatchCompute, "glDispatchCompute" );
|
||||
}
|
||||
|
||||
|
||||
@@ -2826,6 +2838,18 @@ void GL2Extensions::glGetActiveAtomicCounterBufferiv( GLuint program, GLuint buf
|
||||
}
|
||||
}
|
||||
|
||||
void GL2Extensions::glDispatchCompute( GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ ) const
|
||||
{
|
||||
if (_glDispatchCompute)
|
||||
{
|
||||
_glDispatchCompute( numGroupsX, numGroupsY, numGroupsZ );
|
||||
}
|
||||
else
|
||||
{
|
||||
NotSupported( "glDispatchCompute" );
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++-friendly convenience methods
|
||||
|
||||
|
||||
Reference in New Issue
Block a user