2012-05-22 61 views
0

我正在創建一個使用Qt的3ds模型加載器。緩衝來自QResource的原始數據?

我想利用Qt資源系統並將其用於加載模型等。

我願做類似這樣的語法:

Mesh* MeshLoader::loadMesh(const QString& resource) { 
    QResource qResource(resource); 
    QResource::registerResource(resource); 
    SomeBuffer buffer(qResource.data()) 
    while (!buffer.eof()) { 
     // Process the file 
    } 
    QResource::unregisterResource(resource); 
} 

有什麼建議?

+2

如果你只讀一次,緩衝它沒有任何意義。只需使用純文件。 – Mat

+0

你計劃你的可執行文件中存儲的模型呢? – cmannett85

+0

好吧,像3DS文件一樣,需要一些時間來處理文件本身,我會將其緩存起來並在以後使用它(例如,如果某人退出並再次進入房間,則不需要重新分析現場,因爲它已經被緩存了)。有些東西,比如靜態網格,除非主要版本,否則不會被寫入或修改,理想情況下將被緩存。我確信通過使用這個文件本身會有緩存的方法,我想我可以使用好的舊的fopen調用以及什麼不是。 – DubyaDubyaDubyaDot

回答

1

你包含在你的帖子中的代碼有什麼問題?

就像一個提示:你可以使用Qt資源符號(前導:在路徑中)與幾乎每個Qt數據/流讀取器。例如,你可以使用QFile(「:/ someresource」)。 QFile和QDataStream我認爲(但也許我錯了),你可以只讀取文件的塊,而無需加載整個資源並在讀取期間阻塞線程。如果它阻塞主線程,則可以始終使用QRunnable或QThread在後臺加載資源。

對於緩衝:我不知道任何內置於Qt的緩存解決方案(除了在網絡相關的部分),所以你應該自己實現它。

這樣就可以建立,它加載在後臺線程目標資源,當它完成了信號/槽通知MyResource類,並可以緩存資源的數據,你想要的方式。

+0

哦,gotcha。非常感謝你這篇文章! – DubyaDubyaDubyaDot