Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1811 connectés 

  FORUM HardWare.fr
  Programmation
  C

  wglcreatecontextarb ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

wglcreatecontextarb ne fonctionne pas

n°2444800
yann58
Posté le 16-04-2023 à 00:57:10  profilanswer
 

A l'aide :
 
 
Bonjour,
J'ai un projet opengl fonctionne quand je passe wglCreateContext (mais la fonction est obsoléte et sera retirer dans le long terme),
Mais quand je veux utiliser la fonction de remplacement 'wglCreateContextAttribsARB' , aucun primitive dessiner ,seul la fonction glClearColor fonctionne.
 
Sur le web il n'y pas de sample utilisant la fonction wglCreateContextAttribsARB

Code :
  1. static void
  2. init_opengl_extensions(void)
  3. {
  4. // Before we can load extensions, we need a dummy OpenGL context, created using a dummy window.
  5. // We use a dummy window because you can only set the pixel format for a window once. For the
  6. // real window, we want to use wglChoosePixelFormatARB (so we can potentially specify options
  7. // that aren't available in PIXELFORMATDESCRIPTOR), but we can't load and use that before we
  8. // have a context.
  9. WNDCLASSA window_class = { 0 };
  10. window_class.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  11. window_class.lpfnWndProc = DefWindowProcA;
  12. window_class.hInstance = GetModuleHandle(0);
  13. window_class.lpszClassName = "Dummy_WGL_djuasiodwa";
  14. if (!RegisterClassA(&window_class)) {
  15.  fatal_error("Failed to register dummy OpenGL window." );
  16. }
  17. HWND dummy_window = CreateWindowExA(
  18.  0,
  19.  window_class.lpszClassName,
  20.  "Dummy OpenGL Window",
  21.  0,
  22.  CW_USEDEFAULT,
  23.  CW_USEDEFAULT,
  24.  CW_USEDEFAULT,
  25.  CW_USEDEFAULT,
  26.  0,
  27.  0,
  28.  window_class.hInstance,
  29.  0);
  30. if (!dummy_window) {
  31.  fatal_error("Failed to create dummy OpenGL window." );
  32. }
  33. HDC dummy_dc = GetDC(dummy_window);
  34. PIXELFORMATDESCRIPTOR pfd;
  35. pfd.nSize = sizeof(pfd);
  36. pfd.nVersion = 1;
  37. pfd.iPixelType = PFD_TYPE_RGBA;
  38. pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  39.  pfd.cColorBits = 32;
  40.  pfd.cAlphaBits = 8;
  41.  pfd.iLayerType = PFD_MAIN_PLANE;
  42.  pfd.cDepthBits = 24;
  43.  pfd.cStencilBits = 8;
  44. int pixel_format = ChoosePixelFormat(dummy_dc, &pfd);
  45. if (!pixel_format) {
  46.  fatal_error("Failed to find a suitable pixel format." );
  47. }
  48. if (!SetPixelFormat(dummy_dc, pixel_format, &pfd)) {
  49.  fatal_error("Failed to set the pixel format." );
  50. }
  51. HGLRC dummy_context = wglCreateContext(dummy_dc);
  52. if (!dummy_context) {
  53.  fatal_error("Failed to create a dummy OpenGL rendering context." );
  54. }
  55. if (!wglMakeCurrent(dummy_dc, dummy_context)) {
  56.  fatal_error("Failed to activate dummy OpenGL rendering context." );
  57. }
  58. wglCreateContextAttribsARB = (wglCreateContextAttribsARB_type*)wglGetProcAddress(
  59.  "wglCreateContextAttribsARB" );
  60. wglChoosePixelFormatARB = (wglChoosePixelFormatARB_type*)wglGetProcAddress(
  61.  "wglChoosePixelFormatARB" );
  62. wglMakeCurrent(dummy_dc, 0);
  63. wglDeleteContext(dummy_context);
  64. ReleaseDC(dummy_window, dummy_dc);
  65. DestroyWindow(dummy_window);
  66. }
  67. void EnableOpenGL(HWND hWnd, HDC* hDC, HGLRC* hRC)
  68. {
  69. init_opengl_extensions();
  70. // get the device context (DC)
  71.  /*wglCreateContextAttribsARB = (wglCreateContextAttribsARB_type*)wglGetProcAddress(
  72.  "wglCreateContextAttribsARB" );
  73.  wglChoosePixelFormatARB = (wglChoosePixelFormatARB_type*)wglGetProcAddress(
  74.   "wglChoosePixelFormatARB" );*/
  75.  if ((wglCreateContextAttribsARB != NULL)&&(wglChoosePixelFormatARB!=NULL))
  76.  {
  77.   *hDC = GetDC(hWnd);
  78.  // int pixel_format_attribs[] = {
  79.  //WGL_DRAW_TO_WINDOW_ARB,     GL_TRUE,
  80.  //WGL_SUPPORT_OPENGL_ARB,     GL_TRUE,
  81.  //WGL_DOUBLE_BUFFER_ARB,      GL_TRUE,
  82.  //WGL_ACCELERATION_ARB,       WGL_FULL_ACCELERATION_ARB,
  83.  //WGL_PIXEL_TYPE_ARB,         WGL_TYPE_RGBA_ARB,
  84.  //WGL_SAMPLE_BUFFERS_ARB,  GL_TRUE ,
  85.  //WGL_COLOR_BITS_ARB,         32,
  86.  //WGL_DEPTH_BITS_ARB,         24,
  87.  //WGL_STENCIL_BITS_ARB,       8,
  88.  //0,0
  89.  // };
  90.   int pixel_format_attribs[] = {
  91.   WGL_SUPPORT_OPENGL_ARB, 1,
  92.  WGL_DRAW_TO_WINDOW_ARB, 1,
  93.  /*WGL_DRAW_TO_BITMAP_ARB, 1,*/
  94.  WGL_DOUBLE_BUFFER_ARB, 1,
  95.  //WGL_SWAP_LAYER_BUFFERS_ARB, 1,
  96.  WGL_COLOR_BITS_ARB, 32,
  97.  WGL_RED_BITS_ARB, 8,
  98.  WGL_GREEN_BITS_ARB, 8,
  99.  WGL_BLUE_BITS_ARB, 8,
  100.  WGL_ALPHA_BITS_ARB, 8,
  101.  WGL_DEPTH_BITS_ARB, 8,
  102.  WGL_STENCIL_BITS_ARB, 8,
  103.  WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB,
  104.  WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB,
  105.  0
  106.   };
  107.   int pixel_format;
  108.   UINT num_formats;
  109.   wglChoosePixelFormatARB(*hDC, pixel_format_attribs, 0, 1, &pixel_format, &num_formats);
  110.   if (!num_formats) {
  111.     fatal_error("Failed to set the OpenGL 3.3 pixel format." );
  112.   }
  113.   PIXELFORMATDESCRIPTOR pfd;
  114.   DescribePixelFormat(*hDC, pixel_format, sizeof(pfd), &pfd);
  115.   if (!SetPixelFormat(*hDC, pixel_format, &pfd)) {
  116.    fatal_error("Failed to set the OpenGL 3.3 pixel format." );
  117.   }
  118.   // Specify that we want to create an OpenGL 3.3 core profile context
  119.   int gl33_attribs[] = {
  120.    WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
  121.    WGL_CONTEXT_MINOR_VERSION_ARB, 3,
  122.    WGL_CONTEXT_PROFILE_MASK_ARB,  WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
  123.    0,
  124.   };
  125.   *hRC = wglCreateContextAttribsARB(*hDC, 0, gl33_attribs);
  126.  }
  127.  else
  128.  {
  129.   *hRC = wglCreateContext(*hDC);
  130.   wglMakeCurrent(*hDC, *hRC);
  131.   }
  132. wglMakeCurrent(*hDC, *hRC);
  133. }
  134. #endif
  135. char checkShaderCompilation(GLuint shaderID)
  136. {
  137. GLint compilationStatus = 0;
  138. // Vérification de la compilation pour le vertex shader
  139. glGetShaderiv(opengl.vertexID, GL_COMPILE_STATUS, &compilationStatus);
  140. //if (compilationStatus != GL_TRUE)
  141. {
  142.  // Nous savons que la compilation a échoué, donc nous devons savoir pourquoi
  143.  // Nous devons récupéré la taille du log
  144.  GLint logLength = 0;
  145.  char* log = NULL;
  146.  glGetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &logLength);
  147.  if (logLength > 0)
  148.  {
  149.   // Maintenant que nous avons la taille, nous pouvons alloué la mémoire suffisante pour ce log
  150.   log = (char*)malloc(logLength);
  151.   if (log == NULL)
  152.   {
  153.    fprintf(stderr, "Erreur d'allocation de mémoire pour le log de la compilation du shader\n" );
  154.    return 0;
  155.   }
  156.   glGetShaderInfoLog(shaderID, logLength, &logLength, log);
  157.   // On peut afficher le message
  158.   fprintf(stderr, "Erreur de compilation:\n%s", log);
  159.   MessageBox(NULL, log, NULL, MB_ICONHAND);
  160.   // Et on n'oublie pas de libéré la mémoire
  161.   free(log);
  162.   return 0;
  163.  }
  164.  else
  165.   return 1;
  166. }
  167. return 1; // Pas d'erreur
  168. }


 
