从资源中读取文本文件时的奇怪行为

Strange behavior when reading text files from assets

本文关键字:文件 资源 读取 取文本      更新时间:2023-10-16

我目前正在玩原生活动和GLES 2.0,我正在使用ndk从资源加载GLES的着色器。

这是简单着色器的来源:

顶点着色器:simple.vsh

attribute vec4 vPosition;
void main()
{
    gl_Position = vPosition;
}

片段着色器:simple.fsh

precision mediump float;
void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

这是我用来加载着色器文件的代码

AAsset *shaderAsset= AAssetManager_open(app->activity->assetManager, path, AASSET_MODE_BUFFER);
size_t length = AAsset_getLength(shaderAsset);
LOGI("Shader source size: %dn", length);

char* buffer = (char*) malloc(length);
AAsset_read(shaderAsset, buffer, length);   
LOGI("Shader source : %sn", buffer);
AAsset_close(shaderAsset);
free(buffer);

当我运行应用程序时,我在android logcat:中看到了这一点

 Shader source size: 71
 07-22 13:23:52.683 11135 11146 I native-activity: Shader source : attribute vec4 vPosition;
 07-22 13:23:52.683 11135 11146 I native-activity: void main()
 07-22 13:23:52.683 11135 11146 I native-activity: {
 07-22 13:23:52.683 11135 11146 I native-activity:     gl_Position = vPosition;
 07-22 13:23:52.683 11135 11146 I native-activity: }
 07-22 13:23:52.683 11135 11146 I native-activity: sP
 07-22 13:23:52.683 11135 11146 I native-activity: Shader source size: 86
 07-22 13:23:52.683 11135 11146 I native-activity: Shader source : precision mediump float;
 07-22 13:23:52.683 11135 11146 I native-activity: void main()
 07-22 13:23:52.683 11135 11146 I native-activity: {
 07-22 13:23:52.683 11135 11146 I native-activity:     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
 07-22 13:23:52.683 11135 11146 I native-activity: }
 07-22 13:23:52.683 11135 11146 I native-activity: fs`

请注意文件末尾的"sP"answers"fs'"。

我还在构建xml文件中为文件扩展名添加了"nocompression",以防出现问题,但因此问题仍然存在。

有人知道是什么原因造成的吗?

不知何故,尾随的零没有进入资产。

尝试使用

// one extra char for the trailing zero
char* buffer = (char*) malloc(length + 1);
AAsset_read(shaderAsset, buffer, length);   
// fix the string to be zero-terminated
buffer[length] = 0;