提示画像ですがGLSLシェーダーを用いたプログラムを作成していると以下のようなエラーがプログラムを終了すると発生ます。これはどいったことが原因として挙げられるのでしょうか?何回かに一回は普通に実行できるのですがたまにこいったエラーが表示されます。調査した結果コンストラクタのこの関数が悪いのですがなぜなのでしょうか?原因がどうしてもわかりません。
エラー原文[CRT detected that the application wrote to memory after end of heap buffer]
google翻訳[ CRT は、アプリケーションがヒープ バッファの終了後にメモリに書き込んだことを検出しました。 ]
cpp
1 2//コンストラクタ 3FrameWork::Sprite::Sprite(std::shared_ptr<Window> w,const char* vert,const char* frag) : Transform_2D(),Shader() 4{ 5 windowContext = w; //ウインドウコンテキスト 6 7 //シェーダー読み込み 8 if (vert == NULL && frag == NULL) 9 { 10 vert = "Shader/2D/BasicTexture_2D.vert"; 11 frag = "Shader/2D/BasicTexture_2D.frag"; 12 LoadShader(vert, frag); //シェーダーロード 13 14 isDefaultShader = true; 15 } 16 else 17 { 18 std::cout << "個別のシェーダーが読み込まれました。" << std::endl; 19 LoadShader(vert, frag); 20 isDefaultShader = false; 21 } 22 23 //テクスチャ関係 24 textureID = std::vector<TextureData>(0); //テクスチャーデータ 25 textureUnitCount = 0; //テクスチャユニット数をカウント 26 27 //vao 28 glGenVertexArrays(1, &vao); 29 glBindVertexArray(vao); 30 31 //vbo 32 glGenBuffers(1, &vbo); 33 glBindBuffer(GL_ARRAY_BUFFER, vbo); 34 35 //頂点 36 GLint attrib = getAttribLocation("vertexPosition"); 37 glEnableVertexAttribArray(attrib); 38 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW); 39 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)0); 40 setBindAttribVertex("vertexPosition"); 41 42 //UV 43 attrib = getAttribLocation("vertexUV"); 44 glEnableVertexAttribArray(attrib); 45 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW); 46 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 5)); 47 setBindAttribVertex("vertexUV"); 48 49 50 //法線 51 attrib = getAttribLocation("vertexNorm"); 52 glEnableVertexAttribArray(attrib); 53 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW); 54 glVertexAttribPointer(attrib, 3, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 3)); 55 setBindAttribVertex("vertexNorm"); 56 57 58 59 60 //アルファブレンド有効 61 glEnable(GL_BLEND); 62 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 63} 64
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/09 04:23
2021/06/09 04:29
2021/06/09 07:19