質問編集履歴

3

文章を編集しました。

2021/05/19 12:33

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- mbrtoc16()関数を使ってchar型配列文字列をchar16_t型変数に格納したい。
1
+ char型配列文字列をchar16_t型変数に格納したい。
test CHANGED
File without changes

2

文章を修正

2021/05/19 12:32

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,8 @@
1
- 提示コードの/////コメント内部のコードですが const char型配列で来た文字をchar16_t型配列変数に代入したいのですがその先のforでアクセスエラー発生しす。エラーコード-1です。なぜアクセスエラーが発生するのでしょうか?
1
+ 提示コードの/////コメント内部のコードですが const char型配列で来た文字をchar16_t型配列変数に代入したいのですが文格納されせんこれはなぜでしょうか?戻り値は1です。
2
2
 
3
3
 
4
4
 
5
- エラー[ エンコード・エラー発生した場合 (次の n または それよりも少バイト数で完全で有効なマルチバイト文字の作成使用ないとき)。EILSEQ マクロの値errno保管され、変換状態は未指定です。 ]
5
+ エラー[ 1カウント されます。次の カウント を含むか、有効マルチバイト文字を入力します。 返れる値は、マルチバイト文字を完成するのに必要なバイト数す。 Wchar が null ポインターでない場合、それに相当するワイド文字wchar に格納されす。 ]
6
6
 
7
7
 
8
8
 
@@ -14,187 +14,43 @@
14
14
 
15
15
 
16
16
 
17
-
17
+ ![イメージ説明](4409ad212b5828934ba02e78a98955ba.png)
18
18
 
19
19
 
20
20
 
