Bonjour,
Je cherche à faire du rendu offscreen avec une fenetre glut sous linux.
Quelqu'un saurait où je pourrais trouver du code comportant un rendu offscreen avec des p-buffers tournant sous linux avec une fenetre glut?
Bonjour,
Je cherche à faire du rendu offscreen avec une fenetre glut sous linux.
Quelqu'un saurait où je pourrais trouver du code comportant un rendu offscreen avec des p-buffers tournant sous linux avec une fenetre glut?
Oyo
voilà un site qui pourra t'aider
http://www.codesampler.com/oglsrc/og...reen_rendering
bon l'exemple est pour win32, mais c'est tt à fait possible de faire ça sous linux je pense
Il y a plus récent:
http://www.codesampler.com/oglsrc/oglsrc_14.htmhttp://www.codesampler.com/oglsrc/oglsrc_14.htm#ogl_frame_buffer_object[/url]
Jc
houla... les P-Buffer c'est vraiment caca
si tu a moyen, regarde plutot du coté des FBO, les P-Buffer presentant une utilisation inutilement complexe et surtout pas multi plateforme du tout...
Les codes que je trouve ne marche pas avec l'extension GLX_SGIX_pbuffer (de linux). Malheureusement mes drivers ne prennent pas en compte les fbo (et je peux pas les mettre a jour).
Ca m'à l'air bien compliqué ces pbuffers alors si quelqu'un connait un tuto ou du code qui marxhe avec cette extension je suis preneur.
Sinon tu peux faire ça :
tu crées une image vide aux dimensions de ta viewport
pour le rendu offscreen tu fait :
et le tour est joué bon j'ai peut être pas mis le bon nom aux fonctions car je n'ai pas mon code sous la main... dsl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 glReadBuffer(GL_BACK); glCopySubImage2D("ton image créée en mémoire");
Il me semble que glCopySubImage2D("ton image créée en mémoire) repasse par le CPU . Or je dois rester sur le GPU en faisant du render to texture.
de mon point de vue, si ta carte ne supporte pas les FBO tu ne peux pas faire autrement
La solution de Bob.Killer est du "render to texture" portable (contrairement aux pbuffers)
Je sais bien qu'il vaut mieux utiliser les fbo mais j'ai pas le choix, j'ai aussi entendu parler des pbo, vous croyez que c'est utilisable pour du render to texture?
si ta carte ne supporte pas les fbo je doute qu'elle supporte les pbo vu que l'extension est plus récente
vu le peu de doc sur cette extension je ne saurai dire si elle est utilisable pour du "render to texture"
tu peux regarder ce post :
http://www.developpez.net/forums/viewtopic.php?t=404342
il concerne un outil te permettant de savoir ce que la carte supporte côté extension opengl entre autres
tu peu aussi utiliser l'extension pbuffer de glx, mais pour ca il va falloir que tu abandone glut et que mette les mains dans la Xlib
voici le code que j'utilise pour creer un pbuffer glx :
ensuite glXMakeCurrent pour activer le pbuffer. (winContext est le context de te fenetre (pour le partage des VBO, display lists, et autres)
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 XVisualInfo* visInfo; GLXFBConfig* fbConf; int tmpDW; int visAttribs [] = {GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT | GLX_WINDOW_BIT, GLX_DEPTH_SIZE, 16, 0 }; int pbufAttribs [] = { GLX_PBUFFER_WIDTH, width, GLX_PBUFFER_HEIGHT, height, GLX_LARGEST_PBUFFER, true, 0 }; if (!(m_display = XOpenDisplay (NULL))) { g_log->write ("[Error] XOpenDisplay", MW_ERROR); return; } if (!glXQueryExtension (m_display, &tmpDW, &tmpDW)) { g_log->write ("[Error] glXQueryExtension", MW_ERROR); return; } if (!(fbConf = glXChooseFBConfig (m_display, DefaultScreen(m_display), visAttribs, &tmpDW))) { g_log->write ("[Error] glXChooseFBConfig", MW_ERROR); return; } if (!(m_pbuffer = glXCreatePbuffer (m_display, fbConf[0], pbufAttribs))) { g_log->write ("[Error] glXCreatePbuffer", MW_ERROR); return; } if (!(visInfo = glXGetVisualFromFBConfig (m_display, fbConf[0]))) { g_log->write ("[Error] glXGetVisualFromFBConfig", MW_ERROR); return; } if (!(m_context = glXCreateContext (m_display, visInfo, winContext, true))) { g_log->write ("[Error] glXCreateContext", MW_ERROR); return; } XFree (visInfo); XFree (fbConf); m_width = width; m_height = height;
normalement toutes les fonctions glX sont dans le manuel (man nomFonction)
Finallement, je vais exporter l'appli sous windows et utiliser les fbo(et cette fois ci je dispose des drivers adéquats).
Merci à tous pour votre aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager