OpenGL4.5 コンパイル済みシェーダーバイナリファイルのフォーマットを正常に取得する方法が知りたい

質問内容

コンパイルして保存したバイナリシェーダーファイルを読み込んでバイナリフォーマットを取得する方法が知りたい

実現したいこと

コンパイル済み、シェーダーバイナリファイルを読み込んで使いたい

現状

コンソールログの 0部 のようにバイナリフォーマットの値が0になってしまい、それが原因で
エラーログのような問題が発生しています。

確認したここと、

GLSLをコンパイルしてバイナリ保存するプロジェクトのバージョンが同じであることを確認opengl4.5
読み込んだバイナリの長さがちゃんあることを確認 コンソールログ参照
読み込んだバイナリにデータ入っていることを確認 コンソールログ参照

エラーログ

Shader program error: Error: Unknown program binary format

コンソールログ

10534 ト 0 Shader program error: Error: Unknown program binary format

提示コード

cpp

1#include "Resource.hpp"2#include <fstream>3#include <GL/glew.h>4#include <GLFW/glfw3.h>5#include <GL/GL.h>6 7Engine::Shader Engine::Resource::LoadShader(const char* filePath)8{9 std::ifstream file(filePath, std::ios::binary | std::ios::ate);10 11 if (file.is_open() == false)12 {13 std::cout << "not file " << filePath << std::endl;14 }15 16 std::streamsize size = file.tellg();17 file.seekg(0, std::ios::beg);18 19 std::vector<GLchar> buffer(size);20 if (file.read(buffer.data(), size))21 {22 GLuint shaderProgram = glCreateProgram();23 24 if (shaderProgram == 0)25 {26 std::cerr << "Error: Failed to create shader program." << std::endl;27 return 0;28 }29 30 std::cout << buffer.size() << std::endl;31 std::cout << buffer.at(4) << std::endl;32 33 34 35 36 //バイナリフォーマットを取得 37 GLenum binaryFormat = 0;38 glGetProgramBinary(shaderProgram, buffer.size(), NULL, &binaryFormat, buffer.data());39 std::cout << binaryFormat << std::endl;40 41 42 43 44 glProgramParameteri(shaderProgram, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);45 glProgramBinary(shaderProgram, binaryFormat, buffer.data(), buffer.size());46 47 48 49 ProgramInfoLog(shaderProgram);50 51 }52 else53 {54 std::cerr << "Error: not binary file " <<filePath << std::endl;55 }56 57 return Shader(0);58}59std::string Engine::Resource::ProgramInfoLog(GLint program)60{61 GLsizei buffSize;62 glGetProgramiv(program, GL_INFO_LOG_LENGTH, &buffSize);63 64 if (buffSize > 1)65 {66 std::vector<char> infoLog(buffSize);67 glGetProgramInfoLog(program, buffSize, NULL, infoLog.data());68 std::cerr << "Shader program error: " << infoLog.data() << std::endl;69 }70 else71 {72 return std::string("");73 }74 75}76

コメントを投稿

0 コメント