size. */
if(args.size()!=column_count)
return;
+
+ convert_args = true;
}
else if(arg_component_total==column_count*row_count && !has_matrices)
{
{
const ArgumentInfo &info = args[j];
if(!column_component_count && info.component_count==row_count)
+ {
// A vector filling the entire column can be used as is.
columns.push_back(call.arguments[j]);
+ convert_args = true;
+ }
else
{
column_args.push_back(call.arguments[j]);
--- /dev/null
+uniform ivec3 columns[3];
+
+#pragma MSP stage(vertex)
+layout(location=0) in vec3 vertex;
+void main()
+{
+ mat3 m1 = mat3(columns[0], columns[1], columns[2]);
+ mat4 m2 = mat4(columns[0], 0.0, ivec4(columns[1], 0), columns[2], 0, 0, 0.0, false, true);
+ gl_Position = m2*vec4(m1*vertex, 0);
+}
+
+/* Expected output: vertex
+layout(location=0) uniform ivec3 columns[3];
+layout(location=0) in vec3 vertex;
+void main()
+{
+ gl_Position = mat4(vec4(vec3(columns[0]), 0.0), vec4(ivec4(columns[1], 0)), vec4(vec3(columns[2]), 0.0), vec4(0.0, 0.0, 0.0, 1.0))*vec4(mat3(vec3(columns[0]), vec3(columns[1]), vec3(columns[2]))*vertex, 0.0);
+ gl_Position.z = gl_Position.z*2.0-gl_Position.w;
+}
+*/