質問編集履歴

3

文章を修正

2021/06/18 07:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,12 @@
1
- 提示コードのvoid Draw();関数ですがコメント部の////内部の関数で例外エラーが発生してしまいます。itr->face のface に値がうまく入っていないのだと思いコンストラクタのfor文を確認しましたがしっかりとfaceが代入されていますこれはなぜ例外エラーが出るのでしょか?原因がわかりません。
2
-
3
-
4
-
5
-
1
+ 提示コードのvoid Draw();関数ですがコメント部の////内部の関数で例外エラーが発生してしまいます。itr->face のface に値がうまく入っていないのだと思いコンストラクタのfor文を確認しましたがしっかりとfaceが代入されていますこれはなぜ例外エラーが出るのでしょか?原因がわかりません。一番怪しいのはft_Load_glyph();関数なのですが引数を確認しましたが正しいと思います。
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ FreeTyper: https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#ft_load_glyph
6
10
 
7
11
 
8
12
 

2

文章を修正

2021/06/18 07:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -174,15 +174,7 @@
174
174
 
175
175
 
176
176
 
177
- //FreeTypeを初期化
177
+
178
-
179
- FT_Face face; //フェイス
180
-
181
- FT_Face fc = nullptr; //フェイス
182
-
183
- FT_Library ft; //freetype
184
-
185
-
186
178
 
187
179
  //初期化
188
180
 
@@ -248,7 +240,7 @@
248
240
 
249
241
  }
250
242
 
251
- //////////////////////////////////////////////////////////////////////////////////////////////////
243
+ /////////////////////////////////////////////////////////////////////////////////////////////////
252
244
 
253
245
  for (int i = 0; txt[i] != L'\0'; i++)
254
246
 
@@ -260,8 +252,6 @@
260
252
 
261
253
  //グリフをロード
262
254
 
263
- FT_Load_Glyph(fc, FT_Get_Char_Index(face, txt[i]), FT_LOAD_RENDER);
264
-
265
255
 
266
256
 
267
257
 
@@ -274,12 +264,44 @@
274
264
 
275
265
  texture,
276
266
 
277
- fc
267
+ face
278
268
 
279
269
  };
280
270
 
271
+
272
+
281
273
  glGenTextures(1, &ch.textureID);
282
274
 
275
+ glBindTexture(GL_TEXTURE_2D, ch.textureID);
276
+
277
+ FT_Load_Glyph(face, FT_Get_Char_Index(face, txt[i]), FT_LOAD_RENDER);
278
+
279
+ ch.face = face;
280
+
281
+
282
+
283
+ glTexImage2D(
284
+
285
+ GL_TEXTURE_2D,
286
+
287
+ 0,
288
+
289
+ GL_RED,
290
+
291
+ face->glyph->bitmap.width,
292
+
293
+ face->glyph->bitmap.rows,
294
+
295
+ 0,
296
+
297
+ GL_RED,
298
+
299
+ GL_UNSIGNED_BYTE,
300
+
301
+ face->glyph->bitmap.buffer
302
+
303
+ );
304
+
283
305
 
284
306
 
285
307
 
@@ -290,11 +312,11 @@
290
312
 
291
313
  }
292
314
 
293
- ////////////////////////////////////////////////////////////////////////////////////////////////
315
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
294
316
 
295
317
  //グリフ解放
296
318
 
297
- FT_Done_Face(face);
319
+ // FT_Done_Face(face);
298
320
 
299
321
  FT_Done_FreeType(ft);
300
322
 
@@ -350,7 +372,7 @@
350
372
 
351
373
 
352
374
 
353
-
375
+
354
376
 
355
377
 
356
378
 
@@ -358,55 +380,25 @@
358
380
 
