2017-09-04 15 views
-1

基本的なVulkanアプリケーションを作成するときに問題が発生します。インスタンスを作成しようとすると、ppEnableExtensionNames経由で拡張機能をロードしようとすると失敗します。 ppEnableExtensionNamesNULLの場合、インスタンスの作成は成功します(しかし、私はそのようにサーフェイスを作成できないため、かなりの点があります)。拡張子をロードするときにVulkan - インスタンスの作成が失敗する

私は別のチュートリアルで二重チェックして、間違いを見つけることができませんでした。 SDKをインストールし、vulkan-1.dllをチェックし、キューブデモを正常に実行しました。さらに私は利用可能な拡張機能を列挙し、ロードしようとしたすべての拡張機能がリストされていたので、私のデバイスは基本的にそれらをサポートする必要があります。

Heres私のコードは、にppEnableExtensionNames != NULLという長さで改行しています。 EDIT:この問題を解決したにもかかわらず、誰かが同じ愚かな間違いを犯した場合に備えて、コードを実際の問題の原因に変更しました。

#define VK_USE_PLATFORM_WIN32_KHR 


    //STD 
    #include <Windows.h> 
    #include <iostream> 
    #include <string> 
    #include <vector> 

    //NON-STD Libraries 
    #include "vulkan\vulkan.h" 



    //================== 
    //Window Reference 
    //================== 
    WNDCLASSEX window; 
    MSG msg; 
    HWND hwnd;   
    HDC hdc;    



    //=================== 
    //SETUP VULKAN 
    //=================== 

    //Global VK Variables 
    VkInstance instance; 
    VkPhysicalDevice physDevice;   
    VkApplicationInfo appInfo = {}; 
    VkInstanceCreateInfo instanceInfo = {}; 


    void loadExtensions{ 

std::vector<const char *> enabledExtensions; 
     enabledExtensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); 
     enabledExtensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME); 

     instanceInfo.enabledExtensionCount = enabledExtensions.size(); 
     instanceInfo.ppEnabledExtensionNames = &enabledExtensions[0]; 

} 


    //================== 
    //WinMain, Entry Point 
    //================== 
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd) { 


     appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; 
     appInfo.pNext = NULL; 
     appInfo.pApplicationName = "Monody"; 
     appInfo.applicationVersion = VK_MAKE_VERSION(0, 0, 0); 
     appInfo.pEngineName = "Monody Engine"; 
     appInfo.engineVersion = VK_MAKE_VERSION(0, 0, 0); 
     appInfo.apiVersion = VK_API_VERSION_1_0; 

     instanceInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; 
     instanceInfo.pNext = NULL; 
     instanceInfo.flags = 0; 
     instanceInfo.pApplicationInfo = &appInfo; 
     instanceInfo.enabledLayerCount = 0; 
     instanceInfo.ppEnabledLayerNames = NULL; 
     instanceInfo.enabledExtensionCount = 0; 
     instanceInfo.ppEnabledExtensionNames = NULL; 


    loadExtensions(); 


     //Create Instance 
     VkResult error = vkCreateInstance(&instanceInfo, nullptr, &instance); 




     return 0; 

    } 
+0

この正確なことは私に起こった。私は何が起こっていたのか理解するために少し私を取った。 – Zebrafish

答えて

1

ベクトルがスコープ内のみloadExtensions()関数内にあり、それは唯一instanceInfo構造体へのポインタとして与えられ、ポインタが無効な場合になるため - のWinMain関数のバック - ベクトルであります範囲外。インスタンスを作成するまで、ベクトルをグローバルにするか、別の場所に格納してください。