Bonjour à vous tous :-).
Je suis récemment passé aux Buffer Storage, afin de réduire le goulot d'étranglement du driver à coup de glmapbuffer etc :-).
Voilà ma façon de créer le buffer
Seulement, maintenant j'ai un problème. En effet, lorsque j'effectue mon rendu, j'ai l'impression qu'il y a un problème quand je rempli le buffer car l'affichage de mes ombres diffère de la version en utilisant glmapBuffer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 glNamedBufferStorageEXT(mIdBuffer, size, NULL, GL_MAP_COHERENT_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_WRITE_BIT); mPtr = glMapNamedBufferRangeEXT(mIdBuffer, 0, size, GL_MAP_COHERENT_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_WRITE_BIT);
Après renseignements, j'ai lu qu'il fallait utilisé la synchronisation,afin d'attendre que la copie soit finis avant de continuer, mais j'avoue ne pas savoir m'en servir ...
Voilà ce que j'ai fait, les 2 fonctions englobé sont celles qui modifie les buffers... A mon avis, ce n'est pas la bonne méthode ^^, pouvez vous m'aiguiller :-).
Merci de votre aide :-) .
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 void Renderer::render(void) { mat4 viewProjection = perspective(70.0f, (float) QGM_Device->getWidth() / (float) QGM_Device->getHeight(), QGM_Device->getNear(), QGM_Device->getFar()) * QGM_Camera->getMatrix(); mPointLightRenderer.begin(); GLsync sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); QGM_NodeRoot->addLight(mat4(1.0f), viewProjection, 1.0f); // On ajoute toutes les lumières à notre rendu glClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, 0); QGM_Device->setDepthTest(true); QGM_Device->setCulling(NONE_CULLING); bindForDepthPass(); sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); mPointLightRenderer.renderDepthMap(mShadowBuffer, 0); // On crée nos DepthMaps glClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, 0); mPointLightRenderer.end(); QGM_Device->setCulling(BACK_CULLING); bindForGeometryPass(); QGM_NodeRoot->render(mat4(1.0f), viewProjection); // On rend la géométrie QGM_Device->setCulling(FRONT_CULLING); QGM_Device->setDepthTest(false); QGM_Device->setBlending(true); lightPass(); finalPass(); QGM_Device->setBlending(false); }
Partager