首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从资源中读取文本文件时的奇怪行为

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

Stack Overflow用户
提问于 2012-07-22 18:45:30
回答 1查看 2K关注 0票数 2

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

这是简单着色器的源代码:

顶点着色器: simple.vsh

代码语言:javascript
复制
attribute vec4 vPosition;
void main()
{
    gl_Position = vPosition;
}

片段着色器: simple.fsh

代码语言:javascript
复制
precision mediump float;
void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

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

代码语言:javascript
复制
AAsset *shaderAsset= AAssetManager_open(app->activity->assetManager, path, AASSET_MODE_BUFFER);
size_t length = AAsset_getLength(shaderAsset);

LOGI("Shader source size: %d\n", length);


char* buffer = (char*) malloc(length);

AAsset_read(shaderAsset, buffer, length);   

LOGI("Shader source : %s\n", buffer);

AAsset_close(shaderAsset);
free(buffer);

当我运行应用程序时,我在android logcat中看到以下内容:

代码语言:javascript
复制
 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“和"fs'”。

我还为我的构建xml文件中的文件扩展名添加了“无压缩”,以防这是问题所在,但因此问题仍然存在。

有没有人知道这是什么原因?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-22 19:43:17

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

尝试使用

代码语言:javascript
复制
// 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;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11599608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档