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
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);
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.

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 :-).

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);
}
Merci de votre aide :-) .