繁体   English   中英

在nim链接到vulkan

[英]Linking to vulkan in nim

我无法弄清楚如何将更复杂的库链接到nim程序。 鉴于以下包含目录(分隔到不同的行):

C:\Users\[user]\Documents\visual studio 2015\Libraries\glfw-3.2.bin.WIN32\lib-vc2015;
C:\VulkanSDK\1.0.13.0\Source\lib32;
C:\Users\[user]\Documents\Visual Studio 2015\Libraries\glfw-3.2.bin.WIN32\include;
C:\VulkanSDK\1.0.13.0\Include\ 

这个附加库搜索目录(与上面的第一个相同):

C:\Users\[user]\Documents\visual studio 2015\Libraries\glfw-3.2.bin.WIN32\lib-vc2015;

使用此代码:

#define GLFW_INCLUDE_VULKAN

#include <GLFW/glfw3.h>
//#include <stdio.h>

GLFWwindow* init() {
    glfwInit();

    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", NULL, NULL);

    int extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL);

    //printf("%d extensions supported\n", extensionCount);

    return window;
}

void close(GLFWwindow* window) {
    glfwDestroyWindow(window);
    glfwTerminate();
}

int shouldClose(GLFWwindow* window) {
    return glfwWindowShouldClose(window);
}

void pollEvents() {
    glfwPollEvents();
}

int main() {
    GLFWwindow* window = init();

    while (!shouldClose(window)) {
        pollEvents();
    }

    close(window);
    return 0;
}

在Visual Studio 2015中,从顶部正确设置属性,我可以运行它,它将打开一个空白窗口。

需要做些什么才能使等效代码在纯Nim中运行? 我想通过使用gcc而不是VS15编译我是如何做到的,因为视觉C编译器似乎过于严格。

我编写了以下nim代码来尝试从VS15链接一个dll,而不包含main函数:

{.link: "VulkanTest.dll".}

proc pollEvents() {.importc, dynlib: "VulkanTest.dll".}
proc init(): pointer {.importc, dynlib: "VulkanTest.dll".}
proc close(window: pointer) {.importc, dynlib: "VulkanTest.dll".}
proc shouldClose(window: pointer): cint {.importc, dynlib: "VulkanTest.dll".}

var window = init()

while shouldClose(window) != 0:
    pollEvents()

close(window)

但它只是说它无法打开文件(dll)。

我需要在命令行输入以使其工作吗? EI -l-p (每次使用的-p我能想到的没有工作,甚至扭转斜线和更改后;该网址后分隔符是UNIX风格:

对于nim编译器,在#include <GLFW/glfw3.h>之前放置#define GLFW_INCLUDE_VULKAN的等效性是什么?

但它只是说它无法打开文件(dll)。

这意味着文件VulkanTest.dll在您用作后端(VC)的编译器的搜索路径中不可用。 您可以尝试使用--passL:"/LIBPATH:path"添加dll所在的路径,其中path是包含dll的文件夹的路径。

将#define GLFW_INCLUDE_VULKAN放在nim编译器的#include之前的等效性是什么?

这是不必要的,因为所有GLFW_INCLUDE_VULKAN都包含Vulkan标头。 但是你需要在Nim端声明要调用的触发器。 有一个GLFW3包装器和一个Vulkan包装器为你做这个,但我相信Vulkan包装器是相当实验性的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM