diff options
author | Brian Paul <[email protected]> | 2004-11-27 22:47:59 +0000 |
---|---|---|
committer | Brian Paul <[email protected]> | 2004-11-27 22:47:59 +0000 |
commit | 65a66f5bc37383c00423c21baf8ba9d6771e0259 (patch) | |
tree | 0d98e004b457adde579dd27b9fe32182d54268b6 /src/mesa/drivers/dri | |
parent | 118a8bad73bda88fc54f802b2beeb687c8ddb45a (diff) |
Remove _mesa_ResizeBuffersMESA() call from _mesa_set_viewport().
Now, the driver's Viewport routine should call _mesa_ResizeBuffersMESA()
if necessary.
Cleaned up code related to GLframebuffer width/height initialization.
Set initial viewport/scissor params in _mesa_make_current2(), instead of
in the drivers' MakeCurrent functions.
Diffstat (limited to 'src/mesa/drivers/dri')
28 files changed, 45 insertions, 73 deletions
diff --git a/src/mesa/drivers/dri/fb/fb_dri.c b/src/mesa/drivers/dri/fb/fb_dri.c index 49ae5c98e8d..16540ed0518 100644 --- a/src/mesa/drivers/dri/fb/fb_dri.c +++ b/src/mesa/drivers/dri/fb/fb_dri.c @@ -63,6 +63,7 @@ #include "miniglxP.h" /* window-system-specific */ #include "dri_util.h" /* window-system-specific-ish */ +#include "buffers.h" #include "context.h" #include "extensions.h" #include "imports.h" @@ -133,6 +134,13 @@ get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height ) } +static void +viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) +{ + _mesa_ResizeBuffersMESA(); +} + + /* specifies the buffer for swrast span rendering/reading */ static void set_buffer( GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit ) @@ -166,6 +174,7 @@ init_core_functions( struct dd_function_table *functions ) functions->UpdateState = update_state; functions->ResizeBuffers = _swrast_alloc_buffers; functions->GetBufferSize = get_buffer_size; + functions->Viewport = viewport; functions->Clear = _swrast_Clear; /* could accelerate with blits */ } @@ -536,11 +545,6 @@ fbMakeCurrent( __DRIcontextPrivate *driContextPriv, _mesa_make_current2( newFbCtx->glCtx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate ); - - if ( !newFbCtx->glCtx->Viewport.Width ) { - _mesa_set_viewport( newFbCtx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h ); - } } else { _mesa_make_current( 0, 0 ); } diff --git a/src/mesa/drivers/dri/ffb/ffb_state.c b/src/mesa/drivers/dri/ffb/ffb_state.c index 86f92c83db7..53d56d20436 100644 --- a/src/mesa/drivers/dri/ffb/ffb_state.c +++ b/src/mesa/drivers/dri/ffb/ffb_state.c @@ -26,6 +26,7 @@ */ #include "mtypes.h" +#include "buffers.h" #include "colormac.h" #include "mm.h" #include "ffb_dd.h" @@ -444,6 +445,8 @@ void ffbCalcViewport(GLcontext *ctx) static void ffbDDViewport(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); ffbCalcViewport(ctx); } diff --git a/src/mesa/drivers/dri/ffb/ffb_xmesa.c b/src/mesa/drivers/dri/ffb/ffb_xmesa.c index 43c1f346610..4e38d082373 100644 --- a/src/mesa/drivers/dri/ffb/ffb_xmesa.c +++ b/src/mesa/drivers/dri/ffb/ffb_xmesa.c @@ -494,12 +494,6 @@ ffbMakeCurrent(__DRIcontextPrivate *driContextPriv, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate); - if (!fmesa->glCtx->Viewport.Width) - _mesa_set_viewport(fmesa->glCtx, - 0, 0, - driDrawPriv->w, - driDrawPriv->h); - first_time = 0; if (fmesa->wid == ~0) { first_time = 1; diff --git a/src/mesa/drivers/dri/gamma/gamma_state.c b/src/mesa/drivers/dri/gamma/gamma_state.c index 7beabc69265..29f1a57959f 100644 --- a/src/mesa/drivers/dri/gamma/gamma_state.c +++ b/src/mesa/drivers/dri/gamma/gamma_state.c @@ -27,6 +27,7 @@ #include "gamma_context.h" #include "gamma_macros.h" +#include "buffers.h" #include "macros.h" #include "glint_dri.h" #include "colormac.h" @@ -1098,6 +1099,8 @@ void gammaUpdateWindow( GLcontext *ctx ) static void gammaDDViewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); gammaUpdateWindow( ctx ); } diff --git a/src/mesa/drivers/dri/gamma/gamma_xmesa.c b/src/mesa/drivers/dri/gamma/gamma_xmesa.c index 64ba0d909ac..00f6aa32aeb 100644 --- a/src/mesa/drivers/dri/gamma/gamma_xmesa.c +++ b/src/mesa/drivers/dri/gamma/gamma_xmesa.c @@ -225,11 +225,6 @@ newGammaCtx->new_state |= GAMMA_NEW_WINDOW; /* FIXME */ _mesa_make_current2( newGammaCtx->glCtx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate ); - - if (!newGammaCtx->glCtx->Viewport.Width) { - _mesa_set_viewport(newGammaCtx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); - } } else { _mesa_make_current( 0, 0 ); } diff --git a/src/mesa/drivers/dri/i810/i810context.c b/src/mesa/drivers/dri/i810/i810context.c index 7db354d193f..4443c7eac5c 100644 --- a/src/mesa/drivers/dri/i810/i810context.c +++ b/src/mesa/drivers/dri/i810/i810context.c @@ -431,9 +431,6 @@ i810MakeCurrent(__DRIcontextPrivate *driContextPriv, /* Are these necessary? */ i810XMesaWindowMoved( imesa ); - if (!imesa->glCtx->Viewport.Width) - _mesa_set_viewport(imesa->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); } else { _mesa_make_current(0,0); diff --git a/src/mesa/drivers/dri/i810/i810state.c b/src/mesa/drivers/dri/i810/i810state.c index 35fad6529c9..42df2e8b9ee 100644 --- a/src/mesa/drivers/dri/i810/i810state.c +++ b/src/mesa/drivers/dri/i810/i810state.c @@ -3,6 +3,7 @@ #include <stdio.h> #include "glheader.h" +#include "buffers.h" #include "context.h" #include "macros.h" #include "enums.h" @@ -682,6 +683,8 @@ static void i810Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); i810CalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/i830/i830_context.c b/src/mesa/drivers/dri/i830/i830_context.c index 3e6f8a9a1fb..082476f2118 100644 --- a/src/mesa/drivers/dri/i830/i830_context.c +++ b/src/mesa/drivers/dri/i830/i830_context.c @@ -530,10 +530,6 @@ GLboolean i830MakeCurrent(__DRIcontextPrivate *driContextPriv, _mesa_make_current2(imesa->glCtx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate); - - if (!imesa->glCtx->Viewport.Width) - _mesa_set_viewport(imesa->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); } else { _mesa_make_current(0,0); } diff --git a/src/mesa/drivers/dri/i830/i830_state.c b/src/mesa/drivers/dri/i830/i830_state.c index 12cec35c3da..f8979c70187 100644 --- a/src/mesa/drivers/dri/i830/i830_state.c +++ b/src/mesa/drivers/dri/i830/i830_state.c @@ -36,6 +36,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "glheader.h" +#include "buffers.h" #include "context.h" #include "macros.h" #include "enums.h" @@ -1228,6 +1229,8 @@ static void i830Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); i830CalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/i915/intel_context.c b/src/mesa/drivers/dri/i915/intel_context.c index 302ddfa840e..1ff7b8be7f4 100644 --- a/src/mesa/drivers/dri/i915/intel_context.c +++ b/src/mesa/drivers/dri/i915/intel_context.c @@ -534,9 +534,6 @@ GLboolean intelMakeCurrent(__DRIcontextPrivate *driContextPriv, _mesa_make_current2(&intel->ctx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate); - - if (!intel->ctx.Viewport.Width) - _mesa_set_viewport(&intel->ctx, 0, 0, driDrawPriv->w, driDrawPriv->h); } else { _mesa_make_current(0,0); } diff --git a/src/mesa/drivers/dri/mach64/mach64_context.c b/src/mesa/drivers/dri/mach64/mach64_context.c index 0bbda3a43de..1978c5d6151 100644 --- a/src/mesa/drivers/dri/mach64/mach64_context.c +++ b/src/mesa/drivers/dri/mach64/mach64_context.c @@ -312,11 +312,6 @@ mach64MakeCurrent( __DRIcontextPrivate *driContextPriv, newMach64Ctx->new_state |= MACH64_NEW_CLIP; - - if ( !newMach64Ctx->glCtx->Viewport.Width ) { - _mesa_set_viewport(newMach64Ctx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); - } } else { _mesa_make_current( 0, 0 ); } diff --git a/src/mesa/drivers/dri/mach64/mach64_state.c b/src/mesa/drivers/dri/mach64/mach64_state.c index 91f588bb788..ea55124d916 100644 --- a/src/mesa/drivers/dri/mach64/mach64_state.c +++ b/src/mesa/drivers/dri/mach64/mach64_state.c @@ -37,6 +37,7 @@ #include "mach64_tex.h" #include "context.h" +#include "buffers.h" #include "enums.h" #include "colormac.h" #include "swrast/swrast.h" @@ -646,6 +647,8 @@ static void mach64Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); mach64CalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/mga/mga_xmesa.c b/src/mesa/drivers/dri/mga/mga_xmesa.c index 8bed48c423e..6fcef0c4488 100644 --- a/src/mesa/drivers/dri/mga/mga_xmesa.c +++ b/src/mesa/drivers/dri/mga/mga_xmesa.c @@ -802,11 +802,6 @@ mgaMakeCurrent(__DRIcontextPrivate *driContextPriv, _mesa_make_current2(mmesa->glCtx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate); - - if (!mmesa->glCtx->Viewport.Width) - _mesa_set_viewport(mmesa->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); - } else { _mesa_make_current(NULL, NULL); diff --git a/src/mesa/drivers/dri/mga/mgastate.c b/src/mesa/drivers/dri/mga/mgastate.c index 295d3f5a088..69cc0f33a70 100644 --- a/src/mesa/drivers/dri/mga/mgastate.c +++ b/src/mesa/drivers/dri/mga/mgastate.c @@ -28,6 +28,7 @@ #include "mtypes.h" +#include "buffers.h" #include "colormac.h" #include "dd.h" @@ -695,6 +696,8 @@ static void mgaViewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); mgaCalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/r128/r128_context.c b/src/mesa/drivers/dri/r128/r128_context.c index 287f041a81c..2f417d9097f 100644 --- a/src/mesa/drivers/dri/r128/r128_context.c +++ b/src/mesa/drivers/dri/r128/r128_context.c @@ -341,13 +341,7 @@ r128MakeCurrent( __DRIcontextPrivate *driContextPriv, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate ); - newR128Ctx->new_state |= R128_NEW_WINDOW | R128_NEW_CLIP; - - if ( !newR128Ctx->glCtx->Viewport.Width ) { - _mesa_set_viewport(newR128Ctx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); - } } else { _mesa_make_current( 0, 0 ); } diff --git a/src/mesa/drivers/dri/r128/r128_state.c b/src/mesa/drivers/dri/r128/r128_state.c index 4e43629f49b..320865c67b4 100644 --- a/src/mesa/drivers/dri/r128/r128_state.c +++ b/src/mesa/drivers/dri/r128/r128_state.c @@ -41,6 +41,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "r128_tex.h" #include "context.h" +#include "buffers.h" #include "enums.h" #include "colormac.h" #include "swrast/swrast.h" @@ -664,6 +665,8 @@ static void r128Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); r128CalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c index d5d2ce150a5..7bf097b1253 100644 --- a/src/mesa/drivers/dri/r200/r200_context.c +++ b/src/mesa/drivers/dri/r200/r200_context.c @@ -624,11 +624,6 @@ r200MakeCurrent( __DRIcontextPrivate *driContextPriv, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate ); - if ( !newCtx->glCtx->Viewport.Width ) { - _mesa_set_viewport( newCtx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h ); - } - if (newCtx->vb.enabled) r200VtxfmtMakeCurrent( newCtx->glCtx ); diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c index fc69ec1b5bc..9231697a49e 100644 --- a/src/mesa/drivers/dri/radeon/radeon_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_context.c @@ -593,11 +593,6 @@ radeonMakeCurrent( __DRIcontextPrivate *driContextPriv, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate ); - if ( !newCtx->glCtx->Viewport.Width ) { - _mesa_set_viewport( newCtx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h ); - } - if (newCtx->vb.enabled) radeonVtxfmtMakeCurrent( newCtx->glCtx ); diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c index bc94882a660..851b62035a5 100644 --- a/src/mesa/drivers/dri/radeon/radeon_state.c +++ b/src/mesa/drivers/dri/radeon/radeon_state.c @@ -39,6 +39,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "enums.h" #include "colormac.h" #include "state.h" +#include "buffers.h" #include "context.h" #include "swrast/swrast.h" @@ -1451,6 +1452,8 @@ void radeonUpdateWindow( GLcontext *ctx ) static void radeonViewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); /* Don't pipeline viewport changes, conflict with window offset * setting below. Could apply deltas to rescue pipelined viewport * values, or keep the originals hanging around. diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c index adb7f2c82db..a80ffce5d74 100644 --- a/src/mesa/drivers/dri/savage/savage_xmesa.c +++ b/src/mesa/drivers/dri/savage/savage_xmesa.c @@ -676,10 +676,6 @@ savageMakeCurrent(__DRIcontextPrivate *driContextPriv, (GLframebuffer *) driReadPriv->driverPrivate); savageXMesaWindowMoved( imesa ); - - if (!imesa->glCtx->Viewport.Width) - _mesa_set_viewport(imesa->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); } else { diff --git a/src/mesa/drivers/dri/savage/savagestate.c b/src/mesa/drivers/dri/savage/savagestate.c index c6545fbcca3..75289fcbfd4 100644 --- a/src/mesa/drivers/dri/savage/savagestate.c +++ b/src/mesa/drivers/dri/savage/savagestate.c @@ -26,6 +26,7 @@ #include <stdio.h> #include "mtypes.h" +#include "buffers.h" #include "enums.h" #include "macros.h" #include "dd.h" @@ -704,6 +705,8 @@ static void savageViewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); savageCalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/sis/sis_context.c b/src/mesa/drivers/dri/sis/sis_context.c index 0d15bfa5e90..3b23b7df4e5 100644 --- a/src/mesa/drivers/dri/sis/sis_context.c +++ b/src/mesa/drivers/dri/sis/sis_context.c @@ -312,11 +312,6 @@ sisMakeCurrent( __DRIcontextPrivate *driContextPriv, sisUpdateBufferSize( newSisCtx ); sisUpdateClipping( newSisCtx->glCtx ); - - if ( newSisCtx->glCtx->Viewport.Width == 0 ) { - _mesa_set_viewport(newSisCtx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); - } } else { _mesa_make_current( 0, 0 ); } diff --git a/src/mesa/drivers/dri/sis/sis_state.c b/src/mesa/drivers/dri/sis/sis_state.c index 2cca1611df7..b269d694b0f 100644 --- a/src/mesa/drivers/dri/sis/sis_state.c +++ b/src/mesa/drivers/dri/sis/sis_state.c @@ -39,6 +39,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "sis_tex.h" #include "context.h" +#include "buffers.h" #include "enums.h" #include "colormac.h" #include "swrast/swrast.h" @@ -436,6 +437,8 @@ static void sisDDViewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); sisCalcViewport( ctx ); } diff --git a/src/mesa/drivers/dri/tdfx/tdfx_context.c b/src/mesa/drivers/dri/tdfx/tdfx_context.c index 56b1e459b74..683c9bd5f24 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_context.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_context.c @@ -666,10 +666,6 @@ tdfxMakeCurrent( __DRIcontextPrivate *driContextPriv, _mesa_make_current2( newCtx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate ); - - if ( !newCtx->Viewport.Width ) { - _mesa_set_viewport( newCtx, 0, 0, driDrawPriv->w, driDrawPriv->h ); - } } else { _mesa_make_current( 0, 0 ); } diff --git a/src/mesa/drivers/dri/tdfx/tdfx_state.c b/src/mesa/drivers/dri/tdfx/tdfx_state.c index 818a9bc23f4..6edf804b2ec 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_state.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_state.c @@ -40,6 +40,7 @@ */ #include "mtypes.h" +#include "buffers.h" #include "colormac.h" #include "texformat.h" #include "texstore.h" @@ -902,6 +903,8 @@ static void tdfxDDViewport( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h ) { tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx); + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); FLUSH_BATCH( fxMesa ); fxMesa->new_state |= TDFX_NEW_VIEWPORT; } diff --git a/src/mesa/drivers/dri/unichrome/via_context.c b/src/mesa/drivers/dri/unichrome/via_context.c index f058424e64d..490f574ad1a 100644 --- a/src/mesa/drivers/dri/unichrome/via_context.c +++ b/src/mesa/drivers/dri/unichrome/via_context.c @@ -959,9 +959,6 @@ viaMakeCurrent(__DRIcontextPrivate *driContextPriv, if (VIA_DEBUG) fprintf(stderr, "Context %d MakeCurrent\n", vmesa->hHWContext); #endif viaXMesaWindowMoved(vmesa); - if (!vmesa->glCtx->Viewport.Width) - _mesa_set_viewport(vmesa->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); } else { _mesa_make_current(0,0); diff --git a/src/mesa/drivers/dri/unichrome/via_state.c b/src/mesa/drivers/dri/unichrome/via_state.c index 79ce4cbe88d..4c78a3f263e 100644 --- a/src/mesa/drivers/dri/unichrome/via_state.c +++ b/src/mesa/drivers/dri/unichrome/via_state.c @@ -25,6 +25,7 @@ #include <stdio.h> #include "glheader.h" +#include "buffers.h" #include "context.h" #include "macros.h" #include "colormac.h" @@ -464,6 +465,8 @@ static void viaViewport(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height) { + /* update size of Mesa/software ancillary buffers */ + _mesa_ResizeBuffersMESA(); viaCalcViewport(ctx); } diff --git a/src/mesa/drivers/dri/x11/x11_dri.c b/src/mesa/drivers/dri/x11/x11_dri.c index f7d25271fba..f414b7e424b 100644 --- a/src/mesa/drivers/dri/x11/x11_dri.c +++ b/src/mesa/drivers/dri/x11/x11_dri.c @@ -409,11 +409,6 @@ x11MakeCurrent(__DRIcontextPrivate *driContextPriv, _mesa_make_current2(newFbCtx->glCtx, (GLframebuffer *) driDrawPriv->driverPrivate, (GLframebuffer *) driReadPriv->driverPrivate); - - if (!newFbCtx->glCtx->Viewport.Width) { - _mesa_set_viewport(newFbCtx->glCtx, 0, 0, - driDrawPriv->w, driDrawPriv->h); - } } else { _mesa_make_current(0, 0); } |