独自の構造体をOpenGL ES 2.0シェーダーに渡します
-
29-09-2019 - |
質問
Book OpenGL ES 2.0プログラミングガイドの照明例を試してみたいと思います。シェーダーでは、2つの構造を作成しました。
struct directional_light
{
vec3 direction; // normalized light direction in eye space
vec3 halfplane; // normalized half-plane vector
vec4 ambient_color;
vec4 diffuse_color;
vec4 specular_color;
};
struct material_properties
{
vec4 ambient_color;
vec4 diffuse_color;
vec4 specular_color;
float specular_exponent;
};
また、これらの構造に基づいて、2つのユニフォームを作成しました。
uniform material_properties u_material_properties;
uniform directional_light u_directional_light;
問題は、自分の構造を実際のシェーダーに渡す方法がわからないことです。
メインコードで同じ構造を作成し、オブジェクトをシェーダーに渡したいと思います。これはどのように可能ですか?
よろしくニクラス
解決
OpenGL ESにはその機能がありません。アップロードするには、ネストされた各変数の位置を取得し、それぞれにGluniform*を呼び出す必要があります。
例えば:
GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
所属していません StackOverflow