i have a struct
struct distance
{
int dist[5];
};
and its used as an array
distance dist[100];
How can i pass this to my tessellation control shader?
shader:
#version 410 core
struct distance
{
int dist[5];
};
uniform distance myDistances[100];
layout (vertices = 16) out;
void main(void)
{
uint id = gl_InvocationID;
if (id == 0)
{
gl_TessLevelInner[0] = myDistances[gl_PrimitiveID].dist[4];
gl_TessLevelInner[1] = myDistances[gl_PrimitiveID].dist[4];
gl_TessLevelOuter[0] = myDistances[gl_PrimitiveID].dist[0];
gl_TessLevelOuter[1] = myDistances[gl_PrimitiveID].dist[1];
gl_TessLevelOuter[2] = myDistances[gl_PrimitiveID].dist[2];
gl_TessLevelOuter[3] = myDistances[gl_PrimitiveID].dist[3];
}
gl_out[gl_InvocationID].gl_Position = gl_in[id].gl_Position;
}
application uniform definition:
struct
{
struct
{
int mv_matrix;
int proj_matrix;
int mvp;
int dist;
} patch;
struct
{
int draw_color;
int mvp;
} control_point;
} uniforms;
in my main
glUniformMatrix4fv(uniforms.patch.mv_matrix, 1, GL_FALSE, mv_matrix);
glUniformMatrix4fv(uniforms.patch.proj_matrix, 1, GL_FALSE, proj_matrix);
glUniformMatrix4fv(uniforms.patch.mvp, 1, GL_FALSE, proj_matrix * mv_matrix);
for(int i=0; i<100; i++)
{
for(int j=0; j<5; j++)
{
glGetUniformLocation(program, "myDistances[i].dist[j]");
glUniform1i(uniforms.patch.dist, ocean.detail[i].dist[j]);
}
}