diff --git a/include/EDebugSceneTypes.h b/include/EDebugSceneTypes.h index 987b7902..2b6b0b0f 100644 --- a/include/EDebugSceneTypes.h +++ b/include/EDebugSceneTypes.h @@ -28,9 +28,6 @@ namespace scene //! Overlays Mesh Wireframe EDS_MESH_WIRE_OVERLAY = 8, - //! Temporary use transparency Material Type - EDS_HALF_TRANSPARENCY = 16, - //! Show Bounding Boxes of all MeshBuffers EDS_BBOX_BUFFERS = 32, diff --git a/include/EMaterialTypes.h b/include/EMaterialTypes.h index fb8d6012..e2966709 100644 --- a/include/EMaterialTypes.h +++ b/include/EMaterialTypes.h @@ -18,75 +18,6 @@ namespace video diffuse material. */ EMT_SOLID = 0, - //! Solid material with 2 texture layers. - /** The second is blended onto the first using the alpha value - of the vertex colors. This material is currently not implemented in OpenGL. - */ - EMT_SOLID_2_LAYER, - - //! Material type with standard lightmap technique - /** There should be 2 textures: The first texture layer is a - diffuse map, the second is a light map. Dynamic light is - ignored. */ - EMT_LIGHTMAP, - - //! Material type with lightmap technique like EMT_LIGHTMAP. - /** But lightmap and diffuse texture are added instead of modulated. */ - EMT_LIGHTMAP_ADD, - - //! Material type with standard lightmap technique - /** There should be 2 textures: The first texture layer is a - diffuse map, the second is a light map. Dynamic light is - ignored. The texture colors are effectively multiplied by 2 - for brightening. Like known in DirectX as D3DTOP_MODULATE2X. */ - EMT_LIGHTMAP_M2, - - //! Material type with standard lightmap technique - /** There should be 2 textures: The first texture layer is a - diffuse map, the second is a light map. Dynamic light is - ignored. The texture colors are effectively multiplied by 4 - for brightening. Like known in DirectX as D3DTOP_MODULATE4X. */ - EMT_LIGHTMAP_M4, - - //! Like EMT_LIGHTMAP, but also supports dynamic lighting. - EMT_LIGHTMAP_LIGHTING, - - //! Like EMT_LIGHTMAP_M2, but also supports dynamic lighting. - EMT_LIGHTMAP_LIGHTING_M2, - - //! Like EMT_LIGHTMAP_M4, but also supports dynamic lighting. - EMT_LIGHTMAP_LIGHTING_M4, - - //! Detail mapped material. - /** The first texture is diffuse color map, the second is added - to this and usually displayed with a bigger scale value so that - it adds more detail. The detail map is added to the diffuse map - using ADD_SIGNED, so that it is possible to add and subtract - color from the diffuse map. For example a value of - (127,127,127) will not change the appearance of the diffuse map - at all. Often used for terrain rendering. */ - EMT_DETAIL_MAP, - - //! Look like a reflection of the environment around it. - /** To make this possible, a texture called 'sphere map' is - used, which must be set as the first texture. */ - EMT_SPHERE_MAP, - - //! A reflecting material with an optional non reflecting texture layer. - /** The reflection map should be set as first texture. */ - EMT_REFLECTION_2_LAYER, - - //! A transparent material. - /** Only the first texture is used. The new color is calculated - by simply adding the source color and the dest color. This - means if for example a billboard using a texture with black - background and a red circle on it is drawn with this material, - the result is that only the red circle will be drawn a little - bit transparent, and everything which was black is 100% - transparent and not visible. This material type is useful for - particle effects. */ - EMT_TRANSPARENT_ADD_COLOR, - //! Makes the material transparent based on the texture alpha channel. /** The final color is blended together from the destination color and the texture color, using the alpha channel value as @@ -115,12 +46,6 @@ namespace video //! Makes the material transparent based on the vertex alpha value. EMT_TRANSPARENT_VERTEX_ALPHA, - //! A transparent reflecting material with an optional additional non reflecting texture layer. - /** The reflection map should be set as first texture. The - transparency depends on the alpha value in the vertex colors. A - texture which will not reflect can be set as second texture.*/ - EMT_TRANSPARENT_REFLECTION_2_LAYER, - //! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC ) /** Using only first texture. Generic blending method. The blend function is set to SMaterial::MaterialTypeParam with @@ -135,22 +60,9 @@ namespace video const char* const sBuiltInMaterialTypeNames[] = { "solid", - "solid_2layer", - "lightmap", - "lightmap_add", - "lightmap_m2", - "lightmap_m4", - "lightmap_light", - "lightmap_light_m2", - "lightmap_light_m4", - "detail_map", - "sphere_map", - "reflection_2layer", - "trans_add", "trans_alphach", "trans_alphach_ref", "trans_vertex_alpha", - "trans_reflection_2layer", "onetexture_blend", 0 }; diff --git a/include/SMaterial.h b/include/SMaterial.h index 88460e00..154bf296 100644 --- a/include/SMaterial.h +++ b/include/SMaterial.h @@ -292,7 +292,7 @@ namespace video SMaterial() : MaterialType(EMT_SOLID), AmbientColor(255,255,255,255), DiffuseColor(255,255,255,255), EmissiveColor(0,0,0,0), SpecularColor(255,255,255,255), - Shininess(0.0f), MaterialTypeParam(0.0f), MaterialTypeParam2(0.0f), Thickness(1.0f), + Shininess(0.0f), MaterialTypeParam(0.0f), Thickness(1.0f), ZBuffer(ECFN_LESSEQUAL), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), ColorMaterial(ECM_DIFFUSE), BlendOperation(EBO_NONE), BlendFactor(0.0f), PolygonOffsetFactor(0), PolygonOffsetDirection(EPO_FRONT), @@ -350,10 +350,6 @@ namespace video EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */ f32 MaterialTypeParam; - //! Second free parameter, dependent on the material type. - /** Mostly ignored. */ - f32 MaterialTypeParam2; - //! Thickness of non-3dimensional elements such as lines and points. f32 Thickness; @@ -664,7 +660,6 @@ namespace video SpecularColor != b.SpecularColor || Shininess != b.Shininess || MaterialTypeParam != b.MaterialTypeParam || - MaterialTypeParam2 != b.MaterialTypeParam2 || Thickness != b.Thickness || Wireframe != b.Wireframe || PointCloud != b.PointCloud || @@ -728,10 +723,8 @@ namespace video //! as it asks the material renders directly what they do with the material. bool isTransparent() const { - if ( MaterialType==EMT_TRANSPARENT_ADD_COLOR || - MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL || - MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA || - MaterialType==EMT_TRANSPARENT_REFLECTION_2_LAYER ) + if ( MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL || + MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA ) return true; return false; diff --git a/media/Shaders/COGLES2DetailMap.fsh b/media/Shaders/COGLES2DetailMap.fsh deleted file mode 100644 index b27b4b57..00000000 --- a/media/Shaders/COGLES2DetailMap.fsh +++ /dev/null @@ -1,70 +0,0 @@ -precision mediump float; - -/* Uniforms */ - -uniform int uTextureUsage0; -uniform int uTextureUsage1; -uniform sampler2D uTextureUnit0; -uniform sampler2D uTextureUnit1; -uniform int uFogEnable; -uniform int uFogType; -uniform vec4 uFogColor; -uniform float uFogStart; -uniform float uFogEnd; -uniform float uFogDensity; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -float computeFog() -{ - const float LOG2 = 1.442695; - float FogFactor = 0.0; - - if (uFogType == 0) // Exp - { - FogFactor = exp2(-uFogDensity * vFogCoord * LOG2); - } - else if (uFogType == 1) // Linear - { - float Scale = 1.0 / (uFogEnd - uFogStart); - FogFactor = (uFogEnd - vFogCoord) * Scale; - } - else if (uFogType == 2) // Exp2 - { - FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2); - } - - FogFactor = clamp(FogFactor, 0.0, 1.0); - - return FogFactor; -} - -void main() -{ - vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); - vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0); - - if (bool(uTextureUsage0)) - Color0 = texture2D(uTextureUnit0, vTextureCoord0); - - if (bool(uTextureUsage1)) - Color1 = texture2D(uTextureUnit1, vTextureCoord1); - - vec4 FinalColor = vec4(Color0 + (Color1 - 0.5)) * vVertexColor + vSpecularColor; - - if (bool(uFogEnable)) - { - float FogFactor = computeFog(); - vec4 FogColor = uFogColor; - FogColor.a = 1.0; - FinalColor = mix(FogColor, FinalColor, FogFactor); - } - - gl_FragColor = FinalColor; -} diff --git a/media/Shaders/COGLES2LightmapAdd.fsh b/media/Shaders/COGLES2LightmapAdd.fsh deleted file mode 100644 index 3bf2343a..00000000 --- a/media/Shaders/COGLES2LightmapAdd.fsh +++ /dev/null @@ -1,70 +0,0 @@ -precision mediump float; - -/* Uniforms */ - -uniform int uTextureUsage0; -uniform int uTextureUsage1; -uniform sampler2D uTextureUnit0; -uniform sampler2D uTextureUnit1; -uniform int uFogEnable; -uniform int uFogType; -uniform vec4 uFogColor; -uniform float uFogStart; -uniform float uFogEnd; -uniform float uFogDensity; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -float computeFog() -{ - const float LOG2 = 1.442695; - float FogFactor = 0.0; - - if (uFogType == 0) // Exp - { - FogFactor = exp2(-uFogDensity * vFogCoord * LOG2); - } - else if (uFogType == 1) // Linear - { - float Scale = 1.0 / (uFogEnd - uFogStart); - FogFactor = (uFogEnd - vFogCoord) * Scale; - } - else if (uFogType == 2) // Exp2 - { - FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2); - } - - FogFactor = clamp(FogFactor, 0.0, 1.0); - - return FogFactor; -} - -void main() -{ - vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); - vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0); - - if (bool(uTextureUsage0)) - Color0 = texture2D(uTextureUnit0, vTextureCoord0); - - if (bool(uTextureUsage1)) - Color1 = texture2D(uTextureUnit1, vTextureCoord1); - - vec4 FinalColor = (Color0 + Color1) * vVertexColor + vSpecularColor; - - if (bool(uFogEnable)) - { - float FogFactor = computeFog(); - vec4 FogColor = uFogColor; - FogColor.a = 1.0; - FinalColor = mix(FogColor, FinalColor, FogFactor); - } - - gl_FragColor = FinalColor; -} diff --git a/media/Shaders/COGLES2LightmapModulate.fsh b/media/Shaders/COGLES2LightmapModulate.fsh deleted file mode 100644 index e76c033c..00000000 --- a/media/Shaders/COGLES2LightmapModulate.fsh +++ /dev/null @@ -1,72 +0,0 @@ -precision mediump float; - -/* Uniforms */ - -uniform float uModulate; -uniform int uTextureUsage0; -uniform int uTextureUsage1; -uniform sampler2D uTextureUnit0; -uniform sampler2D uTextureUnit1; -uniform int uFogEnable; -uniform int uFogType; -uniform vec4 uFogColor; -uniform float uFogStart; -uniform float uFogEnd; -uniform float uFogDensity; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -float computeFog() -{ - const float LOG2 = 1.442695; - float FogFactor = 0.0; - - if (uFogType == 0) // Exp - { - FogFactor = exp2(-uFogDensity * vFogCoord * LOG2); - } - else if (uFogType == 1) // Linear - { - float Scale = 1.0 / (uFogEnd - uFogStart); - FogFactor = (uFogEnd - vFogCoord) * Scale; - } - else if (uFogType == 2) // Exp2 - { - FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2); - } - - FogFactor = clamp(FogFactor, 0.0, 1.0); - - return FogFactor; -} - -void main() -{ - vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); - vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0); - - if (bool(uTextureUsage0)) - Color0 = texture2D(uTextureUnit0, vTextureCoord0); - - if (bool(uTextureUsage1)) - Color1 = texture2D(uTextureUnit1, vTextureCoord1); - - vec4 FinalColor = (Color0 * Color1 * uModulate) * vVertexColor; - FinalColor += vSpecularColor; - - if (bool(uFogEnable)) - { - float FogFactor = computeFog(); - vec4 FogColor = uFogColor; - FogColor.a = 1.0; - FinalColor = mix(FogColor, FinalColor, FogFactor); - } - - gl_FragColor = FinalColor; -} diff --git a/media/Shaders/COGLES2Reflection2Layer.fsh b/media/Shaders/COGLES2Reflection2Layer.fsh deleted file mode 100644 index 7a3309c1..00000000 --- a/media/Shaders/COGLES2Reflection2Layer.fsh +++ /dev/null @@ -1,70 +0,0 @@ -precision mediump float; - -/* Uniforms */ - -uniform int uTextureUsage0; -uniform int uTextureUsage1; -uniform sampler2D uTextureUnit0; -uniform sampler2D uTextureUnit1; -uniform int uFogEnable; -uniform int uFogType; -uniform vec4 uFogColor; -uniform float uFogStart; -uniform float uFogEnd; -uniform float uFogDensity; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -float computeFog() -{ - const float LOG2 = 1.442695; - float FogFactor = 0.0; - - if (uFogType == 0) // Exp - { - FogFactor = exp2(-uFogDensity * vFogCoord * LOG2); - } - else if (uFogType == 1) // Linear - { - float Scale = 1.0 / (uFogEnd - uFogStart); - FogFactor = (uFogEnd - vFogCoord) * Scale; - } - else if (uFogType == 2) // Exp2 - { - FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2); - } - - FogFactor = clamp(FogFactor, 0.0, 1.0); - - return FogFactor; -} - -void main() -{ - vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); - vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0); - - if (bool(uTextureUsage0)) - Color0 = texture2D(uTextureUnit0, vTextureCoord0); - - if (bool(uTextureUsage1)) - Color1 = texture2D(uTextureUnit1, vTextureCoord1); - - vec4 FinalColor = (Color0 * Color1) * vVertexColor + vSpecularColor; - - if (bool(uFogEnable)) - { - float FogFactor = computeFog(); - vec4 FogColor = uFogColor; - FogColor.a = 1.0; - FinalColor = mix(FogColor, FinalColor, FogFactor); - } - - gl_FragColor = FinalColor; -} diff --git a/media/Shaders/COGLES2Reflection2Layer.vsh b/media/Shaders/COGLES2Reflection2Layer.vsh deleted file mode 100644 index d4c49378..00000000 --- a/media/Shaders/COGLES2Reflection2Layer.vsh +++ /dev/null @@ -1,53 +0,0 @@ -/* Attributes */ - -attribute vec3 inVertexPosition; -attribute vec3 inVertexNormal; -attribute vec4 inVertexColor; -attribute vec2 inTexCoord0; -attribute vec2 inTexCoord1; - -/* Uniforms */ - -uniform mat4 uWVPMatrix; -uniform mat4 uWVMatrix; -uniform mat4 uNMatrix; -uniform mat4 uTMatrix0; - -uniform vec4 uGlobalAmbient; -uniform vec4 uMaterialAmbient; -uniform vec4 uMaterialDiffuse; -uniform vec4 uMaterialEmissive; -uniform vec4 uMaterialSpecular; -uniform float uMaterialShininess; - -uniform float uThickness; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -void main() -{ - gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0); - gl_PointSize = uThickness; - - vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0); - vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy; - - vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz; - vec3 P = normalize(Position); - vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz); - vec3 R = reflect(P, N); - - float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0)); - vTextureCoord1 = vec2(R.x/V + 0.5, R.y/V + 0.5); - - vVertexColor = inVertexColor.bgra; - vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0); - - vFogCoord = length(Position); -} diff --git a/media/Shaders/COGLES2Solid2.vsh b/media/Shaders/COGLES2Solid2.vsh deleted file mode 100644 index 85a44cf5..00000000 --- a/media/Shaders/COGLES2Solid2.vsh +++ /dev/null @@ -1,51 +0,0 @@ -/* Attributes */ - -attribute vec3 inVertexPosition; -attribute vec3 inVertexNormal; -attribute vec4 inVertexColor; -attribute vec2 inTexCoord0; -attribute vec2 inTexCoord1; - -/* Uniforms */ - -uniform mat4 uWVPMatrix; -uniform mat4 uWVMatrix; -uniform mat4 uNMatrix; -uniform mat4 uTMatrix0; -uniform mat4 uTMatrix1; - -uniform vec4 uGlobalAmbient; -uniform vec4 uMaterialAmbient; -uniform vec4 uMaterialDiffuse; -uniform vec4 uMaterialEmissive; -uniform vec4 uMaterialSpecular; -uniform float uMaterialShininess; - -uniform float uThickness; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -void main() -{ - gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0); - gl_PointSize = uThickness; - - vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0); - vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy; - - vec4 TextureCoord1 = vec4(inTexCoord1.x, inTexCoord1.y, 1.0, 1.0); - vTextureCoord1 = vec4(uTMatrix1 * TextureCoord1).xy; - - vVertexColor = inVertexColor.bgra; - vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0); - - vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz; - - vFogCoord = length(Position); -} diff --git a/media/Shaders/COGLES2Solid2Layer.fsh b/media/Shaders/COGLES2Solid2Layer.fsh deleted file mode 100644 index f6a1340f..00000000 --- a/media/Shaders/COGLES2Solid2Layer.fsh +++ /dev/null @@ -1,72 +0,0 @@ -precision mediump float; - -/* Uniforms */ - -uniform int uTextureUsage0; -uniform int uTextureUsage1; -uniform sampler2D uTextureUnit0; -uniform sampler2D uTextureUnit1; -uniform int uFogEnable; -uniform int uFogType; -uniform vec4 uFogColor; -uniform float uFogStart; -uniform float uFogEnd; -uniform float uFogDensity; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec2 vTextureCoord1; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -float computeFog() -{ - const float LOG2 = 1.442695; - float FogFactor = 0.0; - - if (uFogType == 0) // Exp - { - FogFactor = exp2(-uFogDensity * vFogCoord * LOG2); - } - else if (uFogType == 1) // Linear - { - float Scale = 1.0 / (uFogEnd - uFogStart); - FogFactor = (uFogEnd - vFogCoord) * Scale; - } - else if (uFogType == 2) // Exp2 - { - FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2); - } - - FogFactor = clamp(FogFactor, 0.0, 1.0); - - return FogFactor; -} - -void main() -{ - vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); - vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0); - - if (bool(uTextureUsage0)) - Color0 = texture2D(uTextureUnit0, vTextureCoord0); - - if (bool(uTextureUsage1)) - Color1 = texture2D(uTextureUnit1, vTextureCoord1); - - vec4 FinalColor = (Color0 * vVertexColor.a + Color1 * (1.0 - vVertexColor.a)) * vVertexColor; - FinalColor += vSpecularColor; - - if (bool(uFogEnable)) - { - float FogFactor = computeFog(); - vec4 FogColor = uFogColor; - FogColor.a = 1.0; - FinalColor = mix(FogColor, FinalColor, FogFactor); - } - - gl_FragColor = FinalColor; - -} diff --git a/media/Shaders/COGLES2SphereMap.fsh b/media/Shaders/COGLES2SphereMap.fsh deleted file mode 100644 index 05f54c5b..00000000 --- a/media/Shaders/COGLES2SphereMap.fsh +++ /dev/null @@ -1,62 +0,0 @@ -precision mediump float; - -/* Uniforms */ - -uniform int uTextureUsage0; -uniform sampler2D uTextureUnit0; -uniform int uFogEnable; -uniform int uFogType; -uniform vec4 uFogColor; -uniform float uFogStart; -uniform float uFogEnd; -uniform float uFogDensity; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -float computeFog() -{ - const float LOG2 = 1.442695; - float FogFactor = 0.0; - - if (uFogType == 0) // Exp - { - FogFactor = exp2(-uFogDensity * vFogCoord * LOG2); - } - else if (uFogType == 1) // Linear - { - float Scale = 1.0 / (uFogEnd - uFogStart); - FogFactor = (uFogEnd - vFogCoord) * Scale; - } - else if (uFogType == 2) // Exp2 - { - FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2); - } - - FogFactor = clamp(FogFactor, 0.0, 1.0); - - return FogFactor; -} - -void main() -{ - vec4 Color = vVertexColor; - - if (bool(uTextureUsage0)) - Color *= texture2D(uTextureUnit0, vTextureCoord0); - Color += vSpecularColor; - - if (bool(uFogEnable)) - { - float FogFactor = computeFog(); - vec4 FogColor = uFogColor; - FogColor.a = 1.0; - Color = mix(FogColor, Color, FogFactor); - } - - gl_FragColor = Color; -} diff --git a/media/Shaders/COGLES2SphereMap.vsh b/media/Shaders/COGLES2SphereMap.vsh deleted file mode 100644 index d83a5f71..00000000 --- a/media/Shaders/COGLES2SphereMap.vsh +++ /dev/null @@ -1,48 +0,0 @@ -/* Attributes */ - -attribute vec3 inVertexPosition; -attribute vec3 inVertexNormal; -attribute vec4 inVertexColor; -attribute vec2 inTexCoord0; -attribute vec2 inTexCoord1; - -/* Uniforms */ - -uniform mat4 uWVPMatrix; -uniform mat4 uWVMatrix; -uniform mat4 uNMatrix; - -uniform vec4 uGlobalAmbient; -uniform vec4 uMaterialAmbient; -uniform vec4 uMaterialDiffuse; -uniform vec4 uMaterialEmissive; -uniform vec4 uMaterialSpecular; -uniform float uMaterialShininess; - -uniform float uThickness; - -/* Varyings */ - -varying vec2 vTextureCoord0; -varying vec4 vVertexColor; -varying vec4 vSpecularColor; -varying float vFogCoord; - -void main() -{ - gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0); - gl_PointSize = uThickness; - - vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz; - vec3 P = normalize(Position); - vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz); - vec3 R = reflect(P, N); - - float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0)); - vTextureCoord0 = vec2(R.x/V + 0.5, R.y/V + 0.5); - - vVertexColor = inVertexColor.bgra; - vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0); - - vFogCoord = length(Position); -} diff --git a/source/Irrlicht/CAnimatedMeshSceneNode.cpp b/source/Irrlicht/CAnimatedMeshSceneNode.cpp index cea8ef29..8309de82 100644 --- a/source/Irrlicht/CAnimatedMeshSceneNode.cpp +++ b/source/Irrlicht/CAnimatedMeshSceneNode.cpp @@ -274,54 +274,23 @@ void CAnimatedMeshSceneNode::render() driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); - // for debug purposes only: - - bool renderMeshes = true; - video::SMaterial mat; - if (DebugDataVisible && PassCount==1) + for (u32 i=0; igetMeshBufferCount(); ++i) { - // overwrite half transparency - if (DebugDataVisible & scene::EDS_HALF_TRANSPARENCY) + const bool transparent = driver->needsTransparentRenderPass(Materials[i]); + + // only render transparent buffer if this is the transparent render pass + // and solid only in solid pass + if (transparent == isTransparentPass) { + scene::IMeshBuffer* mb = m->getMeshBuffer(i); + const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i]; + if (RenderFromIdentity) + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix ); + else if (Mesh->getMeshType() == EAMT_SKINNED) + driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation); - for (u32 i=0; igetMeshBufferCount(); ++i) - { - scene::IMeshBuffer* mb = m->getMeshBuffer(i); - mat = ReadOnlyMaterials ? mb->getMaterial() : Materials[i]; - mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; - if (RenderFromIdentity) - driver->setTransform(video::ETS_WORLD, core::IdentityMatrix ); - else if (Mesh->getMeshType() == EAMT_SKINNED) - driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation); - - driver->setMaterial(mat); - driver->drawMeshBuffer(mb); - } - renderMeshes = false; - } - } - - // render original meshes - if (renderMeshes) - { - for (u32 i=0; igetMeshBufferCount(); ++i) - { - const bool transparent = driver->needsTransparentRenderPass(Materials[i]); - - // only render transparent buffer if this is the transparent render pass - // and solid only in solid pass - if (transparent == isTransparentPass) - { - scene::IMeshBuffer* mb = m->getMeshBuffer(i); - const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i]; - if (RenderFromIdentity) - driver->setTransform(video::ETS_WORLD, core::IdentityMatrix ); - else if (Mesh->getMeshType() == EAMT_SKINNED) - driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation); - - driver->setMaterial(material); - driver->drawMeshBuffer(mb); - } + driver->setMaterial(material); + driver->drawMeshBuffer(mb); } } diff --git a/source/Irrlicht/CB3DMeshFileLoader.cpp b/source/Irrlicht/CB3DMeshFileLoader.cpp index 448030ba..20dad9d9 100644 --- a/source/Irrlicht/CB3DMeshFileLoader.cpp +++ b/source/Irrlicht/CB3DMeshFileLoader.cpp @@ -943,19 +943,8 @@ bool CB3DMeshFileLoader::readChunkBRUS() //Two textures: if (B3dMaterial.Textures[1]) { - if (B3dMaterial.alpha==1.f) - { - if (B3dMaterial.Textures[1]->Blend == 5) //(Multiply 2) - B3dMaterial.Material.MaterialType = video::EMT_LIGHTMAP_M2; - else - B3dMaterial.Material.MaterialType = video::EMT_LIGHTMAP; - B3dMaterial.Material.Lighting = false; - } - else - { - B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; - B3dMaterial.Material.ZWriteEnable = video::EZW_OFF; - } + B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; + B3dMaterial.Material.ZWriteEnable = video::EZW_OFF; } else if (B3dMaterial.Textures[0]) //One texture: { @@ -967,10 +956,6 @@ bool CB3DMeshFileLoader::readChunkBRUS() } else if (B3dMaterial.Textures[0]->Flags & 0x4) //(Masked) B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; // TODO: create color key texture - else if (B3dMaterial.Textures[0]->Flags & 0x40) - B3dMaterial.Material.MaterialType = video::EMT_SPHERE_MAP; - else if (B3dMaterial.Textures[0]->Flags & 0x80) - B3dMaterial.Material.MaterialType = video::EMT_SPHERE_MAP; // TODO: Should be cube map else if (B3dMaterial.alpha == 1.f) B3dMaterial.Material.MaterialType = video::EMT_SOLID; else diff --git a/source/Irrlicht/CMeshSceneNode.cpp b/source/Irrlicht/CMeshSceneNode.cpp index 1331ddae..4742a98f 100644 --- a/source/Irrlicht/CMeshSceneNode.cpp +++ b/source/Irrlicht/CMeshSceneNode.cpp @@ -102,45 +102,21 @@ void CMeshSceneNode::render() driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); Box = Mesh->getBoundingBox(); - // for debug purposes only: - - bool renderMeshes = true; - video::SMaterial mat; - if (DebugDataVisible && PassCount==1) + for (u32 i=0; igetMeshBufferCount(); ++i) { - // overwrite half transparency - if (DebugDataVisible & scene::EDS_HALF_TRANSPARENCY) + scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i); + if (mb) { - for (u32 g=0; ggetMeshBufferCount(); ++g) + const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i]; + + const bool transparent = driver->needsTransparentRenderPass(material); + + // only render transparent buffer if this is the transparent render pass + // and solid only in solid pass + if (transparent == isTransparentPass) { - mat = Materials[g]; - mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; - driver->setMaterial(mat); - driver->drawMeshBuffer(Mesh->getMeshBuffer(g)); - } - renderMeshes = false; - } - } - - // render original meshes - if (renderMeshes) - { - for (u32 i=0; igetMeshBufferCount(); ++i) - { - scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i); - if (mb) - { - const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i]; - - const bool transparent = driver->needsTransparentRenderPass(material); - - // only render transparent buffer if this is the transparent render pass - // and solid only in solid pass - if (transparent == isTransparentPass) - { - driver->setMaterial(material); - driver->drawMeshBuffer(mb); - } + driver->setMaterial(material); + driver->drawMeshBuffer(mb); } } } diff --git a/source/Irrlicht/COGLES2Driver.cpp b/source/Irrlicht/COGLES2Driver.cpp index 08b96c52..4d5b84c3 100644 --- a/source/Irrlicht/COGLES2Driver.cpp +++ b/source/Irrlicht/COGLES2Driver.cpp @@ -204,22 +204,9 @@ COGLES2Driver::~COGLES2Driver() // Create callbacks. COGLES2MaterialSolidCB* SolidCB = new COGLES2MaterialSolidCB(); - COGLES2MaterialSolid2CB* Solid2LayerCB = new COGLES2MaterialSolid2CB(); - COGLES2MaterialLightmapCB* LightmapCB = new COGLES2MaterialLightmapCB(1.f); - COGLES2MaterialLightmapCB* LightmapAddCB = new COGLES2MaterialLightmapCB(1.f); - COGLES2MaterialLightmapCB* LightmapM2CB = new COGLES2MaterialLightmapCB(2.f); - COGLES2MaterialLightmapCB* LightmapM4CB = new COGLES2MaterialLightmapCB(4.f); - COGLES2MaterialLightmapCB* LightmapLightingCB = new COGLES2MaterialLightmapCB(1.f); - COGLES2MaterialLightmapCB* LightmapLightingM2CB = new COGLES2MaterialLightmapCB(2.f); - COGLES2MaterialLightmapCB* LightmapLightingM4CB = new COGLES2MaterialLightmapCB(4.f); - COGLES2MaterialSolid2CB* DetailMapCB = new COGLES2MaterialSolid2CB(); - COGLES2MaterialReflectionCB* SphereMapCB = new COGLES2MaterialReflectionCB(); - COGLES2MaterialReflectionCB* Reflection2LayerCB = new COGLES2MaterialReflectionCB(); - COGLES2MaterialSolidCB* TransparentAddColorCB = new COGLES2MaterialSolidCB(); COGLES2MaterialSolidCB* TransparentAlphaChannelCB = new COGLES2MaterialSolidCB(); COGLES2MaterialSolidCB* TransparentAlphaChannelRefCB = new COGLES2MaterialSolidCB(); COGLES2MaterialSolidCB* TransparentVertexAlphaCB = new COGLES2MaterialSolidCB(); - COGLES2MaterialReflectionCB* TransparentReflection2LayerCB = new COGLES2MaterialReflectionCB(); COGLES2MaterialOneTextureBlendCB* OneTextureBlendCB = new COGLES2MaterialOneTextureBlendCB(); // Create built-in materials. @@ -230,65 +217,8 @@ COGLES2Driver::~COGLES2Driver() addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, SolidCB, EMT_SOLID, 0); - VertexShader = OGLES2ShaderPath + "COGLES2Solid2.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2Solid2Layer.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, Solid2LayerCB, EMT_SOLID, 0); - - VertexShader = OGLES2ShaderPath + "COGLES2Solid2.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2LightmapModulate.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapCB, EMT_SOLID, 0); - - FragmentShader = OGLES2ShaderPath + "COGLES2LightmapAdd.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapAddCB, EMT_SOLID, 0); - - FragmentShader = OGLES2ShaderPath + "COGLES2LightmapModulate.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapM2CB, EMT_SOLID, 0); - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapM4CB, EMT_SOLID, 0); - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapLightingCB, EMT_SOLID, 0); - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapLightingM2CB, EMT_SOLID, 0); - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, LightmapLightingM4CB, EMT_SOLID, 0); - - VertexShader = OGLES2ShaderPath + "COGLES2Solid2.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2DetailMap.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, DetailMapCB, EMT_SOLID, 0); - - VertexShader = OGLES2ShaderPath + "COGLES2SphereMap.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2SphereMap.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, SphereMapCB, EMT_SOLID, 0); - - VertexShader = OGLES2ShaderPath + "COGLES2Reflection2Layer.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2Reflection2Layer.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, Reflection2LayerCB, EMT_SOLID, 0); - - VertexShader = OGLES2ShaderPath + "COGLES2Solid.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2Solid.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, TransparentAddColorCB, EMT_TRANSPARENT_ADD_COLOR, 0); - FragmentShader = OGLES2ShaderPath + "COGLES2TransparentAlphaChannel.fsh"; + addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, TransparentAlphaChannelCB, EMT_TRANSPARENT_ALPHA_CHANNEL, 0); @@ -302,13 +232,6 @@ COGLES2Driver::~COGLES2Driver() addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, TransparentVertexAlphaCB, EMT_TRANSPARENT_ALPHA_CHANNEL, 0); - VertexShader = OGLES2ShaderPath + "COGLES2Reflection2Layer.vsh"; - FragmentShader = OGLES2ShaderPath + "COGLES2Reflection2Layer.fsh"; - - addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", - EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, TransparentReflection2LayerCB, EMT_TRANSPARENT_ALPHA_CHANNEL, 0); - - VertexShader = OGLES2ShaderPath + "COGLES2Solid.vsh"; FragmentShader = OGLES2ShaderPath + "COGLES2OneTextureBlend.fsh"; addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", @@ -317,22 +240,9 @@ COGLES2Driver::~COGLES2Driver() // Drop callbacks. SolidCB->drop(); - Solid2LayerCB->drop(); - LightmapCB->drop(); - LightmapAddCB->drop(); - LightmapM2CB->drop(); - LightmapM4CB->drop(); - LightmapLightingCB->drop(); - LightmapLightingM2CB->drop(); - LightmapLightingM4CB->drop(); - DetailMapCB->drop(); - SphereMapCB->drop(); - Reflection2LayerCB->drop(); - TransparentAddColorCB->drop(); TransparentAlphaChannelCB->drop(); TransparentAlphaChannelRefCB->drop(); TransparentVertexAlphaCB->drop(); - TransparentReflection2LayerCB->drop(); OneTextureBlendCB->drop(); // Create 2D material renderers diff --git a/source/Irrlicht/COGLES2FixedPipelineRenderer.cpp b/source/Irrlicht/COGLES2FixedPipelineRenderer.cpp index 899dfd9a..c4cb688c 100644 --- a/source/Irrlicht/COGLES2FixedPipelineRenderer.cpp +++ b/source/Irrlicht/COGLES2FixedPipelineRenderer.cpp @@ -100,7 +100,7 @@ void COGLES2MaterialBaseCB::OnSetConstants(IMaterialRendererServices* services, services->setPixelShaderConstant(ThicknessID, &Thickness, 1); } -// EMT_SOLID + EMT_TRANSPARENT_ADD_COLOR + EMT_TRANSPARENT_ALPHA_CHANNEL + EMT_TRANSPARENT_VERTEX_ALPHA +// EMT_SOLID + EMT_TRANSPARENT_ALPHA_CHANNEL + EMT_TRANSPARENT_VERTEX_ALPHA COGLES2MaterialSolidCB::COGLES2MaterialSolidCB() : FirstUpdate(true), TMatrix0ID(-1), AlphaRefID(-1), TextureUsage0ID(-1), TextureUnit0ID(-1), AlphaRef(0.5f), TextureUsage0(0), TextureUnit0(0) @@ -139,142 +139,6 @@ void COGLES2MaterialSolidCB::OnSetConstants(IMaterialRendererServices* services, services->setPixelShaderConstant(TextureUnit0ID, &TextureUnit0, 1); } -// EMT_SOLID_2_LAYER + EMT_DETAIL_MAP - -COGLES2MaterialSolid2CB::COGLES2MaterialSolid2CB() : - FirstUpdate(true), TMatrix0ID(-1), TMatrix1ID(-1), TextureUsage0ID(-1), TextureUsage1ID(-1), TextureUnit0ID(-1), TextureUnit1ID(-1), - TextureUsage0(0), TextureUsage1(0), TextureUnit0(0), TextureUnit1(1) -{ -} - -void COGLES2MaterialSolid2CB::OnSetMaterial(const SMaterial& material) -{ - COGLES2MaterialBaseCB::OnSetMaterial(material); - - TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; - TextureUsage1 = (material.TextureLayer[1].Texture) ? 1 : 0; -} - -void COGLES2MaterialSolid2CB::OnSetConstants(IMaterialRendererServices* services, s32 userData) -{ - COGLES2MaterialBaseCB::OnSetConstants(services, userData); - - IVideoDriver* driver = services->getVideoDriver(); - - if (FirstUpdate) - { - TMatrix0ID = services->getVertexShaderConstantID("uTMatrix0"); - TMatrix1ID = services->getVertexShaderConstantID("uTMatrix1"); - TextureUsage0ID = services->getVertexShaderConstantID("uTextureUsage0"); - TextureUsage1ID = services->getVertexShaderConstantID("uTextureUsage1"); - TextureUnit0ID = services->getVertexShaderConstantID("uTextureUnit0"); - TextureUnit1ID = services->getVertexShaderConstantID("uTextureUnit1"); - - FirstUpdate = false; - } - - core::matrix4 Matrix = driver->getTransform(ETS_TEXTURE_0); - services->setPixelShaderConstant(TMatrix0ID, Matrix.pointer(), 16); - - Matrix = driver->getTransform(E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + 1)); - services->setPixelShaderConstant(TMatrix1ID, Matrix.pointer(), 16); - - services->setPixelShaderConstant(TextureUsage0ID, &TextureUsage0, 1); - services->setPixelShaderConstant(TextureUsage1ID, &TextureUsage1, 1); - services->setPixelShaderConstant(TextureUnit0ID, &TextureUnit0, 1); - services->setPixelShaderConstant(TextureUnit1ID, &TextureUnit1, 1); -} - -// EMT_LIGHTMAP + EMT_LIGHTMAP_ADD + EMT_LIGHTMAP_M2 + EMT_LIGHTMAP_M4 - -COGLES2MaterialLightmapCB::COGLES2MaterialLightmapCB(float modulate) : - FirstUpdate(true), TMatrix0ID(-1), TMatrix1ID(-1), ModulateID(-1), TextureUsage0ID(-1), TextureUsage1ID(-1), TextureUnit0ID(-1), TextureUnit1ID(-1), - Modulate(modulate), TextureUsage0(0), TextureUsage1(0), TextureUnit0(0), TextureUnit1(1) -{ -} - -void COGLES2MaterialLightmapCB::OnSetMaterial(const SMaterial& material) -{ - COGLES2MaterialBaseCB::OnSetMaterial(material); - - TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; - TextureUsage1 = (material.TextureLayer[1].Texture) ? 1 : 0; -} - -void COGLES2MaterialLightmapCB::OnSetConstants(IMaterialRendererServices* services, s32 userData) -{ - COGLES2MaterialBaseCB::OnSetConstants(services, userData); - - IVideoDriver* driver = services->getVideoDriver(); - - if (FirstUpdate) - { - TMatrix0ID = services->getVertexShaderConstantID("uTMatrix0"); - TMatrix1ID = services->getVertexShaderConstantID("uTMatrix1"); - ModulateID = services->getVertexShaderConstantID("uModulate"); - TextureUsage0ID = services->getVertexShaderConstantID("uTextureUsage0"); - TextureUsage1ID = services->getVertexShaderConstantID("uTextureUsage1"); - TextureUnit0ID = services->getVertexShaderConstantID("uTextureUnit0"); - TextureUnit1ID = services->getVertexShaderConstantID("uTextureUnit1"); - - FirstUpdate = false; - } - - core::matrix4 Matrix = driver->getTransform(ETS_TEXTURE_0); - services->setPixelShaderConstant(TMatrix0ID, Matrix.pointer(), 16); - - Matrix = driver->getTransform(E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + 1)); - services->setPixelShaderConstant(TMatrix1ID, Matrix.pointer(), 16); - - services->setPixelShaderConstant(ModulateID, &Modulate, 1); - services->setPixelShaderConstant(TextureUsage0ID, &TextureUsage0, 1); - services->setPixelShaderConstant(TextureUsage1ID, &TextureUsage1, 1); - services->setPixelShaderConstant(TextureUnit0ID, &TextureUnit0, 1); - services->setPixelShaderConstant(TextureUnit1ID, &TextureUnit1, 1); -} - -// EMT_SPHERE_MAP + EMT_REFLECTION_2_LAYER + EMT_TRANSPARENT_REFLECTION_2_LAYER - -COGLES2MaterialReflectionCB::COGLES2MaterialReflectionCB() : - FirstUpdate(true), TMatrix0ID(-1), TextureUsage0ID(-1), TextureUsage1ID(-1), TextureUnit0ID(-1), TextureUnit1ID(-1), - TextureUsage0(0), TextureUsage1(0), TextureUnit0(0), TextureUnit1(1) -{ -} - -void COGLES2MaterialReflectionCB::OnSetMaterial(const SMaterial& material) -{ - COGLES2MaterialBaseCB::OnSetMaterial(material); - - TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; - TextureUsage1 = (material.TextureLayer[1].Texture) ? 1 : 0; -} - -void COGLES2MaterialReflectionCB::OnSetConstants(IMaterialRendererServices* services, s32 userData) -{ - COGLES2MaterialBaseCB::OnSetConstants(services, userData); - - IVideoDriver* driver = services->getVideoDriver(); - - if (FirstUpdate) - { - TMatrix0ID = services->getVertexShaderConstantID("uTMatrix0"); - TextureUsage0ID = services->getVertexShaderConstantID("uTextureUsage0"); - TextureUsage1ID = services->getVertexShaderConstantID("uTextureUsage1"); - TextureUnit0ID = services->getVertexShaderConstantID("uTextureUnit0"); - TextureUnit1ID = services->getVertexShaderConstantID("uTextureUnit1"); - - FirstUpdate = false; - } - - core::matrix4 Matrix = driver->getTransform(ETS_TEXTURE_0); - services->setPixelShaderConstant(TMatrix0ID, Matrix.pointer(), 16); - - services->setPixelShaderConstant(TextureUsage0ID, &TextureUsage0, 1); - services->setPixelShaderConstant(TextureUsage1ID, &TextureUsage1, 1); - services->setPixelShaderConstant(TextureUnit0ID, &TextureUnit0, 1); - services->setPixelShaderConstant(TextureUnit1ID, &TextureUnit1, 1); -} - // EMT_ONETEXTURE_BLEND COGLES2MaterialOneTextureBlendCB::COGLES2MaterialOneTextureBlendCB() : diff --git a/source/Irrlicht/COGLES2FixedPipelineRenderer.h b/source/Irrlicht/COGLES2FixedPipelineRenderer.h index b50ef74e..a60507c5 100644 --- a/source/Irrlicht/COGLES2FixedPipelineRenderer.h +++ b/source/Irrlicht/COGLES2FixedPipelineRenderer.h @@ -86,79 +86,6 @@ protected: s32 TextureUnit0; }; -class COGLES2MaterialSolid2CB : public COGLES2MaterialBaseCB -{ -public: - COGLES2MaterialSolid2CB(); - - virtual void OnSetMaterial(const SMaterial& material); - virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData); - -protected: - bool FirstUpdate; - - s32 TMatrix0ID; - s32 TMatrix1ID; - s32 TextureUsage0ID; - s32 TextureUsage1ID; - s32 TextureUnit0ID; - s32 TextureUnit1ID; - - s32 TextureUsage0; - s32 TextureUsage1; - s32 TextureUnit0; - s32 TextureUnit1; -}; - -class COGLES2MaterialLightmapCB : public COGLES2MaterialBaseCB -{ -public: - COGLES2MaterialLightmapCB(float modulate); - - virtual void OnSetMaterial(const SMaterial& material); - virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData); - -protected: - bool FirstUpdate; - - s32 TMatrix0ID; - s32 TMatrix1ID; - s32 ModulateID; - s32 TextureUsage0ID; - s32 TextureUsage1ID; - s32 TextureUnit0ID; - s32 TextureUnit1ID; - - f32 Modulate; - s32 TextureUsage0; - s32 TextureUsage1; - s32 TextureUnit0; - s32 TextureUnit1; -}; - -class COGLES2MaterialReflectionCB : public COGLES2MaterialBaseCB -{ -public: - COGLES2MaterialReflectionCB(); - - virtual void OnSetMaterial(const SMaterial& material); - virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData); - -protected: - bool FirstUpdate; - - s32 TMatrix0ID; - s32 TextureUsage0ID; - s32 TextureUsage1ID; - s32 TextureUnit0ID; - s32 TextureUnit1ID; - - s32 TextureUsage0; - s32 TextureUsage1; - s32 TextureUnit0; - s32 TextureUnit1; -}; - class COGLES2MaterialOneTextureBlendCB : public COGLES2MaterialBaseCB { public: diff --git a/source/Irrlicht/COGLES2MaterialRenderer.cpp b/source/Irrlicht/COGLES2MaterialRenderer.cpp index d6cfffae..7b83c9ee 100644 --- a/source/Irrlicht/COGLES2MaterialRenderer.cpp +++ b/source/Irrlicht/COGLES2MaterialRenderer.cpp @@ -30,7 +30,7 @@ COGLES2MaterialRenderer::COGLES2MaterialRenderer(COGLES2Driver* driver, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) - : Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), Program(0), UserData(userData) + : Driver(driver), CallBack(callback), Alpha(false), Blending(false), Program(0), UserData(userData) { #ifdef _DEBUG setDebugName("COGLES2MaterialRenderer"); @@ -42,9 +42,6 @@ COGLES2MaterialRenderer::COGLES2MaterialRenderer(COGLES2Driver* driver, case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -62,7 +59,7 @@ COGLES2MaterialRenderer::COGLES2MaterialRenderer(COGLES2Driver* driver, COGLES2MaterialRenderer::COGLES2MaterialRenderer(COGLES2Driver* driver, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) -: Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), Program(0), UserData(userData) +: Driver(driver), CallBack(callback), Alpha(false), Blending(false), Program(0), UserData(userData) { switch (baseMaterial) { @@ -70,9 +67,6 @@ COGLES2MaterialRenderer::COGLES2MaterialRenderer(COGLES2Driver* driver, case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -167,11 +161,6 @@ void COGLES2MaterialRenderer::OnSetMaterial(const video::SMaterial& material, cacheHandler->setBlend(true); cacheHandler->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } - else if (FixedBlending) - { - cacheHandler->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - cacheHandler->setBlend(true); - } else if (Blending) { E_BLEND_FACTOR srcRGBFact,dstRGBFact,srcAlphaFact,dstAlphaFact; @@ -197,7 +186,7 @@ void COGLES2MaterialRenderer::OnUnsetMaterial() bool COGLES2MaterialRenderer::isTransparent() const { - return (Alpha || Blending || FixedBlending); + return (Alpha || Blending); } diff --git a/source/Irrlicht/COGLES2MaterialRenderer.h b/source/Irrlicht/COGLES2MaterialRenderer.h index 5483263e..c77c2127 100644 --- a/source/Irrlicht/COGLES2MaterialRenderer.h +++ b/source/Irrlicht/COGLES2MaterialRenderer.h @@ -84,7 +84,6 @@ protected: bool Alpha; bool Blending; - bool FixedBlending; struct SUniformInfo { diff --git a/source/Irrlicht/COGLESDriver.cpp b/source/Irrlicht/COGLESDriver.cpp index 8400afe5..abe54c61 100644 --- a/source/Irrlicht/COGLESDriver.cpp +++ b/source/Irrlicht/COGLESDriver.cpp @@ -157,28 +157,11 @@ void COGLES1Driver::createMaterialRenderers() // create OGLES1 material renderers addAndDropMaterialRenderer(new COGLES1MaterialRenderer_SOLID(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_SOLID_2_LAYER(this)); - - // add the same renderer for all lightmap types - COGLES1MaterialRenderer_LIGHTMAP* lmr = new COGLES1MaterialRenderer_LIGHTMAP(this); - addMaterialRenderer(lmr); // for EMT_LIGHTMAP: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_ADD: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_M2: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_M4: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_LIGHTING: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_LIGHTING_M2: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_LIGHTING_M4: - lmr->drop(); // add remaining material renderer - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_DETAIL_MAP(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_SPHERE_MAP(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_REFLECTION_2_LAYER(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_ADD_COLOR(this)); addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL(this)); addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(this)); addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_VERTEX_ALPHA(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER(this)); // add basic 1 texture blending addAndDropMaterialRenderer(new COGLES1MaterialRenderer_ONETEXTURE_BLEND(this)); diff --git a/source/Irrlicht/COGLESMaterialRenderer.h b/source/Irrlicht/COGLESMaterialRenderer.h index b2f88611..0e3b5f66 100644 --- a/source/Irrlicht/COGLESMaterialRenderer.h +++ b/source/Irrlicht/COGLESMaterialRenderer.h @@ -150,82 +150,6 @@ public: }; -//! Solid 2 layer material renderer -class COGLES1MaterialRenderer_SOLID_2_LAYER : public COGLES1MaterialRenderer -{ -public: - - COGLES1MaterialRenderer_SOLID_2_LAYER(video::COGLES1Driver* d) - : COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PRIMARY_COLOR); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_PRIMARY_COLOR); - glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA); - } - } - } - - virtual void OnUnsetMaterial() - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR); - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0); - } - } -}; - - -//! Transparent add color material renderer -class COGLES1MaterialRenderer_TRANSPARENT_ADD_COLOR : public COGLES1MaterialRenderer -{ -public: - - COGLES1MaterialRenderer_TRANSPARENT_ADD_COLOR(video::COGLES1Driver* d) - : COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - Driver->getCacheHandler()->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - Driver->getCacheHandler()->setBlend(true); - - if ((material.MaterialType != lastMaterial.MaterialType) || resetAllRenderstates) - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - - virtual void OnUnsetMaterial() - { - Driver->getCacheHandler()->setBlend(false); - } - - //! Returns if the material is transparent. - virtual bool isTransparent() const - { - return true; - } -}; - - //! Transparent vertex alpha material renderer class COGLES1MaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public COGLES1MaterialRenderer { @@ -358,255 +282,6 @@ public: } }; - -//! material renderer for all kinds of lightmaps -class COGLES1MaterialRenderer_LIGHTMAP : public COGLES1MaterialRenderer -{ -public: - - COGLES1MaterialRenderer_LIGHTMAP(video::COGLES1Driver* d) - : COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - // diffuse map - - switch (material.MaterialType) - { - case EMT_LIGHTMAP_LIGHTING: - case EMT_LIGHTMAP_LIGHTING_M2: - case EMT_LIGHTMAP_LIGHTING_M4: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - break; - case EMT_LIGHTMAP_ADD: - case EMT_LIGHTMAP: - case EMT_LIGHTMAP_M2: - case EMT_LIGHTMAP_M4: - default: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - break; - } - - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - // lightmap - - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - - if (material.MaterialType == EMT_LIGHTMAP_ADD) - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD); - else - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); - - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_PREVIOUS); - - switch (material.MaterialType) - { - case EMT_LIGHTMAP_M4: - case EMT_LIGHTMAP_LIGHTING_M4: - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE, 4.0f); - break; - case EMT_LIGHTMAP_M2: - case EMT_LIGHTMAP_LIGHTING_M2: - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE, 2.0f); - break; - default: - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE, 1.0f); - } - } - } - } - - virtual void OnUnsetMaterial() - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE, 1.f ); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - } -}; - -class COGLES1MaterialRenderer_DETAIL_MAP : public COGLES1MaterialRenderer -{ -public: - COGLES1MaterialRenderer_DETAIL_MAP(video::COGLES1Driver* d) : COGLES1MaterialRenderer(d) - { - } - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); - } - } - - void OnUnsetMaterial() override - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0); - } -}; - - -//! sphere map material renderer -class COGLES1MaterialRenderer_SPHERE_MAP : public COGLES1MaterialRenderer -{ -public: - - COGLES1MaterialRenderer_SPHERE_MAP(video::COGLES1Driver* d) - : COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { -// glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); -// glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - -// glEnable(GL_TEXTURE_GEN_S); -// glEnable(GL_TEXTURE_GEN_T); - } - } - - virtual void OnUnsetMaterial() - { -// glDisable(GL_TEXTURE_GEN_S); -// glDisable(GL_TEXTURE_GEN_T); - } -}; - - -//! reflection 2 layer material renderer -class COGLES1MaterialRenderer_REFLECTION_2_LAYER : public COGLES1MaterialRenderer -{ -public: - - COGLES1MaterialRenderer_REFLECTION_2_LAYER(video::COGLES1Driver* d) - : COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); - - } -// glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); -// glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); -// glEnable(GL_TEXTURE_GEN_S); -// glEnable(GL_TEXTURE_GEN_T); - } - } - - virtual void OnUnsetMaterial() - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } -// glDisable(GL_TEXTURE_GEN_S); -// glDisable(GL_TEXTURE_GEN_T); - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0); - } - } -}; - - -//! reflection 2 layer material renderer -class COGLES1MaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER : public COGLES1MaterialRenderer -{ -public: - - COGLES1MaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER(video::COGLES1Driver* d) - : COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - Driver->getCacheHandler()->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - Driver->getCacheHandler()->setBlend(true); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); - } -// glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); -// glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); -// glEnable(GL_TEXTURE_GEN_S); -// glEnable(GL_TEXTURE_GEN_T); - } - } - - virtual void OnUnsetMaterial() - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } -// glDisable(GL_TEXTURE_GEN_S); -// glDisable(GL_TEXTURE_GEN_T); - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0); - } - Driver->getCacheHandler()->setBlend(false); - } - - //! Returns if the material is transparent. - virtual bool isTransparent() const - { - return true; - } -}; - } // end namespace video } // end namespace irr diff --git a/source/Irrlicht/COpenGLDriver.cpp b/source/Irrlicht/COpenGLDriver.cpp index c213283b..37aa3c82 100644 --- a/source/Irrlicht/COpenGLDriver.cpp +++ b/source/Irrlicht/COpenGLDriver.cpp @@ -207,30 +207,12 @@ bool COpenGLDriver::genericDriverInit() void COpenGLDriver::createMaterialRenderers() { // create OpenGL material renderers - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SOLID(this)); - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SOLID_2_LAYER(this)); - - // add the same renderer for all lightmap types - COpenGLMaterialRenderer_LIGHTMAP* lmr = new COpenGLMaterialRenderer_LIGHTMAP(this); - addMaterialRenderer(lmr); // for EMT_LIGHTMAP: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_ADD: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_M2: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_M4: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_LIGHTING: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_LIGHTING_M2: - addMaterialRenderer(lmr); // for EMT_LIGHTMAP_LIGHTING_M4: - lmr->drop(); // add remaining material renderer - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_DETAIL_MAP(this)); - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SPHERE_MAP(this)); - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_REFLECTION_2_LAYER(this)); - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR(this)); addAndDropMaterialRenderer(new COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL(this)); addAndDropMaterialRenderer(new COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(this)); addAndDropMaterialRenderer(new COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA(this)); - addAndDropMaterialRenderer(new COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER(this)); // add basic 1 texture blending addAndDropMaterialRenderer(new COpenGLMaterialRenderer_ONETEXTURE_BLEND(this)); diff --git a/source/Irrlicht/COpenGLMaterialRenderer.h b/source/Irrlicht/COpenGLMaterialRenderer.h index 6d330561..3779f46e 100644 --- a/source/Irrlicht/COpenGLMaterialRenderer.h +++ b/source/Irrlicht/COpenGLMaterialRenderer.h @@ -168,113 +168,6 @@ protected: }; -//! Solid 2 layer material renderer -class COpenGLMaterialRenderer_SOLID_2_LAYER : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_SOLID_2_LAYER(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(2); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PRIMARY_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA); -#endif - } - } - } - - void OnUnsetMaterial() override - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR); -#endif - } - } - -protected: - - video::COpenGLDriver* Driver; -}; - - -//! Transparent add color material renderer -class COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(1); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - Driver->getCacheHandler()->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - Driver->getCacheHandler()->setBlend(true); - } - - void OnUnsetMaterial() override - { - Driver->getCacheHandler()->setBlend(false); - } - - //! Returns if the material is transparent. - bool isTransparent() const override - { - return true; - } - -protected: - - video::COpenGLDriver* Driver; -}; - - //! Transparent vertex alpha material renderer class COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public IMaterialRenderer { @@ -458,397 +351,6 @@ protected: video::COpenGLDriver* Driver; }; - -//! material renderer for all kinds of lightmaps -class COpenGLMaterialRenderer_LIGHTMAP : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_LIGHTMAP(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(2); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0_ARB); - - // diffuse map - - switch (material.MaterialType) - { - case EMT_LIGHTMAP_LIGHTING: - case EMT_LIGHTMAP_LIGHTING_M2: - case EMT_LIGHTMAP_LIGHTING_M4: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - break; - case EMT_LIGHTMAP_ADD: - case EMT_LIGHTMAP: - case EMT_LIGHTMAP_M2: - case EMT_LIGHTMAP_M4: - default: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - break; - } - - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - // lightmap - - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - - if (material.MaterialType == EMT_LIGHTMAP_ADD) - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD); - else - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); - - if (material.MaterialType == EMT_LIGHTMAP_ADD) - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD); - else - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_PREVIOUS_EXT); -#endif - - switch (material.MaterialType) - { - case EMT_LIGHTMAP_M4: - case EMT_LIGHTMAP_LIGHTING_M4: -#ifdef GL_ARB_texture_env_combine - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 4.0f); -#else - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 4.0f); -#endif - break; - case EMT_LIGHTMAP_M2: - case EMT_LIGHTMAP_LIGHTING_M2: -#ifdef GL_ARB_texture_env_combine - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0f); -#else - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 2.0f); -#endif - break; - default: -#ifdef GL_ARB_texture_env_combine - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0f); -#else - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.0f); -#endif - } - } - } - } - - void OnUnsetMaterial() override - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); -#ifdef GL_ARB_texture_env_combine - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.f ); -#else - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.f ); -#endif - } - - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - -protected: - - video::COpenGLDriver* Driver; -}; - - - -//! detail map material renderer -class COpenGLMaterialRenderer_DETAIL_MAP : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_DETAIL_MAP(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(2); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - // detail map on second layer - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD_SIGNED_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); -#endif - } - } - } - - void OnUnsetMaterial() override - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - } - -protected: - - video::COpenGLDriver* Driver; -}; - - -//! sphere map material renderer -class COpenGLMaterialRenderer_SPHERE_MAP : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_SPHERE_MAP(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(1); - // texture needs to be flipped for OpenGL - core::matrix4 tmp = Driver->getTransform(ETS_TEXTURE_0); - tmp[5]*=-1; - Driver->setTransform(ETS_TEXTURE_0, tmp); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0_ARB); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - } - } - - void OnUnsetMaterial() override - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0_ARB); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - } - -protected: - - video::COpenGLDriver* Driver; -}; - - -//! reflection 2 layer material renderer -class COpenGLMaterialRenderer_REFLECTION_2_LAYER : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_REFLECTION_2_LAYER(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(2); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); -#endif - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - } - } - } - - void OnUnsetMaterial() override - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - } - } - -protected: - - video::COpenGLDriver* Driver; -}; - - -//! reflection 2 layer material renderer -class COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER : public IMaterialRenderer -{ -public: - - COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER(video::COpenGLDriver* d) : Driver(d) {} - - virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices* services) override - { - if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_DISABLE) - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_DISABLE_TO_ENABLE); - else - Driver->setFixedPipelineState(COpenGLDriver::EOFPS_ENABLE); - - Driver->disableTextures(2); - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - Driver->getCacheHandler()->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - Driver->getCacheHandler()->setBlend(true); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0_ARB); - -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_ARB); -#endif - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); -#ifdef GL_ARB_texture_env_combine - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); -#else - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_ARB); -#endif - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - } - } - } - - void OnUnsetMaterial() override - { - if (Driver->queryFeature(EVDF_MULTITEXTURE)) - { - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE1_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - } - - Driver->getCacheHandler()->setActiveTexture(GL_TEXTURE0_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - Driver->getCacheHandler()->setBlend(false); - } - - //! Returns if the material is transparent. - bool isTransparent() const override - { - return true; - } - -protected: - - video::COpenGLDriver* Driver; -}; - } // end namespace video } // end namespace irr diff --git a/source/Irrlicht/COpenGLSLMaterialRenderer.cpp b/source/Irrlicht/COpenGLSLMaterialRenderer.cpp index 352c2bce..113507ef 100644 --- a/source/Irrlicht/COpenGLSLMaterialRenderer.cpp +++ b/source/Irrlicht/COpenGLSLMaterialRenderer.cpp @@ -48,7 +48,7 @@ COpenGLSLMaterialRenderer::COpenGLSLMaterialRenderer(video::COpenGLDriver* drive IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) - : Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), AlphaTest(false), Program(0), Program2(0), UserData(userData) + : Driver(driver), CallBack(callback), Alpha(false), Blending(false), AlphaTest(false), Program(0), Program2(0), UserData(userData) { #ifdef _DEBUG setDebugName("COpenGLSLMaterialRenderer"); @@ -60,9 +60,6 @@ COpenGLSLMaterialRenderer::COpenGLSLMaterialRenderer(video::COpenGLDriver* drive case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -88,7 +85,7 @@ COpenGLSLMaterialRenderer::COpenGLSLMaterialRenderer(video::COpenGLDriver* drive COpenGLSLMaterialRenderer::COpenGLSLMaterialRenderer(COpenGLDriver* driver, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) -: Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), AlphaTest(false), Program(0), Program2(0), UserData(userData) +: Driver(driver), CallBack(callback), Alpha(false), Blending(false), AlphaTest(false), Program(0), Program2(0), UserData(userData) { switch (baseMaterial) { @@ -96,9 +93,6 @@ COpenGLSLMaterialRenderer::COpenGLSLMaterialRenderer(COpenGLDriver* driver, case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -246,11 +240,6 @@ void COpenGLSLMaterialRenderer::OnSetMaterial(const video::SMaterial& material, cacheHandler->setAlphaTest(true); cacheHandler->setAlphaFunc(GL_GREATER, 0.f); } - else if (FixedBlending) - { - cacheHandler->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - cacheHandler->setBlend(true); - } else if (Blending) { E_BLEND_FACTOR srcRGBFact,dstRGBFact,srcAlphaFact,dstAlphaFact; @@ -289,7 +278,7 @@ void COpenGLSLMaterialRenderer::OnUnsetMaterial() Driver->irrGlUseProgram(0); COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); - if (Alpha || FixedBlending || Blending) + if (Alpha || Blending) { cacheHandler->setBlend(false); } @@ -303,7 +292,7 @@ void COpenGLSLMaterialRenderer::OnUnsetMaterial() //! Returns if the material is transparent. bool COpenGLSLMaterialRenderer::isTransparent() const { - return (Alpha || Blending || FixedBlending); + return (Alpha || Blending); } diff --git a/source/Irrlicht/COpenGLSLMaterialRenderer.h b/source/Irrlicht/COpenGLSLMaterialRenderer.h index a870a6eb..c8fa1f96 100644 --- a/source/Irrlicht/COpenGLSLMaterialRenderer.h +++ b/source/Irrlicht/COpenGLSLMaterialRenderer.h @@ -110,7 +110,6 @@ protected: bool Alpha; bool Blending; - bool FixedBlending; bool AlphaTest; struct SUniformInfo diff --git a/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp b/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp index be3a7d33..018238f9 100644 --- a/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp +++ b/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp @@ -25,8 +25,8 @@ namespace video COpenGLShaderMaterialRenderer::COpenGLShaderMaterialRenderer(video::COpenGLDriver* driver, s32& outMaterialTypeNr, const c8* vertexShaderProgram, const c8* pixelShaderProgram, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) - : Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), - AlphaTest(false), VertexShader(0), UserData(userData) + : Driver(driver), CallBack(callback), Alpha(false), Blending(false), AlphaTest(false), + VertexShader(0), UserData(userData) { #ifdef _DEBUG setDebugName("COpenGLShaderMaterialRenderer"); @@ -44,9 +44,6 @@ COpenGLShaderMaterialRenderer::COpenGLShaderMaterialRenderer(video::COpenGLDrive case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -69,8 +66,8 @@ COpenGLShaderMaterialRenderer::COpenGLShaderMaterialRenderer(video::COpenGLDrive COpenGLShaderMaterialRenderer::COpenGLShaderMaterialRenderer(COpenGLDriver* driver, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) -: Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), - AlphaTest(false), VertexShader(0), UserData(userData) +: Driver(driver), CallBack(callback), Alpha(false), Blending(false), AlphaTest(false), + VertexShader(0), UserData(userData) { PixelShader.set_used(4); for (u32 i=0; i<4; ++i) @@ -84,9 +81,6 @@ COpenGLShaderMaterialRenderer::COpenGLShaderMaterialRenderer(COpenGLDriver* driv case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -205,11 +199,6 @@ void COpenGLShaderMaterialRenderer::OnSetMaterial(const video::SMaterial& materi cacheHandler->setBlend(true); cacheHandler->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } - else if (FixedBlending) - { - cacheHandler->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - cacheHandler->setBlend(true); - } else if (Blending) { E_BLEND_FACTOR srcRGBFact,dstRGBFact,srcAlphaFact,dstAlphaFact; @@ -260,7 +249,7 @@ void COpenGLShaderMaterialRenderer::OnUnsetMaterial() #endif COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); - if (Alpha || FixedBlending || Blending) + if (Alpha || Blending) { cacheHandler->setBlend(false); } @@ -274,7 +263,7 @@ void COpenGLShaderMaterialRenderer::OnUnsetMaterial() //! Returns if the material is transparent. bool COpenGLShaderMaterialRenderer::isTransparent() const { - return (Alpha || Blending || FixedBlending); + return (Alpha || Blending); } diff --git a/source/Irrlicht/COpenGLShaderMaterialRenderer.h b/source/Irrlicht/COpenGLShaderMaterialRenderer.h index 81f8c811..ea2f8bc3 100644 --- a/source/Irrlicht/COpenGLShaderMaterialRenderer.h +++ b/source/Irrlicht/COpenGLShaderMaterialRenderer.h @@ -77,7 +77,6 @@ protected: // Note that SMaterial.BlendOperation + SMaterial.BlendFactor are in some drivers already evaluated before OnSetMaterial. bool Alpha; bool Blending; - bool FixedBlending; bool AlphaTest; GLuint VertexShader; diff --git a/source/Irrlicht/OpenGL/Driver.cpp b/source/Irrlicht/OpenGL/Driver.cpp index f49228ba..a7130995 100644 --- a/source/Irrlicht/OpenGL/Driver.cpp +++ b/source/Irrlicht/OpenGL/Driver.cpp @@ -335,11 +335,6 @@ COpenGL3DriverBase::~COpenGL3DriverBase() fsFile->drop(); } - void COpenGL3DriverBase::addDummyMaterial(E_MATERIAL_TYPE type) { - auto index = addMaterialRenderer(getMaterialRenderer(EMT_SOLID), "DUMMY"); - assert(index == type); - } - void COpenGL3DriverBase::createMaterialRenderers() { // Create callbacks. @@ -352,7 +347,6 @@ COpenGL3DriverBase::~COpenGL3DriverBase() // Create built-in materials. // The addition order must be the same as in the E_MATERIAL_TYPE enumeration. Thus the - // addDummyMaterial calls for materials no longer supported. const core::stringc VertexShader = OGLES2ShaderPath + "Solid.vsh"; @@ -361,19 +355,6 @@ COpenGL3DriverBase::~COpenGL3DriverBase() addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, SolidCB, EMT_SOLID, 0); - addDummyMaterial(EMT_SOLID_2_LAYER); - addDummyMaterial(EMT_LIGHTMAP); - addDummyMaterial(EMT_LIGHTMAP_ADD); - addDummyMaterial(EMT_LIGHTMAP_M2); - addDummyMaterial(EMT_LIGHTMAP_M4); - addDummyMaterial(EMT_LIGHTMAP_LIGHTING); - addDummyMaterial(EMT_LIGHTMAP_LIGHTING_M2); - addDummyMaterial(EMT_LIGHTMAP_LIGHTING_M4); - addDummyMaterial(EMT_DETAIL_MAP); - addDummyMaterial(EMT_SPHERE_MAP); - addDummyMaterial(EMT_REFLECTION_2_LAYER); - addDummyMaterial(EMT_TRANSPARENT_ADD_COLOR); - // EMT_TRANSPARENT_ALPHA_CHANNEL FragmentShader = OGLES2ShaderPath + "TransparentAlphaChannel.fsh"; addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", @@ -389,8 +370,6 @@ COpenGL3DriverBase::~COpenGL3DriverBase() addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", EGST_GS_4_0, scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, TransparentVertexAlphaCB, EMT_TRANSPARENT_ALPHA_CHANNEL, 0); - addDummyMaterial(EMT_TRANSPARENT_REFLECTION_2_LAYER); - // EMT_ONETEXTURE_BLEND FragmentShader = OGLES2ShaderPath + "OneTextureBlend.fsh"; addHighLevelShaderMaterialFromFiles(VertexShader, "main", EVST_VS_2_0, FragmentShader, "main", EPST_PS_2_0, "", "main", diff --git a/source/Irrlicht/OpenGL/FixedPipelineRenderer.cpp b/source/Irrlicht/OpenGL/FixedPipelineRenderer.cpp index 004e2574..ec600b25 100644 --- a/source/Irrlicht/OpenGL/FixedPipelineRenderer.cpp +++ b/source/Irrlicht/OpenGL/FixedPipelineRenderer.cpp @@ -94,7 +94,7 @@ void COpenGL3MaterialBaseCB::OnSetConstants(IMaterialRendererServices* services, services->setPixelShaderConstant(ThicknessID, &Thickness, 1); } -// EMT_SOLID + EMT_TRANSPARENT_ADD_COLOR + EMT_TRANSPARENT_ALPHA_CHANNEL + EMT_TRANSPARENT_VERTEX_ALPHA +// EMT_SOLID + EMT_TRANSPARENT_ALPHA_CHANNEL + EMT_TRANSPARENT_VERTEX_ALPHA COpenGL3MaterialSolidCB::COpenGL3MaterialSolidCB() : FirstUpdate(true), TMatrix0ID(-1), AlphaRefID(-1), TextureUsage0ID(-1), TextureUnit0ID(-1), AlphaRef(0.5f), TextureUsage0(0), TextureUnit0(0) diff --git a/source/Irrlicht/OpenGL/MaterialRenderer.cpp b/source/Irrlicht/OpenGL/MaterialRenderer.cpp index d7aa4837..ab79ee53 100644 --- a/source/Irrlicht/OpenGL/MaterialRenderer.cpp +++ b/source/Irrlicht/OpenGL/MaterialRenderer.cpp @@ -28,7 +28,7 @@ COpenGL3MaterialRenderer::COpenGL3MaterialRenderer(COpenGL3DriverBase* driver, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) - : Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), Program(0), UserData(userData) + : Driver(driver), CallBack(callback), Alpha(false), Blending(false), Program(0), UserData(userData) { #ifdef _DEBUG setDebugName("MaterialRenderer"); @@ -40,9 +40,6 @@ COpenGL3MaterialRenderer::COpenGL3MaterialRenderer(COpenGL3DriverBase* driver, case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -60,7 +57,7 @@ COpenGL3MaterialRenderer::COpenGL3MaterialRenderer(COpenGL3DriverBase* driver, COpenGL3MaterialRenderer::COpenGL3MaterialRenderer(COpenGL3DriverBase* driver, IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) -: Driver(driver), CallBack(callback), Alpha(false), Blending(false), FixedBlending(false), Program(0), UserData(userData) +: Driver(driver), CallBack(callback), Alpha(false), Blending(false), Program(0), UserData(userData) { switch (baseMaterial) { @@ -68,9 +65,6 @@ COpenGL3MaterialRenderer::COpenGL3MaterialRenderer(COpenGL3DriverBase* driver, case EMT_TRANSPARENT_ALPHA_CHANNEL: Alpha = true; break; - case EMT_TRANSPARENT_ADD_COLOR: - FixedBlending = true; - break; case EMT_ONETEXTURE_BLEND: Blending = true; break; @@ -165,11 +159,6 @@ void COpenGL3MaterialRenderer::OnSetMaterial(const video::SMaterial& material, cacheHandler->setBlend(true); cacheHandler->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } - else if (FixedBlending) - { - cacheHandler->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - cacheHandler->setBlend(true); - } else if (Blending) { E_BLEND_FACTOR srcRGBFact,dstRGBFact,srcAlphaFact,dstAlphaFact; @@ -195,7 +184,7 @@ void COpenGL3MaterialRenderer::OnUnsetMaterial() bool COpenGL3MaterialRenderer::isTransparent() const { - return (Alpha || Blending || FixedBlending); + return (Alpha || Blending); } diff --git a/source/Irrlicht/OpenGL/MaterialRenderer.h b/source/Irrlicht/OpenGL/MaterialRenderer.h index f9282ccb..5690ae67 100644 --- a/source/Irrlicht/OpenGL/MaterialRenderer.h +++ b/source/Irrlicht/OpenGL/MaterialRenderer.h @@ -80,7 +80,6 @@ protected: bool Alpha; bool Blending; - bool FixedBlending; struct SUniformInfo {