我有以下 C++ 代码:
#include <array>
#include <iostream>
typedef unsigned char uchar;
class A {
public:
template <size_t N, uchar value>
static inline constexpr std::array<uchar, N> filledArray() {
std::array<uchar,N> ret{};
ret.fill(value);
return ret;
}
std::array<uchar, 5> upper = A::filledArray<5, 'A'>();
};
int main() {
A blah;
for (int i = 0; i < 5; ++i)
std::cout << blah.upper[i] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g++ 编译它时没有警告,并且输出为 As,正如预期的那样。但 clang++-4.0 产生:
clang++-4.0 -std=c++14 main.cpp -o clangOut
main.cpp:9:47: warning: inline function 'A::filledArray<5, 'A'>' is not …Run Code Online (Sandbox Code Playgroud) 我的问题很简短:是否可以读取由 WebGL2 中的 WebGPU 创建的纹理或帧缓冲区?如果可以,如何读取?
我用谷歌搜索,我发现的唯一的就是这个错误:https://bugs.chromium.org/p/chromium/issues/detail? id=1200466,但我不能说,我完全理解它,或者文档在哪里。
总体目标是在 WebGPU 中创建渲染引擎,将其复制到 WebGL 纹理,并在为 WebAssembly 编译的 QML 应用程序中使用它。QML 尚不支持 WebGPU,目前还不清楚何时支持。
我有一些非常简单的基准测试,通过 Catch2 运行,并使用 -O3 进行编译emscripten 3.1.37:
BENCHMARK("cpp sin only")
{
double sum = 1.0;
for (int t = 0; t < 2000000; ++t) {
sum += sin(double(t));
}
return sum;
};
#ifdef __EMSCRIPTEN__
BENCHMARK("js sin only")
{
EM_ASM_DOUBLE({
let sum = 1;
for (let i = 0; i < 2000000; i++) {
sum = sum + Math.sin(i);
}
return sum;
});
};
#endif
Run Code Online (Sandbox Code Playgroud)
我预计 JavaScript 和 WebAssembly 之间不会有太大差异,但有:
chrome:
benchmark name samples iterations est run time
mean low …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <iostream>
using namespace std;
int main()
{
int a = 0x80000000;
if(a == 0x80000000)
a = 42;
cout << "Hello World! :: " << a << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
Hello World! :: 42
Run Code Online (Sandbox Code Playgroud)
所以比较有效.但是编译器告诉我
g++ -c -pipe -g -Wall -W -fPIE -I../untitled -I. -I../bin/Qt/5.4/gcc_64/mkspecs/linux-g++ -o main.o ../untitled/main.cpp
../untitled/main.cpp: In function 'int main()':
../untitled/main.cpp:8:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(a == 0x80000000)
^
Run Code Online (Sandbox Code Playgroud)
所以问题是:为什么0x80000000是unsigned int?我可以以某种方式签名以摆脱警告吗?
据我所知,0x80000000将是INT_MIN,因为它超出正整数的范围.但为什么编译器会假设我想要一个正数?
我正在使用linux上的gcc版本4.8.1 20130909进行编译.