2

私は現在、ネイティブアクティビティと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: %d\n", length);


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

AAsset_read(shaderAsset, buffer, length);   

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

AAsset_close(shaderAsset);
free(buffer);

アプリケーションを実行すると、Androidlogcatに次のように表示されます。

 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ファイルのファイル拡張子に「nocompression」を追加しましたが、問題は解決していません。

誰かがこれを引き起こしている可能性があるものについての考えを持っていますか?

4

1 に答える 1

5

どういうわけか、末尾のゼロはアセットに入りません。

使ってみてください

// 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;
于 2012-07-22T11:43:16.897 に答える