forked from Mirrorlandia_minetest/minetest
shaders: Fix transparency on GC7000L (#10036)
Workaround for the missing GL_ALPHA_TEST implementation in Mesa (etnaviv driver).
This commit is contained in:
parent
f27cf47779
commit
44c98089cf
@ -190,6 +190,14 @@ void main(void)
|
|||||||
#endif
|
#endif
|
||||||
vec4 base = texture2D(baseTexture, uv).rgba;
|
vec4 base = texture2D(baseTexture, uv).rgba;
|
||||||
|
|
||||||
|
#ifdef USE_DISCARD
|
||||||
|
// If alpha is zero, we can just discard the pixel. This fixes transparency
|
||||||
|
// on GPUs like GC7000L, where GL_ALPHA_TEST is not implemented in mesa.
|
||||||
|
if (base.a == 0.0) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_BUMPMAPPING
|
#ifdef ENABLE_BUMPMAPPING
|
||||||
if (use_normalmap) {
|
if (use_normalmap) {
|
||||||
vec3 L = normalize(lightVec);
|
vec3 L = normalize(lightVec);
|
||||||
|
@ -129,6 +129,14 @@ void main(void)
|
|||||||
|
|
||||||
vec4 base = texture2D(baseTexture, uv).rgba;
|
vec4 base = texture2D(baseTexture, uv).rgba;
|
||||||
|
|
||||||
|
#ifdef USE_DISCARD
|
||||||
|
// If alpha is zero, we can just discard the pixel. This fixes transparency
|
||||||
|
// on GPUs like GC7000L, where GL_ALPHA_TEST is not implemented in mesa.
|
||||||
|
if (base.a == 0.0) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_BUMPMAPPING
|
#ifdef ENABLE_BUMPMAPPING
|
||||||
if (use_normalmap) {
|
if (use_normalmap) {
|
||||||
vec3 L = normalize(lightVec);
|
vec3 L = normalize(lightVec);
|
||||||
|
@ -38,6 +38,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "gamedef.h"
|
#include "gamedef.h"
|
||||||
#include "client/tile.h"
|
#include "client/tile.h"
|
||||||
|
|
||||||
|
#if ENABLE_GLES
|
||||||
|
#ifdef _IRR_COMPILE_WITH_OGLES1_
|
||||||
|
#include <GLES/gl.h>
|
||||||
|
#else
|
||||||
|
#include <GLES2/gl2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A cache from shader name to shader path
|
A cache from shader name to shader path
|
||||||
*/
|
*/
|
||||||
@ -607,6 +617,14 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
|
|||||||
// Create shaders header
|
// Create shaders header
|
||||||
std::string shaders_header = "#version 120\n";
|
std::string shaders_header = "#version 120\n";
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
// For renderers that should use discard instead of GL_ALPHA_TEST
|
||||||
|
const char* gl_renderer = (const char*)glGetString(GL_RENDERER);
|
||||||
|
if (strstr(gl_renderer, "GC7000")) {
|
||||||
|
shaders_header += "#define USE_DISCARD\n";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static const char* drawTypes[] = {
|
static const char* drawTypes[] = {
|
||||||
"NDT_NORMAL",
|
"NDT_NORMAL",
|
||||||
"NDT_AIRLIKE",
|
"NDT_AIRLIKE",
|
||||||
|
Loading…
Reference in New Issue
Block a user