OpenGL ESシェーダコードはC文字列として定義されています。シェーダコードをより直感的に書くには、以下のようにSHADER_STRING(code)
という名前のマクロを定義します。しかし、私はGCCの警告unknown escape sequence: '\#'
に遭遇し、それを抑止したり修正したりする方法を知らない。 #version
は、OpenGL ES 3.0でサポートされているプリプロセッサですのでGCC:警告を修正または抑制する方法:未知のエスケープシーケンス: '#'
のコード例では、それ以外のコードは
\#version 300 es
void main() { }
になるだろう、\\#
で\#
を置き換えるために無効だ、
#include <stdio.h>
int main(void)
{
#define _SHADER_STRING(code) #code
#define SHADER_STRING(code) _SHADER_STRING(code)
// OpenGL ES Shader codes
char vShaderStr[] = SHADER_STRING(
\#version 300 es \n
void main()
{
// ... some OpenGL ES codes.
});
printf("%s\n", vShaderStr);
return 0;
}
を下回っていますOpenGLシェーダコンパイラは、\#version
について何も知らないと不平を言うでしょう。
単に「#version ...」とは何ですか? – xanoetux
あなたの[mcve]はコンパイルされず、あなたの質問は明確ではありません。 – Stargateur
'TS_SHADER_STRING'とは何ですか?コードフラグメントには 'SHADER_STRING'しか定義されていません。 '\#'は単に上記の警告とともに '#'になります。なぜ逃げるのか?私はあなたがこのコードを別の場所からコピーして貼り付け、その間に構文解析のコンテキストを取り出すという感覚を持っています。 – dhke