以下のコードですが va_start();のコードで[ varargs 中に __va_start intrinsic を許しました。 ] というエラーが発生します。参考サイトを見てva_listのコピーを作成してva_copyを使ってコピーしてみましたが同じエラーが発生します。エラーの意味はどういった意味なのでしょうか?
参考サイト: https://www.jpcert.or.jp/sc-rules/c-msc39-c.html
cpp
1// ##################################### フォーマット書式描画 ##################################### 2void FrameWork::Text::DrawFormatString(glm::vec2 pos, glm::vec4 color, const char* str) 3{ 4 5 std::vector<Character> textData(0); //文字データを格納 6 7 if (str != NULL) 8 { 9/////////////////////////////////////////////////////////////////////////////////////////////// 10 //マルチバイト文字をワイド文字変換 11 wchar_t txt[1000] = { L'\0' }; 12 char text[1000] = {'\0'}; 13 14 va_list args = NULL; 15 va_start(args, str); 16 vsprintf_s(text, sizeof(text), str, args); 17 va_end(args); 18////////////////////////////////////////////////////////////////////////////////////////////// 19 int i, j, f; 20 for (i = 0, j = 0; text[j]; i++, j += f) 21 { 22 f = (int)mbrtowc(txt + i, &text[j], (size_t)MB_CUR_MAX, nullptr); 23 } 24 25 //文字をロード 26 for (int i = 0; txt[i] != L'\0'; i++) 27 { 28 //グリフをロード 29 FT_Load_Glyph(face, FT_Get_Char_Index(face, txt[i]), FT_LOAD_RENDER); 30 31 Character ch = 32 { 33 0, 34 glm::ivec2(face->glyph->bitmap.width, face->glyph->bitmap.rows), 35 glm::ivec2(face->glyph->bitmap_left, face->glyph->bitmap_top), 36 (unsigned int)face->glyph->advance.x 37 }; 38 39 glGenTextures(1, &ch.textureID); 40 glBindTexture(GL_TEXTURE_2D, ch.textureID); 41 glActiveTexture(GL_TEXTURE0); 42 43 glTexImage2D 44 ( 45 GL_TEXTURE_2D, 46 0, 47 GL_RED, 48 face->glyph->bitmap.width, 49 face->glyph->bitmap.rows, 50 0, 51 GL_RED, 52 GL_UNSIGNED_BYTE, 53 face->glyph->bitmap.buffer 54 ); 55 56 //テクスチャタイプを設定 57 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 58 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 59 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 60 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 61 62 63 //テクスチャを生成 64 textData.push_back(ch); 65 66 } 67 68 69 70 shader->setEnable(); //シェーダーを有効にする 71 glBindVertexArray(vao); 72 glBindBuffer(GL_ARRAY_BUFFER, vbo); 73 74 //色をRGBにして位置を反転 75 pos.y = FrameWork::getWindowContext()->getSize().y - pos.y - charSize; 76 float c = 1.0f / 255.0f; 77 78 //Unform 79 shader->setUniform4f("uTextColor", color * c); 80 shader->setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, FrameWork::getWindowContext()->getSize().x, 0.0f, FrameWork::getWindowContext()->getSize().y)); 81 82 for (std::vector<Character>::iterator itr = textData.begin(); itr != textData.end(); itr++) 83 { 84#define SCALE 1.0f //文字の大きさ 85 86 float xpos = pos.x + itr->Bearing.x * SCALE; 87 float ypos = pos.y - (itr->Size.y - itr->Bearing.y) * SCALE; 88 89 float w = itr->Size.x * SCALE; 90 float h = itr->Size.y * SCALE; 91 92 float vertices[6][4] = 93 { 94 { xpos, ypos + h, 0.0f, 0.0f }, 95 { xpos, ypos, 0.0f, 1.0f }, 96 { xpos + w, ypos, 1.0f, 1.0f }, 97 98 { xpos, ypos + h, 0.0f, 0.0f }, 99 { xpos + w, ypos, 1.0f, 1.0f }, 100 { xpos + w, ypos + h, 1.0f, 0.0f } 101 }; 102 103 glBindTexture(GL_TEXTURE_2D, itr->textureID); 104 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); 105 glDrawArrays(GL_TRIANGLES, 0, 6); 106 glBindTexture(GL_TEXTURE_2D, 0); 107 108 pos.x += ((itr->Advance >> 6) * SCALE); //次のグリフに進める 109#undef SCALE 110 } 111 112 glBindVertexArray(0); 113 glBindBuffer(GL_ARRAY_BUFFER, 0); 114 shader->setDisable(); //シェーダーを無効にする 115 } 116 117 118 glBindBuffer(GL_ARRAY_BUFFER, 0); 119 glBindVertexArray(0); 120} 121 122 123
回答2件
あなたの回答
tips
プレビュー