小编Fro*_*rog的帖子

全局加载Vulkan功能

随着Vulkan的发布,我决定写一个基于Vulkan的GUI(作为一个爱好).但是,我目前陷入了第一步 - 加载Vulkan功能.我正在使用Nvidia的C++ Vulkan包装器,根据我的需要,它需要全局加载Vulkan函数.

我可以成功加载本地函数,但是::vkCreateInstance失败了:

void loadInstanceFunctions() {
    PFN_vkCreateInstance vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(nullptr, "vkCreateInstance"); //works

    ::vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(nullptr, "vkCreateInstance");  //does not work
}
Run Code Online (Sandbox Code Playgroud)

尝试全局分配新的函数指针给我2个编译时错误(使用VS2015编译):

  • 表达式必须是可修改的左值.
  • '=':作为左操作数运行.

vulkan.h标题中声明了函数原型,例如:

VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
    const VkInstanceCreateInfo*                 pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkInstance*                                 pInstance);
Run Code Online (Sandbox Code Playgroud)

这可能会阻止我在全局加载函数.如果我要定义VK_NO_PROTOTYPES,那么这些原型将被跳过,我相信我可以重新声明它们PFN_vkCreateInstance vkCreateInstance = nullptr;等等.但这是正确的方法吗?

所以,我的问题 - 在全球范围内加载Vulkan函数的正确方法是什么?

c++ vulkan

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

CreateDIBSection图形工件或如何正确访问位图位

更新:

感谢Denis Anisimov我通过替换解决了我的问题:

for (int i = 0; i < Width * Height; i++)
    {
        pRgb[0] = RValue;
        pRgb[1] = GValue;
        pRgb[2] = BValue;
        pRgb += 3;
    }
Run Code Online (Sandbox Code Playgroud)

有:

int BytesPerLine = Width * 3;
if (BytesPerLine % 4 != 0)
    BytesPerLine += 4 - BytesPerLine % 4;
PBYTE Line = NULL;
for (int y = 0; y < Height; y++) 
{
    Line = pRgb;
    for (int x = 0; x < Width; x++) 
    {
        Line[0] = RValue;
        Line[1] …
Run Code Online (Sandbox Code Playgroud)

c++ winapi gdi

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

如何更改按钮的颜色,同时在win32中保持按钮的功能?

我已经了解自定义绘图,所有者绘图和子类化.到目前为止,我的选择是定制绘图.子类化将是我的第二选择,但我创建的按钮数量巨大.如果有人有任何其他建议,请评论.无论如何,我只是发布我的自定义绘图代码,因为win32没有任何直接的答案.

c++ winapi colors button

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

标签 统计

c++ ×3

winapi ×2

button ×1

colors ×1

gdi ×1

vulkan ×1