<div dir="ltr">Hi everyone,<div><br></div><div>I have a problem regardint integer textures. The setup is as follows:</div><div><br></div><div>A rtt camera uses custom fragment shaders to push data into 3 textures:</div><div><br></div><div>COLOR_BUFFER0: color buffer</div><div>COLOR_BUFFER1: rgb uint id buffer</div><div>DEPTH_BUFFER: depth buffer</div><div><br></div><div>The data inside those buffers is correct. However, I need the id buffer on the cpu, and can't get it to work. I create the id buffer as follows:</div><div><br></div><div><div>osg::ref_ptr<osg::Texture2D> TextureManager::create2DIdTexture()</div><div>{</div><div><span class="" style="white-space:pre">    </span>osg::ref_ptr<osg::Texture2D> idTex = new osg::Texture2D();</div><div><span class="" style="white-space:pre">   </span>idTex->setTextureSize(1, 1);</div><div><span class="" style="white-space:pre">    </span>idTex->setInternalFormat(GL_RGB32UI_EXT);</div><div><span class="" style="white-space:pre">       </span>idTex->setSourceFormat(GL_RGBA_INTEGER_EXT);</div><div><span class="" style="white-space:pre">    </span>idTex->setSourceType(GL_UNSIGNED_INT);</div><div><span class="" style="white-space:pre">  </span>idTex->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP);</div><div><span class="" style="white-space:pre">      </span>idTex->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP);</div><div><span class="" style="white-space:pre">      </span>idTex->setBorderWidth(0);</div><div><span class="" style="white-space:pre">       </span>idTex->setFilter(osg::Texture::MIN_FILTER, osg::Texture::NEAREST);</div><div><span class="" style="white-space:pre">      </span>idTex->setFilter(osg::Texture::MAG_FILTER, osg::Texture::NEAREST);</div><div><br></div><div><span class="" style="white-space:pre">     </span>return idTex;</div><div>}</div></div><div><ul><li>I have tried setting an image for the id buffer and attaching that one to the camera instead of the texture as in the osgprerender example, which results in opengl errors once I attach it to the camera. Image creation:</li></ul>m_idBuffer = TextureManager::get2DTexture(RttBufferType::Id);</div><div>osg::Image *img = new osg::Image();<br></div><div>img->allocateImage(m_idBuffer->getTextureWidth(), m_idBuffer->getTextureHeight(), 1, GL_RGB32UI_EXT, GL_UNSIGNED_INT);</div><div>m_idBuffer->setImage(img);<br><ul><li>Using a camera callback to read the image data, I also get opengl erros. To ensure that the correct texture is bound in the callback, I have deactivated the other two during my tests.</li></ul><div>void ReadBufferCallback::operator() (osg::RenderInfo& renderInfo) const</div><div>{</div><div><span class="" style="white-space:pre">   </span>osg::Image *img = new osg::Image;<br></div><div><span class="" style="white-space:pre">        </span>img->readPixels(0, 0, 1000, 1000, GL_RGB_INTEGER_EXT, GL_UNSIGNED_INT);<br></div><div>}<br></div></div><div><br></div><div>When I have tested doing the same with the color buffer, reading it back to the cpu works just fine with the method of osgprerender (attaching the image to the rtt camera instead of the texture).</div><div><br></div><div>Does someone know why I am getting these errors?</div><div><br></div><div>Regards,</div><div>Marianne</div></div>