0

次のコードを使用して、/assets/ フォルダー内のファイルを読み取ります。

//AAssetManager* mgr  from parameter.
    AAsset* asset = AAssetManager_open(mgr, filen_ame, AASSET_MODE_BUFFER);
if (NULL == asset) {
    __android_log_print(ANDROID_LOG_ERROR, "hdrijni", "_ASSET_NOT_FOUND_");
    return;
}
long size = AAsset_getLength(asset);
char * buffer = (char*) malloc(sizeof(char)*size);
int byteRead = AAsset_read(asset, buffer, size);
AAsset_close(asset);

コンテンツを取得できますが、コンテンツに特殊文字が追加されることがあります。

4

1 に答える 1

0

実際、この問題は Asset Manager によるものではなく、使用しているシェーダー コードによるものです。

シェーダーの内容を読んだら、次のようなシェーダーを作成します。

    GLuint shader = glCreateShader(type);
glShaderSource(shader, 1, &buffer2, NULL);

JNI によって転送されるアセット バッファーまたはコンテンツ バッファーは NULL で終了しない可能性があるため、glShaderSource を呼び出すときに「長さ」パラメーターを使用する必要があります。-- 他人から。

glShaderSource(shader, 1, &buffer2, &length); を変更するだけです。

于 2013-09-02T13:27:09.727 に答える