21
21
  ```cpp
22
22
 
23
+ #include <iostream>
23
24
 
24
-
25
- void FrameWork::Text::Draw(glm::vec2 pos, const char* text, float scale, glm::vec3 color)
25
+ int main()
26
-
27
- //void FrameWork::Text::Draw(glm::vec2 pos, std::string text,float scale, glm::vec3 color)
28
26
 
29
27
  {
30
28
 
31
- setEnable(); //シェーダーを有効にする
29
+ const char text[] = "テスト";
32
30
 
33
31
 
34
32
 
33
+
34
+
35
+ wchar_t txt[20] = { '\0' };
36
+
37
+
38
+
35
- pos.y = windowContext->getSize().y - pos.y - charSize;
39
+ int f = mbrtowc(txt, text, (size_t)strlen(text), nullptr);
40
+
41
+ std::cout << f << std::endl;
36
42
 
37
43
 
38
44
 
39
- //テクスチャをアクティブ
40
45
 
41
- glActiveTexture(GL_TEXTURE0);
42
-
43
- glBindVertexArray(vao);
44
-
45
-
46
-
47
- //Unform
48
-
49
- setUniform3f("textColor",color);
50
-
51
- setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, windowContext->getSize().x, 0.0f, windowContext->getSize().y));
52
-
53
-
54
-
55
- /////////////////////////////////////////////////////////////////////
56
-
57
- char16_t* txt = nullptr;
58
-
59
- int f = mbrtoc16(txt,text,strlen(text),nullptr);
60
-
61
- std::cout << f << std::endl;
62
-
63
- ////////////////////////////////////////////////////////////////////
64
-
65
-
66
46
 
67
47
  for (int i = 0; txt[i] != '\0'; i++)
68
48
 
69
49
  {
70
50
 
51
+ std::cout << txt[i] << std::endl;
71
52
 
72
-
73
- unsigned int texture = 0;
74
-
75
-
76
-
77
- // load character glyph
78
-
79
- FT_Load_Glyph(face, FT_Get_Char_Index(face, txt[i]), FT_LOAD_RENDER);
80
-
81
-
82
-
83
-
84
-
85
- // now store character for later use
86
-
87
- Character ch = {
88
-
89
- texture,
90
-
91
- glm::ivec2(face->glyph->bitmap.width, face->glyph->bitmap.rows),
92
-
93
- glm::ivec2(face->glyph->bitmap_left, face->glyph->bitmap_top),
94
-
95
- (unsigned int)face->glyph->advance.x
96
-
97
-
98
-
99
- };
53
+ }
100
-
101
-
102
-
103
-
104
-
105
- // generate texture
106
-
107
- glGenTextures(1, &ch.textureID);
108
-
109
- glBindTexture(GL_TEXTURE_2D, ch.textureID);
110
-
111
-
112
-
113
- glTexImage2D(
114
-
115
- GL_TEXTURE_2D,
116
-
117
- 0,
118
-
119
- GL_RED,
120
-
121
- face->glyph->bitmap.width,
122
-
123
- face->glyph->bitmap.rows,
124
-
125
- 0,
126
-
127
- GL_RED,
128
-
129
- GL_UNSIGNED_BYTE,
130
-
131
- face->glyph->bitmap.buffer
132
-
133
- );
134
-
135
- // set texture options
136
-
137
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
138
-
139
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
140
-
141
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
142
-
143
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
144
-
145
- // now store character for later use
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
- float xpos = pos.x + ch.Bearing.x * scale;
154
-
155
- float ypos = pos.y - (ch.Size.y - ch.Bearing.y) * scale;
156
-
157
-
158
-
159
- float w = ch.Size.x * scale;
160
-
161
- float h = ch.Size.y * scale;
162
-
163
- // update VBO for each character
164
-
165
- float vertices[6][4] = {
166
-
167
- { xpos, ypos + h, 0.0f, 0.0f },
168
-
169
- { xpos, ypos, 0.0f, 1.0f },
170
-
171
- { xpos + w, ypos, 1.0f, 1.0f },
172
-
173
-
174
-
175
- { xpos, ypos + h, 0.0f, 0.0f },
176
-
177
- { xpos + w, ypos, 1.0f, 1.0f },
178
-
179
- { xpos + w, ypos + h, 1.0f, 0.0f }
180
-
181
- };
182
-
183
- // render glyph texture over quad
184
-
185
- // update content of VBO memory
186
-
187
- glBindBuffer(GL_ARRAY_BUFFER, vbo);
188
-
189
- glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
190
-
191
- glBindBuffer(GL_ARRAY_BUFFER, 0);
192
-
193
-
194
-
195
- // render quad
196
-
197
- glDrawArrays(GL_TRIANGLES, 0, 6);
198
54
 
199
55
 
200
56
 
@@ -202,22 +58,10 @@
202
58
 
203
59
 
204
60
 
205
- // now advance cursors for next glyph (note that advance is number of 1/64 pixels)
206
-
207
- pos.x += ((ch.Advance >> 6) * scale); // bitshift by 6 to get value in pixels (2^6 = 64)
208
-
209
- }
210
61
 
211
62
 
212
-
213
- glBindVertexArray(0);
63
+ return 0;
214
-
215
- glBindTexture(GL_TEXTURE_2D, 0);
216
-
217
- setDisable(); //シェーダーを無効にする
218
64
 
219
65
  }
220
66
 
221
-
222
-
223
67
  ```

1

文章を修正

2021/05/19 10:35

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードの/////コメント内部のコードですが const char型配列で来た文字をchar16_t型配列変数に代入したいのですがどうすればいいのでしょか?その先のfor文でアクセスエラーが発生します。エラーコードは-1です。
1
+ 提示コードの/////コメント内部のコードですが const char型配列で来た文字をchar16_t型配列変数に代入したいのですがその先のfor文でアクセスエラーが発生します。エラーコードは-1です。なぜアクセスエラーが発生するのでしょうか?
2
2
 
3
3
 
4
4
 
@@ -16,6 +16,8 @@
16
16
 
17
17
 
18
18
 
19
+
20
+
19
21
  ```cpp
20
22
 
21
23