Ca ne marche pas , et j'y suis depuis 3 heures.
 
 
 
Pour information je travaille sous Vmware player 17.01 : 17.0.1 build-21139696
 
Ce n'est pas un probléme de shader.
 
Merci

mood
Publicité
Posté le 16-04-2023 à 00:57:10  profilanswer
 

n°2444821
rat de com​bat
attention rongeur méchant!
Posté le 16-04-2023 à 17:11:39  profilanswer
 

Je ne pourrais pas te répondre, mais de manière générale, tu devrais faire attention à la mise en page de ton code, car la c'est assez indigeste. :o Aussi je suppose que tu as activé les Warnings de ton compilateur? Tu utilises lequel, GCC? Dans ce cas -Wall -Wextra -Werror à rajouter en ligne de commande.

 

EDIT: Aussi ton exemple n'est pas complet, il manque les #include au début et la main(). Pour simplifier la vie aux aidants il faut toujours donner un exemple complet (soit compilable) mais le plus court possible.


Message édité par rat de combat le 16-04-2023 à 17:29:57

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°2444906
gilou
Modérateur
Modzilla
Posté le 18-04-2023 à 12:28:58  profilanswer
 

Et il y a un #endif au milieu du code sans #if correspondant...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  wglcreatecontextarb ne fonctionne pas

 

Sujets relatifs
visual studio : Résultat de chiffres décimaux fonctionne plus[Javascript - React] useRef dans map() ne fonctionne pas
[Divers/perdu] .cmd ou .bat ne fonctionne pas[résolu] GCC optimisat. avec -ftree-vrp et code qui ne fonctionne plus
<img src="... .php"> ne fonctionne plus dans Firefox[VBA] Test cell vide ne fonctionne plus
HTML Select et OnClick() ne fonctionne pas sur SafariBatch dont la modification ne fonctionne que si je copie le fichier
[AStudio 4.2] Lien avec l'émulateur qui fonctionne mal[Batch][W10] Sortie std ne fonctionne pas sous task sched
Plus de sujets relatifs à : wglcreatecontextarb ne fonctionne pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR