mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Do not use hybrid filer for GLES 2.0 due to poor performance.
Shader and code simplifications.
This commit is contained in:
parent
25b270492e
commit
d52d402d76
|
@ -358,19 +358,8 @@ namespace glsl {
|
||||||
std::string const& getHybridTextureFilter()
|
std::string const& getHybridTextureFilter()
|
||||||
{
|
{
|
||||||
static std::string strFilter =
|
static std::string strFilter =
|
||||||
"#if __VERSION__ < 130 \n"
|
|
||||||
"uniform ivec2 uTextureSize; \n"
|
|
||||||
"#endif \n"
|
|
||||||
"uniform sampler2D uTex0; \n"
|
"uniform sampler2D uTex0; \n"
|
||||||
" \n"
|
" \n"
|
||||||
"ivec2 getTextureSize() \n"
|
|
||||||
"{ \n"
|
|
||||||
"#if __VERSION__ < 130 \n"
|
|
||||||
" return uTextureSize; \n"
|
|
||||||
"#else \n"
|
|
||||||
" return textureSize(uTex0, 0); \n"
|
|
||||||
"#endif \n"
|
|
||||||
"} \n"
|
|
||||||
"mediump vec2 norm2denorm(in mediump vec2 uv, in ivec2 texture_size) \n"
|
"mediump vec2 norm2denorm(in mediump vec2 uv, in ivec2 texture_size) \n"
|
||||||
"{ \n"
|
"{ \n"
|
||||||
" return uv * vec2(texture_size) - 0.5; \n"
|
" return uv * vec2(texture_size) - 0.5; \n"
|
||||||
|
@ -395,7 +384,7 @@ namespace glsl {
|
||||||
"} \n"
|
"} \n"
|
||||||
"mediump vec4 hybridFilter(in mediump vec2 uv) \n"
|
"mediump vec4 hybridFilter(in mediump vec2 uv) \n"
|
||||||
"{ \n"
|
"{ \n"
|
||||||
" ivec2 texSize = getTextureSize(); \n"
|
" ivec2 texSize = textureSize(uTex0, 0); \n"
|
||||||
" mediump vec2 denorm_uv = norm2denorm(uv,texSize); \n"
|
" mediump vec2 denorm_uv = norm2denorm(uv,texSize); \n"
|
||||||
" ivec2 idx_low = denorm2idx(denorm_uv); \n"
|
" ivec2 idx_low = denorm2idx(denorm_uv); \n"
|
||||||
" mediump vec2 ratio = denorm_uv - vec2(idx_low); \n"
|
" mediump vec2 ratio = denorm_uv - vec2(idx_low); \n"
|
||||||
|
@ -459,15 +448,27 @@ namespace glsl {
|
||||||
public:
|
public:
|
||||||
TexrectCopy(const opengl::GLInfo & _glinfo)
|
TexrectCopy(const opengl::GLInfo & _glinfo)
|
||||||
{
|
{
|
||||||
m_part = getHybridTextureFilter();
|
if (_glinfo.isGLES2) {
|
||||||
m_part +=
|
m_part =
|
||||||
"IN mediump vec2 vTexCoord0; \n"
|
"IN mediump vec2 vTexCoord0; \n"
|
||||||
"OUT lowp vec4 fragColor; \n"
|
"uniform sampler2D uTex0; \n"
|
||||||
" \n"
|
"OUT lowp vec4 fragColor; \n"
|
||||||
"void main() \n"
|
" \n"
|
||||||
"{ \n"
|
"void main() \n"
|
||||||
" fragColor = hybridFilter(vTexCoord0); \n"
|
"{ \n"
|
||||||
;
|
" fragColor = texture2D(uTex0, vTexCoord0); \n"
|
||||||
|
;
|
||||||
|
} else {
|
||||||
|
m_part = getHybridTextureFilter();
|
||||||
|
m_part +=
|
||||||
|
"IN mediump vec2 vTexCoord0; \n"
|
||||||
|
"OUT lowp vec4 fragColor; \n"
|
||||||
|
" \n"
|
||||||
|
"void main() \n"
|
||||||
|
"{ \n"
|
||||||
|
" fragColor = hybridFilter(vTexCoord0); \n"
|
||||||
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -478,17 +479,31 @@ namespace glsl {
|
||||||
public:
|
public:
|
||||||
TexrectColorAndDepthCopy(const opengl::GLInfo & _glinfo)
|
TexrectColorAndDepthCopy(const opengl::GLInfo & _glinfo)
|
||||||
{
|
{
|
||||||
m_part = getHybridTextureFilter();
|
if (_glinfo.isGLES2) {
|
||||||
m_part +=
|
m_part =
|
||||||
"IN mediump vec2 vTexCoord0; \n"
|
"IN mediump vec2 vTexCoord0; \n"
|
||||||
"uniform sampler2D uTex1; \n"
|
"uniform sampler2D uTex0; \n"
|
||||||
"OUT lowp vec4 fragColor; \n"
|
"uniform sampler2D uTex1; \n"
|
||||||
" \n"
|
"OUT lowp vec4 fragColor; \n"
|
||||||
"void main() \n"
|
" \n"
|
||||||
"{ \n"
|
"void main() \n"
|
||||||
" fragColor = hybridFilter(vTexCoord0); \n"
|
"{ \n"
|
||||||
" gl_FragDepth = texture2D(uTex1, vTexCoord0).r; \n"
|
" fragColor = texture2D(uTex0, vTexCoord0); \n"
|
||||||
;
|
" gl_FragDepth = texture2D(uTex1, vTexCoord0).r; \n"
|
||||||
|
;
|
||||||
|
} else {
|
||||||
|
m_part = getHybridTextureFilter();
|
||||||
|
m_part +=
|
||||||
|
"IN mediump vec2 vTexCoord0; \n"
|
||||||
|
"uniform sampler2D uTex1; \n"
|
||||||
|
"OUT lowp vec4 fragColor; \n"
|
||||||
|
" \n"
|
||||||
|
"void main() \n"
|
||||||
|
"{ \n"
|
||||||
|
" fragColor = hybridFilter(vTexCoord0); \n"
|
||||||
|
" gl_FragDepth = texture2D(uTex1, vTexCoord0).r; \n"
|
||||||
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -781,23 +796,8 @@ namespace glsl {
|
||||||
m_useProgram->useProgram(m_program);
|
m_useProgram->useProgram(m_program);
|
||||||
const int texLoc = glGetUniformLocation(GLuint(m_program), "uTex0");
|
const int texLoc = glGetUniformLocation(GLuint(m_program), "uTex0");
|
||||||
glUniform1i(texLoc, 0);
|
glUniform1i(texLoc, 0);
|
||||||
m_textureSizeLoc = glGetUniformLocation(GLuint(m_program), "uTextureSize");
|
|
||||||
m_useProgram->useProgram(graphics::ObjectHandle::null);
|
m_useProgram->useProgram(graphics::ObjectHandle::null);
|
||||||
}
|
}
|
||||||
|
|
||||||
void activate() override
|
|
||||||
{
|
|
||||||
TexrectCopyShaderBase::activate();
|
|
||||||
if (m_textureSizeLoc < 0)
|
|
||||||
return;
|
|
||||||
GLint texWidth, texHeight;
|
|
||||||
glGetTexLevelParameteriv(0, 0, GL_TEXTURE_WIDTH, &texWidth);
|
|
||||||
glGetTexLevelParameteriv(0, 0, GL_TEXTURE_HEIGHT, &texHeight);
|
|
||||||
glUniform2i(m_textureSizeLoc, texWidth, texHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
GLint m_textureSizeLoc;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*---------------TexrectColorAndDepthCopyShader-------------*/
|
/*---------------TexrectColorAndDepthCopyShader-------------*/
|
||||||
|
@ -819,23 +819,8 @@ namespace glsl {
|
||||||
glUniform1i(texLoc0, 0);
|
glUniform1i(texLoc0, 0);
|
||||||
const int texLoc1 = glGetUniformLocation(GLuint(m_program), "uTex1");
|
const int texLoc1 = glGetUniformLocation(GLuint(m_program), "uTex1");
|
||||||
glUniform1i(texLoc1, 1);
|
glUniform1i(texLoc1, 1);
|
||||||
m_textureSizeLoc = glGetUniformLocation(GLuint(m_program), "uTextureSize");
|
|
||||||
m_useProgram->useProgram(graphics::ObjectHandle::null);
|
m_useProgram->useProgram(graphics::ObjectHandle::null);
|
||||||
}
|
}
|
||||||
|
|
||||||
void activate() override
|
|
||||||
{
|
|
||||||
TexrectColorAndDepthCopyShaderBase::activate();
|
|
||||||
if (m_textureSizeLoc < 0)
|
|
||||||
return;
|
|
||||||
GLint texWidth, texHeight;
|
|
||||||
glGetTexLevelParameteriv(0, 0, GL_TEXTURE_WIDTH, &texWidth);
|
|
||||||
glGetTexLevelParameteriv(0, 0, GL_TEXTURE_HEIGHT, &texHeight);
|
|
||||||
glUniform2i(m_textureSizeLoc, texWidth, texHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
GLint m_textureSizeLoc;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*---------------PostProcessorShader-------------*/
|
/*---------------PostProcessorShader-------------*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user