小编Moo*_*oys的帖子

如何在无头 GPU 上枚举和使用 OpenGL?

尽管进行了数天的研究,但我似乎找不到一种可靠的方法来在辅助 GPU 上以编程方式创建 GL[ES] 上下文。例如,在我的笔记本电脑上,我有英特尔 GPU 驱动面板,还有一个辅助 NVIDIA 卡没有连接到任何东西。 optirunprimusrun让我在NVIDIA显卡上运行,但我无法检测到英特尔GPU。我也不想要求更改 xorg.conf 来添加虚拟显示。

我尝试了许多扩展,但似乎没有一个可以正常工作:

  • glXEnumerateVideoDevicesNV 返回 0 个设备。
  • eglQueryDevicesEXT 返回 0 个设备。
  • eglGetPlatformDisplay 仅适用于主面板并为我提供英特尔上下文

我很乐意弄脏我的手,例如滚动我自己的装载机,但我似乎找不到任何关于从哪里开始的文档。我已经查看了源代码,optirun但它似乎只是在进行重定向。显然,相当于 Windows 的东西IDXGIFactory::EnumAdapters是理想的,但我对任何不需要额外系统配置的东西都很好。

linux x11 opengl

6
推荐指数
0
解决办法
377
查看次数

std :: tuple带有move-constructable元素的默认构造函数

我试图返回一个std::tuple包含不可复制构造类型的元素的。这似乎阻止了我使用默认的类构造函数构造元组。例如,要返回一个包含的元组Foofoo必须创建一个实例并创建std::moved:

class Foo {
  public:
    Foo(const Foo&) = delete;
    Foo(Foo&&) = default;
    int x;
};

tuple<int, Foo> MakeFoo() {
    Foo foo{37};
//  return {42, {37}}; // error: could not convert ‘{42, {37}}’ from ‘’ to ‘std::tuple’
    return {42, std::move(foo)};
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果将类定义为具有副本构造函数,则元组的构造可以正常工作:

class Bar {
  public:
    Bar(const Bar&) = default;
    int x;
};

tuple<int, Bar> MakeBar() {
    return {42, {37}}; // compiles ok
}
Run Code Online (Sandbox Code Playgroud)

有没有办法MakeBarFoo类中使用语法?

c++ stdtuple c++17

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

测试未定义的行为

是否可以在仅C ++语言的范围内编写测试,以隔离并检测执行时未定义的行为?例如,给出以下代码:

void fn(int* p) {
  int x = *p;
}

void foo() {
  int x = 42;
  fn(&x);
}

void bar() {
  fn(nullptr);
}
Run Code Online (Sandbox Code Playgroud)

是否有可能构造一个测试,该测试调用foobar,并为进行“通过”,foo但为进行“失败” bar?我的假设是不可能的,因为调用bar本身就意味着编译器可以自由生成始终通过,始终失败,仅在星期二失败或仅在无休止的循环中打印“感谢所有鱼”的代码。我还是想得到专家的确认,就是这种情况。

注意:我知道clang的ubsan,静态分析工具和特定于平台的陷阱等信息可以帮助检测UB,但是我的问题仅限于C ++语言。

c++ testing undefined-behavior

4
推荐指数
2
解决办法
115
查看次数

抑制 Gitignore 警告

我的文件中定义了各种分散的路径和文件.gitignore。我典型的工作流程模式之一是导航到某个路径,然后执行git add *该路径下的所有更改。然而,当我这样做时,有时会收到警告:“以下路径被您的 .gitignore 文件之一忽略:...”

这些路径旨在被忽略。有没有办法 A) 在运行时抑制此警告git add *,或 B) 使用不同的 git 命令,该命令不会触发它,但具有相同的行为并且同样简洁?

git

3
推荐指数
1
解决办法
1671
查看次数

将wostringstream转换为wchar_t*Garbles值

我正在尝试生成一个字符串并将其分配给一个字符串,wchar_t*但是当我去分配字符串时似乎正在填充字符串.这是一个简化的复制品:

wostringstream woss;
woss << L"Test String";

// A: this doesn't work:
const wchar_t* foo = woss.str().c_str();
wcout << foo << endl; // "????????????????????????"

// B: this works:
wstring bar = woss.str();
const wchar_t* foo = foo.c_str();
wcout << foo << endl; // "Test String"

// C: this also works!?:
const wchar_t* foo = woss.str().c_str();
wstring bar = woss.str();
wcout << foo << endl; // "Test String"
Run Code Online (Sandbox Code Playgroud)

当我一次完成转换时(如在A中),指向的结果值foo是一堆0xFEEE字符.如果我一步一步地做(如在B中),字符串最终会很好.最奇怪的是,如果分配之后,我评估 …

c++ string unicode

0
推荐指数
1
解决办法
591
查看次数

标签 统计

c++ ×3

c++17 ×1

git ×1

linux ×1

opengl ×1

stdtuple ×1

string ×1

testing ×1

undefined-behavior ×1

unicode ×1

x11 ×1