2017-04-01 6 views
3

falseを返します。バルカンとGLFW - glfwVulkanSupported()は、常に私はGLFW3.2を使用して、基本的なバルカンテストを実行しようとしている

cmake_minimum_required(VERSION 3.5.1) 
project(vktest) 

set (CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.9") 

set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

find_package(Vulkan REQUIRED) 
find_package(glfw3 3.2 REQUIRED) 
include_directories(${Vulkan_INCLUDE_DIRS}) 

message("kek") 
message(${Vulkan_INCLUDE_DIRS}) 
message(${Vulkan_LIBRARIES}) 
message(${Vulkan_LIBRARY}) 

add_executable(vktest vulkanTest.cpp) 

target_link_libraries(vktest ${Vulkan_LIBRARIES}) 
target_link_libraries(vktest glfw) 

:私は次のようにcmakeを使用してビルド

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

#include <iostream> 

int main(int argc, char *argv[]) 
{ 
    if (glfwVulkanSupported()) 
    { 
     std::cout << "vulkan supported !" << std::endl; 

    } 
    else 
    { 
     std::cout << "vulkan NOT supported !" << std::endl; 

    } 
    return 0; 
} 

これはうまくいきます。

私はプログラムを実行するとき、私はいつもelseステートメントに入ります。私はキューブの例を実行することができますだけでなく

export VULKAN_SDK=/home/mathias/vulkan/VulkanSDK/1.0.42.2/x86_64 
set PATH $VULKAN_SDK/bin $PATH 
set LD_LIBRARY_PATH $VULKAN_SDK/lib $LD_LIBRARY_PATH 
set VK_LAYER_PATH $VULKAN_SDK/etc/explicit_layer.d 

私はnvidiaの最後のドライバは、以下の の環境変数とlunargのVULKAN SDKをインストールしました。

なぜそれが決して真実を返さないのか?

答えて

2

コードがありません#define GLFW_INCLUDE_VULKAN、そうではありませんか?

#define GLFW_INCLUDE_VULKAN //as required by GLFW 
#include "vulkan\vk_cpp.hpp" 
#include "GLFW\glfw3.h" 
#include <iostream> 
#include <algorithm> 
#include <iterator> 

int main() 
{ 
    if (!glfwInit()) //Initialize GLFW 
    { 
     std::cout << "GLFW not initialized.\n"; 
     abort(); 
    } 
    if (!glfwVulkanSupported()) //Any Vulkan-related function requires GLFW initialized 
    { 
     std::cout << "Vulkan not supported.\n"; 
     abort(); 
    } 
    uint32_t ext_count; // an output placeholder 
    auto ext_list = glfwGetRequiredInstanceExtensions(&ext_count); 

    std::copy(&ext_list[0], &ext_list[ext_count-1], std::ostream_iterator<const char *>(cout, "\n")); 

    //feed extension list into InstanceCreateInfo struct in prepare for Vulkan instance creation 
    vk::InstanceCreateInfo ifo{ vk::InstanceCreateFlags(), nullptr, 0, nullptr, ext_count, ext_list }; 
    glfwDefaultWindowHints(); 
    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); // Comment out this if you need OpenGL also 
    GLFWwindow* hWnd = glfwCreateWindow(640, 480, "Foobar", NULL, NULL); // The usual window 
    auto inst = vk::createInstance(ifo); // Vulkan instance creation 
    vk::SurfaceKHR surf{}; 
    auto psurf = VkSurfaceKHR(surf); // you can cast vk::* object to Vk* using a type cast 
    auto r = glfwCreateWindowSurface(VkInstance(inst), hWnd, NULL, &psurf); //VK_SUCCESS is somehow...0 
    // Draw stuff here 

    // Finish drawing 
    vkDestroySurfaceKHR((VkInstance)inst, VkSurfaceKHR(surf), nullptr);//vkcpp seems have no destructor for surface object 
    glfwDestroyWindow(hWnd); //Destroy the surface before the window 
    glfwTerminate(); // Free GLFW resource 
    return 0; 
} 

このコードにはタイプミスがあり修正することができます。現在の場所でコンパイルする方法がありません

+0

glfwのマニュアルでは、マクロを定義するか、glfwヘッダーの前にvulkanヘッダーを含めるかを指定します。何らかの理由で私は最初に2番目のマクロを試しましたが、マクロを定義するだけで動作するようです。だから、それはすべて私のために良いです、ありがとう! – Mathias

+0

@マティアスそれは実装に応じているかもしれません。このAPIは非常に若く、回避策が必要なバージョンが存在する可能性があります。同様に、古いVIsual Studioライブラリでは、iostreamで文字列を正しく動作させるために、ヘッダの後にが含まれていました。私はより古いKhronosのプロジェクトvulkan-hppヘッダーを使用しました。おそらくこれが当時の唯一の方法でした。 – Swift

関連する問題