VirtualBox

Ignore:
Timestamp:
Jan 23, 2013 9:16:23 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
83279
Message:

crOpenGL: additional stencil state fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_stencil.c

    r44326 r44332  
    342342}
    343343
     344#ifdef CRSTATE_DEBUG_STENCIL_ERR
     345#define CRSTATE_CLEARERR() do { \
     346            while (diff_api.GetError() != GL_NO_ERROR) {} \
     347        } while (0)
     348
     349#define CRSTATE_CHECKGLERR(_op) do {\
     350            GLenum _glErr; \
     351            CRSTATE_CLEARERR(); \
     352            _op; \
     353            while ((_glErr = diff_api.GetError()) != GL_NO_ERROR) { Assert(0);} \
     354        }while (0)
     355#else
     356#define CRSTATE_CHECKGLERR(_op) do { _op; } while (0)
     357#endif
     358
    344359#define CR_STATE_STENCIL_FUNC_MATCH(_s1, _i1, _s2, _i2) (\
    345360    (_s1)->buffers[(_i1)].func == (_s2)->buffers[(_i2)].func && \
     
    627642    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, bitID))
    628643    {
    629         if (CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     644        if (!CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK))
    630645        {
    631646            if (activeFace == GL_FRONT)
     
    635650            }
    636651
    637             diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func,
    638                 to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].ref,
    639                 to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].mask);
    640             CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK);
     652            diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].func,
     653                to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].ref,
     654                to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].mask);
     655            CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK);
    641656        }
    642657        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, nbitID);
     
    858873    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, bitID))
    859874    {
    860         if (CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     875        if (!CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK))
    861876        {
    862877            if (activeFace == GL_FRONT)
     
    866881            }
    867882
    868             diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].fail,
    869                                     to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthFail,
    870                                     to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthPass);
    871             CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK);
     883            diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].fail,
     884                                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthFail,
     885                                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthPass);
     886            CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK);
    872887        }
    873888        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, nbitID);
     
    928943        if (from->stencilTest != to->stencilTest)
    929944        {
    930             able[to->stencilTest](GL_STENCIL_TEST);
     945            CRSTATE_CHECKGLERR(able[to->stencilTest](GL_STENCIL_TEST));
    931946            FILLDIRTY(b->enable);
    932947            FILLDIRTY(b->dirty);
     
    941956        if (from->stencilTwoSideEXT != to->stencilTwoSideEXT)
    942957        {
    943             able[to->stencilTwoSideEXT](GL_STENCIL_TEST_TWO_SIDE_EXT);
     958            CRSTATE_CHECKGLERR(able[to->stencilTwoSideEXT](GL_STENCIL_TEST_TWO_SIDE_EXT));
    944959            FILLDIRTY(b->enableTwoSideEXT);
    945960            FILLDIRTY(b->dirty);
     
    951966        if (from->clearValue != to->clearValue)
    952967        {
    953             diff_api.ClearStencil (to->clearValue);
     968            CRSTATE_CHECKGLERR(diff_api.ClearStencil (to->clearValue));
    954969            FILLDIRTY(b->clearValue);
    955970            FILLDIRTY(b->dirty);
     
    9921007                }
    9931008
    994                 diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1009                CRSTATE_CHECKGLERR(diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
    9951010                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
    996                     to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1011                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask));
    9971012
    9981013                frontIsSet = GL_TRUE;
     
    10071022                }
    10081023
    1009                 diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1024                CRSTATE_CHECKGLERR(diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
    10101025                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
    1011                     to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1026                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask));
    10121027                frontIsSet = GL_TRUE;
    10131028            }
     
    10201035                }
    10211036
    1022                 diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     1037                CRSTATE_CHECKGLERR(diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
    10231038                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
    1024                     to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     1039                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask));
    10251040                backIsSet = GL_TRUE;
    10261041            }
     
    10461061                    }
    10471062
    1048                     diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1063                    CRSTATE_CHECKGLERR(diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
    10491064                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
    1050                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1065                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask));
    10511066
    10521067                    frontIsSet = GL_TRUE;
     
    10641079                    }
    10651080
    1066                     diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1081                    CRSTATE_CHECKGLERR(diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
    10671082                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
    1068                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1083                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask));
    10691084                    frontIsSet = GL_TRUE;
    10701085                }
     
    10801095                    }
    10811096
    1082                     diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     1097                    CRSTATE_CHECKGLERR(diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
    10831098                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
    1084                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     1099                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask));
    10851100                    backIsSet = GL_TRUE;
    10861101                }
     
    11071122                    }
    11081123
    1109                     diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1124                    CRSTATE_CHECKGLERR(diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
    11101125                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
    1111                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1126                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask));
    11121127
    11131128                    frontIsSet = GL_TRUE;
     
    11251140                    }
    11261141
    1127                     diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1142                    CRSTATE_CHECKGLERR(diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
    11281143                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
    1129                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1144                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask));
    11301145                    frontIsSet = GL_TRUE;
    11311146                }
     
    11411156                    }
    11421157
    1143                     diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     1158                    CRSTATE_CHECKGLERR(diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
    11441159                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
    1145                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     1160                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask));
    11461161                    backIsSet = GL_TRUE;
    11471162                }
     
    11551170    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, bitID))
    11561171    {
    1157         if (CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     1172        if (!CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK))
    11581173        {
    11591174            if (activeFace == GL_FRONT)
    11601175            {
    1161                 diff_api.ActiveStencilFaceEXT(GL_BACK);
     1176                CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_BACK));
    11621177                activeFace = GL_BACK;
    11631178            }
    11641179
    1165             diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func,
    1166                 to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].ref,
    1167                 to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].mask);
     1180            CRSTATE_CHECKGLERR(diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].func,
     1181                to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].ref,
     1182                to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].mask));
    11681183
    11691184            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func);
     
    12081223                if (activeFace == GL_BACK)
    12091224                {
    1210                     diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1225                    CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
    12111226                    activeFace = GL_FRONT;
    12121227                }
    12131228
    1214                 diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1229                CRSTATE_CHECKGLERR(diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
    12151230                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
    1216                     to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1231                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass));
    12171232
    12181233                frontIsSet = GL_TRUE;
     
    12231238                if (activeFace == GL_BACK)
    12241239                {
    1225                     diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1240                    CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
    12261241                    activeFace = GL_FRONT;
    12271242                }
    12281243
    1229                 diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1244                CRSTATE_CHECKGLERR(diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
    12301245                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
    1231                     to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1246                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass));
    12321247                frontIsSet = GL_TRUE;
    12331248            }
     
    12361251                if (activeFace == GL_BACK)
    12371252                {
    1238                     diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1253                    CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
    12391254                    activeFace = GL_FRONT;
    12401255                }
    12411256
    1242                 diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     1257                CRSTATE_CHECKGLERR(diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
    12431258                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
    1244                     to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     1259                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass));
    12451260                backIsSet = GL_TRUE;
    12461261            }
     
    12621277                    if (activeFace == GL_BACK)
    12631278                    {
    1264                         diff_api.ActiveStencilFaceEXT(GL_FRONT);
    1265                         activeFace = GL_FRONT;
    1266                     }
    1267 
    1268                     diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1279                        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
     1280                        activeFace = GL_FRONT;
     1281                    }
     1282
     1283                    CRSTATE_CHECKGLERR(diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
    12691284                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
    1270                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1285                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass));
    12711286
    12721287                    frontIsSet = GL_TRUE;
     
    12801295                    if (activeFace == GL_BACK)
    12811296                    {
    1282                         diff_api.ActiveStencilFaceEXT(GL_FRONT);
    1283                         activeFace = GL_FRONT;
    1284                     }
    1285 
    1286                     diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1297                        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
     1298                        activeFace = GL_FRONT;
     1299                    }
     1300
     1301                    CRSTATE_CHECKGLERR(diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
    12871302                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
    1288                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1303                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass));
    12891304                    frontIsSet = GL_TRUE;
    12901305                }
     
    12961311                    if (activeFace == GL_BACK)
    12971312                    {
    1298                         diff_api.ActiveStencilFaceEXT(GL_FRONT);
    1299                         activeFace = GL_FRONT;
    1300                     }
    1301 
    1302                     diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     1313                        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
     1314                        activeFace = GL_FRONT;
     1315                    }
     1316
     1317                    CRSTATE_CHECKGLERR(diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
    13031318                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
    1304                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     1319                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass));
    13051320                    backIsSet = GL_TRUE;
    13061321                }
     
    13241339                    if (activeFace == GL_BACK)
    13251340                    {
    1326                         diff_api.ActiveStencilFaceEXT(GL_FRONT);
    1327                         activeFace = GL_FRONT;
    1328                     }
    1329 
    1330                     diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1341                        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
     1342                        activeFace = GL_FRONT;
     1343                    }
     1344
     1345                    CRSTATE_CHECKGLERR(diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
    13311346                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
    1332                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1347                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass));
    13331348
    13341349                    frontIsSet = GL_TRUE;
     
    13421357                    if (activeFace == GL_BACK)
    13431358                    {
    1344                         diff_api.ActiveStencilFaceEXT(GL_FRONT);
    1345                         activeFace = GL_FRONT;
    1346                     }
    1347 
    1348                     diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1359                        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
     1360                        activeFace = GL_FRONT;
     1361                    }
     1362
     1363                    CRSTATE_CHECKGLERR(diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
    13491364                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
    1350                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1365                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass));
    13511366                    frontIsSet = GL_TRUE;
    13521367                }
     
    13581373                    if (activeFace == GL_BACK)
    13591374                    {
    1360                         diff_api.ActiveStencilFaceEXT(GL_FRONT);
    1361                         activeFace = GL_FRONT;
    1362                     }
    1363 
    1364                     diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     1375                        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_FRONT));
     1376                        activeFace = GL_FRONT;
     1377                    }
     1378
     1379                    CRSTATE_CHECKGLERR(diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
    13651380                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
    1366                         to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     1381                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass));
    13671382                    backIsSet = GL_TRUE;
    13681383                }
     
    13771392    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, bitID))
    13781393    {
    1379         if (CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     1394        if (!CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK))
    13801395        {
    13811396            if (activeFace == GL_FRONT)
    13821397            {
    1383                 diff_api.ActiveStencilFaceEXT(GL_BACK);
     1398                CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(GL_BACK));
    13841399                activeFace = GL_BACK;
    13851400            }
    13861401
    1387             diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].fail,
    1388                                     to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthFail,
    1389                                     to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthPass);
     1402            CRSTATE_CHECKGLERR(diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].fail,
     1403                                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthFail,
     1404                                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthPass));
    13901405
    13911406            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op);
     
    14011416    if (activeFace != to->activeStencilFace)
    14021417    {
    1403         diff_api.ActiveStencilFaceEXT(activeFace);
     1418        CRSTATE_CHECKGLERR(diff_api.ActiveStencilFaceEXT(activeFace));
    14041419    }
    14051420
     
    14201435        if (from->writeMask != to->writeMask)
    14211436        {
    1422             diff_api.StencilMask (to->writeMask);
     1437            CRSTATE_CHECKGLERR(diff_api.StencilMask (to->writeMask));
    14231438            FILLDIRTY(b->writeMask);
    14241439            FILLDIRTY(b->dirty);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette