小编Sci*_*dix的帖子

读取Steam控制器覆盖并将其渲染到SteamVR中的VR场景

背景

使用Steam控制器时,您可以将触摸板配置为复杂的菜单,当您开始触摸它们时,这些菜单会显示在屏幕上.这些菜单对于具有许多控件的游戏非常方便.它们看起来像这样:

径向菜单 触摸菜单

但是,当在SteamVR中玩游戏时,这些叠加中没有一个出现在VR中.它们仅出现在与其一起呈现的桌面窗口上.

这是一个已知的错误或缺失的功能.我的目标是为它编写一个修复程序.但事实证明这很棘手.

我的问题

我知道如何在OpenVR/SteamVR中渲染叠加层.Valve的文档对我来说已经足够了.但我没有想出一个很好的方法来捕捉在游戏窗口顶部绘制的叠加层.

我脑子里有两个想法.但我不知道如何正确实施它们.

捕获叠加层

我对Steam Controller Overlay的技术细节一无所知.但是我认为它与Steam Overlay具有相同或非常相似的实现并不是一个错误的假设.

根据Steamworks API文档,Steam监听应用程序触发的Present/SwapBuffers调用并相应地刷新覆盖.(参见https://partner.steamgames.com/doc/api/ISteamUtils#BOverlayNeedsPresent)我的猜测是,Steam获取窗口的hWnd,用其DC创建一个OpenGL上下文,并在每次收到SwapBuffers时呈现给它打电话给它听.

但这就是故事的结局.我不知道如何真正阅读Steam在其上呈现的内容.我曾想过将自己挂钩到绘图消息队列中,Steam正在使用并捕获在绘制叠加层之前和之后窗口上呈现的内容.我还想过欺骗Steam认为一个带有绿色背景的不同窗口是它应该呈现的那个然后只是捕获它的内容.但这些只是对野外的猜测.我不知道如何实现这一点.

使用色度键控

选定按钮具有非常特定的平坦和不透明的蓝色调.我可以制作窗口的截图,然后只拍摄具有这种特定颜色的像素.缺点很明显.所有其他区域都是半透明的,因此不适合色度键控.抗锯齿文本也是如此.幸运的是,您可以更改图标及其颜色,如下图所示.所以这会有点工作,但它会非常难看.

有没有人对我的问题有更好的想法或解决方案?

在此输入图像描述

opengl window screen-capture steamworks-api openvr

7
推荐指数
0
解决办法
353
查看次数

清除Firefox字体缓存

注意:这与“ 如何重置CSS字体缓存”不是重复的内容, 请参阅我的问题底部

TL; DR

我正在寻找一种清除Firefox字体缓存的可靠方法,因为CTRL+ F5CTRL+ SHIFT+ R似乎都不起作用。

我的问题

我在服务器上使用了自定义字体(通过CSS):

@font-face {
    font-family: MySymbols;
    src: url(../fonts/MySymbols.woff);
}
Run Code Online (Sandbox Code Playgroud)

我最近在字体中添加了另一个符号(Unicode:21C5 /⇅)。

在Chrome下

它看起来应该像这张图中的两个箭头。屏幕截图来自Chrome,可以正确显示:

屏幕截图chrome

之后的两个“ u”用来证明我正在加载正确的字体。左边的使用MySymbols作为字体系列,右边的使用标准字体。

在Firefox下

现在,使用Firefox看起来像这样:

萤幕撷取画面

看起来Firefox仍在使用旧字体。正确显示了左侧的“ u”,但对于Firefox,箭头使用标准字体作为后备。

当我改变src: url(../fonts/MySymbols.woff);src: url(../fonts/MySymbols_something.woff);和重命名服务器上的字体文件相应火狐正确显示以下内容:

屏幕截图firefox新

当我改回两个名称时,Firefox再次使用错误的箭头显示上述图片,这非常令人沮丧。

我试图自己解决问题的方法

我知道以下线程:如何重置CSS字体缓存 而且,我已经完成了所有解决方案。他们都没有工作。我特别检查了以下内容:

  • 我尝试按CTRL+F5
  • 我尝试按CTRL+ SHIFT+ R(以前曾经工作过)
  • 我重新启动了Firefox,关闭了标签页,然后再次将其打开
  • 在我的系统目录中的任何位置都找不到该字体。我通过进行了检查sudo updatedb; locate MySymbols.woff,我自己还没有安装字体,所以我猜这个名字不是很常见
  • CSS是正确的,并且可以在Chrome中完美运行

可能会发生什么,还有什么要尝试的?

css firefox fonts

6
推荐指数
1
解决办法
1530
查看次数

contenteditable中无法访问的空列表项

当我在CONTENTEDITABLE div元素的例子创建一个有序列表类似下面我无法在Firefox访问空列表项.在Chrome中,它在功能方面起作用,但仍有一个小的缩进问题.

问题

考虑下面的例子.(也可以作为JSFIDDLE使用)在这里你可以看到我使用JavaScript创建了有序列表.每一行都成为一个列表项.第二个列表项为空,因为该行为空.我也使用自定义列表样式.

CSS

#editable ol {
    list-style-type: none;
}
#editable ol > li {
    counter-increment: customlistcounter;
}
#editable ol > li::before {
    content: counter(customlistcounter) " ";
}
#editable ol:first-child {
    counter-reset: customlistcounter;
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div class="editable" id="editable" contenteditable="true">first

