小编Rot*_*tsi的帖子

Vulkan/VMA 更改缓冲区大小,类似于“realloc”

假设我遇到了一种情况,我想更改 vulkan 缓冲区 (VkBuffer) 的大小。例如,如果我想向现有顶点缓冲区添加更多顶点。我如何增大/缩小 VkBuffer?我是否会被迫创建一个新的缓冲区并放弃旧的缓冲区,或者是否有类似于 C 的功能realloc?它是否以 vulkan 扩展的形式存在?

此外,我正在使用 Vulkan 内存分配器 (VMA)。如果有这样的功能,我想要使用 VMA 和原始 vulkan 的两种解决方案realloc

c++ memory-management vulkan memory-reallocation

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

GLM 中的矩阵除法

我目前正在试验 OpenGL,我遇到了一种情况,我想找到 4x4 矩阵x,其中x * mat1 = mat2(列主要顺序,我认为。wherex * mat1意味着应用 中的转换mat1,然后x.)。

自然,我认为解决方案可能是x = mat2 / mat1,所以我用 glm 尝试了它。它奏效了!以下代码段将输出true.

glm::mat4 mat1 = glm::translate(glm::vec3{1,2,3});
glm::mat4 mat2 = glm::scale(glm::vec3{-1,-2,-3});

glm::mat4 x = mat2 / mat1;
std::cout << ((x * mat1) == mat2) << std::endl;
Run Code Online (Sandbox Code Playgroud)

但后来,我意识到了mat1 * x != x * mat1!这有什么意义?mat2 / mat1会模棱两可!我的除法解对找到 x 是否令人满意,或者有什么注意事项吗?(同样,我的目标是拥有x * mat1 = mat2

我也遇到了这个讨论:https : //math.stackexchange.com/questions/228229/is-division-of-matrices-possible?newreg=c7fd79a48ae54ed694af1ee5f4646af7

c++ linear-algebra glm-math

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

C++ `std::move` 自定义类型转换为 lambda 捕获

我有一个类,其中删除了复制赋值运算符和复制构造函数,只留下了移动赋值运算符和移动构造函数。例如:

struct Number {
  public:
  int *pNum;

  Number &operator=(const Number &rhs) = delete;
  Number(const Number &rhs) = delete;

  Number &operator=(Number &&rhs) {
    if (&rhs == this) {
      return *this;
    }

    pNum = rhs.pNum;
    rhs.pNum = nullptr;
    return *this;
  }

  Number() = default;

  Number(Number &&rhs) {
    *this = std::move(rhs);
  }

  ~Number() {
    delete pNum;
  }
};
Run Code Online (Sandbox Code Playgroud)

现在,我想使用std::move将这个类捕获到一个 lambda 中。例如:

int main() {
  std::function<int(int)> add;


  int a = 3;

  {

    Number n{};
    n.pNum = new int;
    *n.pNum = 5;

    add …
Run Code Online (Sandbox Code Playgroud)

c++ lambda

0
推荐指数
2
解决办法
104
查看次数