359
381
  {
360
382
 
383
+
384
+
361
-
385
+ //テクスチャタイプを設定
362
-
386
+
363
- ///////////////////////////////////////////////////////////////////////////////////
387
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
388
+
389
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
390
+
391
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
392
+
393
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
394
+
395
+
364
396
 
365
397
  //テクスチャを生成
366
398
 
367
- std::cout << "いいいいい" << std::endl;
399
+
368
-
369
-
370
-
371
- glTexImage2D(
400
+
372
-
373
- GL_TEXTURE_2D,
374
-
375
- 0,
376
-
377
- GL_RED,
378
-
379
- itr->face->glyph->bitmap.width,
380
-
381
- itr->face->glyph->bitmap.rows,
382
-
383
- 0,
384
-
385
- GL_RED,
386
-
387
- GL_UNSIGNED_BYTE,
388
-
389
- itr->face->glyph->bitmap.buffer
390
-
391
- );
392
-
393
- /////////////////////////////////////////////////////////////////////////////////
401
+ ///////////////////////////////////////////////////////////////////////////////////
394
-
395
-
396
-
397
- std::cout << "ああああ" << std::endl;
398
-
399
-
400
-
401
- //テクスチャタイプを設定
402
-
403
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
404
-
405
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
406
-
407
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
408
-
409
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
410
402
 
411
403
 
412
404
 
@@ -414,7 +406,7 @@
414
406
 
415
407
  float ypos = pos.y - (itr->face->glyph->bitmap.rows - itr->face->glyph->bitmap_top) * 1.0f;
416
408
 
417
-
409
+ //////////////////////////////////////////////////////////////////////////////////////
418
410
 
419
411
  float w = itr->face->glyph->bitmap.width * 1.0f;
420
412
 
@@ -444,8 +436,6 @@
444
436
 
445
437
 
446
438
 
447
- glBindTexture(GL_TEXTURE_2D, itr->textureID);
448
-
449
439
  glBindBuffer(GL_ARRAY_BUFFER, vbo);
450
440
 
451
441
  glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);

1

提示コードを追加

2021/06/18 06:58

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,106 @@
6
6
 
7
7
 
8
8
 
9
+ ```hpp
10
+
11
+ #ifndef ___TEXT_HPP_
12
+
13
+ #define ___TEXT_HPP_
14
+
15
+ #include "Transform_2D.hpp"
16
+
17
+ #include "Shader.hpp"
18
+
19
+ #include "glm/glm.hpp"
20
+
21
+ #include <map>
22
+
23
+ #include "ft2build.h"
24
+
25
+ #include FT_FREETYPE_H
26
+
27
+
28
+
29
+ /*#########################################################################
30
+
31
+ # 文字描画クラス
32
+
33
+
34
+
35
+ 説明
36
+
37
+ 文字を描画する
38
+
39
+ ###########################################################################*/
40
+
41
+ namespace FrameWork
42
+
43
+ {
44
+
45
+ class Window;
46
+
47
+
48
+
49
+ class Text : protected FrameWork::Transform_2D
50
+
51
+ {
52
+
53
+
54
+
55
+ public:
56
+
57
+ Text(int fontSize, const char* str, ...); //コンストラクタ
58
+
59
+ ~Text(); //デストラクタ
60
+
61
+
62
+
63
+ void Draw(glm::vec2 pos,glm::vec3 color); //描画
64
+
65
+ private:
66
+
67
+
68
+
69
+ struct Character
70
+
71
+ {
72
+
73
+ unsigned int textureID; // グリフのテクスチャID
74
+
75
+ FT_Face face; //フェイス
76
+
77
+ };
78
+
79
+
80
+
81
+ std::vector<Character> character; //文字データ
82
+
83
+ std::shared_ptr<Window> windowContext; //ウインドウコンテキスト
84
+
85
+ int charSize; //文字の大きさ(ピクセル)
86
+
87
+
88
+
89
+ //FreeType
90
+
91
+ //FreeTypeを初期化
92
+
93
+ FT_Face face = nullptr; //フェイス
94
+
95
+ FT_Face fc = nullptr; //フェイス
96
+
97
+ FT_Library ft; //freetype
98
+
99
+
100
+
101
+ };
102
+
103
+ }
104
+
105
+ #endif
106
+
107
+ ```
108
+
9
109
 
10
110
 
11
111
  ```cpp