@@ -1925,34 +1925,6 @@ void setcolormask(bool r, bool g, bool b)
19251925 colormask[2 ] = b ? GL_TRUE : GL_FALSE;
19261926}
19271927
1928- bool needsview (int v, int targtype)
1929- {
1930- switch (v)
1931- {
1932- case VW_NORMAL: return targtype == VP_CAMERA;
1933- case VW_LEFTRIGHT:
1934- case VW_CROSSEYED: return targtype == VP_LEFT || targtype == VP_RIGHT;
1935- case VW_STEREO_BLEND:
1936- case VW_STEREO_BLEND_REDCYAN: return targtype >= VP_LEFT && targtype <= VP_CAMERA;
1937- case VW_STEREO_AVG:
1938- case VW_STEREO_REDCYAN: return targtype == VP_LEFT || targtype == VP_RIGHT;
1939- }
1940- return false ;
1941- }
1942-
1943- bool copyview (int v, int targtype)
1944- {
1945- switch (v)
1946- {
1947- case VW_LEFTRIGHT:
1948- case VW_CROSSEYED: return targtype == VP_LEFT || targtype == VP_RIGHT;
1949- case VW_STEREO_BLEND:
1950- case VW_STEREO_BLEND_REDCYAN: return targtype == VP_RIGHT;
1951- case VW_STEREO_AVG: return targtype == VP_LEFT;
1952- }
1953- return false ;
1954- }
1955-
19561928bool clearview (int v, int targtype)
19571929{
19581930 switch (v)
@@ -2022,64 +1994,6 @@ void drawnoviewtype(int targtype)
20221994 }
20231995}
20241996
2025- void drawnoview ()
2026- {
2027- int copies = 0 , oldcurtime = curtime;
2028- loopi (VP_MAX) if (needsview (viewtype, i))
2029- {
2030- drawnoviewtype (i);
2031- if (copyview (viewtype, i))
2032- {
2033- views[i].copy ();
2034- copies++;
2035- }
2036- curtime = 0 ;
2037- }
2038- if (needsview (viewtype, VP_CAMERA)) drawnoviewtype (VP_CAMERA);
2039- curtime = oldcurtime;
2040-
2041- if (!copies) return ;
2042-
2043- glDisable (GL_BLEND);
2044- gle::colorf (1 .f , 1 .f , 1 .f );
2045- switch (viewtype)
2046- {
2047- case VW_LEFTRIGHT:
2048- {
2049- views[VP_LEFT].draw (0 , 0 , 0 .5f , 1 );
2050- views[VP_RIGHT].draw (0 .5f , 0 , 0 .5f , 1 );
2051- break ;
2052- }
2053- case VW_CROSSEYED:
2054- {
2055- views[VP_LEFT].draw (0 .5f , 0 , 0 .5f , 1 );
2056- views[VP_RIGHT].draw (0 , 0 , 0 .5f , 1 );
2057- break ;
2058- }
2059- case VW_STEREO_BLEND:
2060- case VW_STEREO_BLEND_REDCYAN:
2061- {
2062- glEnable (GL_BLEND);
2063- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
2064- if (viewtype == VW_STEREO_BLEND) glColorMask (GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE);
2065- gle::colorf (1 .f , 1 .f , 1 .f , stereoblend); views[VP_RIGHT].draw (0 , 0 , 1 , 1 );
2066- if (viewtype == VW_STEREO_BLEND) glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
2067- glDisable (GL_BLEND);
2068- break ;
2069- }
2070- case VW_STEREO_AVG:
2071- {
2072- glEnable (GL_BLEND);
2073- glBlendFunc (GL_ONE, GL_CONSTANT_COLOR);
2074- glBlendColor_ (0 .f , 0 .5f , 1 .f , 1 .f );
2075- gle::colorf (1 .f , 0 .5f , 0 .f );
2076- views[VP_LEFT].draw (0 , 0 , 1 , 1 );
2077- glDisable (GL_BLEND);
2078- break ;
2079- }
2080- }
2081- }
2082-
20831997void drawviewtype (int targtype)
20841998{
20851999 updatedynlights ();
@@ -2237,8 +2151,7 @@ bool hasnoview()
22372151
22382152void gl_drawframe ()
22392153{
2240- if (hasnoview ()) drawnoview ();
2241- else
2154+ if (!hasnoview ())
22422155 {
22432156 if (deferdrawtextures) drawtextures ();
22442157
@@ -2263,88 +2176,89 @@ void gl_drawframe()
22632176 viewproject ();
22642177 setcamprojmatrix ();
22652178 game::project (w, h);
2179+ }
22662180
2267- int oldcurtime = curtime;
2181+ void (*drawviewtype_fn)(int ) = hasnoview () ? drawnoviewtype : drawviewtype;
2182+ int oldcurtime = curtime;
22682183
2269- switch (viewtype)
2270- {
2271- case VW_NORMAL:
2272- drawviewtype (VP_CAMERA);
2273- break ;
2184+ switch (viewtype)
2185+ {
2186+ case VW_NORMAL:
2187+ drawviewtype_fn (VP_CAMERA);
2188+ break ;
22742189
2275- case VW_LEFTRIGHT:
2276- case VW_CROSSEYED:
2277- drawviewtype (VP_LEFT);
2278- views[VP_LEFT].copy ();
2279- curtime = 0 ;
2190+ case VW_LEFTRIGHT:
2191+ case VW_CROSSEYED:
2192+ drawviewtype_fn (VP_LEFT);
2193+ views[VP_LEFT].copy ();
2194+ curtime = 0 ;
22802195
2281- drawviewtype (VP_RIGHT);
2282- views[VP_RIGHT].copy ();
2283- curtime = oldcurtime;
2196+ drawviewtype_fn (VP_RIGHT);
2197+ views[VP_RIGHT].copy ();
2198+ curtime = oldcurtime;
22842199
2285- glDisable (GL_BLEND);
2286- gle::colorf (1 .f , 1 .f , 1 .f );
2287- if (viewtype == VW_LEFTRIGHT)
2288- {
2289- views[VP_LEFT].draw (0 , 0 , 0 .5f , 1 );
2290- views[VP_RIGHT].draw (0 .5f , 0 , 0 .5f , 1 );
2291- }
2292- else if (viewtype == VW_CROSSEYED)
2293- {
2294- views[VP_LEFT].draw (0 .5f , 0 , 0 .5f , 1 );
2295- views[VP_RIGHT].draw (0 , 0 , 0 .5f , 1 );
2296- }
2200+ glDisable (GL_BLEND);
2201+ gle::colorf (1 .f , 1 .f , 1 .f );
2202+ if (viewtype == VW_LEFTRIGHT)
2203+ {
2204+ views[VP_LEFT].draw (0 , 0 , 0 .5f , 1 );
2205+ views[VP_RIGHT].draw (0 .5f , 0 , 0 .5f , 1 );
2206+ }
2207+ else if (viewtype == VW_CROSSEYED)
2208+ {
2209+ views[VP_LEFT].draw (0 .5f , 0 , 0 .5f , 1 );
2210+ views[VP_RIGHT].draw (0 , 0 , 0 .5f , 1 );
2211+ }
22972212
2298- break ;
2213+ break ;
22992214
2300- case VW_STEREO_BLEND:
2301- case VW_STEREO_BLEND_REDCYAN:
2302- drawviewtype (VP_LEFT);
2303- curtime = 0 ;
2215+ case VW_STEREO_BLEND:
2216+ case VW_STEREO_BLEND_REDCYAN:
2217+ drawviewtype_fn (VP_LEFT);
2218+ curtime = 0 ;
23042219
2305- drawviewtype (VP_RIGHT);
2306- views[VP_RIGHT].copy ();
2307- curtime = 0 ;
2220+ drawviewtype_fn (VP_RIGHT);
2221+ views[VP_RIGHT].copy ();
2222+ curtime = 0 ;
23082223
2309- drawviewtype (VP_CAMERA);
2310- curtime = oldcurtime;
2224+ drawviewtype_fn (VP_CAMERA);
2225+ curtime = oldcurtime;
23112226
2312- glDisable (GL_BLEND);
2313- gle::colorf (1 .f , 1 .f , 1 .f );
2314- glEnable (GL_BLEND);
2315- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
2316- if (viewtype == VW_STEREO_BLEND) glColorMask (GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE);
2317- gle::colorf (1 .f , 1 .f , 1 .f , stereoblend); views[VP_RIGHT].draw (0 , 0 , 1 , 1 );
2318- if (viewtype == VW_STEREO_BLEND) glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
2319- glDisable (GL_BLEND);
2227+ glDisable (GL_BLEND);
2228+ gle::colorf (1 .f , 1 .f , 1 .f );
2229+ glEnable (GL_BLEND);
2230+ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
2231+ if (viewtype == VW_STEREO_BLEND) glColorMask (GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE);
2232+ gle::colorf (1 .f , 1 .f , 1 .f , stereoblend); views[VP_RIGHT].draw (0 , 0 , 1 , 1 );
2233+ if (viewtype == VW_STEREO_BLEND) glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
2234+ glDisable (GL_BLEND);
23202235
2321- break ;
2236+ break ;
23222237
2323- case VW_STEREO_AVG:
2324- case VW_STEREO_REDCYAN:
2325- drawviewtype (VP_LEFT);
2326- if (viewtype == VW_STEREO_AVG)
2327- {
2328- views[VP_LEFT].copy ();
2329- }
2330- curtime = 0 ;
2331- drawviewtype (VP_RIGHT);
2332- curtime = oldcurtime;
2238+ case VW_STEREO_AVG:
2239+ case VW_STEREO_REDCYAN:
2240+ drawviewtype_fn (VP_LEFT);
2241+ if (viewtype == VW_STEREO_AVG)
2242+ {
2243+ views[VP_LEFT].copy ();
2244+ }
2245+ curtime = 0 ;
2246+ drawviewtype_fn (VP_RIGHT);
2247+ curtime = oldcurtime;
23332248
2249+ glDisable (GL_BLEND);
2250+ gle::colorf (1 .f , 1 .f , 1 .f );
2251+ if (viewtype == VW_STEREO_AVG)
2252+ {
2253+ glEnable (GL_BLEND);
2254+ glBlendFunc (GL_ONE, GL_CONSTANT_COLOR);
2255+ glBlendColor_ (0 .f , 0 .5f , 1 .f , 1 .f );
2256+ gle::colorf (1 .f , 0 .5f , 0 .f );
2257+ views[VP_LEFT].draw (0 , 0 , 1 , 1 );
23342258 glDisable (GL_BLEND);
2335- gle::colorf (1 .f , 1 .f , 1 .f );
2336- if (viewtype == VW_STEREO_AVG)
2337- {
2338- glEnable (GL_BLEND);
2339- glBlendFunc (GL_ONE, GL_CONSTANT_COLOR);
2340- glBlendColor_ (0 .f , 0 .5f , 1 .f , 1 .f );
2341- gle::colorf (1 .f , 0 .5f , 0 .f );
2342- views[VP_LEFT].draw (0 , 0 , 1 , 1 );
2343- glDisable (GL_BLEND);
2344- }
2259+ }
23452260
2346- break ;
2347- }
2261+ break ;
23482262 }
23492263}
23502264
0 commit comments