3

OpenGL シェーダーでアクセスしたい動的な数の「ボール」があるとします。C++ では、データは次のようになります。

struct Ball
{
    glm::vec3 position;
    glm:vec3 colour;
    float size;
};

std::vector<Ball> all_balls;

フラグメント シェーダーで繰り返し処理する場合all_ballsは、シェーダー ストレージ バッファー オブジェクトが必要になると思います。

このドキュメントは配列に触れていますが、著しく不完全です。

このようにデータをバッファに送信できると思います

glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glBufferData(GL_SHADER_STORAGE_BUFFER, all_balls.size() * sizeof(Ball), &(all_balls[0]), usage);

GLSL では、バッファが配列であることを指定するにはどうすればよいですか? また、シェーダはこの配列のサイズをどのように認識しますか?

4

1 に答える 1