Incapable de lien compilé les shaders (GLSL)

J'ai une petite classe qui me permet de charger les shaders et les utiliser dans mon programme. Je suis en mesure de compiler les shaders, mais quand il est temps de faire le lien entre eux, ils ne veulent tout simplement pas. À l'aide de glGetProgramInfoLog j'ai obtenu l'erreur suivante du journal. Je ne comprends pas pourquoi il me dit qu'il n'y a pas de programme défini depuis la compilation a bien fonctionné...

Vertex info
-----------
(0) : error C3001: no program defined
Fragment info
-------------
(0) : error C3001: no program defined

Le code ci-dessous ne le GLSL liens:

program_ = glCreateProgramObjectARB();

if (vertex_) {
   glAttachObjectARB(program_, vertex_);
}

if (fragment_) {
   glAttachObjectARB(program_, fragment_);
}

glLinkProgramARB(program_); 

vertex_ et fragment_ sont les vertex et fragment shader, et program_ est le ProgramObjectARB.

Je voudrais savoir quelles sont les adaptations nécessaires, j'ai besoin de faire afin de faire de cette course.

Vertex shader:

varying vec4 OCPosition;   //surface positon in world's coordinates
varying vec4 ECposition;   //surface position in eye coordinates
varying vec4 ECballCenter; //ball center in eye coordinates
uniform vec4 BallCenter;   //ball center in modelling coordinates

void main()
{
  OCPosition   = gl_Vertex;
  ECposition   = gl_ModelViewMatrix * OCPosition;
  ECballCenter = gl_ModelViewMatrix * BallCenter;

  gl_Position  = gl_ProjectionMatrix * ECposition;
}

Fragment shader:

varying vec4 OCPosition;   //surface position in world coordinates
varying vec4 ECposition;   //surface position in eye coordinates
varying vec4 ECballCenter; //ball center in eye coordinates

uniform vec4  LightDir;     //light direction, should be normalized
uniform vec4  HVector;      //reflection vector for infinite light source
uniform vec4  SpecularColor;
uniform vec4  BaseColor, StripeColor;

uniform float StripeWidth;  //= 0.3
uniform float FWidth;       //= 0.005

void main()
{
vec3  normal;              //Analytically computed normal
vec4  p;                   //Point in shader space
vec4  surfColor;           //Computed color of the surface
float intensity;           //Computed light intensity
vec4  distance;            //Computed distance values
float inorout;             //Counter for computing star pattern

p.xyz = normalize(OCPosition.xyz);    //Calculate p
p.w   = 1.0;

distance.y = StripeWidth - abs(p.z);
distance.xy = smoothstep(-FWidth, FWidth, distance.xy);

surfColor = mix(BaseColor, StripeColor, distance.y);

//normal = point on surface for sphere at (0,0,0)
normal = normalize(ECposition.xyz - ECballCenter.xyz);

//Per fragment diffuse lighting
intensity  = 0.2; //ambient
intensity += 0.8 * clamp(dot(LightDir.xyz, normal), 0.0, 1.0);
surfColor *= intensity;

//Per fragment specular lighting
intensity  = clamp(dot(HVector.xyz, normal), 0.0, 1.0);
intensity  = pow(intensity, SpecularColor.a);
surfColor += SpecularColor * intensity;

gl_FragColor = surfColor;
}

EDIT - SOLUTION
Il semble que la méthode que j'ai utilisé pour lire le fichier source est incorrecte. Le shader de dresser, mais à la liaison, il ne fonctionnait pas correctement. Maintenant, j'utilise cette méthode pour lire mon fichier et le lien est correct:

char *textFileRead(char *fn) {


FILE *fp;
char *content = NULL;

int count=0;

if (fn != NULL) {
    fp = fopen(fn,"rt");

    if (fp != NULL) {

        fseek(fp, 0, SEEK_END);
        count = ftell(fp);
        rewind(fp);

        if (count > 0) {
            content = (char *)malloc(sizeof(char) * (count+1));
            count = fread(content,sizeof(char),count,fp);
            content[count] = '
char *textFileRead(char *fn) {
FILE *fp;
char *content = NULL;
int count=0;
if (fn != NULL) {
fp = fopen(fn,"rt");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
count = ftell(fp);
rewind(fp);
if (count > 0) {
content = (char *)malloc(sizeof(char) * (count+1));
count = fread(content,sizeof(char),count,fp);
content[count] = '\0';
}
fclose(fp);
}
}
return content;
}
'
; } fclose(fp); } } return content; }

OriginalL'auteur tomzx | 2009-12-21