-1
私はFreeType2チュートリアルhereに従おうとしていますが、シェーダをリンクすることができません。OpenGL ES2.0:これらのシェーダーには何が問題なのですか?
これらのシェーダーには何か問題がありますか?
頂点シェーダ:
attribute vec4 coord;
varying vec2 texcoord;
void main()
{
gl_Position = vec4(coord.xy, 0, 1);
texcoord = coord.zw;
}
フラグメントシェーダ:
varying vec2 texcoord;
uniform sampler2D tex;
uniform vec4 color;
void main()
{
gl_FragColor = vec4(1, 1, 1, texture2D(tex, texcoord).r) * color;
}
私が正常に以下の機能を使用していますが、単純な固体充填および簡単なテクスチャを行うために自分のシェーダを呼び出します。私はなぜ上記のシェーダを使用できないのか分かりません。
ここでは、コンパイラやプログラムにシェーダをリンクコードです:私はリンクフェーズでの出力の下に取得
GLuint BuildShader(char *pszSource, GLenum shaderType)
{
GLuint hShader = glCreateShader(shaderType);
glShaderSource(hShader, 1, &pszSource, 0);
glCompileShader(hShader);
GLint compileSuccess = GL_FALSE;
glGetShaderv(hShader, GL_COMPILE_STATUS, &compileSuccess);
if(compileSuccess == GL_FALSE)
{
GLchar message[ 256 ];
glGetShaderInfoLog(hShader, sizeof(message), 0, &message[ 0 ]);
printf("SHADER (%s) %s\n", pszSource, message);
exit(1);
}
return hShader;
}
GLuint BuildProgram(char *pszVertexShaderSource, char *pszFragmentShaderSource)
{
GLuint vShader = BuildShader(pszVertexShaderSource, GL_VERTEX_SHADER);
GLuint fShader = BuildShader(pszFragmentShaderSource, GL_FRAGMENT_SHADER);
GLuint hProgram = glCreateProgram();
glAttachShader(hProgram, vShader);
glAttachShader(hProgram, fShader);
glLinkProgram(hProgram);
GLint linkSuccess;
glGetProgramiv(hProgram, GL_LINK_STATUS, &linkSuccess);
if(linkSuccess == GL_FALSE)
{
GLchar message[ 256 ];
glGetProgramInfoLog(hProgram, sizeof(message), 0, &message[ 0 ]);
printf("BUILD %s\n", message);
exit(1);
}
return hProgram;
}
...
g_FontProgram = BuildProgram(vsFont, fsFont);
...
:
BUILD ERROR: One or more attached shaders not successfully compiled
UPDATE:私はシェーダのコンパイルチェックを固定しているが、 。今、私は次のエラーを取得する:
precision mediump float;
同じチュートリアルに従うことをしようとする他の誰のために、以下のフラグメントシェーダが下に動作します:
SHADER (varying vec2 texcoord; uniform sampler2D tex; uniform vec4 color; void main() { gl_FragColor = vec4(1, 1, 1, texture2D(tex, texcoord).r) * color; }) ERROR: 0:1: 'vec2' : declaration must include a precision qualifier for type
ERROR: 0:1: 'vec4' : declaration must include a precision qualifier for type
ERROR: 0:1: Use of undeclared identifier 'texcoord'
ERROR: 0:1: Use of undeclared identifier 'color'
これは問題ではないかもしれませんが、intではなく、常に "0"と "1"の代わりに "0.0"と "1.0"の代わりに2倍です。いくつかのGPUはそのことを気にしています。 – reden
エラーは自明であるように見えます。リンクの瞬間に、2つのオブジェクトをリンクしていますが、そのうちの1つはコンパイルに失敗しました。なぜ "BuildShader"関数をデバッグしてエラーをチェックしないのですか? –
'GLint compileSuccess;'この変数の初期化を忘れました。 –