问题标签 [physfs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Magick++ 没有从博客加载
我正在使用 Magick++ 加载一些图像。因为我想为所有图像加载包装 PhysFS,所以我需要通过 blob 而不是文件路径加载图像。
这段代码:
工作没有问题。
但是,一旦我做了一个 blob,我就会得到一个异常:
抛出的异常是:
以 Magick::ErrorMissingDelegate 类型的未捕获异常终止,没有此图像格式的解码委托 `'@error/blob.c/BlobToImage/350
我已验证 blob 与文件大小相同。所以我确信它正在将它读入内存。
我尝试使用标准库 ifstream 以及设置 std::ios::binary 但问题仍然存在。
c# - 用于非托管互操作的 C# 对象的指针
我目前正在为PhysFS library编写一个包装器,并且偶然发现了一些关于托管对象编组的麻烦。以PHYSFS_enumerateFilesCallback方法为例,该方法将函数指针和用户定义的指针作为其参数。如何将托管对象传递给此方法?这就是我目前正在做的事情:
最后,这就是我将任意对象传递给该方法的方法:
当我运行此代码时:
委托被合法数据调用 4 次,第五次包含垃圾数据,然后它抛出 AccessViolationException 我怀疑这是因为对象在调用委托之间被 GC。任何人都可以阐明这一点吗?
更新:更改挂载目录消除了垃圾数据,但仍然抛出异常,并且仍然在所有数据都可以使用之前
c++ - 为什么我的编译器试图从signed long long 转换为unsigned int
线
产生警告
warning C4244: 'initializing' : conversion from 'PHYSFS_sint64' to 'unsigned int', possible loss of data
PHYSFS_sint64
是一个 typedefsinged long long
PHYSFS_fileLength
返回一个PHYSFS_sint64
。
所以我不明白为什么当我尝试将 a 分配给 a 时编译器会尝试从signed long long
to转换?unsigned int
signed long long
signed long long
当我明确输入signed long long
而不是PHYSFS_sint64
它时仍然输出相同的警告
我现在是不是很傻?我不明白
c++ - R6025 纯虚函数调用(类派生自 sf::InputStream)
对于我的游戏,我想使用 PhysFs 提取 zip 文件中的音乐文件
我创建了一个自定义类MusicStream
,它继承自我sf::InputStream
用作sf::Music
's 流的类。
这是我的基本程序:
这完美无瑕,除了一件事:
当我关闭窗口并退出程序时,出现运行时错误R6025 pure virtual function call
并且程序崩溃。
所以显然一个纯虚函数被称为(sf::InputStream
的dtor??),但我实现了所有sf::InputStream
的函数,这对我来说没有意义。
另外,我不确定代码是否相关,但如果是的话,这是自定义类:
音乐流.h
音乐流.cpp
c - 如何通过 PhysFS 加载动态库?
这是我的困境:我正在使用PhysFS,它允许我将多个目录和档案视为一个虚拟目录。这是针对未来的视频游戏,我打算让 modder 友好。PhysFS 是使其易于修改的最佳方式。
同时,我还打算使用一种脚本扩展器,它可以动态加载库并在 Lua 中注册它们。我已经创建了一个粗糙的、临时的、更大的概念验证 Lua 脚本扩展器。
那么我的问题是什么?我的问题是dlopen / LoadLibrary仅适用于真实文件系统上的文件。我想通过 PhysFS 加载。我通过 PHYSFS_openRead 加载文件,然后使用 PHYSFS_read 将文件的全部内容加载到内存缓冲区中。
有人建议将.so / .dll文件从 PhysFS 加载到内存中,然后将其写入 Linux 中的 /tmp 或 Windows 中的 C:\temp,然后 dlopen 。但我不认为这是一种非常优雅的方式。
那么……还有其他想法吗?我确实查看了mmap并认为也许我可以手动加载 ELF 文件(在 Linux 上)并以某种方式手动提取函数,最后为 Lua 注册它们,但到目前为止,我能生成的只是一个程序,它给了我关于精灵。
人们说我应该研究LibJIT,但我不确定这对我有什么帮助。
所以我该怎么做?如何通过 PhysFS 将库加载到内存中,并使用dlopen 的替代方法... dlsym 从中提取函数?
请不要建议dlopen,除非你真的建议我暂时写出文件。
我的问题更大:我如何链接?如何从我已经在内存中的库中获取函数?为什么有些人向我推荐LibJIT?
c - #include 与 GLSL/C 的自定义 IO?
我有两个问题,两个非常重要的问题:
- 是否有 C 预处理器能够采用任何自定义函数来定位由 调用的文件
#include
?因为,比如说,我将我的代码存储在一个 ZIP 文件或其他东西中,并且依靠 PhysFS 来访问它们而不是解压缩它们。是否有可以使用的开源 C 预处理器,而不是仅限于普通的 fopen? - 是否可以在 GLSL 代码上使用自定义或标准 C 预处理器?我知道 GLSL 已经有一个预处理器,但是它缺少这个
#include
功能,我想纠正它。 - 是否可以将上述两者结合起来,制作一个程序或视频游戏,其中 GLSL 源代码存储在 ZIP 或 PK3 文件中(因此可以使用 PhysFS 或任何自定义 IO 东西访问),并且自定义/修改过的 C 预处理器是用于处理#include 并获取包含的源?
我问这个是因为我不想为 GLSL 编写自己的 C 预处理器,除非绝对必要,并且更愿意利用现有的预处理器来实现带有自定义 IO 的#include。
几乎我需要 C 预处理器东西的唯一原因是因为我想要#include
,并且我想要它与我的自定义 IO 东西。
我想实现的预处理器功能示例:
#version 450
使用、 或#version 310 es
、 以及预先处理整个已预处理的源代码#extension GL_ARB_separate_shader_objects : enable
- 包括运行时常量。有人说制服可能更适合这个目的,但预定义的模棱两可的常量也可能没问题。
- 功能的可重用性。
预期用途的一个示例:
颜色渐变.glsl
渐变片段
这显然是一个微不足道的例子,但主要目的是增加代码的可重用性,并减少非预处理着色器必须包含的不必要代码量。
我的最终意图是将GlSlang和SPIR-V Cross集成以将Vulkan 兼容的 GLSL (使用自定义 C 预处理器扩展)编译到 SPIR-V,如果使用的后端不是 Vulkan ,则可以选择返回到 GLSL (或 HLSL) 。由于我不知道如何在反编译回 GLSL 之前将多个 SPIR-V 二进制文件拼接在一起,我认为每个着色器模块只有一个二进制文件很重要,因此有必要#include
使用多个二进制文件来代替。
c++ - PhysFS_init() 返回非零错误:“无错误”
我在我的代码中遇到了一个相当奇怪的崩溃,我不确定是什么原因造成的。我试图在我的 c++ 代码中使用 PhysFS。下面的代码是类的一部分,Visual Studio 2017 告诉我崩溃出现在 中PHYSFS_mount()
,随后出现在 中,据EnterCriticalSection()
我了解,这与互斥锁有关。现在根据我的理解,这应该是正确的(请注意,主要调用initArchives()
首先)
崩溃显然出现在这里
我在这里做错了吗?这是图书馆的问题还是我的操作系统的问题?我错过了 PhysFS 的构建步骤中的某些内容吗?
编辑:我注意到我读错了 PHYSFS_init() 的返回值,但是现在我更加困惑,因为PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())
返回“没有错误”,这是怎么回事?
c++ - 使用 physfs 从 zip 内部使用 Lua “require”
使用 physfs 时,通过使用 luaL_dostring 并在我自己中读取文件,加载和运行 lua 脚本很容易,但是当涉及到使用“require”时,它显然有麻烦。
有没有人处理过这个问题?我需要....重写部分lua吗?我真的不想那样做!
谢谢。
更新,这就是我让它工作的方式
然后在创建lua状态之后......
c - 如何将 PhysFS 与 CMAKE 链接?
我正在尝试在 C 中的游戏中使用 PhysFS。我正在使用 CMake 生成 Makefile。CMake 表示很好地找到了包含文件夹和库,但在构建过程中出现错误:未定义对“PHYSFS_init”的引用。
这是我的 CMakeLists.txt 文件:
CMakeCache.txt:
我在/usr/local/include/physfs.h有标题 physfs.h