Bonjour,
voici mon problème: j'ai une classe qui permet de faire du rendu OpenGl offscreen. Elle est basée sur un MemoryRenderer auquel on ajoute des stratégie de rendu. Pour tout ce qui est du rendu standard (gl*) et Textures 2D, ca fonctionne parfaitement.
J'ai donc voulu ajouté une stratégie qui utilise les textures 3D. Mais qd j'essaie de recuperer les pointeurs sur fonction
les pointeurs valent NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 glTexImage3D= (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D"); glTexSubImage3D= (PFNGLTEXSUBIMAGE3DPROC)wglGetProcAddress("glTexSubImage3D");
Hors je suis sur que ma carte supporte les textures 3D (les programmes d'exemple/tuto qu'on peut trouver sur le net fonctionnent).
J'ai donc pris un des ces programmes et j'ai cherché a voir qd sont "initialisées" les extensions. Avec glut, c'est après glutCreateWindow et il y en a un paquet..dont les textures3D
En revanche, dans ma stratégie de rendu, je n'ai que ces extensions :GL_WIN_swap_hint, GL_EXT_bgra, GL_EXT_paletted_texture.
Pourquoi ? Qu'est-ce que fait donc glutCreateWindow ?
De mon coté, je créé un contexte mémoire de cette manière:
Est-ce que cela peut venir du fait que ce n'est pas la stratégie qui initialise le contexte GL (la stratégie n'en a même pas conscience ..)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 // do the standard OpenGL initialization if(!(SetImagePixelFormat(*m_dib.GetDC()) && CreateImageGLContext(*m_dib.GetDC()))) { AfxMessageBox("Could not initialized OpenGl memory rendering"); exit(0); } BOOL CGlMemoryRenderer::SetImagePixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pixelDesc; pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR); pixelDesc.nVersion = 1; pixelDesc.dwFlags = PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL | PFD_SUPPORT_GDI; pixelDesc.iPixelType = PFD_TYPE_RGBA; pixelDesc.cColorBits = 24; pixelDesc.cRedBits = 0; pixelDesc.cRedShift = 0; pixelDesc.cGreenBits = 0; pixelDesc.cGreenShift = 0; pixelDesc.cBlueBits = 0; pixelDesc.cBlueShift = 0; pixelDesc.cAlphaBits = 0; pixelDesc.cAlphaShift = 0; pixelDesc.cAccumBits = 0; pixelDesc.cAccumRedBits = 0; pixelDesc.cAccumGreenBits = 0; pixelDesc.cAccumBlueBits = 0; pixelDesc.cAccumAlphaBits = 0; pixelDesc.cDepthBits = 24; pixelDesc.cStencilBits = 0; pixelDesc.cAuxBuffers = 0; pixelDesc.iLayerType = PFD_MAIN_PLANE; pixelDesc.bReserved = 0; pixelDesc.dwLayerMask = 0; pixelDesc.dwVisibleMask = 0; pixelDesc.dwDamageMask = 0; int pix_index = ChoosePixelFormat(hDC,&pixelDesc); if(!SetPixelFormat(hDC,pix_index,&pixelDesc)) { DWORD code = GetLastError(); return FALSE; } return TRUE; } BOOL CGlMemoryRenderer::CreateImageGLContext(HDC hDC) { m_hGLContext = wglCreateContext(hDC); if(m_hGLContext==NULL) return FALSE; if(wglMakeCurrent(hDC,m_hGLContext)==FALSE) return FALSE; return TRUE; }
Toute aide est la bienvenue..... Je continue a chercher et je poste les avancées significatives ....
V
Partager