-VG_STATIC void font3d_bind( font3d *font, camera *cam )
-{
- shader_model_font_use();
- shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} );
- shader_model_font_uTexMain( 1 );
- glActiveTexture( GL_TEXTURE1 );
- glBindTexture( GL_TEXTURE_2D, font->texture );
+struct _font3d_render{
+ v4f offset;
+ font3d *font;
+ u32 variant_id;
+
+ enum font_shader {
+ k_font_shader_default,
+ k_font_shader_world
+ }
+ shader;
+}
+static gui_font3d;
+
+/*
+ * world can be null if not using world shader
+ */
+static void font3d_bind( font3d *font, enum font_shader shader,
+ int depth_compare, world_instance *world,
+ camera *cam ){
+ gui_font3d.shader = shader;
+ gui_font3d.font = font;
+ glActiveTexture( GL_TEXTURE1 );
+ glBindTexture( GL_TEXTURE_2D, font->texture );
+
+ if( shader == k_font_shader_default ){
+ shader_model_font_use();
+ shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} );
+ shader_model_font_uTexMain( 1 );
+
+ shader_model_font_uDepthCompare( depth_compare );
+ if( depth_compare ){
+ /* TODO: Compress with code in player_render.c */
+ shader_model_font_uTexSceneDepth( 2 );
+ render_fb_bind_texture( gpipeline.fb_main, 2, 2 );
+ v3f inverse;
+ render_fb_inverse_ratio( gpipeline.fb_main, inverse );
+ inverse[2] = skaterift.cam.farz-skaterift.cam.nearz;
+
+ shader_model_font_uInverseRatioDepth( inverse );
+ render_fb_inverse_ratio( NULL, inverse );
+ inverse[2] = cam->farz-cam->nearz;
+ shader_model_font_uInverseRatioMain( inverse );
+ }