Beispiel #1
0
void UiRenderer::render(Renderer &renderer) {
    glDepthMask(GL_FALSE);
    renderHand(renderer);
    int vpWidth, vpHeight;
    renderer.getViewport()->getSize(&vpWidth, &vpHeight);
    Camera camera;
    camera.setOrthographic();
    camera.setBounds(0, vpWidth, 0, vpHeight);
    Matrix4f crosshairMtx;
    crosshairMtx.translate(Vector3f(vpWidth/2, vpHeight/2, -10));
    crosshairMtx.scale(Vector3f(80, 80, 1));
    Matrix4f widget;
    widget.translate(Vector3f(vpWidth/2+12, vpHeight-20, -2));
    widget.scale(Vector3f(380, 80, 1));

    const Mesh &mesh = MeshLoader::getMesh("GUIElement.obj");
    const Material &mat = MaterialLoader::fromTexture("Reticle.png");

    Shader &sh = ShaderLoader::getShader("unshaded.frag");
    renderer.renderMesh(camera, sh, crosshairMtx, mesh, mat);

    // Title
    renderer.setFont("Pacaya", 1.5f);
    renderer.renderText(camera, "GlPortal", Vector3f(25, vpHeight - 75, -20));

    // FPS counter
    renderer.setFont("Pacaya", 0.5f);
    renderer.renderText(camera,
                        std::string("FPS: ") + std::to_string(Game::fps.getFps()),
                        Vector3f(10, vpHeight - 25, -20));
    if (renderer.getScene()->screen->enabled) {
        renderScreen(renderer);
    }
    glDepthMask(GL_TRUE);
}
void ViveControllerManager::updateRendering(RenderArgs* args, render::ScenePointer scene, render::PendingChanges pendingChanges) {
    PerformanceTimer perfTimer("ViveControllerManager::updateRendering");

    if (_modelLoaded) {
        //auto controllerPayload = new render::Payload<ViveControllerManager>(this);
        //auto controllerPayloadPointer = ViveControllerManager::PayloadPointer(controllerPayload);
        //if (_leftHandRenderID == 0) {
        //    _leftHandRenderID = scene->allocateID();
        //    pendingChanges.resetItem(_leftHandRenderID, controllerPayloadPointer);
        //}
        //pendingChanges.updateItem(_leftHandRenderID, );


        UserInputMapper::PoseValue leftHand = _poseStateMap[makeInput(JointChannel::LEFT_HAND).getChannel()];
        UserInputMapper::PoseValue rightHand = _poseStateMap[makeInput(JointChannel::RIGHT_HAND).getChannel()];

        gpu::Batch batch;
        auto geometryCache = DependencyManager::get<GeometryCache>();
        geometryCache->useSimpleDrawPipeline(batch);
        DependencyManager::get<DeferredLightingEffect>()->bindSimpleProgram(batch, true);

        auto mesh = _modelGeometry.getMesh();
        batch.setInputFormat(mesh->getVertexFormat());
        //batch._glBindTexture(GL_TEXTURE_2D, _uexture);

        if (leftHand.isValid()) {
            renderHand(leftHand, batch, LEFT_HAND);
        }
        if (rightHand.isValid()) {
            renderHand(rightHand, batch, RIGHT_HAND);
        }

        args->_context->syncCache();
        args->_context->render(batch);
    }
}