前提・実現したいこと
OpenGLとC++のプログラミングを始めたのですが、shaderをうまく読み込んでくれません。と、いうよりもエラーが発生して実行できません。C++が初めてなため全く知識がなく、どこをどのように修正すればいいのかがわかりません。
発生している問題・エラーメッセージ
エラーメッセージ 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 抑制状態 エラー (アクティブ) E0065 ';' が必要です OpenGL-MMD C:\Users\○○\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 45 エラー (アクティブ) E0020 識別子 "VertexShaderCode" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 67 エラー (アクティブ) E0020 識別子 "VertexShaderID" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 68 エラー (アクティブ) E0020 識別子 "Result" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 72 エラー (アクティブ) E0020 識別子 "InfoLogLength" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 73 エラー (アクティブ) E0135 namespace "std" にメンバー "vector" がありません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 74 エラー (アクティブ) E0020 識別子 "fragment_file_path" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 79 エラー (アクティブ) E0020 識別子 "FragmentShaderCode" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 80 エラー (アクティブ) E0020 識別子 "FragmentShaderID" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 81 エラー (アクティブ) E0135 namespace "std" にメンバー "vector" がありません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 87 エラー (アクティブ) E0135 namespace "std" にメンバー "vector" がありません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 101 エラー (アクティブ) E0020 識別子 "max" が定義されていません OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 101 エラー (アクティブ) E0169 宣言が必要です OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 112 エラー (アクティブ) E0169 宣言が必要です OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 127 エラー (アクティブ) E0169 宣言が必要です OpenGL-MMD C:\Users\oo\source\repos\OpenGL-MMD\OpenGL-MMD.cpp 129
該当のソースコード
ソースコード #include "stdio.h" #include "stdlib.h" #include <iostream> #include "packages/glew.1.9.0.1/build/native/include/GL/glew.h" #include "packages/glfw.3.3.0.1/build/native/include/GLFW/glfw3.h" int main() { //GLFW初期化処理 if (!glfwInit()) { fprintf(stderr, "GLFWの初期化に失敗知っちゃったにゃん... n"); return -1; } glfwWindowHint(GLFW_SAMPLES, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); //Windowを開き、OpenGLコンテキストを作成 GLFWwindow* window; window = glfwCreateWindow(1024, 768, "OpenGL-MikuMkikuDance", NULL, NULL); if (window == NULL) { fprintf(stderr, "GLFWウィンドウのオープンに失敗しちゃったにゃん... 現在使用しているPCのGPUのOpenGLのバージョンが4.2以降に対応しているかか確認してほしいにゃん..."); glfwTerminate(); return -1; } //GLFWの初期化処理 glfwMakeContextCurrent(window); glewExperimental = true; if (glewInit() != GLEW_OK) { fprintf(stderr, "GLEWの初期化に失敗しちゃったにゃん... n"); return -1; } GLuint VertexArrayID; glGenVertexArrays(1, &VertexArrayID); glBindVertexArray(VertexArrayID); GLuint LoadShaders(const char* vertex_file_path, const char* fragment_file_path) { // シェーダを作ります。 GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER); GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); // ファイルから頂点シェーダのコードを読み込みます。 std::string VertexShaderCode; std::ifstream VertexShaderStream(vertex_file_path, std::ios::in); if (VertexShaderStream.is_open()) { std::stringstream sstr; sstr << VertexShaderStream.rdbuf(); VertexShaderCode = sstr.str(); VertexShaderStream.close(); } GLint Result = GL_FALSE; int InfoLogLength; // 頂点シェーダをコンパイルします。 printf("Compiling shader : %sn", vertex_file_path); char const* VertexSourcePointer = VertexShaderCode.c_str(); glShaderSource(VertexShaderID, 1, &VertexSourcePointer, NULL); glCompileShader(VertexShaderID); // 頂点シェーダをチェックします。 glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); std::vector VertexShaderErrorMessage(InfoLogLength); glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]); fprintf(stdout, "%sn", &VertexShaderErrorMessage[0]); // フラグメントシェーダをコンパイルします。 printf("Compiling shader : %sn", fragment_file_path); char const* FragmentSourcePointer = FragmentShaderCode.c_str(); glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL); glCompileShader(FragmentShaderID); // フラグメントシェーダをチェックします。 glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); std::vector FragmentShaderErrorMessage(InfoLogLength); glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]); fprintf(stdout, "%sn", &FragmentShaderErrorMessage[0]); // プログラムをリンクします。 fprintf(stdout, "Linking programn"); GLuint ProgramID = glCreateProgram(); glAttachShader(ProgramID, VertexShaderID); glAttachShader(ProgramID, FragmentShaderID); glLinkProgram(ProgramID); // プログラムをチェックします。 glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); std::vector ProgramErrorMessage(max(InfoLogLength, int(1))); glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]); fprintf(stdout, "%sn", &ProgramErrorMessage[0]); glDeleteShader(VertexShaderID); glDeleteShader(FragmentShaderID); return ProgramID; } //フレームループ while (glfwWindowShouldClose(window) == GL_FALSE) { //バッファのクリア glClearColor(0.2f, 0.2f, 0.2f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); //バッファをスワップする glfwSwapBuffers(window); glfwPollEvents(); } //ESCキーが押されるまで閉じるのを防ぐ glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE); //ESCが押されたか、Windowが閉じたかをチェックする while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && glfwWindowShouldClose(window) == 0); } (http://www.opengl-tutorial.org/jp/beginners-tutorials/tutorial-2-the-first-triangle/ ,https://codelabo.com/630/ 参考)
試したこと
まったく分からなかったので、対処法の検索(下手にいじるとさらにややこしいことになりそうなので...)
補足情報(FW/ツールのバージョンなど)
VisualStudio 2019
glew ver.1.9.0.1
glfw ver.3.3.0.1
glm ver.0.9.9.600
nupengl ver.1.0.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/01 10:27