third</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var editable = document.getElementById("editable");
editable.innerHTML = '<ol><li>'+editable.textContent.split("\n").join('</li><li>')+"</li></ol>";
Run Code Online (Sandbox Code Playgroud)

行为

在Firefox 48.0中

如果我将光标设置到第一行的末尾并使用键盘将光标向右移动,则光标会立即跳转到第三行.同样,如果将光标定位到第三行的开头,然后按左方向键将光标跳到第一线.此外,我无法使用鼠标将光标设置为第二行.

在Chromium 52.0中

与Firefox相比,我可以使用鼠标和键盘将光标设置为第二行.但是,光标插入符号出现在项目标记的前面而不是它后面.当我输入一个字符时,光标会跳到右侧.即使我再次删除该字符,它也会保持在右侧.

预期的行为

当我复制并使用JavaScript生成的HTML代码时(例如使用Firebug),删除JavaScript部分和自定义列表样式我最终使用以下代码(也可用作JSFIDDLE):

<div class="editable" id="editable" contenteditable="true"><ol><li>first</li><li></li><li>third</li></ol></div>
Run Code Online (Sandbox Code Playgroud)

这适用于Firefox和Chrome.您可以将光标设置为第二行,光标插入符号显示在右侧位置.CSS部分有其公平的问题.如果你不丢弃它,你可以通过鼠标和第一行的箭头键到达第二行,但不能从第三行到达.而你无法通过键盘从第二行到达第一行.

问题

为什么使用第一种方法不起作用?它不应该导致完全相同的行为?这是一个错误,未定义的行为还是我在这里遗漏了什么?另外,我该如何解决这个问题?我必须使用JavaScript在contenteditable div元素中创建内容.另外我想使用自定义列表样式.但我希望我的第二个例子中的行为,我可以编辑空的第二行.

更新

我第二次想到了这件事.由于纯HTML/CSS版本运行得更好,它可能是一个解析器问题.所以我在创建列表项时尝试了不同的方法.万一你好奇,以下也不起作用.这种行为与我的第一次尝试完全一样.

var editable = document.getElementById("editable");
var lines = editable.textContent.split("\n"); …
Run Code Online (Sandbox Code Playgroud)

html javascript contenteditable

5
推荐指数
1
解决办法
189
查看次数

Android NDK CMake使用C ++ 17

问题

我想在我的Android NDK项目中使用分解声明。因此clang需要用调用-std=c++17。目前,我的代码可以正确编译,但是Clang打印以下警告:

warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
Run Code Online (Sandbox Code Playgroud)

我所知道的和我想要的

在构建日志中,我发现它-std=...四次附加到构建标志:

[...]/bin/clang++ [...] -Wformat -Werror=format-security -std=c++11 -std=c++1z\
    -fexceptions -std=c++1z -Wall -O0 -fno-limit-debug-info  -fPIC\
    -std=gnu++11 -MD -MT [...]
Run Code Online (Sandbox Code Playgroud)

我知道第二个和第三个标志来自哪里(见下文)。我试图将它们更改为-std=c++17-std=c++1z但没有成功。

我猜以后的标记会覆盖以前的标记。所以我真的不在乎第一个。但是我不知道最后一个(-std=gnu++11)的来源以及如何停用或修改它。我也猜想它gnu++11不是c++11激活某些GNU扩展,导致我只得到警告而没有错误的情况。

但是我不能确定。不过,我想要“真正的” C ++ 17支持,而不仅仅是一些GNU扩展。我也想摆脱警告。

构建过程中涉及的文件

我的 gradle.build

cppFlags此处的切换是上述构建日志摘录中第二个标志的来源。我知道这里的某些版本已过时。但是我是从NDK示例存储库中获得的,而且我是Android编程的新手。我还在弄清楚事情是如何进行的。所以我现在还不在乎那部分。

apply plugin: 'com.android.application'

android {
    compileSdkVersion = 25

    defaultConfig {
        applicationId = 'com.example.stackoverflow'
        minSdkVersion 14
        targetSdkVersion  25
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_STL=c++_static'
                cppFlags …
Run Code Online (Sandbox Code Playgroud)

android cmake android-ndk clang++ c++17

5
推荐指数
1
解决办法
2727
查看次数

ANSI 转义码在行尾的奇怪行为

重现步骤

考虑以下 shell 命令:

echo -e "\e[41mTest\nTest2\e[0mTest3"
Run Code Online (Sandbox Code Playgroud)

Test在下一行打印并Test2带有红色背景(使用 ANSI 转义码)。Test2直接跟在Test3which is uncolored 之后。

行为

第一次执行此命令时,一切都按预期进行。但是输出不一致。大约 10-20 次调用后,第二行的末尾也变成红色。我首先在我的 C++ 应用程序中偶然发现了这一点。所以我认为它可能与bash无关。

发现后,我认为这可能是gnome-terminal. 然而,行为在xterm.

编辑

感谢 Geno Chen 的评论,我发现当终端用完行并且必须滚动时会发生这种情况。

截图

以下是上述问题的截图:

GNOME 终端

GNOME 终端

终端

终端

有问题的事情

虽然它使我的 C++ 应用程序中的事情有点不清楚,但它并不是一个交易破坏者。但是我想知道我的转义序列是否有问题,或者这是否是 shell 某些部分的错误。如果我可以做些什么来修复它或解决它。

bash shell xterm gnome-terminal

5
推荐指数
2
解决办法
649
查看次数