PDA

Visualizza la versione completa : [C++] QT thread e risultati diversi in debug


giuseppe500
29-12-2012, 12:54
ciao.
Sto utilizzando le librerie qt , in particolare con opengl.
queste librerie utilizzano il multithreading.
Il problema che quando provo a fare il debug ottengo dei risultati diversi.
mi chiedevo se questo fosse dovuto appunto ai thread o se devo rivedere qualcos altro nel programma relativo magari ai driver della scheda video.
Per spiegare:
ho questo codice:


if (context.supportsObjectSharing()) {
positionBuffer = context.createGLBuffer
(vertexBuffer, QCLMemoryObject::WriteOnly);
texCoordBuffer = context.createGLBuffer
(texBuffer, QCLMemoryObject::WriteOnly);
} else
{
positionBuffer = context.createBufferDevice
(num * sizeof(GLfloat) * 4, QCLMemoryObject::WriteOnly);
texCoordBuffer = context.createBufferDevice
(num * sizeof(GLfloat) * 2, QCLMemoryObject::WriteOnly);
}

e supportsObjectSharing una funzione che relativa appunto al multithreading(scusate la mia ignoranza in merito)
a volte in debug ,entra nel context.supportsObjectSharing() come se fossse true e a volte no.
cosa puo essere?
grazie.

MegaAlchimista
01-01-2013, 00:32
Che versione di qt usi? Quale Ide? Quale compilatore?
Cosa torna supportsObjectSharing() ?

giuseppe500
02-01-2013, 11:29
allora uso qt 4.8, visual studio 2010 e supportsObjectSharing() ritorna bool, ma penso sia una cosa relaticva al multithreading.
grazie.
ciao.

MegaAlchimista
02-01-2013, 15:11
Ok allora sono andato a guardarmi la documentazione di Qt (non conoscevo questa classe, ne OpenCL) e non c' nulla a riguardo del tuo problema, quindi credo che non dipenda da Qt ma da OpenCl in se.
Sono andato sul sito di khronos ed ho crecato un po nella documentazione.
Qui (http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clGetGLContextInfoKHR.html) ho trovato la magica frase

OpenCL device(s) corresponding to an OpenGL context may be queried. Such a device may not always exist (for example, if an OpenGL context is specified on a GPU not supporting OpenCL command queues, but which does support shared CL/GL objects), and if it does exist, may change over time.
Cosa importante: che dalla documentazione di Qt non si evinceva, sembrava che fosse costante su ogni macchina, quindi questo implica che la classe probabilmente funziona in modo corretto e che il tuo debug ha ragione.
Per quanto riguarda il multithreading Qui (http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/cl_khr_gl_sharing.html) C' una spiegazione su come funziona e su cosa viene messo in condivisione fra l'openGL context e l'OpenCL context.

Infine, per venire a capo del problema, ho trovato questo documento in pdf che dovrebbe spiegare bene come funziona il tutto (quindi magari spiega anche perch quel bool pu cambiare nel tempo)

--> click qui per il pdf <-- (http://www.khronos.org/registry/cl/specs/opencl-1.2-extensions.pdf#page=39)
In particolare mi sembrano indicati i capitoli 9.6 e 9.7! Comunque vedi tu se riesci a venirne a capo e facci sapere

Loading