質問編集履歴
2
文章を修正
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
提示コードを修正
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
|
-
|
31
|
+
std::cout << "個別のシェーダーが読み込まれました。" << std::endl;
|
32
|
+
LoadShader(vert, frag);
|
33
|
+
isDefaultShader = false;
|
34
|
+
}
|
22
35
|
|
36
|
+
//テクスチャ関係
|
23
|
-
|
37
|
+
textureID = std::vector<TextureData>(0); //テクスチャーデータ
|
38
|
+
textureUnitCount = 0; //テクスチャユニット数をカウント
|
39
|
+
|
40
|
+
//vao
|
41
|
+
glGenVertexArrays(1, &vao);
|
42
|
+
glBindVertexArray(vao);
|
24
43
|
|
25
|
-
|
44
|
+
//vbo
|
26
|
-
sprite->setUniform3f("uDirLight.mDirection", glm::vec3(0.0, -0.7, -0.7));
|
27
|
-
|
45
|
+
glGenBuffers(1, &vbo);
|
28
|
-
sprite->setUniform3f("uDirLight.mSpecColor", glm::vec3(0.5, 1, 0.5));
|
29
|
-
|
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
|
-
|
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
|
-
|
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
|
```
|