小编pla*_*cel的帖子

uint32_t值对的交换哈希函数

我需要创建一个对的唯一标识符的快速,简单的哈希函数uint32_t值-因此对于相同的散列值(2,7)(7,2).

任何的想法?

c++ algorithm hash uint32

8
推荐指数
1
解决办法
1444
查看次数

为什么人们不使用四面体作为天空盒?

在3D游戏中渲染具有固定纹理的天空时,人们通常首先在立方体贴图中创建6个纹理,然后在相机周围渲染立方体.在GLSL中,您可以使用法线而不是纹理坐标访问纹理中的像素,并且可以通过相对于相机标注片段位置来轻松获得此法线.但是,此过程可以使用围绕相机的任何形状来完成,因为当您对每个位置进行标准化时,它将始终产生一个球体.现在我想知道:为什么它总是一个立方体而不是四面体?渲染一个立方体需要12个三角形,一个四面体只有4个.正如我已经说过的,围绕相机的任何形状都可以工作.因此,四面体占用较少的VRAM并且渲染速度更快,没有任何缺点?为什么不使用它们?

opengl 3d graphics glsl skybox

8
推荐指数
2
解决办法
982
查看次数

寻找constexpr ceil功能

由于std:ceil是非constexpr既不在Visual Studio 2015年,我正在寻找一个constexpr它的实现,我可以使用编译时间-收效甚微.

任何帮助表示赞赏.

c++ visual-c++ constexpr c++11

8
推荐指数
3
解决办法
2874
查看次数

生成随机布尔值

我目前正在用C++ 实现Eller算法,一个小细节让我对迷宫的随机性感到烦恼.

到目前为止,我使用以下代码生成随机bool:

bool randomBool()
{
    return 0 + (rand() % (1 - 0 + 1)) == 1;
}

// In main.cpp

time_t seconds;
time(&seconds);
srand((unsigned int) seconds);
Run Code Online (Sandbox Code Playgroud)

但经过调试,我经常看到重复truefalse生成,有时连续多达30次.

这个算法是真正随机的还是在C++中有更好的方法?

c++ random boolean

8
推荐指数
1
解决办法
7291
查看次数

将LLVM Clang 4.xx/5.xx/6.xx集成到Visual Studio 2017中

用于Windows官方LLVM 4.0版本与Visual Studio集成到Visual Studio 2015.不幸的是它仍然不支持Visual Studio 2017.

当您尝试将项目的平台工具集设置为时LLVM-vs2014,会弹出错误.

你知道有什么方法让它起作用吗?


更新

在2018年,LLVM 6.0官方仍然不支持与Visual Studio 2017(版本15.XX)集成,仅支持Visual Studio 2015(版本14.XX)工具集.

msbuild llvm visual-studio llvm-clang visual-studio-2017

8
推荐指数
2
解决办法
1万
查看次数

如何反转__m128类型变量?

我知道这应该是一个谷歌搜索问题,但我找不到答案.

说我有一个__m128变量a,其内容是a[0],a[1],a[2],a[3].有没有一种单一的,可以扭转它是功能a[3],a[2],a[1],a[0]

c c++ x86 sse simd

7
推荐指数
1
解决办法
1475
查看次数

如何将 _mm_shuffle_ps SSE 内在转换为 NEON 内在?

我正在尝试将用 SSE 编写的代码转换为 NEON SIMD,但由于_mm_shuffle_psSSE 内在特性而卡住了。这是代码:

b = _mm_shuffle_ps(a, b, 136);
Run Code Online (Sandbox Code Playgroud)

a, b,c都是__m128寄存器。

现在我想用NEON来实现同样的功能。假设有 3 个float32x4_t向量:x, y, z。我想把 的第一和第三车道分别分配给x第一和第二车道z,并将第一和第三车道分别分配给y第三和第四车道z

我找不到实现该功能的有效方法,需要一些帮助。

arm sse simd neon

