sensics / OSVR-RenderManager

Apache License 2.0
64 stars 45 forks source link

RenderManager keeps failing when calling RegisterRenderBuffers #147

Closed Findus79 closed 8 years ago

Findus79 commented 8 years ago

Hi,

I am using the current version of OSVR SDK (Installer version). My project works when using the RenderManager callback mechanism. Now I wanted to implement it without using the callbacks, but the renderer keeps failing when calling RegisterRenderBuffers(...)

The color buffers themselves seem to be ok. Here's the code:

    GLuint framebuffer;
    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

    for (const auto& ri : renderinfo)
    {
        GLuint color_buffer_name = 0;
        glGenRenderbuffers(1, &color_buffer_name);
        std::cout << "create color renderbuffer #" << color_buffer_name << std::endl;
        osvr::renderkit::RenderBuffer rb;
        rb.OpenGL = new osvr::renderkit::RenderBufferOpenGL;
        rb.OpenGL->colorBufferName = color_buffer_name;
        color_buffers.push_back(rb);

        glBindTexture(GL_TEXTURE_2D, color_buffer_name);
        int width = static_cast<int>(ri.viewport.width);
        int height = static_cast<int>(ri.viewport.height);

        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr );

        GLuint depthrenderbuffer = 0;
        glGenRenderbuffers(1, &depthrenderbuffer);
        glBindRenderbuffer(GL_RENDERBUFFER, depthrenderbuffer);
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
        depth_buffers.push_back(depthrenderbuffer);
    }

    if (!m_Renderer->RegisterRenderBuffers(color_buffers))
    {
        std::cout << "RegisterRenderBuffers failed" << std::endl;
        return;
    }

This is the output: create color renderbuffer # 1 create color renderbuffer # 3 RenderManagerD3D11OpenGL::RegisterRenderBuffers: Can't get Color buffer handle ( error 3221684334) (Unexpected error code)

My Specs: gtx970, windows 7 pro, nvidia driver 365.19, oculus sdk 0.8, osvr sdk 0.6.1204-g6cc9262 (64 bit)

I tried writing my own toolkit based on glfw instead of SDL2, but that did not make a difference.

thanks for any help :) Andi

russell-taylor commented 8 years ago

There are example programs at https://github.com/sensics/OSVR-RenderManager/tree/master/examples that use OpenGL with the Present interface. In particular, see if https://github.com/sensics/OSVR-RenderManager/blob/master/examples/RenderManagerOpenGLPresentExample.cpp runs on your configuration. If not, please re-open this issue. If so, it should provide info on how to use the interface in this mode -- it may be making calls differently than your code is.