値を変更する関数に提供される引数に問題があります。
scene->shader->start( scene->shader->dataStart );
printf("%d\n",(int)scene->shader->dataStart);
次に、シーン -> シェーダー -> 開始内で、それを出力します。
printf("%d\n",(int) _data );
Scene->shader->start を呼び出した場所からメモリ アドレスを出力し、関数内では 0 を出力します。構造体の内部からポインタで関数を呼び出しているという事実と何か関係がありますか? 関数の printf() はその関数の最初の行であるため、まったく意味がありません。そのため、どこにも 0 を設定していません。エルクリングさん、助けていただければ幸いです。
編集:
void shader1_setdown(void *);
typedef struct {
GLuint shaderProgram;
void *dataStart;
void *dataEnd;
void (*start)(void *data);
void (*end)(void *data);
} renderShader;
「シーン」構造には renderShader* が含まれています。