7
推荐指数
1
解决办法
1517
查看次数

如何使用SSE执行uint32/float转换?

在SSE中有一个函数_mm_cvtepi32_ps(__m128i input),它接受32位宽的有符号整数(int32_t)的输入向量并将它们转换为floats.

现在,我想将输入整数解释为未签名.但是没有功能_mm_cvtepu32_ps,我找不到一个实现.你知道我在哪里可以找到这样的功能,或者至少对实现有所暗示吗?为了说明结果的差异:

unsigned int a = 2480160505; // 10010011 11010100 00111110 11111001   
float a1 = a; // 01001111 00010011 11010100 00111111;  
float a2 = (signed int)a; // 11001110 11011000 01010111 10000010
Run Code Online (Sandbox Code Playgroud)

c x86 sse simd

7
推荐指数
2
解决办法
2057
查看次数

静态在实例化时断言模板类型的大小

我想在实例化时检查以下结构的大小,static_assert以约束未命名struct的紧密包装,因此大小A相当于sizeof(T) * 3.

template <typename T>
struct A
{
   union
   {
      struct { T a, b, c; };
      T arr[3];
   };
};
Run Code Online (Sandbox Code Playgroud)

这可以用

static_assert(sizeof(A<T>) == sizeof(T) * 3, "hey something went wrong");
Run Code Online (Sandbox Code Playgroud)

然而

  • 因为A<T>在其类定义中仍然是一个不完整的类型,所以将上述内容static_assert放入类定义中是不可取的

  • static_assertwith sizeof不评估所有编译器(如Clang)中未实例化的函数内部,因此将其放入虚拟成员函数不是一种选择

  • 放入static_assert构造函数或析构函数将是一个解决方案,但在上面的示例中不存在用户定义的构造函数(考虑聚合),进一步想象多个构造函数的情况,我将避免在所有构造函数中执行断言

  • 继承A自另一个结构,并static_assert在定义中执行A将是一个解决方案,但我想保持结构简单,而不会搞乱辅助结构

我失踪的任何其他解决方案?

我决定取消删除这个问题,并在将来为可能的解决方案保持开放.

c++ templates static-assert

7
推荐指数
1
解决办法
531
查看次数

Vulkan中的描述符集计数歧义

我想在vulkan中绘制两个对象.为此,我按照为每个模型创建两个不同描述符集的过程进行操作.但是,我对指定所需描述符集计数的结构感到困惑.困扰我的要点如下:

  1. VkDescriptorSetLayoutBinding指定描述符计数

    VkDescriptorSetLayoutBinding stagingLayoutBinding = {};
    ...
    stagingLayoutBinding.descriptorCount = 1;   <- i have one mat4 element for each descriptors 
    
    Run Code Online (Sandbox Code Playgroud)
  2. VkDescriptorPoolSize指定描述符计数

    VkDescriptorPoolSize stagingPoolSize = {};
    ...
    stagingPoolSize.descriptorCount = static_cast<uint32_t>(model.size());  <- allocate two descriptor sets from one descriptor pool
    
    Run Code Online (Sandbox Code Playgroud)
  3. VkDescriptorPoolCreateInfo中指定最大值集

    VkDescriptorPoolCreateInfo poolInfo = {};
    ...
    poolInfo.maxSets = model.size();   <- max descriptor sets = 2
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后在VkDescriptorSetAllocateInfo中指定描述符集创建

    VkDescriptorSetAllocateInfo allocInfo = {};
    ...
    allocInfo.descriptorSetCount = static_cast<uint32_t>(model.size());
    
    Run Code Online (Sandbox Code Playgroud)

但是,抛出异常vkAllocateDescriptorSets(device, &allocInfo, descriptorSet.data())并且验证层中的调试消息如下: -

validation Layer: Object: 0xcccccccccccccccc (Type …
Run Code Online (Sandbox Code Playgroud)

c++ 3d graphics vulkan

7
推荐指数
1
解决办法
428
查看次数