Hi, I am also researching this subject. Have you succeeded? Any hints about the meshelts buffer objects? Any other hints?
Thank you a bunch for any shared info! Nick On Wed, May 11, 2022 at 5:35 PM DC <[email protected]> wrote: > Thanks Werner! > This will certainly help me get started. > > Much appreciated, > DC > > On Wednesday, May 11, 2022 at 4:13:08 AM UTC-5 Werner Modenbach wrote: > >> Hi DC, >> >> here is the link: https://github.com/nvpro-samples/gl_vk_meshlet_cadscene >> This should help you with items 1) and 2) >> >> For item 3) see my code below. >> The way I assign the data structures in OSG is like that: >> >> // ---------------------- >> // Create Meshlet primitive // ---------------------- >> >> _geode->getOrCreateStateSet()->getOrCreateUniform(TASK_INVOCATIONS_PER_MESHLET, >> osg::Uniform::INT)->set(taskInvocationsPerMeshlet); >> >> osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry; >> >> osg::ref_ptr<osg::ProxyPrimitive> proxyPrimitive = new >> osg::ProxyPrimitive; >> >> proxyPrimitive->drawMeshTasks = new osg::DrawMeshTasks(0, >> workgroupsInGeometry * taskInvocationsPerMeshlet); >> >> geometry->setUseDisplayList(false); >> >> geometry->addPrimitiveSet(proxyPrimitive.get()); >> >> _geode->addChild(geometry); >> >> // ---------------------- >> // Vertices >> >> // ---------------------- >> >> osg::ref_ptr<osg::Vec4Array> osgVertices = new osg::Vec4Array(toCopy); >> >> for (auto i=0; i<toCopy; ++i) { // fill array // Fill buffer >> } >> >> // Create Buffer and Texture >> >> osg::ref_ptr<osg::VertexBufferObject> verticesBufferObject = new >> osg::VertexBufferObject(); >> >> verticesBufferObject->setUsage(GL_DYNAMIC_READ_ARB); >> >> osgVertices->setBufferObject(verticesBufferObject.get()); >> >> osg::ref_ptr<osg::TextureBuffer> vertexTexture = new >> osg::TextureBuffer(osgVertices.get()); >> >> vertexTexture->setInternalFormat(GL_RGBA32F_ARB); >> >> vertexTexture->setInternalFormatMode(Texture::USE_USER_DEFINED_FORMAT); >> >> stateSet->setTextureAttributeAndModes(MESH_VERTEX_ARRAY_TEXTURE_UNIT, >> vertexTexture.get()); >> >> // ---------------------- >> // MeshletInfos >> >> // ---------------------- >> >> osg::ref_ptr<Vec4uiArray> MeshletInfosArray = new >> Vec4uiArray(workgroupsInGeometry); >> >> int startVertex = 1; >> >> int anzahl = _anzahlVertices; >> >> for (auto i=0; i<workgroupsInGeometry; ++i) { >> >> (*MeshletInfosArray)[i][0] = startVertex; >> >> (*MeshletInfosArray)[i][1] = min(TS_WORKGROUP_SIZE, anzahl); >> >> startVertex += TS_WORKGROUP_STEP; >> >> anzahl -= TS_WORKGROUP_STEP; >> >> } >> >> // Create Buffer and Texture >> >> osg::ref_ptr<osg::VertexBufferObject> meshInfosBufferObject = new >> osg::VertexBufferObject(); >> >> meshInfosBufferObject->setUsage(GL_DYNAMIC_READ_ARB); >> >> MeshletInfosArray->setBufferObject(meshInfosBufferObject.get()); >> >> osg::ref_ptr<osg::TextureBuffer> meshInfosTexture = new >> osg::TextureBuffer(MeshletInfosArray.get()); >> >> meshInfosTexture->setInternalFormat(GL_RGBA32UI_EXT); >> >> >> meshInfosTexture->setInternalFormatMode(Texture::USE_USER_DEFINED_FORMAT); >> >> stateSet->setTextureAttributeAndModes(MESH_INFOS_ARRAY_TEXTURE_UNIT, >> meshInfosTexture.get()); >> >> >> // ---------------------- >> // Create and assign the Task- and Mesh shader as usual by using the >> corresponding shader type // ---------------------- >> >> >> Am 10.05.2022 um 21:20 schrieb DC: >> >> OK. Thank you. >> >> On Tuesday, May 10, 2022 at 12:59:37 PM UTC-5 Werner Modenbach wrote: >> >>> Hi DC, >>> I think we should clarify some aspects before going into the details. If >>> I understand well, your problem can be split into 3 parts >>> 1) You want to convert an existing model into meshlets. This is not >>> related to OSG. But I found a git repository from NVIDIA doing this job. I >>> will lookup the link and send it to you tomorrow. >>> 2) For this to work you need task/mesh shaders doing their job on the >>> GPU. This is also not related to OSG. Maybe you find some starting point in >>> the repository as well. >>> 3) You need to know how to load your shader and how to setup the data >>> structures in OSG. I hope I can help you with that by providing some code >>> snippets. >>> Just let me know when you are ready for that step. But the code I >>> provided already should help you. >>> Werner >>> >> -- > You received this message because you are subscribed to the Google Groups > "OpenSceneGraph Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/osg-users/7680959c-297e-41ff-9159-464b38c8df73n%40googlegroups.com > <https://groups.google.com/d/msgid/osg-users/7680959c-297e-41ff-9159-464b38c8df73n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- trajce nikolov nick -- You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/CAO-%2Bzine4AtqdBor-0XH-fE1aCr4_%3DocD73OFErsf%2Bh-kDFgBg%40mail.gmail.com.
