
Originariamente inviata da
shodan
Visto che non hai detto che API di opengl vuole i dati, suppongo che li voglia formattati cos�:
4byte per la dimensione, n bytes per i dati.
codice:
int max_size = size_of(int) + sizedata +1;
void* buff = ::operator_new(max_size); // o malloc.
memcpy(buff,&sizedata,sizeof(int)); // imposta i primi 4 byte
chiamata_api(buff);
tuttavia senza conoscere l'API in questione si pu� solo tirare a indovinare.
Hai ragione Shodan , allora scusa se mi sono espresso male.
le api opengl o vulkan su cui sono adesso accettano i dati come array di strutture ad es:
codice:
struct data
{
float[3] pos;
float[3] col;
float[2] uv
}
ecco...
std::vector<data> Vdata;
data* pDataStruct= new data();
pDataStruct->pos={1.0,0.0,0.0} //per semplificare posizione vertice 1 3 float
pDataStruct->col={1.0,0.0,0.0} //per semplificare rosso 3 float
pDataStruct->uv={1.0,0.0} //per semplificare coordinate texture 2 float
Vdata.push_back(pDataStruct);
data* pDataStruct= new data();
pDataStruct->pos={0.0,1.0,0.0} //per semplificare posizione vertice 1 3 float
pDataStruct->col={1.0,0.0,0.0} //per semplificare rosso 3 float
pDataStruct->uv={1.0,0.0} //per semplificare coordinate texture 2 float
Vdata.push_back(pDataStruct);
data* pDataStruct= new data();
pDataStruct->pos={1.0,1.0,0.0} //per semplificare posizione vertice 1 3 float
pDataStruct->col={1.0,0.0,0.0} //per semplificare rosso 3 float
pDataStruct->uv={1.0,0.0} //per semplificare coordinate texture 2 float
Vdata.push_back(pDataStruct);
e passano i dati allineati come la struttura del tipo apivulkan(...,Vdata.data());
io ho creato un semplice sistema template dove pero ho i dati non allineati del tipo un vector con tutti i pos , un vector con tutti i col e un vector con tutte le uv.
io ho gia fatto la funzione per allineare i dati prendendo un float3 dal vettore all indice 0 pos e mettendolo in un array di puntatori a void, prendendo poi un float3 dal vector colori all indice 0 e mettendolo sempre nel vettore e cosi via con gli indici fino alla fine.
Il problema � che uso i byte per creare qualsiasi tipo di dato possibile per questo il mio sistema template mi salva anche in una mappa il size dei vari elementi e crea la struttura,il blocchetto di dati e size dei dati in modo che se ho un uv con float2 salva il dato in byte* e nel size ci mette 8 o se ho un pos con float 3 salva il dato col dato in dato in byte* e nel size ci mette 12 e cosi via.
a questo punto dai blocchetti vorrei creare un vector come se fosse un vector di strutture.
chiedo se sia possibile in questo caso procedere cosi unendo tutti i blocchetti in un vector di puntatori void allineati.
Il problema su cui sono e di cui ti chiedo � perch� se inserisco tutti i puntatori e faccio
codice:
byte*(byte)*vector.data();
o
byte*(byte)vector.data();
i primi 3 float di pos sono corretti , ma poi gli altri dati non lo sono. quindi non posso passare a vulkan un vector.data() mentre se esamino la memoria del vettore cosi
codice:
byte* vector.data()[0] // pos corretto
byte* vector.data()[1] // col corretto
byte* vector.data()[2] // uv corretto
non riesco cio� ad avere una zona di memoria contigua corretta con il vector.data();
grazie ciao.