Exemplo n.º 1
0
    QTestWindow() {
        setSurfaceType(QSurface::OpenGLSurface);

        QSurfaceFormat format;
        // Qt Quick may need a depth and stencil buffer. Always make sure these are available.
        format.setDepthBufferSize(16);
        format.setStencilBufferSize(8);
        format.setVersion(4, 3);
        format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
        format.setOption(QSurfaceFormat::DebugContext);
        format.setSwapInterval(0);

        setFormat(format);

        _qGlContext.setFormat(format);
        _qGlContext.create();

        show();
        makeCurrent();
        setupDebugLogger(this);

        gpu::Context::init<gpu::GLBackend>();
        _context = std::make_shared<gpu::Context>();
        
        auto shader = makeShader(unlit_vert, unlit_frag, gpu::Shader::BindingSet{});
        auto state = std::make_shared<gpu::State>();
        state->setMultisampleEnable(true);
        state->setDepthTest(gpu::State::DepthTest { true });
        _pipeline = gpu::Pipeline::create(shader, state);
        
        // Clear screen
        gpu::Batch batch;
        batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLORS, { 1.0, 0.0, 0.5, 1.0 });
        _context->render(batch);
        
        DependencyManager::set<GeometryCache>();
        DependencyManager::set<DeferredLightingEffect>();

        resize(QSize(800, 600));
        
        _time.start();
    }
Exemplo n.º 2
0
void TestWindow::initGl() {
    _glContext.makeCurrent(this);
    gpu::Context::init<gpu::gl::GLBackend>();
    _renderArgs->_context = std::make_shared<gpu::Context>();
    _glContext.makeCurrent(this);
    DependencyManager::set<GeometryCache>();
    DependencyManager::set<TextureCache>();
    DependencyManager::set<FramebufferCache>();
    DependencyManager::set<DeferredLightingEffect>();
    resize(QSize(800, 600));

    setupDebugLogger(this);
#ifdef DEFERRED_LIGHTING
    auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
    deferredLightingEffect->init();
    deferredLightingEffect->setGlobalLight(_light);
    initDeferredPipelines(*_shapePlumber);
    initStencilPipeline(_opaquePipeline);
#endif
}