如何在Qt中创建“代理”openGL纹理?

时间:2015-07-02 08:37:35

标签: c++ qt opengl

我正在将应用程序移植到Qt,并且遇到了Siphon框架(http://syphon.v002.info/)的集成问题,该框架用于通过GPU在应用程序之间共享视频流(仅限Mac OS X)。

可以使用Siphon的两个C ++实现,一个用于Cinder(github / astellato / Cinder-Siphon),另一个用于openFrameworks(github / astellato / ofxSyphon)。我从Cinder实现开始(两者都很相似)并试图将它移植到Qt但是我找不到使用已经创建的纹理创建QOpenGlTexture的方法。

以下是来自Cinder-Siphon的代码,我正试图开始工作(文件syphonClient.mm):

void syphonClient::bind()
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    if(bSetup)
    {
        [(SyphonNameboundClient*)mClient lockClient];
        SyphonClient *client = [(SyphonNameboundClient*)mClient client];

        latestImage = [client newFrameImageForContext:CGLGetCurrentContext()];
        NSSize texSize = [(SyphonImage*)latestImage textureSize];
        GLuint m_id = [(SyphonImage*)latestImage textureName];

        mTex = ci::gl::Texture::create(GL_TEXTURE_RECTANGLE_ARB, m_id,
                               texSize.width, texSize.height, true);
        mTex->setFlipped();

        mTex->bind();
    } 
    else
        std::cout<<"syphonClient is not setup, or is not properly connected to server.  Cannot bind.\n";

    [pool drain];
}

在我写的Qt版本中,mTex的类型为QOpenGlTexture,但我找不到等效的mTex = ci::gl::Texture::create(GL_TEXTURE_RECTANGLE_ARB, m_id, texSize.width, texSize.height, true);,即创建QOpenGLTexture使用现有纹理ID而无需再次分配存储。

我是否错过了Qt OpenGL API中的某些内容,或者它是不可能的?如果不是,我想我将不得不使用直接的OpenGL调用或拉入整个Cinder OpenGL API?

0 个答案:

没有答案