mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
eh, just use the posix filename after all
This commit is contained in:
parent
be9798c601
commit
4d271429da
@ -49,59 +49,19 @@ void Panda3DMac::
|
||||
open_p3d_file(FSRef *ref) {
|
||||
OSErr err;
|
||||
|
||||
// Get the size and basename of the file.
|
||||
FSCatalogInfo catalog_info;
|
||||
HFSUniStr255 basename_unicode;
|
||||
|
||||
err = FSGetCatalogInfo(ref, kFSCatInfoDataSizes, &catalog_info,
|
||||
&basename_unicode, NULL, NULL);
|
||||
static const size_t buffer_size = 4096;
|
||||
UInt8 filename[buffer_size];
|
||||
err = FSRefMakePath(ref, filename, buffer_size);
|
||||
if (err) {
|
||||
cerr << "Couldn't query file information.\n";
|
||||
cerr << "Couldn't get filename\n";
|
||||
return;
|
||||
}
|
||||
|
||||
// A poor-man's unicode-to-ascii conversion.
|
||||
string basename;
|
||||
for (int i = 0; i < basename_unicode.length; ++i) {
|
||||
basename += (char)basename_unicode.unicode[i];
|
||||
}
|
||||
size_t data_size = (size_t)catalog_info.dataLogicalSize;
|
||||
|
||||
// We could try to figure out full pathname of the p3d file we've
|
||||
// got here, but it's probably better just to open the file and read
|
||||
// it. This way, it works regardless of the source of the p3d file,
|
||||
// even if it's not actually a file on disk.
|
||||
FSIORefNum io_ref;
|
||||
err = FSOpenFork(ref, 0, NULL, fsRdPerm, &io_ref);
|
||||
if (!err) {
|
||||
// Create an instance, and tell it we'll be sending it the p3d
|
||||
// data in a forthcoming stream.
|
||||
P3D_instance *inst = create_instance
|
||||
(basename.c_str(), false,
|
||||
_win_x, _win_y, _win_width, _win_height,
|
||||
NULL, 0);
|
||||
int stream_id = P3D_instance_start_stream(inst, basename.c_str());
|
||||
|
||||
// Now start to read the data.
|
||||
static const size_t buffer_size = 8192;
|
||||
static char buffer[buffer_size];
|
||||
ByteCount read_count;
|
||||
err = FSReadFork(io_ref, fsAtMark, 0, buffer_size, buffer, &read_count);
|
||||
while (read_count != 0) {
|
||||
P3D_instance_feed_url_stream(inst, stream_id, P3D_RC_in_progress, 0,
|
||||
data_size, buffer, read_count);
|
||||
err = FSReadFork(io_ref, fsAtMark, 0, buffer_size, buffer, &read_count);
|
||||
}
|
||||
|
||||
P3D_result_code status = P3D_RC_done;
|
||||
if (err != eofErr) {
|
||||
status = P3D_RC_generic_error;
|
||||
cerr << "Error reading file\n";
|
||||
}
|
||||
|
||||
P3D_instance_feed_url_stream
|
||||
(inst, stream_id, status, 0, data_size, NULL, 0);
|
||||
}
|
||||
// Create an instance.
|
||||
P3D_instance *inst = create_instance
|
||||
((char *)filename, true,
|
||||
_win_x, _win_y, _win_width, _win_height,
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
static pascal OSErr
|
||||
|
Loading…
x
Reference in New Issue
Block a user