Bonjour,
Je fais des tests de shaders et j'ai voulu essayer un pixel shader tout simple, qui me renvoi le pixel avec sa couleur d'origine, or lorsque j'active le programme dans mon code opengl, tout devient noir ! voici mon code du ps en assembleur :
et celui en cg que j'ai fait au cas ou...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ps_2_0 dcl v0 mov oC0, v0
pour le code cg, ya de l'optimisation a faire, mais c'est pas grave ! l'important c'est que ces programmes ne me donnent rien ! voici comment je charge mon shader :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 struct pixel_in { float3 color : COLOR0; }; struct pixel_out { float3 color : COLOR; }; pixel_out main(pixel_in IN, uniform sampler2D texture :TEXUNIT0) { pixel_out OUT; float3 color = IN.color; OUT.color = color; return OUT; }
a mon initialisation d'opengl, je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 GLbyte *load_program_string(const GLbyte *filename) { static GLbyte program_string[16384]; FILE *fp; GLuint len; fp = fopen(filename, "r"); if(!fp) return NULL; len = fread(program_string, 1, 16384, fp); program_string[len] = '\0'; fclose(fp); return program_string; } GLuint load_shader(GLuint type, const GLbyte *filename) { GLuint shader_num; GLbyte *program_string; program_string = load_program_string(filename); glEnable(type); glGenProgramsARB(1, &shader_num); glBindProgramARB(type, shader_num); glProgramStringARB(type, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(program_string), (const GLbyte *)program_string); glDisable(type); return shader_num; }
et lors de l'affichage de mes polygones, je fais ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)wglGetProcAddress("glGenProgramsARB"); glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)wglGetProcAddress("glBindProgramARB"); glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)wglGetProcAddress("glProgramStringARB"); glActiveTextureARB = (PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTextureARB"); glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB"); shaderid=load_shader(GL_FRAGMENT_PROGRAM_ARB, "ps.pso");
au final, lorsque j'appuie sur P pour activer mon shader, le joli cube que j'avais a l'ecran disparait et laisse un fond noir...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if(keys['P']) { glEnable(GL_FRAGMENT_PROGRAM_ARB); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shaderid); } else { glDisable(GL_FRAGMENT_PROGRAM_ARB); }
Ma configuration :
Athlon 64 3000+
2Go PC3200
Leadtek 6600GT
Voila, je ne sais pas si certain d'entre vous ont déja eu ce probleme, mais c'est tres génant, car je ne peux pas avancer !
Avez vous une idée ? merci d'avance !
Si quelqu'un a un bout de code a me proposer pour que je le teste... je travaille sous windows avec VC++ 6.0
Désolé si ma question à déja été posée, j'ai fait des recherche sur le forum mais je n'ai rien trouvé de correspondant.
Partager