質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

Q&A

0回答

1131閲覧

Opengl 実行時に例外が出るときと出ない時があり動作が不安定な理由が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

0グッド

0クリップ

投稿2021/12/08 11:56

提示コードですが下記のLineクラスのインスタンスを生成するとShaderで例外になったり正常に実行出来たり、windowのbool 演算子のコードで例外になったり実行するたびにコロコロ出るエラーが変わるのですがこれはなぜでしょうか?

Shader

cpp

1 2//シェーダーファイルをロード 3std::shared_ptr<std::vector<GLchar>> FrameWork::LoadShader(const char* fileName) 4{ 5 std::ifstream file(fileName, std::ios::binary); 6 if (file.fail() == true) 7 { 8 std::cerr << "シェーダーファイルを読み込めません: " << fileName << std::endl; 9 10 file.close(); 11 assert(0); 12 } 13 else 14 { 15 std::shared_ptr<std::vector<GLchar>> buffer = std::make_shared<std::vector<GLchar>>(0); 16 file.seekg(0L, std::ios::end); 17 GLsizei length = static_cast<GLsizei>(file.tellg()); 18 buffer->resize(length + 1); 19 file.seekg(0L, std::ios::beg); 20 file.read(buffer->data(), length); 21 buffer->at(length) = ('\0'); 22 file.close(); 23 24 return buffer; //ここで例外が出るときがある。 25 } 26 27 file.close(); 28 29} 30

#####Line

cpp

1 2/*##################################################################################################################################### 3# 線 4########################################################################################################################################*/ 5// ##################################### コンストラクタ ##################################### 6FrameWork::D2::Line::Line() : Render() 7{ 8 9// shader = std::make_shared("Shader/2D/BasicMono_2D.vert","Shader/2D/BasicMono_2D.frag"); 10 11 12 vertex = FrameWork::Camera::getVertexAttribute(); 13 vertex->resize(2); 14 15 shader = std::make_shared<FrameWork::Shader>(); 16 shader->Load("shader/2D/BasicMono_2D.vert","shader/2D/BasicMono_2D.frag"); 17 18 glBindVertexArray(vao); 19 glBindBuffer(GL_ARRAY_BUFFER, vbo); 20 21 shader->setEnable(); 22 23 //頂点 24 GLint attrib = shader->getAttribLocation("vertexPosition"); 25 glEnableVertexAttribArray(attrib); 26 glBufferData(GL_ARRAY_BUFFER, vertex->size() * sizeof(VertexAttribute), vertex->data(), GL_DYNAMIC_DRAW); 27 glVertexAttribPointer(attrib, 4, GL_FLOAT, GL_FALSE, 11 * sizeof(GLfloat), (GLvoid*)0); 28 shader->setBindAttribLocation("vertexPosition"); 29 30 shader->setDisable(); 31 glBindVertexArray(0); 32 glBindBuffer(GL_ARRAY_BUFFER, 0); 33 34} 35 36// ##################################### 描画 ##################################### 37void FrameWork::D2::Line::Draw(glm::vec2 start, glm::vec2 end,glm::vec4 color,unsigned short width, float r) 38{ 39 40 glBindVertexArray(vao); 41 glBindBuffer(GL_ARRAY_BUFFER, vbo); 42 43 vertex->resize(2); 44 45 glLineWidth(width); //太さ 46 glm::vec2 size = glm::abs(glm::vec2(end.x - start.x,end.y - start.y)) / 2.0f; 47 glm::vec2 center = glm::vec2(end.x + start.x,end.y + start.y) / 2.0f; 48 49 50 vertex->at(0).position[0] = start.x; 51 vertex->at(0).position[1] = start.y; 52 53 vertex->at(1).position[0] = end.x; 54 vertex->at(1).position[1] = end.y; 55 56 57 vertex->at(0).position[0] += -center.x; 58 vertex->at(0).position[1] += -center.y; 59 60 vertex->at(1).position[0] += -center.x; 61 vertex->at(1).position[1] += -center.y; 62 63 glm::vec2 st; 64 glm::vec2 en; 65 st.x = (cos(r) * (vertex->at(0).position[0])) + (-sin(r) * (vertex->at(0).position[1])); 66 st.y = (sin(r) * (vertex->at(0).position[0])) + (cos(r) * (vertex->at(0).position[1])); 67 68 en.x = (cos(r) * (vertex->at(1).position[0])) + (-sin(r) * (vertex->at(1).position[1])); 69 en.y = (sin(r) * (vertex->at(1).position[0])) + (cos(r) * (vertex->at(1).position[1])); 70 71 72 vertex->at(0).position[0] = st.x + center.x; 73 vertex->at(0).position[1] = st.y + center.y; 74 75 vertex->at(1).position[0] = en.x + center.x; 76 vertex->at(1).position[1] = en.y + center.y; 77 78 79 80 //Transform 81 setPosition(glm::vec2(0,0)); //座標 82 setScale(glm::vec2(1,1)); //スケール 83 setRotate(0); //回転 84 85 shader->setEnable(); 86 shader->setUniformMatrix4fv("uTranslate", getMatTranslation()); 87 shader->setUniformMatrix4fv("uRotate", getMatRotate()); 88 shader->setUniformMatrix4fv("uScale", getMatScale()); 89 shader->setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, (float)FrameWork::windowContext->getSize().x, (float)FrameWork::windowContext->getSize().y, 0.0f, -1.0f, 1.0f)); 90 91 shader->setUniform4f("uFragment",color); 92 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(VertexAttribute) * vertex->size(), vertex->data()); 93 glDrawArrays(GL_LINES, 0, vertex->size()); 94 shader->setDisable(); 95 96 //バインド解除 97 glBindVertexArray(0); 98 glBindBuffer(GL_ARRAY_BUFFER, 0); 99 //glBindTexture(GL_TEXTURE_2D, 0); 100} 101 102// ##################################### デストラクタ ##################################### 103FrameWork::D2::Line::~Line() 104{ 105 106}

#####window

// ##################################### bool 演算子 ##################################### FrameWork::Window::operator bool() { glfwPollEvents(); //イベントを取り出す #ifndef DEBUG //エラー処理 GLenum err; while ((err = glGetError()) != GL_NO_ERROR) { std::cerr <<"\n"<< " glGetError(): 0x" << std::hex << err << std::endl; } #endif //ESCキーで終了 if (glfwGetKey(*window, GLFW_KEY_ESCAPE) == 1) { exit(1); } //ウインドウを閉じる必要があれば false if (glfwWindowShouldClose(*window) != 0) { return false; } else { return true; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/12/08 13:13

どんな例外が出るんでしょうか
退会済みユーザー

退会済みユーザー

2021/12/08 13:38

ブレークポイントが発生しました 等です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問