GteGL4BlendState.cpp
Go to the documentation of this file.
1 // David Eberly, Geometric Tools, Redmond WA 98052
2 // Copyright (c) 1998-2017
3 // Distributed under the Boost Software License, Version 1.0.
4 // http://www.boost.org/LICENSE_1_0.txt
5 // http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
6 // File Version: 3.0.0 (2016/06/19)
7 
8 #include <GTEnginePCH.h>
9 #include <LowLevel/GteLogger.h>
11 using namespace gte;
12 
14  :
15  GL4DrawingState(blendState)
16 {
19  for (unsigned int i = 0; i < BlendState::NUM_TARGETS; ++i)
20  {
21  BlendState::Target const& in = blendState->target[i];
22  Target& out = mTarget[i];
23  out.enable = (in.enable ? GL_TRUE : GL_FALSE);
24  out.srcColor = msMode[in.srcColor];
25  out.dstColor = msMode[in.dstColor];
26  out.opColor = msOperation[in.opColor];
27  out.srcAlpha = msMode[in.srcAlpha];
28  out.dstAlpha = msMode[in.dstAlpha];
29  out.opAlpha = msOperation[in.opAlpha];
30  out.rMask = (in.mask & 1 ? GL_TRUE : GL_FALSE);
31  out.gMask = (in.mask & 2 ? GL_TRUE : GL_FALSE);
32  out.bMask = (in.mask & 4 ? GL_TRUE : GL_FALSE);
33  out.aMask = (in.mask & 8 ? GL_TRUE : GL_FALSE);
34  }
35  mBlendColor = blendState->blendColor;
36  mSampleMask = blendState->sampleMask;
37 }
38 
39 std::shared_ptr<GEObject> GL4BlendState::Create(void*, GraphicsObject const* object)
40 {
41  if (object->GetType() == GT_BLEND_STATE)
42  {
43  return std::make_shared<GL4BlendState>(
44  static_cast<BlendState const*>(object));
45  }
46 
47  LogError("Invalid object type.");
48  return nullptr;
49 }
50 
52 {
54  {
56  }
57  else
58  {
60  }
61 
63  {
64  for (unsigned int i = 0; i < BlendState::NUM_TARGETS; ++i)
65  {
66  Target const& target = mTarget[i];
67  if (target.enable)
68  {
70  glBlendFuncSeparatei(i, target.srcColor, target.dstColor,
71  target.srcAlpha, target.dstAlpha);
72  glBlendEquationSeparatei(i, target.opColor, target.opAlpha);
73  }
74  else
75  {
77  }
78  glColorMaski(i, target.rMask, target.gMask, target.bMask, target.aMask);
80  }
81  }
82  else
83  {
84  Target const& target = mTarget[0];
85  if (target.enable)
86  {
88  glBlendFuncSeparate(target.srcColor, target.dstColor,
89  target.srcAlpha, target.dstAlpha);
90  glBlendEquationSeparate(target.opColor, target.opAlpha);
91  }
92  else
93  {
95  }
96  glColorMask(target.rMask, target.gMask, target.bMask, target.aMask);
98  }
99 
101 }
102 
103 
105 {
106  GL_ZERO,
107  GL_ONE,
108  GL_SRC_COLOR,
110  GL_SRC_ALPHA,
112  GL_DST_ALPHA,
114  GL_DST_COLOR,
123 };
124 
126 {
127  GL_FUNC_ADD,
130  GL_MIN,
131  GL_MAX
132 };
#define GL_BLEND
Definition: glcorearb.h:275
Target target[NUM_TARGETS]
Definition: GteBlendState.h:82
void APIENTRY glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
Definition: GteOpenGL.cpp:1363
#define GL_CONSTANT_COLOR
Definition: glcorearb.h:588
#define GL_ZERO
Definition: glcorearb.h:217
#define GL_FALSE
Definition: glcorearb.h:199
#define GL_SAMPLE_COVERAGE
Definition: glcorearb.h:520
#define GL_ONE_MINUS_SRC_ALPHA
Definition: glcorearb.h:222
#define GL_SRC_ALPHA
Definition: glcorearb.h:221
void APIENTRY glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
Definition: GteOpenGL.cpp:5563
GraphicsObjectType GetType() const
bool enableAlphaToCoverage
Definition: GteBlendState.h:80
void APIENTRY glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
Definition: GteOpenGL.cpp:1272
GLenum target
Definition: glcorearb.h:1662
#define GL_ONE_MINUS_SRC1_ALPHA
Definition: glcorearb.h:1633
void APIENTRY glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
Definition: GteOpenGL.cpp:3322
Vector4< float > mBlendColor
#define GL_FUNC_REVERSE_SUBTRACT
Definition: glcorearb.h:585
#define GL_DST_ALPHA
Definition: glcorearb.h:223
unsigned int GLenum
Definition: glcorearb.h:83
#define LogError(message)
Definition: GteLogger.h:92
#define GL_ONE
Definition: glcorearb.h:218
#define GL_ONE_MINUS_DST_ALPHA
Definition: glcorearb.h:224
#define GL_ONE_MINUS_DST_COLOR
Definition: glcorearb.h:226
void APIENTRY glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
Definition: GteOpenGL.cpp:1808
#define GL_ONE_MINUS_CONSTANT_COLOR
Definition: glcorearb.h:589
#define GL_SRC_ALPHA_SATURATE
Definition: glcorearb.h:227
void APIENTRY glSampleMaski(GLuint maskNumber, GLbitfield mask)
Definition: GteOpenGL.cpp:4987
#define GL_SRC1_COLOR
Definition: glcorearb.h:1631
#define GL_SRC1_ALPHA
Definition: glcorearb.h:646
#define GL_FUNC_SUBTRACT
Definition: glcorearb.h:584
static GLenum const msOperation[]
static GLenum const msMode[]
static std::shared_ptr< GEObject > Create(void *unused, GraphicsObject const *object)
bool enableIndependentBlend
Definition: GteBlendState.h:81
void APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
Definition: GteOpenGL.cpp:383
GT_BLEND_STATE
GLuint in
Definition: glext.h:8348
#define GL_SRC_COLOR
Definition: glcorearb.h:219
void APIENTRY glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
Definition: GteOpenGL.cpp:5537
#define GL_MIN
Definition: glcorearb.h:586
unsigned int mSampleMask
#define GL_ONE_MINUS_SRC1_COLOR
Definition: glcorearb.h:1632
#define GL_MAX
Definition: glcorearb.h:587
Target mTarget[BlendState::NUM_TARGETS]
#define GL_TRUE
Definition: glcorearb.h:200
void APIENTRY glDisable(GLenum cap)
Definition: GteOpenGL.cpp:409
unsigned int sampleMask
Definition: GteBlendState.h:84
Vector4< float > blendColor
Definition: GteBlendState.h:83
GLuint object
Definition: glext.h:6426
#define GL_ONE_MINUS_SRC_COLOR
Definition: glcorearb.h:220
#define GL_FUNC_ADD
Definition: glcorearb.h:583
#define GL_DST_COLOR
Definition: glcorearb.h:225
void APIENTRY glEnable(GLenum cap)
Definition: GteOpenGL.cpp:422
GL4BlendState(BlendState const *blendState)


geometric_tools_engine
Author(s): Yijiang Huang
autogenerated on Thu Jul 18 2019 03:59:59