root/OpenSceneGraph/trunk/include/osg/LogicOp @ 13041

Revision 13041, 3.5 kB (checked in by robert, 3 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version.  The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_LOGICOP
15#define OSG_LOGICOP 1
16
17#include <osg/StateAttribute>
18
19#ifndef OSG_GL_FIXED_FUNCTION_AVAILABLE
20    #define GL_CLEAR            0x1500
21    #define GL_SET              0x150F
22    #define GL_COPY             0x1503
23    #define GL_COPY_INVERTED    0x150C
24    #define GL_NOOP             0x1505
25    #define GL_AND              0x1501
26    #define GL_NAND             0x150E
27    #define GL_OR               0x1507
28    #define GL_NOR              0x1508
29    #define GL_XOR              0x1506
30    #define GL_EQUIV            0x1509
31    #define GL_AND_REVERSE      0x1502
32    #define GL_AND_INVERTED     0x1504
33    #define GL_OR_REVERSE       0x150B
34    #define GL_OR_INVERTED      0x150D
35    #define GL_COLOR_LOGIC_OP   0x0BF2
36#endif
37
38namespace osg {
39
40/** Encapsulates OpenGL LogicOp state. */
41class OSG_EXPORT LogicOp : public StateAttribute
42{
43    public :
44
45        enum Opcode {
46            CLEAR               = GL_CLEAR,
47            SET                 = GL_SET,
48            COPY                = GL_COPY,
49            COPY_INVERTED       = GL_COPY_INVERTED,
50            NOOP                = GL_NOOP,
51            INVERT              = GL_INVERT,
52            AND                 = GL_AND,
53            NAND                = GL_NAND,
54            OR                  = GL_OR,
55            NOR                 = GL_NOR,
56            XOR                 = GL_XOR,
57            EQUIV               = GL_EQUIV,
58            AND_REVERSE         = GL_AND_REVERSE,
59            AND_INVERTED        = GL_AND_INVERTED,
60            OR_REVERSE          = GL_OR_REVERSE,
61            OR_INVERTED         = GL_OR_INVERTED
62        };
63
64        LogicOp();
65
66        LogicOp(Opcode opcode);
67
68        /** Copy constructor using CopyOp to manage deep vs shallow copy. */
69        LogicOp(const LogicOp& trans,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
70            StateAttribute(trans,copyop),
71            _opcode(trans._opcode){}
72
73        META_StateAttribute(osg, LogicOp,LOGICOP);
74
75        /** Return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */
76        virtual int compare(const StateAttribute& sa) const
77        {
78            // Check for equal types, then create the rhs variable
79            // used by the COMPARE_StateAttribute_Parameter macros below.
80            COMPARE_StateAttribute_Types(LogicOp,sa)
81
82            // Compare each parameter in turn against the rhs.
83            COMPARE_StateAttribute_Parameter(_opcode)
84
85            return 0; // Passed all the above comparison macros, so must be equal.
86        }
87
88        virtual bool getModeUsage(StateAttribute::ModeUsage& usage) const
89        {
90            usage.usesMode(GL_COLOR_LOGIC_OP);
91            return true;
92        }
93
94
95        inline void setOpcode(Opcode opcode)
96        {
97            _opcode = opcode;
98        }
99
100        inline Opcode getOpcode() const { return _opcode; }
101
102        virtual void apply(State& state) const;
103
104    protected :
105
106        virtual ~LogicOp();
107
108        Opcode _opcode;
109};
110
111}
112
113#endif
Note: See TracBrowser for help on using the browser.