Soyez le premier à donner votre avis sur cette source.
Vue 2 326 fois - Téléchargée 652 fois
voici le bout de prog intéressant; .data Name_glCreateShader BYTE "glCreateShader",0 Name_glIsShader BYTE "glIsShader",0 Name_glDeleteShader BYTE "glDeleteShader",0 Name_glShaderSource BYTE "glShaderSource",0 Name_glCompileShader BYTE "glCompileShader",0 Name_glGetShaderiv BYTE "glGetShaderiv",0 Name_glCreateProgram BYTE "glCreateProgram",0 Name_glDeleteProgram BYTE "glDeleteProgram",0 Name_glAttachShader BYTE "glAttachShader",0 Name_glLinkProgram BYTE "glLinkProgram",0 Name_glGetProgramiv byte "glGetProgramiv",0 Name_glUseProgram BYTE "glUseProgram",0 Name_glGetShaderInfoLog BYTE "glGetShaderInfoLog",0 ErrCompilPixelShader BYTE "Erreur compilation du pixel shader",0 ErrCompilVertexShader byte "Erreur compilation du vertex shader",0 ;un vertex shader qui ne fait rien de plus que le FFP ;----------------------------------------------------- CodeSourceVertex_Shader BYTE "void main(void)",0dh,0ah BYTE "{",0dh,0ah BYTE "gl_FrontColor = gl_Color;",0dh,0ah BYTE "gl_Position = ftransform();",0dh,0ah BYTE "}",0 ;un pixel shader qui définit le couleur de sortie des pixels à vert ;------------------------------------------------------------------- CodeSourcePixel_Shader BYTE "void main(void)",0dh,0ah BYTE "{",0dh,0ah BYTE "gl_FragColor = vec4(0.0,1.0,0.0,1.0);",0dh,0ah BYTE"}",0 .data? glCreateShaderID dword ? glIsShaderID dword ? glDeleteShaderID dword ? ID_vertex_shader dword ? ID_pixel_shader dword ? glShaderSourceID dword ? glGetShaderivID dword ? glCompileShaderID dword ? glCreateProgramID dword ? glDeleteProgramID dword ? glAttachShaderID DWORD ? glLinkProgramID dword ? glGetProgramivID dword ? glUseProgramID dword ? glGetShaderInfoLogID DWORD ? Status dword ? program dword ? TailleMessErrCompile dword ? StatusLinkage dword ? PcodeSourceVertex_Shader dword ? PCodeSourcePixel_Shader dword ? IDbuffMessErr dword ? .code ;-------------- AffichScene proc ;obtention des pointeurs de fonctions ;----------------------------------- invoke wglGetProcAddress,offset Name_glCreateShader mov glCreateShaderID,eax invoke wglGetProcAddress,offset Name_glIsShader mov glIsShaderID,eax invoke wglGetProcAddress,offset Name_glDeleteShader mov glDeleteShaderID,eax invoke wglGetProcAddress,offset Name_glShaderSource mov glShaderSourceID,eax invoke wglGetProcAddress,offset Name_glCompileShader mov glCompileShaderID,eax invoke wglGetProcAddress,offset Name_glGetShaderiv mov glGetShaderivID,eax invoke wglGetProcAddress,offset Name_glCreateProgram mov glCreateProgramID,eax invoke wglGetProcAddress,offset Name_glDeleteProgram mov glDeleteProgramID,eax invoke wglGetProcAddress,offset Name_glAttachShader mov glAttachShaderID,eax invoke wglGetProcAddress,offset Name_glLinkProgram mov glLinkProgramID,eax invoke wglGetProcAddress,offset Name_glGetProgramiv mov glGetProgramivID,eax invoke wglGetProcAddress,offset Name_glUseProgram mov glUseProgramID,eax invoke wglGetProcAddress,offset Name_glGetShaderInfoLog mov glGetShaderInfoLogID,eax ;obtention des ID des shaders ;---------------------------- push GL_VERTEX_SHADER call glCreateShaderID mov ID_vertex_shader,eax push GL_FRAGMENT_SHADER call glCreateShaderID mov ID_pixel_shader,eax ;on remplit les objets ID_vertex_shader et ID_pixel_shader ;avec leur code source respectifs ;------------------------------- push 0 lea eax,CodeSourceVertex_Shader mov PcodeSourceVertex_Shader,eax lea eax,PcodeSourceVertex_Shader push eax ;paramètre=double pointeur push 1 push ID_vertex_shader call glShaderSourceID push 0 lea eax,CodeSourcePixel_Shader mov PCodeSourcePixel_Shader,eax lea eax,PCodeSourcePixel_Shader push eax push 1 push ID_pixel_shader call glShaderSourceID ;on compile le shader ;-------------------- push ID_vertex_shader call glCompileShaderID push ID_pixel_shader call glCompileShaderID ;verification du succes de la compilation ;--------------------------------------- mov eax,1 mov Status,eax lea eax,Status push eax push GL_COMPILE_STATUS push ID_vertex_shader call glGetShaderivID ;récuperation du message d'erreur envoyé par openGL ;lors de la compilation du vertex shader ;-------------------------------- cmp dword PTR[Status],1 je @f invoke ERR,ID_vertex_shader,addr ErrCompilVertexShader @@: mov eax,1 mov Status,eax lea eax,Status push eax push GL_COMPILE_STATUS push ID_pixel_shader call glGetShaderivID ;récuperation du message d'erreur envoyé par openGL ;lors de la compilation du pixel shader ;-------------------------------- cmp dword PTR[Status],1 je @f invoke ERR,ID_pixel_shader,addr ErrCompilPixelShader @@: ;--------------------- ;utilisation du shader ;--------------------- ;1: creation du prog qui contiendra nos shaders ;---------------------------------------------- call glCreateProgramID mov program,eax ;2:incorporation des nos shaders à notre prog ;-------------------------------------------- push ID_vertex_shader push program call glAttachShaderID push ID_pixel_shader push program call glAttachShaderID ;3:linkage du program=compilation des shaders contenu dans le prog ;--------------------------------- push program call glLinkProgramID ;4:on verifie si le linkage s'est bien passé ;----------------------------------------------- lea eax,StatusLinkage push eax push GL_LINK_STATUS push program call glGetProgramivID ;en retour StatusLinkage doit être=GL_TRUE (=1),à tester ;5:activation du program contenant les shaders ;(= désactivation du mode Fixed Function Pipeline de la carte graphique) ;--------------------------------------------------- push program call glUseProgramID ;definit le prog de shaders actifs ;6:dessin de l'objet qui verra le rendu de chaqu'un de ses ;vertex traité par le shader ;------------------------------------------------------- ;++++++++++++++++++++++++ invoke glColor3f,P1,P0,P0 ;cette ligne n'est pas prise en compte ;car c'est le shader qui à la main et pas le FFP ;++++++++++++++++++++++++ invoke glBegin,GL_QUADS invoke glVertex3f,P0V5,P0,M0V5 invoke glVertex3f,P0V5,P0V5,M0V5 invoke glVertex3f,M0V5,P0V5,M0V5 invoke glVertex3f,M0V5,P0,M0V5 invoke glEnd ;7:on repasse en mode FFP ;---------------------- push 0 call glUseProgramID ;8:on supprime le shader ;--------------------- push ID_vertex_shader call glDeleteShaderID push ID_pixel_shader call glDeleteShaderID ;9:on supprime le prog ;------------------- push program call glDeleteProgramID ret AffichScene endp ERR proc IDshr:dword,caption:dword ;--------------------------------- ;récupérer le message d'erreur renvoye par opengl ;lors de la compilation d'un shader ;et l'affiche dans un messagebox ;--------------------------------- ;IDshr=handle du shader ;caption=pointeur sur le titre de la box ;--------------------------------------- ;obtenir la taille du message d'erreur lea eax,TailleMessErrCompile push eax push GL_INFO_LOG_LENGTH push IDshr call glGetShaderivID ;allouer la mémoire necessaire mov eax,TailleMessErrCompile inc eax ;+1 pour le caractere zero terminal invoke GlobalAlloc,GMEM_FIXED,eax mov IDbuffMessErr,eax ;stocker le message d'erreur dans cette memoire push IDbuffMessErr lea eax,TailleMessErrCompile push eax mov eax,TailleMessErrCompile push eax push IDshr call glGetShaderInfoLogID ;ajout du zero terminal mov eax,IDbuffMessErr add eax,TailleMessErrCompile mov dword ptr[eax],0 ;afficher le message d'erreur invoke MessageBox,0,IDbuffMessErr,caption,0 ;supprimer la mémoire allouée mov eax,IDbuffMessErr invoke GlobalFree,eax ret ERR endp
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.