提示コードですが下記の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; } }
あなたの回答
tips
プレビュー