无法加载用CMake嵌入的TGA图像?

问题描述 投票:2回答:1

我想在一个opengl可执行文件中嵌入图像和着色器,并添加了这个。

FUNCTION(ADD_RESOURCES out_var)
  SET(result)
  FOREACH(in_f ${ARGN})
    FILE(RELATIVE_PATH src_f ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${in_f})
    SET(out_f "${PROJECT_BINARY_DIR}/${in_f}.o")
    ADD_CUSTOM_COMMAND(OUTPUT ${out_f}
      COMMAND ld -r -b binary -o ${out_f} ${src_f}
      DEPENDS ${in_f}
      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
      COMMENT "Building object ${out_f}"
      VERBATIM
      )
    LIST(APPEND result ${out_f})
  ENDFOREACH()
  SET(${out_var} "${result}" PARENT_SCOPE)
ENDFUNCTION()

ADD_RESOURCES(RES
    shaders/test.vert
    shaders/test.frag
    misc/a.tga
)
extern const char _binary_shaders_test_vert_start, _binary_shaders_test_vert_end;
extern const char _binary_shaders_test_frag_start, _binary_shaders_test_frag_end;
extern const unsigned char _binary_misc_a_tga_start, _binary_misc_a_tga_end;

问题是加载的着色器工作良好,但tga无法加载。查了一下日志,我发现 &_binary_misc_a_tga_end&_binary_misc_a_tga_start 确实存在,虽然这些地址的值都是0。

为了让大家明白。&_binary_misc_a_tga_end&_binary_misc_a_tga_start 就像那些着色器对象一样,没什么奇怪的。从 _binary_misc_a_tga_end_binary_misc_a_tga_start 是0,这很奇怪。

misca.tga.o确实存在。我也试过 nm 命令,其结果是

000000000092a212 D _binary_misc_a_tga_end
00000000000c0012 A _binary_misc_a_tga_size
000000000086a200 D _binary_misc_a_tga_start
00000000004d0c84 t _ZN12_GLOBAL__N_118tga_decompress_RLEEPhPKhS2_iii

为什么图像文件不能用,有什么解决办法吗?

c++ image-processing opengl cmake embedded-resource
1个回答
0
投票

其实我的问题与这个嵌入问题无关。tga对象被成功加载了。是图像加载库由于我对参数的误解而没有识别出对象。

所以结论是cmake和我的加载代码都很好用。现在我是不是应该把这个问题删掉?

由于我对社区规则不是很熟悉,所以问这个问题很抱歉。

© www.soinside.com 2019 - 2024. All rights reserved.