0%

网络链接,常常失效,很多大公司亦是如此。好些前两年很容易访问到的链接,忽然就失了踪迹。再者,有些资源,不收藏一下,难受。

Nvidia Legacy OpenGL SDK samples

  1. NVIDIA GameWorks Graphics Samples,by ahcox > The GameWorks Graphics Samples pack is a resource for cross-platform Vulkan, OpenGL 4 (GL4) and OpenGL ES 2 and 3 (ES2 and ES3) development, targeting Android and Windows (and soon, will again support Linux x86/x64 and Linux for Tegra). It is an expansion and continuation of the longstanding OpenGL Graphics and Compute Samples, adding full support for and samples of the Vulkan 3D API. mirror
阅读全文 »

OpenGL虽然简单,但是问题也是公认的多,不同驱动实现的表现可能差异很大,导致同样的OpenGL的代码,在一台机器上正常执行,在另外一台机器上表现异常。

我这就遇到一个,采样GL_DEPTH_COMPONENT类型的depth texture,全屏显示到窗口。同样是GL4.6 core profile的上下文,在RTX4080上没问题,但是在笔记本ThinkPad P50(显卡NVIDIA Quadro M1000M)上结果全白色(1.0),当然P50确实太老了,10年老机了,妥妥的电子垃圾了。

可是,奈何啊,“同样是生活一起的两口子,做人的差别咋这么大咧?”。

阅读全文 »

OpenGL 4.0和DirectX 11提供了原子操作(atomic operation),为GPU上并行创建链表数据结构提供了便利。基于此算法的per-pixel link lists可以应用到order independent transparency,实现像素的程序化混合,实现顺序无关的半透明效果,避免了程序员在api层面对于略显无力的排序的折磨。

Per-Pixel Link List

PPLL的实现需要三个数据结构:头结点指针Buffer、链表Node Buffer、结点计数器。 - 头结点指针Buffer:每个像素位置又一个链表,所以叫per-pixel link lists,头指针Buffer的大小是framebuffer的大小,存储的是头结点在Node Buffer中的位置,初始化为一个空符号,比如-1; - 链表Node Buffer:存储所有结点数据,可以是任意数据,next字段是必需的,指向链表下一个结点;不需要初始化,只需要分配足够大小。 - 结点计数器:用于分配下一个Node Buffer位置来存储数据,使用原子操作累加。初始化为0。

阅读全文 »

设置生成目标的输出目录

1
2
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>)

Note $<CONFIG>应该在VS下才起作用

阅读全文 »

背景

DirectX SDK自从Windows 8 SDK开始,是随着Windows SDK附带的,包含了各个历史版本的头文件、动态库和工具集,但是这些历史版本SDK的sample和辅助库D3DX9、D3DX10、D3DX11等就被丢弃了。

偶尔会遇到一些D3D的旧版本上古demo,可能就使用了一些旧版本的辅助函数,比如在看SSS效果的时候使用iryoku大佬的separable-sss,仅仅依赖Windows SDK附带的DX依赖是没法正确跑起来。

阅读全文 »

Quad with Bufferless rendering

如果没记错的话,最初应该是在OpenGL SuperBibile里面看到的无Buffer的渲染方式,把三角形顶点数据写在vertex shader代码里,在shader里通过index取相应的数据,当时感觉平平无奇。后来在SaschaWillems的Vulkan example里看到更精简的写法,当时表示惊呆了,使用gl_VertexIndex来构造顶点数据,画一个覆盖屏幕的quad。下面就是Vulkan example的实现。其中vkCmdDrawIndexed对应gl_VertexIndex, vkCmdDraw对应gl_VertexID;我是在GL环境下,则是glDrawElements对应gl_VertexIndex, glDrawArrays对应gl_VertexID

1
2
3
4
5
6
7
8
9
#version 450

layout (location = 0) out vec2 outUV;

void main()
{
outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f);
}
阅读全文 »

Vulkan枚举值的字符串化

Vulkan中的枚举值做了很好的枚举类型管理,尽管还是是C类型的枚举,具有全局符号可见行;再尽管不似C++ enum class有严格的命名空间访问机制,但是仍然具备相应的枚举类型作为命名空间管理和访问。这为Vulkan枚举值的字符串转换提供了方便,可能这也是为何VulkanSDK给出了官方实现vk_enum_string_helper.h的原因。

VkImageType为例,

阅读全文 »
×