--- cvsroot/libgender/material.C 2004/10/21 22:28:42 1.11 +++ cvsroot/libgender/material.C 2004/10/22 00:16:08 1.12 @@ -16,17 +16,23 @@ #endif } - const char str_float [] = "float"; - const char str_float2 [] = "float2"; - const char str_float3 [] = "float3"; - const char str_float4 [] = "float4"; - const char str_float4x4 [] = "float4x4"; - - const char str_sampler1d [] = "sampler1d"; - const char str_sampler2d [] = "sampler2d"; - const char str_sampler3d [] = "sampler3d"; - const char str_samplerCUBE [] = "samplerCUBE"; - const char str_samplerRECT [] = "samplerRECT"; + const char str_float [] = "float"; + const char str_vec2 [] = "vec2"; + const char str_vec3 [] = "vec3"; + const char str_vec4 [] = "vec4"; + const char str_mat2 [] = "mat2"; + const char str_mat3 [] = "mat3"; + const char str_mat4 [] = "mat4"; + + const char str_sampler_1d [] = "sampler1D"; + const char str_sampler_1d_shadow [] = "sampler1DShadow"; + const char str_sampler_2d [] = "sampler2D"; + const char str_sampler_2d_shadow [] = "sampler2DShadow"; + const char str_sampler_2d_rect [] = "sampler2DRect"; + const char str_sampler_2d_rect_shadow [] = "sampler2DRectShadow"; + const char str_sampler_3d [] = "sampler3D"; + const char str_sampler_3d_rect [] = "sampler3DRect"; + const char str_sampler_cube [] = "samplerCube"; static CGcontext cg_context = cgCreateContext (); @@ -56,8 +62,7 @@ void stream_i::build_decl (ostringstream &b) { - b << typestr << ' ' << "V" << name; - b << " : " << binding; + b << typestr << ' ' << binding; } void var_i::build (shader_builder &b) @@ -75,7 +80,7 @@ void stream_i::build (shader_builder &b) { - var_i::build (b); + b << binding; if (find (b.streams.begin (), b.streams.end (), var (*this)) == b.streams.end ()) b.streams.push_back (*this); @@ -97,54 +102,44 @@ struct vin vin; // MUST update is-function below - varying_3f vin::position_3f ("POSITION"); - varying_4f vin::position_4f ("POSITION"); - varying_3f vin::normal_3f ("NORMAL"); - varying_4f vin::normal_4f ("NORMAL"); - varying_3f vin::color0_3f ("COLOR0"); - varying_4f vin::color0_4f ("COLOR0"); - varying_3f vin::color1_3f ("COLOR1"); - varying_4f vin::color1_4f ("COLOR1"); + varying_3f vin::position_3f ("gl_Vertex"); + varying_4f vin::position_4f ("gl_Vertex"); + varying_3f vin::normal_3f ("gl_Normal"); + varying_3f vin::color_3f ("gl_Color"); + varying_4f vin::color_4f ("gl_Color"); + varying_3f vin::color2_3f ("gl_SecondaryColor"); + varying_4f vin::color2_4f ("gl_SecondaryColor"); varying_1f vin::texcoord_1f[8] = { - varying_1f ("TEXCOORD0"), varying_1f ("TEXCOORD1"), varying_1f ("TEXCOORD2"), varying_1f ("TEXCOORD3"), - varying_1f ("TEXCOORD4"), varying_1f ("TEXCOORD5"), varying_1f ("TEXCOORD6"), varying_1f ("TEXCOORD7"), + varying_1f ("gl_TexCoord[0]"), varying_1f ("gl_TexCoord[1]"), varying_1f ("gl_TexCoord[2]"), varying_1f ("gl_TexCoord[3]"), + varying_1f ("gl_TexCoord[4]"), varying_1f ("gl_TexCoord[5]"), varying_1f ("gl_TexCoord[6]"), varying_1f ("gl_TexCoord[7]"), }; varying_2f vin::texcoord_2f[8] = { - varying_2f ("TEXCOORD0"), varying_2f ("TEXCOORD1"), varying_2f ("TEXCOORD2"), varying_2f ("TEXCOORD3"), - varying_2f ("TEXCOORD4"), varying_2f ("TEXCOORD5"), varying_2f ("TEXCOORD6"), varying_2f ("TEXCOORD7"), + varying_2f ("gl_TexCoord[0]"), varying_2f ("gl_TexCoord[1]"), varying_2f ("gl_TexCoord[2]"), varying_2f ("gl_TexCoord[3]"), + varying_2f ("gl_TexCoord[4]"), varying_2f ("gl_TexCoord[5]"), varying_2f ("gl_TexCoord[6]"), varying_2f ("gl_TexCoord[7]"), }; varying_3f vin::texcoord_3f[8] = { - varying_3f ("TEXCOORD0"), varying_3f ("TEXCOORD1"), varying_3f ("TEXCOORD2"), varying_3f ("TEXCOORD3"), - varying_3f ("TEXCOORD4"), varying_3f ("TEXCOORD5"), varying_3f ("TEXCOORD6"), varying_3f ("TEXCOORD7"), + varying_3f ("gl_TexCoord[0]"), varying_3f ("gl_TexCoord[1]"), varying_3f ("gl_TexCoord[2]"), varying_3f ("gl_TexCoord[3]"), + varying_3f ("gl_TexCoord[4]"), varying_3f ("gl_TexCoord[5]"), varying_3f ("gl_TexCoord[6]"), varying_3f ("gl_TexCoord[7]"), }; varying_4f vin::texcoord_4f[8] = { - varying_4f ("TEXCOORD0"), varying_4f ("TEXCOORD1"), varying_4f ("TEXCOORD2"), varying_4f ("TEXCOORD3"), - varying_4f ("TEXCOORD4"), varying_4f ("TEXCOORD5"), varying_4f ("TEXCOORD6"), varying_4f ("TEXCOORD7"), + varying_4f ("gl_TexCoord[0]"), varying_4f ("gl_TexCoord[1]"), varying_4f ("gl_TexCoord[2]"), varying_4f ("gl_TexCoord[3]"), + varying_4f ("gl_TexCoord[4]"), varying_4f ("gl_TexCoord[5]"), varying_4f ("gl_TexCoord[6]"), varying_4f ("gl_TexCoord[7]"), }; varying_1f vin::psize_1f ("PSIZE"); - varying_1f vin::attr6_1f ("ATTR6"); - varying_1f vin::attr7_1f ("ATTR7"); - varying_2f vin::attr6_2f ("ATTR6"); - varying_2f vin::attr7_2f ("ATTR7"); - varying_3f vin::attr6_3f ("ATTR6"); - varying_3f vin::attr7_3f ("ATTR7"); - varying_4f vin::attr6_4f ("ATTR6"); - varying_4f vin::attr7_4f ("ATTR7"); bool vin::is (const var &r) { return r == vin::position_3f || r == vin::position_4f || r == vin::normal_3f - || r == vin::normal_4f - || r == vin::color0_3f - || r == vin::color0_4f - || r == vin::color1_3f - || r == vin::color1_4f + || r == vin::color_3f + || r == vin::color_4f + || r == vin::color2_3f + || r == vin::color2_4f || r == vin::texcoord_1f[0] || r == vin::texcoord_1f[1] || r == vin::texcoord_1f[2] || r == vin::texcoord_1f[3] || r == vin::texcoord_1f[4] || r == vin::texcoord_1f[5] || r == vin::texcoord_1f[6] || r == vin::texcoord_1f[7] || r == vin::texcoord_2f[0] || r == vin::texcoord_2f[1] || r == vin::texcoord_2f[2] || r == vin::texcoord_2f[3] @@ -152,36 +147,27 @@ || r == vin::texcoord_3f[0] || r == vin::texcoord_3f[1] || r == vin::texcoord_3f[2] || r == vin::texcoord_3f[3] || r == vin::texcoord_3f[4] || r == vin::texcoord_3f[5] || r == vin::texcoord_3f[6] || r == vin::texcoord_3f[7] || r == vin::texcoord_4f[0] || r == vin::texcoord_4f[1] || r == vin::texcoord_4f[2] || r == vin::texcoord_4f[3] - || r == vin::texcoord_4f[4] || r == vin::texcoord_4f[5] || r == vin::texcoord_4f[6] || r == vin::texcoord_4f[7] - || r == vin::psize_1f - || r == vin::attr6_1f - || r == vin::attr7_1f - || r == vin::attr6_2f - || r == vin::attr7_2f - || r == vin::attr6_3f - || r == vin::attr7_3f - || r == vin::attr6_4f - || r == vin::attr7_4f; + || r == vin::texcoord_4f[4] || r == vin::texcoord_4f[5] || r == vin::texcoord_4f[6] || r == vin::texcoord_4f[7]; } struct fin fin; struct fin &vout = fin; // MUST update is-function below - varying_4f fin::position_4f ("HPOS"); - varying_4f fin::color0_4f ("COLOR0"); - varying_4f fin::color1_4f ("COLOR1"); + varying_4f fin::position_4f ("gl_Position"); + varying_4f fin::color_4f ("gl_Color"); + varying_4f fin::color2_4f ("gl_SecondaryColor"); varying_4f fin::texcoord_4f[8] = { - varying_4f ("TEXCOORD0"), varying_4f ("TEXCOORD1"), varying_4f ("TEXCOORD2"), varying_4f ("TEXCOORD3"), - varying_4f ("TEXCOORD4"), varying_4f ("TEXCOORD5"), varying_4f ("TEXCOORD6"), varying_4f ("TEXCOORD7"), + varying_4f ("gl_TexCoord[0]"), varying_4f ("gl_TexCoord[1]"), varying_4f ("gl_TexCoord[2]"), varying_4f ("gl_TexCoord[3]"), + varying_4f ("gl_TexCoord[4]"), varying_4f ("gl_TexCoord[5]"), varying_4f ("gl_TexCoord[6]"), varying_4f ("gl_TexCoord[7]"), }; bool fin::is (const var &r) { return r == fin::position_4f - || r == fin::color0_4f - || r == fin::color1_4f + || r == fin::color_4f + || r == fin::color2_4f || r == fin::texcoord_4f[0] || r == fin::texcoord_4f[1] || r == fin::texcoord_4f[2] @@ -195,22 +181,16 @@ struct fout fout; // MUST update is-function below - varying_4f fout::color0_4f ("COLOR0"); - varying_3f fout::color0_3f ("COLOR0"); - varying_4f fout::color1_4f ("COLOR1"); - varying_3f fout::color1_3f ("COLOR1"); - varying_1f fout::depth_1f ("DEPTH"); + varying_4f fout::color_4f ("gl_FragColor"); + varying_1f fout::depth_1f ("gl_FragDepth"); bool fout::is (const var &r) { - return r == fout::color0_4f - || r == fout::color0_3f - || r == fout::color1_4f - || r == fout::color1_3f + return r == fout::color_4f || r == fout::depth_1f; } - uniform_matrix_f mvp, mv, proj; + uniform_matrix_4f mvp, mv, proj; void fragment_vector_i::build (shader_builder &b) { @@ -224,35 +204,27 @@ build (b); ostringstream os; - os << "void main (\n"; - for (vector::iterator i = b.streams.begin (); i != b.streams.end (); i++) + for (vector::iterator i = b.refs.begin (); i != b.refs.end (); i++) { - os << " "; - - if (is_vertex) - { - if (vin.is (*i)) os << "in "; - if (vout.is (*i)) os << "out "; - } - else - { - if (fin.is (*i)) os << "in "; - if (fout.is (*i)) os << "out "; - } - (*i)->build_decl (os); - os << ",\n"; + os << ";\n"; } - for (vector::iterator i = b.refs.begin (); i != b.refs.end (); i++) +#if 0 + // not neccessary right now, as GLSL is rich on predefinitions + for (vector::iterator i = b.streams.begin (); i != b.streams.end (); i++) { - os << " "; + if (vout.is (*i) || fout.is (*i)) + os << "varying "; + else if (vin.is (*i)) + os << "attribute "; + (*i)->build_decl (os); - os << ",\n"; + os << ";\n"; } +#endif - os << " uniform float unused_cg_broken_syntax\n"; - os << ")\n{\n"; + os << "\nvoid main ()\n{\n"; for (vector::iterator i = b.temps.begin (); i != b.temps.end (); i++) { @@ -272,14 +244,14 @@ { vertex_program p; temp_4f t1, t2; - sampler2d s2d (1); + sampler_2d s2d (1); p << t2 << " = tex2D (" << s2d << ", " << vin.position_4f << ".xy);\n"; p << t1 << " = mul (" << vin.position_4f << "," << mvp << ");\n"; p << vout.position_4f << " = " << t1 << ";\n"; p.print (); - //exit (0); + exit (0); } }