如何将任何 *.jpg图像嵌入Win32可执行文件中并在运行时使用它
How to embed any *.jpg image inside win32 executable and use it at run time
我正在做一个纯opengl和名为Space Voyager的项目。问题是,在运行期间,PROGRAME调用功能以加载所有图像,所有播放器必须在加载屏幕上等待2分钟大约2分钟!!!!其中一些图像像16 MB文件,否则平均为1 MB。总共有20张图像。我需要在凝视水平之前加载所有图像。
现在,我正在使用土壤在游戏中加载图像。土壤具有从内存中加载图像的功能。
我的解决方案是将所有图像嵌入游戏的 *.exe文件中,并在运行时使用它,以节省将所有图像加载到游戏中的时间。
我几乎迷失了如何将JPG图像嵌入可执行文件和
在运行时使用它作为未签名的char* imagePointer ?????
我的解决方案是将所有图像嵌入游戏的 *.exe文件中并在运行时使用它,以节省将所有图像加载到游戏中的时间。
您认为这会解决问题?存储设备上的数据标签什么都没关系。计算机系统的努力是不变的。是否将资源放在单独的文件中到计算机上都没有关系。
某些图像类似于16 MB文件,否则平均为1 MB。总共有20张图像。我需要在凝视水平之前加载所有图像。
这不是很多数据。20张图像平均为20mib,平均为20mib。即使是缓慢的HDD旋转生锈磁盘也可以轻松传递10MIB/s。如今,一个更普遍的数字是廉价的HDD大约50mib至80mib/s。无论您的瓶颈都在哪里,不是我/o。
还请记住,如果将原始文件嵌入可执行文件中,则强迫系统通过I/O将更多数据插入更多数据;在可执行文件中压缩图像仍然需要您解压缩。鉴于大多数情况下,您是i/o绑定的,而不是在存储中具有压缩图像的CPU绑定。
更新
您的问题是:
soil_flag_power_of_two
您要土壤重新列出每个图像,以下一个更大的大小。纹理。自从OpenGL-2出来以来(当今您很难找到不支持OpenGL-2的GPU),该约束已被提升。
另一个耗时的操作是产生mipmaps(soil_flag_mipmaps),因为这需要为每个图像生成整个图像金字塔。现在,您通常想要拥有的MIPMapping。如果您有上下文> = OpenGL-3,则可以使用MIPMAP生成器内置的OpenGL。另外,您还要求土壤为您生成纹理ID,但您也自己生成ID。使用任何一个,但不要同时使用。
这会导致您的代码中的以下建议更改:
while( GL_NO_ERROR != glGetError() ); // flush OpenGL errors;
GLint gl_version;
glGetIntegerv(GL_MAJOR_VERSION, &gl_version);
if( GL_NO_ERROR != glGetError() ) {
// GL_MAJOR_VERSION enum supported only since OpenGL-3
gl_version = 1;
while( GL_NO_ERROR != glGetError() ); // flush OpenGL errors;
}
bool const gl3_or_later = 3 <= gl_version;
tex_id = SOIL_load_OGL_texture(
fileNameConstant,
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
gl3_or_later ? 0 : SOIL_FLAG_MIPMAPS );
if( gl3_or_later ) {
glBindTexture(GL_TEXTURE_2D, tex_id);
glGenerateTextureMipmap(GL_TEXTURE_2D);
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_MAX_LEVEL,
1000);
}
- 为什么C++可执行文件在与较新的libstdc++.so链接时运行得更快?
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
- 尝试运行可执行文件时出现分段错误
- 在 Qt 中将 x 可执行文件作为按钮事件运行时出错
- 运行可执行文件时找不到共享库,即使共享库存在于指定的路径中
- 如何直接在安卓设备上作为可执行文件运行简单的 c++ 程序?
- Bash 代码,仅在当前可执行文件完成运行时在循环中运行可执行文件
- cl 生成的可执行文件在第一次运行时运行速度非常慢
- 可执行文件在运行时出错
- 如果给定正确的运行时库,x86 可执行文件是否可以在任何 x86 平台上运行
- LD_BIND_NOW可以使可执行文件运行得更慢?
- 如何从命令行运行可执行文件时启用系统错误消息
- G++ 和 CL(VS2017) 都编译成功,但 cl 编译的可执行文件运行异常
- 在单独的可执行文件中调用INSTANTIATE_TEST_CASE_P时,库中的TEST_P测试不会运行
- 生成可执行文件时找不到文件,但在eclipse c 中运行正常
- 如何在运行时像可执行文件一样"启动"DLL?
- 在运行时动态更新二进制文件(可执行文件)而不停止的任何类型的方法
- 如何将任何 *.jpg图像嵌入Win32可执行文件中并在运行时使用它
- 通过Linux命令行执行时,可执行文件运行正常 - 调用C System()命令时运行时错误