0
0

More than 3 years have passed since last update.

初めてのVulkanプログラミング step5 シェーダファイルのロード

Last updated at Posted at 2019-11-01

前回作成した、frag.spv, vert.spvファイルを読み込みます。まず単純なファイルからバイナリーをロードするヘルパー関数を使います。

std::vector<char> ReadFile(const std::string& filename) {
    std::ifstream file(filename, std::ios::ate | std::ios::binary);

    if (!file.is_open()) {
        throw std::runtime_error("Don't read" + filename);
    }
    size_t fileSize = (size_t)file.tellg();
    std::vector<char> fileBuffer(fileSize);
    file.seekg(0);
    file.read(fileBuffer.data(), fileSize);
    file.close();
    return fileBuffer;
}

ReadFile関数は、すべてのバイトを読み込み、それをstd::vectorの配列に渡す関数です。

ifstream は、ファイルの読み出しに使うクラスです。
逆に書き込み専用のファイルストリームはofstreamとなります。

  • ate : 最後の行から読み込む。
  • binary : バイナリーファイルとして読み込む(文字として読み込むのを防ぐ)

ファイルを最後から読んだ理由は、ファイルのサイズを調べることが目的です。file.tellg()を使うことで、現在の読み込み位置を取得できます。

    size_t fileSize = (size_t)file.tellg();
    std::vector<char> fileBuffer(fileSize);

ファイルの読み込み位置をseekg(0)を使い最初からにした後、ファイルを読み込みます。

    file.seekg(0);
    file.read(fileBuffer.data(), fileSize);

作成した関数を使い2つのシェーダーを呼び出します。

void Shader::_init_shaderModule()
{
    std::vector<char> _VertShader;
    std::vector<char> _FragShader;

    _VertShader = ReadFile("vert.spv");
    _FragShader = ReadFile("frag.spv");

}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0