Hello Dirk, Hello Gerrit,
thank you, I will rework the texture part and see if the compute shader
works then.
I think in my case culling was not the problem, since the plane and the
compute node had the same transform, but I will keep that in mind as well.
Kind regards,
Marcel
Am 05.05.2014 13:44, schrieb Gerrit Voß:
> Hello,
>
> On Sun, 2014-05-04 at 15:33 +0200, Carsten Neumann wrote:
>> Hello Marcel,
>>
>> On 05/04/2014 02:34 PM, Marcel Weiler wrote:
>>> I am trying to use compute shaders in OpenSG but can't make them work.
>>> The compute shader should modify the texture of a plane, but it never
>>> gets activated.
>> do you mean there is no OpenGL call to launch the compute shader or is
>> the texture simply unchanged?
>>
>>> My current setup is as follows: I load the OSGContribComputeBase Library
>>> using OSG::preloadSharedObject("OSGContribComputeBase") Snippet before I
>>> call osgInit(argc, argv). Then I set up my scene. The root has two
>>> children: a node with a geometry core which consists of a plane with a
>>> texture (ChunkMaterial with MaterialChunk, TextureObjectChunk and
>>> TextureEnvChunk) and node with an AlgorithmComputeElement core which
>>> holds the compute shader. The compute shader setup looks as follows
>>> Snippet
>>>
>>> NodeRecPtr computeNode = Node::create();
>>> AlgorithmComputeElementRecPtr computeElement =
>>> AlgorithmComputeElement::create();
>>> ComputeShaderAlgorithmRecPtr computeAlgorithm =
>>> ComputeShaderAlgorithm::create();
>>> _comp = OSG::ComputeShaderChunk::create();
>>> _comp->addUniformVariable("destTex", (int)
>>> bottom_tex->getGLId());
>> This looks suspect. I haven't used compute shaders (through OpenSG or
>> otherwise), but normally texture uniforms are set to the texture unit
>> the texture is bound to, not the OpenGL id.
>> Shouldn't bottom_tex be added to MFTextureImages of computeAlgorithm
>> (this makes sure the texture is activated before executing the shader)?
>>
>> The id returned by getGLId() is _not_ an OpenGL object name, it is
>> simply an id OpenSG uses to access the actual OpenGL object on different
>> contexts. You can use that id together with a context (i.e. OSG::Window)
>> to get the "real" OpenGL object name (Window::getGLObjectId()).
> Carsten is right, it should be the texture image unit, I would guess 0
> in this case, the MFTextureImages index in general. One further note,
> as the compute node is part of the tree you have to make sure it is
> not culled away. Either put the compute node as a group above the
> plane / element you want to render (this is what
> Examples/CSM/NewShader/Compute does) or set the compute nodes BBox to
> inifite and static.
>
> kind regards
> gerrit
>
>
>
> ------------------------------------------------------------------------------
> Is your legacy SCM system holding you back? Join Perforce May 7 to find out:
> • 3 signs your SCM is hindering your productivity
> • Requirements for releasing software faster
> • Expert tips and advice for migrating your SCM now
> http://p.sf.net/sfu/perforce
> _______________________________________________
> Opensg-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensg-users
---
Diese E-Mail ist frei von Viren und Malware, denn der avast! Antivirus Schutz
ist aktiv.
http://www.avast.com
------------------------------------------------------------------------------
Is your legacy SCM system holding you back? Join Perforce May 7 to find out:
• 3 signs your SCM is hindering your productivity
• Requirements for releasing software faster
• Expert tips and advice for migrating your SCM now
http://p.sf.net/sfu/perforce
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users