teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

文章を修正

2021/06/09 06:43

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- [ヒープ バッファの終了後にメモリに書き込んだことを検出しました。]どういったことが原因して考えられるの知りたい。
1
+ メモリアクセス違反発生する原因がどうしてもわらない。
body CHANGED
@@ -1,6 +1,7 @@
1
- 提示画像ですがGLSLシェーダーを用いたプログラムを作成していると以下のようなエラーがプログラムを終了すると発生ます。これはどいったことが原因として挙げられるのでしょうか?何回かに一回は普通に実行できるのですがたまにこいったエラーが表示されます。
1
+ 提示画像ですがGLSLシェーダーを用いたプログラムを作成していると以下のようなエラーがプログラムを終了すると発生ます。これはどいったことが原因として挙げられるのでしょうか?何回かに一回は普通に実行できるのですがたまにこいったエラーが表示されます。調査した結果コンストラクタのこの関数が悪いのですがなぜなのでしょうか?原因がどうしてもわかりません。
2
2
 
3
3
 
4
+
4
5
  エラー原文[CRT detected that the application wrote to memory after end of heap buffer]
5
6
  google翻訳[ CRT は、アプリケーションがヒープ バッファの終了後にメモリに書き込んだことを検出しました。 ]
6
7
 

1

提示コードを修正

2021/06/09 06:43

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,29 +11,68 @@
11
11
 
12
12
 
13
13
  ```cpp
14
- // ##################################### レンダリング #####################################
15
- void Game::Renderer()const
16
- {
17
- sprite->setEnable();
18
14
 
15
+ //コンストラクタ
16
+ FrameWork::Sprite::Sprite(std::shared_ptr<Window> w,const char* vert,const char* frag) : Transform_2D(),Shader()
17
+ {
18
+ windowContext = w; //ウインドウコンテキスト
19
19
 
20
+ //シェーダー読み込み
21
+ if (vert == NULL && frag == NULL)
22
+ {
23
+ vert = "Shader/2D/BasicTexture_2D.vert";
24
+ frag = "Shader/2D/BasicTexture_2D.frag";
25
+ LoadShader(vert, frag); //シェーダーロード
20
26
 
27
+ isDefaultShader = true;
28
+ }
29
+ else
30
+ {
21
- std::cout << "ああ" << std::endl;
31
+ std::cout << "個別のシェーダーが読み込まれました。" << std::endl;
32
+ LoadShader(vert, frag);
33
+ isDefaultShader = false;
34
+ }
22
35
 
36
+ //テクスチャ関係
23
- sprite->setUniform3f("uCameraPos", glm::vec3(0, 0, 1));
37
+ textureID = std::vector<TextureData>(0); //テクスチャーデータ
38
+ textureUnitCount = 0; //テクスチャユニット数をカウント
39
+
40
+ //vao
41
+ glGenVertexArrays(1, &vao);
42
+ glBindVertexArray(vao);
24
43
 
25
- sprite->setUniform3f("uAmbientLight", glm::vec3(0.2, 0.2, 0.2));
44
+ //vbo
26
- sprite->setUniform3f("uDirLight.mDirection", glm::vec3(0.0, -0.7, -0.7));
27
- sprite->setUniform3f("uDirLight.mDiffuseColor", glm::vec3(0, 1, 0));
45
+ glGenBuffers(1, &vbo);
28
- sprite->setUniform3f("uDirLight.mSpecColor", glm::vec3(0.5, 1, 0.5));
29
- sprite->setUniform1f("uSpecPower", 1.0f);
46
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
30
47
 
48
+ //頂点
49
+ GLint attrib = getAttribLocation("vertexPosition");
50
+ glEnableVertexAttribArray(attrib);
51
+ glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW);
31
- sprite->DrawGraph(glm::vec2(WINDOW_WIDTH / 2 - 100, WINDOW_HEIGHT / 2 - 75), 0, 0.0f, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2(200, 150));
52
+ glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)0);
53
+ setBindAttribVertex("vertexPosition");
32
54
 
55
+ //UV
56
+ attrib = getAttribLocation("vertexUV");
57
+ glEnableVertexAttribArray(attrib);
58
+ glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW);
59
+ glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 5));
60
+ setBindAttribVertex("vertexUV");
33
61
 
34
62
 
63
+ //法線
64
+ attrib = getAttribLocation("vertexNorm");
35
- sprite->setDisable();
65
+ glEnableVertexAttribArray(attrib);
66
+ glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW);
67
+ glVertexAttribPointer(attrib, 3, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 3));
68
+ setBindAttribVertex("vertexNorm");
36
69
 
70
+
71
+
72
+
73
+ //アルファブレンド有効
74
+ glEnable(GL_BLEND);
75
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
37
76
  }
38
77
 
39
78
  ```