2016-04-12 22 views
-1

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' 
+3

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

+2

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? –

+2

'GLint compileSuccess; Bu değişkeni başlatmayı unuttun. –

cevap

0

gölgelendiriciler derlemeye başarısız oldu: Şimdi aşağıdaki hatayı alıyorum OpenGL ES2.0:

precision mediump float; 
varying vec2 texcoord; 
uniform sampler2D tex; 
uniform vec4 color; 

void main() 
{ 
    gl_FragColor = vec4(1, 1, 1, texture2D(tex, texcoord).r) * color; 
}