@@ -310,6 +310,8 @@ void ogx_initialize()
310310 glLoadIdentity ();
311311 glMatrixMode (GL_MODELVIEW );
312312 glLoadIdentity ();
313+ glparamstate .mv_ptr = & glparamstate .modelview_matrix ;
314+ glparamstate .proj_ptr = & glparamstate .projection_matrix ;
313315
314316 glparamstate .scissor [0 ] = glparamstate .scissor [1 ] = 0 ;
315317 /* Scissor width and height are initialized when a window is attached */
@@ -2268,13 +2270,32 @@ static void setup_fog()
22682270 GX_SetFog (mode , start , end , near , far , color );
22692271}
22702272
2273+ static bool setup_common_stages ()
2274+ {
2275+ if (glparamstate .stencil .enabled ) {
2276+ bool should_draw = _ogx_stencil_setup_tev ();
2277+ if (!should_draw ) return false;
2278+ }
2279+
2280+ if (glparamstate .clip_plane_mask != 0 ) {
2281+ _ogx_clip_setup_tev ();
2282+ }
2283+
2284+ /* Stages and texture coordinate slots must be enabled sequentially, so we
2285+ * know that the number of used resources is given by
2286+ * OgxGpuResources::{tevstage,texcoord}_first. */
2287+ GX_SetNumTevStages (ogx_gpu_resources -> tevstage_first );
2288+ GX_SetNumTexGens (ogx_gpu_resources -> texcoord_first );
2289+ return true;
2290+ }
2291+
22712292bool _ogx_setup_render_stages ()
22722293{
22732294 if (!glparamstate .dirty .bits .dirty_tev ) return true;
22742295
22752296 u8 raster_output , raster_reg_index ;
22762297 if (glparamstate .texture_enabled ) {
2277- raster_reg_index = _ogx_gpu_resources -> tevreg_first ++ ;
2298+ raster_reg_index = ogx_gpu_resources -> tevreg_first ++ ;
22782299 raster_output = GX_TEVREG0 + raster_reg_index ;
22792300 } else {
22802301 raster_output = GX_TEVPREV ;
@@ -2286,7 +2307,7 @@ bool _ogx_setup_render_stages()
22862307 GXColor color_black = { 0 , 0 , 0 , 255 };
22872308 GXColor color_gamb = gxcol_new_fv (glparamstate .lighting .globalambient );
22882309
2289- _ogx_gpu_resources -> tevstage_first += 2 ;
2310+ ogx_gpu_resources -> tevstage_first += 2 ;
22902311 GX_SetNumChans (2 );
22912312
22922313 unsigned char vert_color_src = GX_SRC_VTX ;
@@ -2357,7 +2378,7 @@ bool _ogx_setup_render_stages()
23572378
23582379 // STAGE 0: ambient*vert_color -> cprev
23592380 // In data: d: Raster Color, a: emission color
2360- u8 emission_reg = _ogx_gpu_resources -> tevreg_first ++ ;
2381+ u8 emission_reg = ogx_gpu_resources -> tevreg_first ++ ;
23612382 GX_SetTevColor (GX_TEVREG0 + emission_reg , ecol );
23622383 /* Multiply by two because there are alpha registers in between */
23632384 GX_SetTevColorIn (GX_TEVSTAGE0 , GX_CC_C0 + emission_reg * 2 ,
@@ -2409,7 +2430,7 @@ bool _ogx_setup_render_stages()
24092430 _ogx_setup_texture_stages (raster_reg_index , GX_COLOR0A0 );
24102431 } else {
24112432 // Use one stage only
2412- _ogx_gpu_resources -> tevstage_first += 1 ;
2433+ ogx_gpu_resources -> tevstage_first += 1 ;
24132434 // In data: d: Raster Color
24142435 GX_SetTevColorIn (GX_TEVSTAGE0 , GX_CC_ZERO , GX_CC_ZERO , GX_CC_ZERO , GX_CC_RASC );
24152436 GX_SetTevAlphaIn (GX_TEVSTAGE0 , GX_CA_ZERO , GX_CA_ZERO , GX_CA_ZERO , GX_CA_RASA );
@@ -2421,22 +2442,9 @@ bool _ogx_setup_render_stages()
24212442 }
24222443 }
24232444
2424- if (glparamstate .stencil .enabled ) {
2425- bool should_draw = _ogx_stencil_setup_tev ();
2426- if (!should_draw ) return false;
2427- }
2428-
2429- if (glparamstate .clip_plane_mask != 0 ) {
2430- _ogx_clip_setup_tev ();
2431- }
2432-
2433- /* Stages and texture coordinate slots must be enabled sequentially, so we
2434- * know that the number of used resources is given by
2435- * OgxGpuResources::{tevstage,texcoord}_first. */
2436- GX_SetNumTevStages (_ogx_gpu_resources -> tevstage_first );
2437- GX_SetNumTexGens (_ogx_gpu_resources -> texcoord_first );
2445+ bool should_draw = setup_common_stages ();
24382446 glparamstate .dirty .bits .dirty_tev = false;
2439- return true ;
2447+ return should_draw ;
24402448}
24412449
24422450static inline void apply_state_fixed_pipeline ()
@@ -2629,6 +2637,7 @@ static bool setup_draw(const OgxDrawData *draw_data)
26292637 if (!should_draw ) return false;
26302638 } else {
26312639 _ogx_shader_setup_draw (draw_data );
2640+ if (!setup_common_stages ()) return false;
26322641 }
26332642 _ogx_apply_state ();
26342643 return true;
0 commit comments