質問編集履歴
2
文章を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
メモリアクセス違反が発生する原因がどうしてもわからない。
|
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
提示画像ですがGLSLシェーダーを用いたプログラムを作成していると以下のようなエラーがプログラムを終了すると発生ます。これはどいったことが原因として挙げられるのでしょうか?何回かに一回は普通に実行できるのですがたまにこいったエラーが表示されます。
|
1
|
+
提示画像ですがGLSLシェーダーを用いたプログラムを作成していると以下のようなエラーがプログラムを終了すると発生ます。これはどいったことが原因として挙げられるのでしょうか?何回かに一回は普通に実行できるのですがたまにこいったエラーが表示されます。調査した結果コンストラクタのこの関数が悪いのですがなぜなのでしょうか?原因がどうしてもわかりません。
|
2
|
+
|
3
|
+
|
2
4
|
|
3
5
|
|
4
6
|
|
1
提示コードを修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,13 +24,115 @@
|
|
24
24
|
|
25
25
|
```cpp
|
26
26
|
|
27
|
-
// ##################################### レンダリング #####################################
|
28
27
|
|
29
|
-
void Game::Renderer()const
|
30
28
|
|
31
|
-
|
29
|
+
//コンストラクタ
|
32
30
|
|
31
|
+
FrameWork::Sprite::Sprite(std::shared_ptr<Window> w,const char* vert,const char* frag) : Transform_2D(),Shader()
|
32
|
+
|
33
|
+
{
|
34
|
+
|
35
|
+
windowContext = w; //ウインドウコンテキスト
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
//シェーダー読み込み
|
40
|
+
|
41
|
+
if (vert == NULL && frag == NULL)
|
42
|
+
|
43
|
+
{
|
44
|
+
|
45
|
+
vert = "Shader/2D/BasicTexture_2D.vert";
|
46
|
+
|
47
|
+
frag = "Shader/2D/BasicTexture_2D.frag";
|
48
|
+
|
49
|
+
LoadShader(vert, frag); //シェーダーロード
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
isDefaultShader = true;
|
54
|
+
|
55
|
+
}
|
56
|
+
|
57
|
+
else
|
58
|
+
|
59
|
+
{
|
60
|
+
|
61
|
+
std::cout << "個別のシェーダーが読み込まれました。" << std::endl;
|
62
|
+
|
63
|
+
LoadShader(vert, frag);
|
64
|
+
|
65
|
+
isDefaultShader = false;
|
66
|
+
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
//テクスチャ関係
|
72
|
+
|
73
|
+
textureID = std::vector<TextureData>(0); //テクスチャーデータ
|
74
|
+
|
75
|
+
textureUnitCount = 0; //テクスチャユニット数をカウント
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
//vao
|
80
|
+
|
81
|
+
glGenVertexArrays(1, &vao);
|
82
|
+
|
33
|
-
|
83
|
+
glBindVertexArray(vao);
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
//vbo
|
88
|
+
|
89
|
+
glGenBuffers(1, &vbo);
|
90
|
+
|
91
|
+
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
//頂点
|
96
|
+
|
97
|
+
GLint attrib = getAttribLocation("vertexPosition");
|
98
|
+
|
99
|
+
glEnableVertexAttribArray(attrib);
|
100
|
+
|
101
|
+
glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW);
|
102
|
+
|
103
|
+
glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)0);
|
104
|
+
|
105
|
+
setBindAttribVertex("vertexPosition");
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
//UV
|
110
|
+
|
111
|
+
attrib = getAttribLocation("vertexUV");
|
112
|
+
|
113
|
+
glEnableVertexAttribArray(attrib);
|
114
|
+
|
115
|
+
glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW);
|
116
|
+
|
117
|
+
glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 5));
|
118
|
+
|
119
|
+
setBindAttribVertex("vertexUV");
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
//法線
|
126
|
+
|
127
|
+
attrib = getAttribLocation("vertexNorm");
|
128
|
+
|
129
|
+
glEnableVertexAttribArray(attrib);
|
130
|
+
|
131
|
+
glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW);
|
132
|
+
|
133
|
+
glVertexAttribPointer(attrib, 3, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 3));
|
134
|
+
|
135
|
+
setBindAttribVertex("vertexNorm");
|
34
136
|
|
35
137
|
|
36
138
|
|
@@ -38,37 +140,13 @@
|
|
38
140
|
|
39
141
|
|
40
142
|
|
41
|
-
std::cout << "ああ" << std::endl;
|
42
143
|
|
43
144
|
|
145
|
+
//アルファブレンド有効
|
44
146
|
|
45
|
-
|
147
|
+
glEnable(GL_BLEND);
|
46
148
|
|
47
|
-
|
48
|
-
|
49
|
-
sprite->setUniform3f("uAmbientLight", glm::vec3(0.2, 0.2, 0.2));
|
50
|
-
|
51
|
-
sprite->setUniform3f("uDirLight.mDirection", glm::vec3(0.0, -0.7, -0.7));
|
52
|
-
|
53
|
-
sprite->setUniform3f("uDirLight.mDiffuseColor", glm::vec3(0, 1, 0));
|
54
|
-
|
55
|
-
sprite->setUniform3f("uDirLight.mSpecColor", glm::vec3(0.5, 1, 0.5));
|
56
|
-
|
57
|
-
|
149
|
+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
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));
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
sprite->setDisable();
|
70
|
-
|
71
|
-
|
72
150
|
|
73
151
|
}
|
74
152
|
|