Bir FreeType2 öğreticisi here'u takip etmeye çalışıyorum ancak gölgelendiricilerin bağlanmasını sağlayamıyorum.OpenGL ES2.0: Bu gölgelendiricilerin nesi var?
Bu gölgelendiricilerde bir sorun var mı?
Vertex Shader:
attribute vec4 coord;
varying vec2 texcoord;
void main()
{
gl_Position = vec4(coord.xy, 0, 1);
texcoord = coord.zw;
}
Fragment shader:
varying vec2 texcoord;
uniform sampler2D tex;
uniform vec4 color;
void main()
{
gl_FragColor = vec4(1, 1, 1, texture2D(tex, texcoord).r) * color;
}
başarıyla var aşağıda fonksiyonu basit katı dolgu ve basit dokular yapmak için kendi shader ile çağrıları kullanır. Yukarıdaki gölgelendiricileri neden kullanamadığımı bilmiyorum. İşte
hangi derleyiciler kod ve programa gölgelendiricileri bağlar:BUILD ERROR: One or more attached shaders not successfully compiled
GÜNCELLEME:
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);
...
Ben bağlama aşamasında aşağıdaki çıktıyı almak Ben gölgelendirici derleme çek sabit . Herkesten aynı öğretici izlemeye çalışıyorum için
precision mediump float;
aşağıdaki parça gölgelendirici altında çalışır: aşağıdaki satır ihtiyaç vardı çünkü
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'
O "1.0" yerine "0" ve "1" sorunu burada, ama her zaman, yani yerine ints "0.0" çifte ve olmayabilir. Bazı GPU'lar bu konuda seçici. – reden
Hata kendini açıklayıcı görünüyor. Bağlantı anında, bir tanesi derlenemeyen 2 nesneyi birleştiriyorsunuz. Neden "BuildShader" işlevini kontrol edip hata ayıklamıyorsunuz? –
'GLint compileSuccess; Bu değişkeni başlatmayı unuttun. –