关于Vulkan API,"附件"是什么意思?我看到与渲染通道相关的单词(即:颜色附件).我对我认为它们的含义模糊不清,但我想听听专家的定义.
我是第一次进行图形编程,并决定从Vulkan开始直接进入深层.
我有一些使用某些版本的Google GTest框架的C++代码.此代码用于使用Visual Studio 2015进行编译.我刚刚升级到VS2017,现在我收到一堆这样的错误:
error C2039: 'tr1': is not a member of 'std'
error C3083: 'tr1': the symbol to the left of a '::' must be a type
Run Code Online (Sandbox Code Playgroud)
在VS2017中使用std :: tr1需要一些编译器选项吗?
根据此页面: https://matthewwellings.com/blog/the-new-vulkan-coefficient-system/
Vulkan 坐标系具有:
在我自己的测试中,我可以确认X轴和Y轴。然而,对我来说,-Z 指向屏幕,而不是+Z。我的意思是:
我相信链接页面胜过我自己的学习代码,所以我不确定为什么会出现这种效果。
我的场景由一个纹理四边形组成。这是我正在使用的代码:
C++
// No rotation
auto identMat = glm::mat4(1.0f);
auto rotAmount = 0.0f;
auto rotAxis = glm::vec3(0.0f, 0.0f, 1.0f);
mUBO.mModel = glm::rotate(identMat, rotAmount, rotAxis);
float eyeXPos = 0.0f;
float eyeYPos = 0.0f;
float eyeZPos = time * 1.0f;
auto eyePosition = glm::vec3(eyeXPos, eyeYPos, eyeZPos);
auto centerPosition = glm::vec3(0.0f, 0.0f, 0.0f);
auto upAxis = glm::vec3(0.0f, 1.0f, 0.0f);
mUBO.mView = glm::lookAt(eyePosition, centerPosition, upAxis); …Run Code Online (Sandbox Code Playgroud) 我没有正确理解如何在Vulkan中的单独线程上并行化工作.
要开始发布vkCmd*s,您需要开始渲染通道.开始渲染传递的调用需要对帧缓冲区的引用.但是,不保证vkAcquireNextImageKHR()以循环方式返回图像索引.因此,在三缓冲设置中,如果当前图像索引为0,我不能只绑定帧缓冲区1并开始为下一帧发出绘制调用,因为下一次调用vkAcquireNextImageKHR()可能会返回图像索引2.
记录命令的正确方法是什么,而不必提前指定帧缓冲区?
使用新的 C++ 协程,是否可以定义一个协程类,我可以使用它从函数中产生而不返回值?或者yield总是必须返回一些东西?我只对产生的功能感兴趣,而不是产生的值。
我要这个:
Coro Fn() {
if (...) co_yield;
co_return;
}
Run Code Online (Sandbox Code Playgroud)
不是这个:
Coro Fn() {
if (...) co_yield dummyValue;
co_return dymmyValue;
}
Run Code Online (Sandbox Code Playgroud) Vulkan 规范说:
解决附件
子通道附加点或图像视图,是子通道末尾相应颜色附件的多重采样解析操作的目标。
我可以获得关于“解决附件”的更多新手友好的描述吗?
MSVC 2019,v16.8.1
我正在尝试开始更改一些现有代码以使用模块。我的第一次尝试是采用现有的 DLL,将所有代码移至标头中,除了一个需要 cpp 的文件,以便编译器构建 dll(不会仅使用标头构建)。
我正在尝试遵循本教程:
Cameron DaCamara 的实用 C++20 模块以及 C++ 模块工具的未来
我的第一次尝试是改变一个#import声明。在 CPP 文件中:
改变:
#include "Some/Header.hpp"
到:
import "Some/Header.hpp";
我收到此错误:
错误 C7612:找不到“...../Some/Header.hpp”的标头单元
我已经尝试了所有版本的路径Some/Header.hpp,包括绝对路径,但编译器只是给出了相同的错误。
设置中是否还有另一个步骤来指示编译器在哪里查找标头?这是一个基于 CMake 的项目。
PS 目前,这个模块功能似乎有很多问题。当我开始使用这个import关键字时,IDE 就开始崩溃。
编辑:NVM,这个功能绝对没有完全成熟。刚刚尝试将另一个文件更改为模块,它开始抱怨一些不存在的错误。当我对其指向的代码进行更改时,只是为了进行实验,我得到了以下结果:
3>DevelopVision.ixx
3>..\..\..\Source\AppletGame\DevelopVision.ixx(323,1): fatal error C1001: Internal compiler error.
3>(compiler file 'msc1.cpp', line 1584)
3> To work around this problem, try simplifying or changing the program near the locations listed above.
3>If possible please provide a repro here: …Run Code Online (Sandbox Code Playgroud) C ++ 11
使用基于范围的for循环在属于类成员的std :: vector上迭代的代码是什么?我尝试了以下几种版本:
struct Thingy {
typedef std::vector<int> V;
V::iterator begin() {
return ids.begin();
}
V::iterator end() {
return ids.end();
}
private:
V ids;
};
// This give error in VS2013
auto t = new Thingy; // std::make_unique()
for (auto& i: t) {
// ...
}
// ERROR: error C3312: no callable 'begin' function found for type 'Thingy *'
// ERROR: error C3312: no callable 'end' function found for type 'Thingy *'
Run Code Online (Sandbox Code Playgroud) 这个问题可能会被问到,但我搜索到了,找不到答案.
我正在实现一个玩具虚拟机,其中OpCodes采用以下形式:
std::tuple<int8_t, int64_t, int64_t> // instruction op1, op2
Run Code Online (Sandbox Code Playgroud)
我正在尝试将一个double打包到其中一个操作数中,并在处理它时再次读回它.这不能可靠地工作.
double d = ...
auto a = static_cast<int64_t>(d);
auto b = static_cast<double>(a)
// sometimes, b != d
Run Code Online (Sandbox Code Playgroud)
有没有办法将double的位表示打包成int64_t,然后读取该位模式返回得到与之前完全相同的双精度数?
对于新的类似方案、依赖类型的语言“Pie”,我购买了该语言的姊妹书:The Little Typer ( http://thelittletyper.com/ )
我试图使用 DrRacket 来遵循代码,但是当我在书中键入代码时出现错误。
(cons 'ratatouille 'baguette)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:“无法确定类型”
由于这两个符号都是原子,那么对 cons 的调用不应该起作用吗?
此外,“+”函数是未定义的,即使对于数字也是如此。Pie有没有可以导入的前奏来提供这样的基本东西。