X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fwindingtest.cpp;fp=source%2Fcore%2Fwindingtest.cpp;h=0b8218adbf2773971b589c89cccefa134d403788;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/core/windingtest.cpp b/source/core/windingtest.cpp new file mode 100644 index 00000000..0b8218ad --- /dev/null +++ b/source/core/windingtest.cpp @@ -0,0 +1,61 @@ +#include +#include "windingtest.h" + +namespace Msp { +namespace GL { + +void operator>>(const LexicalConverter &conv, FaceWinding &winding) +{ + if(conv.get()=="CLOCKWISE") + winding = CLOCKWISE; + else if(conv.get()=="COUNTERCLOCKWISE") + winding = COUNTERCLOCKWISE; + else + throw lexical_error(format("conversion of '%s' to FaceWinding", conv.get())); +} + +WindingTest::WindingTest(): + winding(COUNTERCLOCKWISE) +{ } + +WindingTest::WindingTest(FaceWinding w): + winding(w) +{ } + +void WindingTest::bind() const +{ + if(set_current(this)) + { + glEnable(GL_CULL_FACE); + glFrontFace(winding); + } +} + +void WindingTest::unbind() +{ + if(set_current(0)) + glDisable(GL_CULL_FACE); +} + +const WindingTest &WindingTest::get_reverse() const +{ + if(winding==CLOCKWISE) + return counterclockwise(); + else + return clockwise(); +} + +const WindingTest &WindingTest::clockwise() +{ + static WindingTest test(CLOCKWISE); + return test; +} + +const WindingTest &WindingTest::counterclockwise() +{ + static WindingTest test(COUNTERCLOCKWISE); + return test; +} + +} // namespace GL +} // namespace Msp