Changeset View
Changeset View
Standalone View
Standalone View
source/graphics/ShaderProgramFFP.cpp
Show First 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | if (index != -1) | ||||
ogl_tex_bind(tex, index); | ogl_tex_bind(tex, index); | ||||
} | } | ||||
virtual void BindTexture(texture_id_t id, GLuint tex) | virtual void BindTexture(texture_id_t id, GLuint tex) | ||||
{ | { | ||||
int index = GetUniformIndex(CStrIntern(id)); | int index = GetUniformIndex(CStrIntern(id)); | ||||
if (index != -1) | if (index != -1) | ||||
{ | { | ||||
pglActiveTextureARB((int)(GL_TEXTURE0+index)); | glActiveTextureARB((int)(GL_TEXTURE0+index)); | ||||
glBindTexture(GL_TEXTURE_2D, tex); | glBindTexture(GL_TEXTURE_2D, tex); | ||||
} | } | ||||
} | } | ||||
virtual void BindTexture(Binding id, Handle tex) | virtual void BindTexture(Binding id, Handle tex) | ||||
{ | { | ||||
int index = id.second; | int index = id.second; | ||||
if (index != -1) | if (index != -1) | ||||
▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | public: | ||||
{ | { | ||||
return m_IgnoreLos; | return m_IgnoreLos; | ||||
} | } | ||||
virtual void Uniform(Binding id, float v0, float v1, float v2, float v3) | virtual void Uniform(Binding id, float v0, float v1, float v2, float v3) | ||||
{ | { | ||||
if (id.second == ID_losTransform) | if (id.second == ID_losTransform) | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE2); | glActiveTextureARB(GL_TEXTURE2); | ||||
GLfloat texgenS1[4] = { v0, 0, 0, v1 }; | GLfloat texgenS1[4] = { v0, 0, 0, v1 }; | ||||
GLfloat texgenT1[4] = { 0, 0, v0, v1 }; | GLfloat texgenT1[4] = { 0, 0, v0, v1 }; | ||||
glTexGenfv(GL_S, GL_OBJECT_PLANE, texgenS1); | glTexGenfv(GL_S, GL_OBJECT_PLANE, texgenS1); | ||||
glTexGenfv(GL_T, GL_OBJECT_PLANE, texgenT1); | glTexGenfv(GL_T, GL_OBJECT_PLANE, texgenT1); | ||||
} | } | ||||
else if (id.second == ID_objectColor) | else if (id.second == ID_objectColor) | ||||
{ | { | ||||
float c[] = { v0, v1, v2, v3 }; | float c[] = { v0, v1, v2, v3 }; | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, c); | glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, c); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
debug_warn(L"Invalid id"); | debug_warn(L"Invalid id"); | ||||
} | } | ||||
} | } | ||||
virtual void Uniform(Binding UNUSED(id), const CMatrix3D& UNUSED(v)) | virtual void Uniform(Binding UNUSED(id), const CMatrix3D& UNUSED(v)) | ||||
{ | { | ||||
debug_warn(L"Not implemented"); | debug_warn(L"Not implemented"); | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
// RGB channels: | // RGB channels: | ||||
// Unit 0: Sample base texture | // Unit 0: Sample base texture | ||||
// Unit 1: Sample mask texture; interpolate with [objectColor or vertexColor] and base, depending on USE_OBJECTCOLOR | // Unit 1: Sample mask texture; interpolate with [objectColor or vertexColor] and base, depending on USE_OBJECTCOLOR | ||||
// Unit 2: (Load LOS texture; multiply) if not #IGNORE_LOS, pass through otherwise | // Unit 2: (Load LOS texture; multiply) if not #IGNORE_LOS, pass through otherwise | ||||
// Alpha channel: | // Alpha channel: | ||||
// Unit 0: Sample base texture | // Unit 0: Sample base texture | ||||
// Unit 1: Multiply by objectColor | // Unit 1: Multiply by objectColor | ||||
// Unit 2: Pass through | // Unit 2: Pass through | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
// Sample base texture RGB | // Sample base texture RGB | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); | ||||
// Sample base texture Alpha | // Sample base texture Alpha | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); | ||||
// ----------------------------------------------------------------------------- | // ----------------------------------------------------------------------------- | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
// RGB: interpolate component-wise between [objectColor or vertexColor] and base using mask: | // RGB: interpolate component-wise between [objectColor or vertexColor] and base using mask: | ||||
// a0 * a2 + a1 * (1 - a2) | // a0 * a2 + a1 * (1 - a2) | ||||
// Overridden implementation of Uniform() sets GL_TEXTURE_ENV_COLOR to objectColor, which | // Overridden implementation of Uniform() sets GL_TEXTURE_ENV_COLOR to objectColor, which | ||||
// is referenced as GL_CONSTANT (see spec) | // is referenced as GL_CONSTANT (see spec) | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, m_UseObjectColor ? GL_CONSTANT : GL_PRIMARY_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, m_UseObjectColor ? GL_CONSTANT : GL_PRIMARY_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR); | ||||
// ALPHA: Multiply base alpha with [objectColor or vertexColor] alpha | // ALPHA: Multiply base alpha with [objectColor or vertexColor] alpha | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, m_UseObjectColor ? GL_CONSTANT : GL_PRIMARY_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, m_UseObjectColor ? GL_CONSTANT : GL_PRIMARY_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); | ||||
// ----------------------------------------------------------------------------- | // ----------------------------------------------------------------------------- | ||||
pglActiveTextureARB(GL_TEXTURE2); | glActiveTextureARB(GL_TEXTURE2); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
bool ignoreLos = IsIgnoreLos(); | bool ignoreLos = IsIgnoreLos(); | ||||
if (ignoreLos) | if (ignoreLos) | ||||
{ | { | ||||
// RGB pass through | // RGB pass through | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | ||||
Show All 23 Lines | virtual void Bind() | ||||
BindClientStates(); | BindClientStates(); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
UnbindClientStates(); | UnbindClientStates(); | ||||
pglActiveTextureARB(GL_TEXTURE2); | glActiveTextureARB(GL_TEXTURE2); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
glDisable(GL_TEXTURE_GEN_S); | glDisable(GL_TEXTURE_GEN_S); | ||||
glDisable(GL_TEXTURE_GEN_T); | glDisable(GL_TEXTURE_GEN_T); | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
} | } | ||||
}; | }; | ||||
////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////// | ||||
class CShaderProgramFFP_GuiText : public CShaderProgramFFP | class CShaderProgramFFP_GuiText : public CShaderProgramFFP | ||||
{ | { | ||||
Show All 30 Lines | public: | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); | ||||
glPushMatrix(); | glPushMatrix(); | ||||
glLoadIdentity(); | glLoadIdentity(); | ||||
glMatrixMode(GL_MODELVIEW); | glMatrixMode(GL_MODELVIEW); | ||||
glPushMatrix(); | glPushMatrix(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | ||||
BindClientStates(); | BindClientStates(); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
UnbindClientStates(); | UnbindClientStates(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); | ||||
glPopMatrix(); | glPopMatrix(); | ||||
glMatrixMode(GL_MODELVIEW); | glMatrixMode(GL_MODELVIEW); | ||||
glPopMatrix(); | glPopMatrix(); | ||||
} | } | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 117 Lines • ▼ Show 20 Lines | virtual void Bind() | ||||
glPushMatrix(); | glPushMatrix(); | ||||
glLoadIdentity(); | glLoadIdentity(); | ||||
BindClientStates(); | BindClientStates(); | ||||
// Setup texture environment | // Setup texture environment | ||||
if (m_Defines.GetInt("MINIMAP_BASE")) | if (m_Defines.GetInt("MINIMAP_BASE")) | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | ||||
} | } | ||||
else if (m_Defines.GetInt("MINIMAP_LOS")) | else if (m_Defines.GetInt("MINIMAP_LOS")) | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR_ARB); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR_ARB); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_ONE_MINUS_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_ONE_MINUS_SRC_ALPHA); | ||||
glColor3f(0.0f, 0.0f, 0.0f); | glColor3f(0.0f, 0.0f, 0.0f); | ||||
} | } | ||||
else if (m_Defines.GetInt("MINIMAP_POINT")) | else if (m_Defines.GetInt("MINIMAP_POINT")) | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
glEnableClientState(GL_VERTEX_ARRAY); | glEnableClientState(GL_VERTEX_ARRAY); | ||||
glEnableClientState(GL_COLOR_ARRAY); | glEnableClientState(GL_COLOR_ARRAY); | ||||
} | } | ||||
else if (m_Defines.GetInt("MINIMAP_LINE")) | else if (m_Defines.GetInt("MINIMAP_LINE")) | ||||
{ | { | ||||
// JoshuaJB 13.7.2014: This doesn't seem to do anything on my drivers. | // JoshuaJB 13.7.2014: This doesn't seem to do anything on my drivers. | ||||
glEnable(GL_LINE_SMOOTH); | glEnable(GL_LINE_SMOOTH); | ||||
} | } | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
// Reset texture environment | // Reset texture environment | ||||
if (m_Defines.GetInt("MINIMAP_POINT")) | if (m_Defines.GetInt("MINIMAP_POINT")) | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glDisableClientState(GL_VERTEX_ARRAY); | glDisableClientState(GL_VERTEX_ARRAY); | ||||
glDisableClientState(GL_COLOR_ARRAY); | glDisableClientState(GL_COLOR_ARRAY); | ||||
} | } | ||||
else if (m_Defines.GetInt("MINIMAP_LINE")) | else if (m_Defines.GetInt("MINIMAP_LINE")) | ||||
{ | { | ||||
glDisable(GL_LINE_SMOOTH); | glDisable(GL_LINE_SMOOTH); | ||||
} | } | ||||
Show All 17 Lines | CShaderProgramFFP_GuiBasic() : | ||||
CShaderProgramFFP_Gui_Base(STREAM_POS | STREAM_UV0) | CShaderProgramFFP_Gui_Base(STREAM_POS | STREAM_UV0) | ||||
{ | { | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
CShaderProgramFFP_Gui_Base::Bind(); | CShaderProgramFFP_Gui_Base::Bind(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
CShaderProgramFFP_Gui_Base::Unbind(); | CShaderProgramFFP_Gui_Base::Unbind(); | ||||
} | } | ||||
}; | }; | ||||
class CShaderProgramFFP_GuiAdd : public CShaderProgramFFP_Gui_Base | class CShaderProgramFFP_GuiAdd : public CShaderProgramFFP_Gui_Base | ||||
{ | { | ||||
Show All 10 Lines | virtual void Uniform(Binding id, float v0, float v1, float v2, float v3) | ||||
if (id.second == ID_color) | if (id.second == ID_color) | ||||
glColor4f(v0, v1, v2, v3); | glColor4f(v0, v1, v2, v3); | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
CShaderProgramFFP_Gui_Base::Bind(); | CShaderProgramFFP_Gui_Base::Bind(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_ADD); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_ADD); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
glColor4f(1.f, 1.f, 1.f, 1.f); | glColor4f(1.f, 1.f, 1.f, 1.f); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
CShaderProgramFFP_Gui_Base::Unbind(); | CShaderProgramFFP_Gui_Base::Unbind(); | ||||
} | } | ||||
}; | }; | ||||
class CShaderProgramFFP_GuiGrayscale : public CShaderProgramFFP_Gui_Base | class CShaderProgramFFP_GuiGrayscale : public CShaderProgramFFP_Gui_Base | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | static const float GreyscaleDotColor[4] = { | ||||
0.3f / 2.f + 0.5f, | 0.3f / 2.f + 0.5f, | ||||
0.59f / 2.f + 0.5f, | 0.59f / 2.f + 0.5f, | ||||
0.11f / 2.f + 0.5f, | 0.11f / 2.f + 0.5f, | ||||
1.0f | 1.0f | ||||
}; | }; | ||||
static const float GreyscaleInterpColor0[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; | static const float GreyscaleInterpColor0[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; | ||||
static const float GreyscaleInterpColor1[4] = { 0.5f, 0.5f, 0.5f, 1.0f }; | static const float GreyscaleInterpColor1[4] = { 0.5f, 0.5f, 0.5f, 1.0f }; | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | ||||
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, GreyscaleInterpColor0); | glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, GreyscaleInterpColor0); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | ||||
glColor4fv(GreyscaleInterpColor1); | glColor4fv(GreyscaleInterpColor1); | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | ||||
Show All 20 Lines | virtual void Bind() | ||||
// so bind a dummy texture | // so bind a dummy texture | ||||
g_Renderer.GetTextureManager().GetErrorTexture()->Bind(1); | g_Renderer.GetTextureManager().GetErrorTexture()->Bind(1); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
glColor4f(1.f, 1.f, 1.f, 1.f); | glColor4f(1.f, 1.f, 1.f, 1.f); | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
CShaderProgramFFP_Gui_Base::Unbind(); | CShaderProgramFFP_Gui_Base::Unbind(); | ||||
} | } | ||||
}; | }; | ||||
class CShaderProgramFFP_GuiSolid : public CShaderProgramFFP_Gui_Base | class CShaderProgramFFP_GuiSolid : public CShaderProgramFFP_Gui_Base | ||||
{ | { | ||||
Show All 10 Lines | virtual void Uniform(Binding id, float v0, float v1, float v2, float v3) | ||||
if (id.second == ID_color) | if (id.second == ID_color) | ||||
glColor4f(v0, v1, v2, v3); | glColor4f(v0, v1, v2, v3); | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
CShaderProgramFFP_Gui_Base::Bind(); | CShaderProgramFFP_Gui_Base::Bind(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
} | } | ||||
}; | }; | ||||
////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////// | ||||
/** | /** | ||||
* Common functionality for model rendering in the fixed renderpath. | * Common functionality for model rendering in the fixed renderpath. | ||||
Show All 37 Lines | virtual void Uniform(Binding id, const CMatrix3D& v) | ||||
if (id.second == ID_transform) | if (id.second == ID_transform) | ||||
glLoadMatrixf(&v._11); | glLoadMatrixf(&v._11); | ||||
} | } | ||||
virtual void Uniform(Binding id, float v0, float v1, float UNUSED(v2), float UNUSED(v3)) | virtual void Uniform(Binding id, float v0, float v1, float UNUSED(v2), float UNUSED(v3)) | ||||
{ | { | ||||
if (id.second == ID_losTransform) | if (id.second == ID_losTransform) | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE3); | glActiveTextureARB(GL_TEXTURE3); | ||||
GLfloat texgenS1[4] = { v0, 0, 0, v1 }; | GLfloat texgenS1[4] = { v0, 0, 0, v1 }; | ||||
GLfloat texgenT1[4] = { 0, 0, v0, v1 }; | GLfloat texgenT1[4] = { 0, 0, v0, v1 }; | ||||
glTexGenfv(GL_S, GL_OBJECT_PLANE, texgenS1); | glTexGenfv(GL_S, GL_OBJECT_PLANE, texgenS1); | ||||
glTexGenfv(GL_T, GL_OBJECT_PLANE, texgenT1); | glTexGenfv(GL_T, GL_OBJECT_PLANE, texgenT1); | ||||
} | } | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); | ||||
glPushMatrix(); | glPushMatrix(); | ||||
glLoadIdentity(); | glLoadIdentity(); | ||||
glMatrixMode(GL_MODELVIEW); | glMatrixMode(GL_MODELVIEW); | ||||
glPushMatrix(); | glPushMatrix(); | ||||
// ----------------------------------------------------------------------------- | // ----------------------------------------------------------------------------- | ||||
pglActiveTextureARB(GL_TEXTURE3); | glActiveTextureARB(GL_TEXTURE3); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
if (m_IgnoreLos) | if (m_IgnoreLos) | ||||
{ | { | ||||
// RGB pass through | // RGB pass through | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); | ||||
Show All 24 Lines | virtual void Bind() | ||||
BindClientStates(); | BindClientStates(); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
UnbindClientStates(); | UnbindClientStates(); | ||||
pglActiveTextureARB(GL_TEXTURE3); | glActiveTextureARB(GL_TEXTURE3); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
glDisable(GL_TEXTURE_GEN_S); | glDisable(GL_TEXTURE_GEN_S); | ||||
glDisable(GL_TEXTURE_GEN_T); | glDisable(GL_TEXTURE_GEN_T); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); | ||||
glPopMatrix(); | glPopMatrix(); | ||||
glMatrixMode(GL_MODELVIEW); | glMatrixMode(GL_MODELVIEW); | ||||
glPopMatrix(); | glPopMatrix(); | ||||
} | } | ||||
}; | }; | ||||
/** | /** | ||||
* Basic non-recolored diffuse-textured model rendering. | * Basic non-recolored diffuse-textured model rendering. | ||||
*/ | */ | ||||
class CShaderProgramFFP_Model : public CShaderProgramFFP_Model_Base | class CShaderProgramFFP_Model : public CShaderProgramFFP_Model_Base | ||||
{ | { | ||||
public: | public: | ||||
CShaderProgramFFP_Model(const CShaderDefines& defines) | CShaderProgramFFP_Model(const CShaderDefines& defines) | ||||
: CShaderProgramFFP_Model_Base(defines, STREAM_POS | STREAM_COLOR | STREAM_UV0) | : CShaderProgramFFP_Model_Base(defines, STREAM_POS | STREAM_COLOR | STREAM_UV0) | ||||
{ | { | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
// Set up texture environment for base pass - modulate texture and vertex color | // Set up texture environment for base pass - modulate texture and vertex color | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | ||||
// Copy alpha channel from texture | // Copy alpha channel from texture | ||||
Show All 9 Lines | virtual void Bind() | ||||
CShaderProgramFFP_Model_Base::Bind(); | CShaderProgramFFP_Model_Base::Bind(); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
CShaderProgramFFP_Model_Base::Unbind(); | CShaderProgramFFP_Model_Base::Unbind(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
// Revert the scaling to default | // Revert the scaling to default | ||||
float scale1[] = { 1.0f, 1.0f, 1.0f }; | float scale1[] = { 1.0f, 1.0f, 1.0f }; | ||||
glTexEnvfv(GL_TEXTURE_ENV, GL_RGB_SCALE, scale1); | glTexEnvfv(GL_TEXTURE_ENV, GL_RGB_SCALE, scale1); | ||||
} | } | ||||
}; | }; | ||||
/** | /** | ||||
Show All 23 Lines | virtual void Bind() | ||||
// Note: This uses ARB_texture_env_crossbar (which is checked in GameSetup), | // Note: This uses ARB_texture_env_crossbar (which is checked in GameSetup), | ||||
// and it requires MAX_TEXTURE_IMAGE_UNITS >= 3 (which only excludes GF2MX/GF4MX) | // and it requires MAX_TEXTURE_IMAGE_UNITS >= 3 (which only excludes GF2MX/GF4MX) | ||||
// | // | ||||
// We calculate: Result = Color*Texture*(PlayerColor*(1-Texture.a) + 1.0*Texture.a) | // We calculate: Result = Color*Texture*(PlayerColor*(1-Texture.a) + 1.0*Texture.a) | ||||
// Algebra gives us: | // Algebra gives us: | ||||
// Result = (1 - ((1 - PlayerColor) * (1 - Texture.a)))*Texture*Color | // Result = (1 - ((1 - PlayerColor) * (1 - Texture.a)))*Texture*Color | ||||
// TexEnv #0 | // TexEnv #0 | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_ONE_MINUS_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_ONE_MINUS_SRC_ALPHA); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_ONE_MINUS_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_ONE_MINUS_SRC_COLOR); | ||||
// Don't care about alpha; set it to something harmless | // Don't care about alpha; set it to something harmless | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | ||||
// TexEnv #1 | // TexEnv #1 | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_ONE_MINUS_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_ONE_MINUS_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | ||||
// Don't care about alpha; set it to something harmless | // Don't care about alpha; set it to something harmless | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | ||||
// TexEnv #2 | // TexEnv #2 | ||||
pglActiveTextureARB(GL_TEXTURE2); | glActiveTextureARB(GL_TEXTURE2); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE0); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE0); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); | ||||
Show All 16 Lines | virtual void Bind() | ||||
CShaderProgramFFP_Model_Base::Bind(); | CShaderProgramFFP_Model_Base::Bind(); | ||||
} | } | ||||
virtual void Unbind() | virtual void Unbind() | ||||
{ | { | ||||
CShaderProgramFFP_Model_Base::Unbind(); | CShaderProgramFFP_Model_Base::Unbind(); | ||||
pglActiveTextureARB(GL_TEXTURE2); | glActiveTextureARB(GL_TEXTURE2); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
float scale[] = { 1.0f, 1.0f, 1.0f }; | float scale[] = { 1.0f, 1.0f, 1.0f }; | ||||
glTexEnvfv(GL_TEXTURE_ENV, GL_RGB_SCALE, scale); | glTexEnvfv(GL_TEXTURE_ENV, GL_RGB_SCALE, scale); | ||||
pglActiveTextureARB(GL_TEXTURE1); | glActiveTextureARB(GL_TEXTURE1); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
} | } | ||||
}; | }; | ||||
/** | /** | ||||
* Optionally-player-colored untextured model rendering. | * Optionally-player-colored untextured model rendering. | ||||
*/ | */ | ||||
class CShaderProgramFFP_ModelSolid : public CShaderProgramFFP_Model_Base | class CShaderProgramFFP_ModelSolid : public CShaderProgramFFP_Model_Base | ||||
{ | { | ||||
Show All 12 Lines | virtual void Uniform(Binding id, float v0, float v1, float v2, float v3) | ||||
} | } | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
float color[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | float color[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | ||||
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); | glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_CONSTANT); | glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_CONSTANT); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); | ||||
Show All 10 Lines | |||||
public: | public: | ||||
CShaderProgramFFP_ModelSolidTex(const CShaderDefines& defines) | CShaderProgramFFP_ModelSolidTex(const CShaderDefines& defines) | ||||
: CShaderProgramFFP_Model_Base(defines, STREAM_POS | STREAM_UV0) | : CShaderProgramFFP_Model_Base(defines, STREAM_POS | STREAM_UV0) | ||||
{ | { | ||||
} | } | ||||
virtual void Bind() | virtual void Bind() | ||||
{ | { | ||||
pglActiveTextureARB(GL_TEXTURE0); | glActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | ||||
CShaderProgramFFP_Model_Base::Bind(); | CShaderProgramFFP_Model_Base::Bind(); | ||||
} | } | ||||
}; | }; | ||||
////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////// | ||||
▲ Show 20 Lines • Show All 44 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator