Category Archives: 屠龙之技

Not that useful techniques.

现代C++神器之variant

看过这两年的Cppcon都应该对variant印象深刻。说起来这个玩意也不算新,2002年就已经有了boost::variant。 说到variant就得提起enum和union。union对非C系编程者可能有点陌生。按照当代角度,enum和union很大一部分作用在于缩减定义域。举例如下: 这里用OneTwoTree限制了相关领域的类型范围,比如说调用foo(4)时编译器就会报错。

Posted in 屠龙之技 | Tagged | Leave a comment

现代C++神器之comma operator

comma operator也就是逗号。常见的用法不过是以下几种: 这能有什么独特技巧?接着探索: 第三行已经有点模糊,展开会比较清晰: 重点来了,第四行会发生什么?

Posted in 屠龙之技 | Tagged | Leave a comment

现代C++神器之literals

Modern C++有很多理念极具启发性。我个人很欣赏std::chrono::duration的设计,比如说它的构造方式: 上面几种都是普通的初始化,后两个会转换不同格式的数据。但是呢: 这又是什么?为什么编译通过?那两个后缀竟然合法?不仅如此: 这两个也是合法的。

Posted in 屠龙之技 | Tagged , , | 19 Comments

Vulkan大闷锅之结局

到这里,该创建该准备的,都基本就绪了。接下来就是绘图过程。 如果没有出错,结束的之后,你可以看到这个:

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Pipeline

吸取了前几代Api设计的教训,Vulkan采用了Monolith结构的PSO(Pipeline State Objects),是不是有当年Linux内核的既視感。这段时间疯狂发展的微服务,不知道在未来会不会也走回头路。 敢说Monolith,当然是包含的巨量的状态信息: Dynamic State Vertex Input State Input Assembly State Rasterization State Color Blend State Viewport State Depth Stencil State Multisample State

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Vertex Buffer

Modern OpenGL中,我们至少需要配置VBO和VAO,不过Vulkan只需创建好Vertex Buffer,类似VAO的信息将属于后续Pipeline的一部分。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之着色器

着色器(Shader)这个概念应该很熟悉。Vulkan采用用一种低层的着色器语言——SPIRV。通常我们还是先写出GLSL,再编译成SPIRV,官方的源码包已经提供了多种编译工具。 编译出的字节码首先会传递给Shader Module。但在创建Shader Module之前,先演示一下如何编译。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之RenderPass

Render Pass(渲染通道?),提供渲染过程所需的信息。手动配置一堆静态数据(减少动态开销?)。Render Pass由一系列Subpass聚合而成,每个Subpass携带特定的Attachment——笼统地分为Color Attachment或Depth Attachment。这些信息将决定后续Buffer中的数据如何被对待。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Descriptor

上一章,我们创建了Uniform Buffer,不过着色器并不能直接访问它。这时我们需要一个Descriptor,类似于不透明的句柄。试想,是否可以绑定多个Buffer给分别的Descriptor。Vulkan已经提供了相当的机制Descriptor Set。这里也可以创建多个Set为不同的用途,比如Uniform和Texture。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Buffers

你可曾熟悉这两句代码: OpenGL中,我们只要告诉全局上下文,启用深度缓冲(Depth Buffer)。然后,就没有然后了。 当然,以Vulkan的设计哲学,想用Depth Buffer?自己配置。

Posted in 屠龙之技 | Tagged | 1 Comment