mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-04-10 19:15:13 +00:00
Shader flags are now sent as bit masks instead of via discreet values.
Also changed the shader flags to enums.
This commit is contained in:
parent
6b095bde05
commit
06a037d8cf
|
@ -90,9 +90,9 @@ void MediaViewer::render(const glm::mat4& /*parentTrans*/)
|
||||||
Renderer::postProcessingParams videoParameters;
|
Renderer::postProcessingParams videoParameters;
|
||||||
unsigned int shaders {0};
|
unsigned int shaders {0};
|
||||||
if (Settings::getInstance()->getBool("MediaViewerVideoScanlines"))
|
if (Settings::getInstance()->getBool("MediaViewerVideoScanlines"))
|
||||||
shaders = Renderer::SHADER_SCANLINES;
|
shaders = Renderer::Shader::SCANLINES;
|
||||||
if (Settings::getInstance()->getBool("MediaViewerVideoBlur")) {
|
if (Settings::getInstance()->getBool("MediaViewerVideoBlur")) {
|
||||||
shaders |= Renderer::SHADER_BLUR_HORIZONTAL;
|
shaders |= Renderer::Shader::BLUR_HORIZONTAL;
|
||||||
float heightModifier {Renderer::getScreenHeightModifier()};
|
float heightModifier {Renderer::getScreenHeightModifier()};
|
||||||
// clang-format off
|
// clang-format off
|
||||||
if (heightModifier < 1)
|
if (heightModifier < 1)
|
||||||
|
@ -120,10 +120,10 @@ void MediaViewer::render(const glm::mat4& /*parentTrans*/)
|
||||||
|
|
||||||
if (mCurrentImageIndex == mScreenshotIndex &&
|
if (mCurrentImageIndex == mScreenshotIndex &&
|
||||||
Settings::getInstance()->getBool("MediaViewerScreenshotScanlines"))
|
Settings::getInstance()->getBool("MediaViewerScreenshotScanlines"))
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_SCANLINES);
|
mRenderer->shaderPostprocessing(Renderer::Shader::SCANLINES);
|
||||||
else if (mCurrentImageIndex == mTitleScreenIndex &&
|
else if (mCurrentImageIndex == mTitleScreenIndex &&
|
||||||
Settings::getInstance()->getBool("MediaViewerScreenshotScanlines"))
|
Settings::getInstance()->getBool("MediaViewerScreenshotScanlines"))
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_SCANLINES);
|
mRenderer->shaderPostprocessing(Renderer::Shader::SCANLINES);
|
||||||
|
|
||||||
// This is necessary so that the video loops if viewing an image when
|
// This is necessary so that the video loops if viewing an image when
|
||||||
// the video ends.
|
// the video ends.
|
||||||
|
|
|
@ -269,7 +269,7 @@ void Screensaver::renderScreensaver()
|
||||||
if (Settings::getInstance()->getString("ScreensaverType") == "slideshow") {
|
if (Settings::getInstance()->getString("ScreensaverType") == "slideshow") {
|
||||||
if (mHasMediaFiles) {
|
if (mHasMediaFiles) {
|
||||||
if (Settings::getInstance()->getBool("ScreensaverSlideshowScanlines"))
|
if (Settings::getInstance()->getBool("ScreensaverSlideshowScanlines"))
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_SCANLINES);
|
mRenderer->shaderPostprocessing(Renderer::Shader::SCANLINES);
|
||||||
if (Settings::getInstance()->getBool("ScreensaverSlideshowGameInfo") &&
|
if (Settings::getInstance()->getBool("ScreensaverSlideshowGameInfo") &&
|
||||||
mGameOverlay) {
|
mGameOverlay) {
|
||||||
if (mGameOverlayRectangleCoords.size() == 4) {
|
if (mGameOverlayRectangleCoords.size() == 4) {
|
||||||
|
@ -297,9 +297,9 @@ void Screensaver::renderScreensaver()
|
||||||
Renderer::postProcessingParams videoParameters;
|
Renderer::postProcessingParams videoParameters;
|
||||||
unsigned int shaders {0};
|
unsigned int shaders {0};
|
||||||
if (Settings::getInstance()->getBool("ScreensaverVideoScanlines"))
|
if (Settings::getInstance()->getBool("ScreensaverVideoScanlines"))
|
||||||
shaders = Renderer::SHADER_SCANLINES;
|
shaders = Renderer::Shader::SCANLINES;
|
||||||
if (Settings::getInstance()->getBool("ScreensaverVideoBlur")) {
|
if (Settings::getInstance()->getBool("ScreensaverVideoBlur")) {
|
||||||
shaders |= Renderer::SHADER_BLUR_HORIZONTAL;
|
shaders |= Renderer::Shader::BLUR_HORIZONTAL;
|
||||||
float heightModifier = Renderer::getScreenHeightModifier();
|
float heightModifier = Renderer::getScreenHeightModifier();
|
||||||
// clang-format off
|
// clang-format off
|
||||||
if (heightModifier < 1)
|
if (heightModifier < 1)
|
||||||
|
@ -348,7 +348,7 @@ void Screensaver::renderScreensaver()
|
||||||
Renderer::postProcessingParams dimParameters;
|
Renderer::postProcessingParams dimParameters;
|
||||||
dimParameters.dimming = mDimValue;
|
dimParameters.dimming = mDimValue;
|
||||||
dimParameters.saturation = mSaturationAmount;
|
dimParameters.saturation = mSaturationAmount;
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_CORE, dimParameters);
|
mRenderer->shaderPostprocessing(Renderer::Shader::CORE, dimParameters);
|
||||||
if (mDimValue > 0.63)
|
if (mDimValue > 0.63)
|
||||||
mDimValue = glm::clamp(mDimValue - 0.015f, 0.68f, 1.0f);
|
mDimValue = glm::clamp(mDimValue - 0.015f, 0.68f, 1.0f);
|
||||||
if (mSaturationAmount > 0.0)
|
if (mSaturationAmount > 0.0)
|
||||||
|
@ -357,7 +357,7 @@ void Screensaver::renderScreensaver()
|
||||||
else if (Settings::getInstance()->getString("ScreensaverType") == "black") {
|
else if (Settings::getInstance()->getString("ScreensaverType") == "black") {
|
||||||
Renderer::postProcessingParams blackParameters;
|
Renderer::postProcessingParams blackParameters;
|
||||||
blackParameters.dimming = mDimValue;
|
blackParameters.dimming = mDimValue;
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_CORE, blackParameters);
|
mRenderer->shaderPostprocessing(Renderer::Shader::CORE, blackParameters);
|
||||||
if (mDimValue > 0.0)
|
if (mDimValue > 0.0)
|
||||||
mDimValue = glm::clamp(mDimValue - 0.045f, 0.0f, 1.0f);
|
mDimValue = glm::clamp(mDimValue - 0.045f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -477,15 +477,15 @@ void Window::render()
|
||||||
// Also dim the background slightly.
|
// Also dim the background slightly.
|
||||||
backgroundParameters.dimming = 0.60f;
|
backgroundParameters.dimming = 0.60f;
|
||||||
|
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_CORE |
|
mRenderer->shaderPostprocessing(Renderer::Shader::CORE |
|
||||||
Renderer::SHADER_BLUR_HORIZONTAL |
|
Renderer::Shader::BLUR_HORIZONTAL |
|
||||||
Renderer::SHADER_BLUR_VERTICAL,
|
Renderer::Shader::BLUR_VERTICAL,
|
||||||
backgroundParameters, &processedTexture[0]);
|
backgroundParameters, &processedTexture[0]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Dim the background slightly.
|
// Dim the background slightly.
|
||||||
backgroundParameters.dimming = 0.60f;
|
backgroundParameters.dimming = 0.60f;
|
||||||
mRenderer->shaderPostprocessing(Renderer::SHADER_CORE, backgroundParameters,
|
mRenderer->shaderPostprocessing(Renderer::Shader::CORE, backgroundParameters,
|
||||||
&processedTexture[0]);
|
&processedTexture[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -491,7 +491,7 @@ void GIFAnimComponent::render(const glm::mat4& parentTrans)
|
||||||
vertices->saturation = mSaturation;
|
vertices->saturation = mSaturation;
|
||||||
vertices->opacity = mOpacity * mThemeOpacity;
|
vertices->opacity = mOpacity * mThemeOpacity;
|
||||||
vertices->dimming = mDimming;
|
vertices->dimming = mDimming;
|
||||||
vertices->convertBGRAToRGBA = true;
|
vertices->shaderFlags = Renderer::ShaderFlags::BGRA_TO_RGBA;
|
||||||
|
|
||||||
// Render it.
|
// Render it.
|
||||||
mRenderer->drawTriangleStrips(&vertices[0], 4);
|
mRenderer->drawTriangleStrips(&vertices[0], 4);
|
||||||
|
|
|
@ -480,7 +480,7 @@ void LottieAnimComponent::render(const glm::mat4& parentTrans)
|
||||||
vertices->saturation = mSaturation;
|
vertices->saturation = mSaturation;
|
||||||
vertices->opacity = mOpacity * mThemeOpacity;
|
vertices->opacity = mOpacity * mThemeOpacity;
|
||||||
vertices->dimming = mDimming;
|
vertices->dimming = mDimming;
|
||||||
vertices->convertBGRAToRGBA = true;
|
vertices->shaderFlags = Renderer::ShaderFlags::BGRA_TO_RGBA;
|
||||||
|
|
||||||
// Render it.
|
// Render it.
|
||||||
mRenderer->drawTriangleStrips(&vertices[0], 4);
|
mRenderer->drawTriangleStrips(&vertices[0], 4);
|
||||||
|
|
|
@ -217,7 +217,7 @@ void VideoFFmpegComponent::render(const glm::mat4& parentTrans)
|
||||||
vertices[0].opacity = mFadeIn * mThemeOpacity;
|
vertices[0].opacity = mFadeIn * mThemeOpacity;
|
||||||
if ((mLegacyTheme && Settings::getInstance()->getBool("GamelistVideoScanlines")) ||
|
if ((mLegacyTheme && Settings::getInstance()->getBool("GamelistVideoScanlines")) ||
|
||||||
(!mLegacyTheme && mRenderScanlines)) {
|
(!mLegacyTheme && mRenderScanlines)) {
|
||||||
vertices[0].shaders = Renderer::SHADER_SCANLINES;
|
vertices[0].shaders = Renderer::Shader::SCANLINES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,47 +17,14 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
struct SDL_Window;
|
struct SDL_Window;
|
||||||
class Shader;
|
|
||||||
|
|
||||||
class Renderer
|
class Renderer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Vertex {
|
enum class TextureType {
|
||||||
glm::vec2 position;
|
RGBA, // Replace with AllowShortEnumsOnASingleLine: false (clang-format >=11.0).
|
||||||
glm::vec2 texture;
|
BGRA,
|
||||||
unsigned int color;
|
RED
|
||||||
float opacity;
|
|
||||||
float saturation;
|
|
||||||
float dimming;
|
|
||||||
bool convertBGRAToRGBA;
|
|
||||||
bool font;
|
|
||||||
bool postProcessing;
|
|
||||||
unsigned int shaders;
|
|
||||||
|
|
||||||
Vertex()
|
|
||||||
: opacity {1.0f}
|
|
||||||
, saturation {1.0f}
|
|
||||||
, dimming {1.0f}
|
|
||||||
, convertBGRAToRGBA {false}
|
|
||||||
, font {false}
|
|
||||||
, postProcessing {false}
|
|
||||||
, shaders {0}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Vertex(const glm::vec2& position, const glm::vec2& textureCoord, const unsigned int color)
|
|
||||||
: position(position)
|
|
||||||
, texture(textureCoord)
|
|
||||||
, color(color)
|
|
||||||
, opacity {1.0f}
|
|
||||||
, saturation {1.0f}
|
|
||||||
, dimming {1.0f}
|
|
||||||
, convertBGRAToRGBA {false}
|
|
||||||
, font {false}
|
|
||||||
, postProcessing {false}
|
|
||||||
, shaders {0}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class BlendFactor {
|
enum class BlendFactor {
|
||||||
|
@ -73,17 +40,57 @@ public:
|
||||||
ONE_MINUS_DST_ALPHA
|
ONE_MINUS_DST_ALPHA
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class TextureType {
|
// clang-format off
|
||||||
RGBA, // Replace with AllowShortEnumsOnASingleLine: false (clang-format >=11.0).
|
enum Shader {
|
||||||
BGRA,
|
CORE = 0x00000001,
|
||||||
RED
|
BLUR_HORIZONTAL = 0x00000002,
|
||||||
|
BLUR_VERTICAL = 0x00000004,
|
||||||
|
SCANLINES = 0x00000008
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ShaderFlags {
|
||||||
|
BGRA_TO_RGBA = 0x00000001,
|
||||||
|
FONT_TEXTURE = 0x00000002,
|
||||||
|
POST_PROCESSING = 0x00000004
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
struct Vertex {
|
||||||
|
glm::vec2 position;
|
||||||
|
glm::vec2 texture;
|
||||||
|
unsigned int color;
|
||||||
|
float opacity;
|
||||||
|
float saturation;
|
||||||
|
float dimming;
|
||||||
|
unsigned int shaders;
|
||||||
|
unsigned int shaderFlags;
|
||||||
|
|
||||||
|
Vertex()
|
||||||
|
: opacity {1.0f}
|
||||||
|
, saturation {1.0f}
|
||||||
|
, dimming {1.0f}
|
||||||
|
, shaders {0}
|
||||||
|
, shaderFlags {0}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Vertex(const glm::vec2& position, const glm::vec2& textureCoord, const unsigned int color)
|
||||||
|
: position(position)
|
||||||
|
, texture(textureCoord)
|
||||||
|
, color(color)
|
||||||
|
, opacity {1.0f}
|
||||||
|
, saturation {1.0f}
|
||||||
|
, dimming {1.0f}
|
||||||
|
, shaders {0}
|
||||||
|
, shaderFlags {0}
|
||||||
|
{
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct postProcessingParams {
|
struct postProcessingParams {
|
||||||
float opacity;
|
float opacity;
|
||||||
float saturation;
|
float saturation;
|
||||||
float dimming;
|
float dimming;
|
||||||
bool convertBGRAToRGBA;
|
|
||||||
unsigned int blurPasses;
|
unsigned int blurPasses;
|
||||||
unsigned int shaders;
|
unsigned int shaders;
|
||||||
|
|
||||||
|
@ -91,7 +98,6 @@ public:
|
||||||
: opacity {1.0f}
|
: opacity {1.0f}
|
||||||
, saturation {1.0f}
|
, saturation {1.0f}
|
||||||
, dimming {1.0f}
|
, dimming {1.0f}
|
||||||
, convertBGRAToRGBA {false}
|
|
||||||
, blurPasses {1}
|
, blurPasses {1}
|
||||||
, shaders {0}
|
, shaders {0}
|
||||||
{
|
{
|
||||||
|
@ -192,13 +198,7 @@ public:
|
||||||
virtual void setSwapInterval() = 0;
|
virtual void setSwapInterval() = 0;
|
||||||
virtual void swapBuffers() = 0;
|
virtual void swapBuffers() = 0;
|
||||||
|
|
||||||
// clang-format off
|
private:
|
||||||
static constexpr unsigned int SHADER_CORE {0x00000001};
|
|
||||||
static constexpr unsigned int SHADER_BLUR_HORIZONTAL {0x00000002};
|
|
||||||
static constexpr unsigned int SHADER_BLUR_VERTICAL {0x00000004};
|
|
||||||
static constexpr unsigned int SHADER_SCANLINES {0x00000008};
|
|
||||||
// clang-format on
|
|
||||||
|
|
||||||
std::stack<Rect> mClipStack;
|
std::stack<Rect> mClipStack;
|
||||||
SDL_Window* mSDLWindow {nullptr};
|
SDL_Window* mSDLWindow {nullptr};
|
||||||
glm::mat4 mProjectionMatrix {};
|
glm::mat4 mProjectionMatrix {};
|
||||||
|
|
|
@ -365,9 +365,9 @@ void RendererOpenGL::drawTriangleStrips(const Vertex* vertices,
|
||||||
GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(srcBlendFactorFactor),
|
GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(srcBlendFactorFactor),
|
||||||
convertBlendFactor(dstBlendFactorFactor)));
|
convertBlendFactor(dstBlendFactorFactor)));
|
||||||
|
|
||||||
if (vertices->shaders == 0 || vertices->shaders & SHADER_CORE) {
|
if (vertices->shaders == 0 || vertices->shaders & Shader::CORE) {
|
||||||
if (mCoreShader == nullptr)
|
if (mCoreShader == nullptr)
|
||||||
mCoreShader = getShaderProgram(SHADER_CORE);
|
mCoreShader = getShaderProgram(Shader::CORE);
|
||||||
if (mCoreShader) {
|
if (mCoreShader) {
|
||||||
if (mLastShader != mCoreShader)
|
if (mLastShader != mCoreShader)
|
||||||
mCoreShader->activateShaders();
|
mCoreShader->activateShaders();
|
||||||
|
@ -379,16 +379,14 @@ void RendererOpenGL::drawTriangleStrips(const Vertex* vertices,
|
||||||
mCoreShader->setOpacity(vertices->opacity);
|
mCoreShader->setOpacity(vertices->opacity);
|
||||||
mCoreShader->setSaturation(vertices->saturation);
|
mCoreShader->setSaturation(vertices->saturation);
|
||||||
mCoreShader->setDimming(vertices->dimming);
|
mCoreShader->setDimming(vertices->dimming);
|
||||||
mCoreShader->setBGRAToRGBA(vertices->convertBGRAToRGBA);
|
mCoreShader->setFlags(vertices->shaderFlags);
|
||||||
mCoreShader->setFont(vertices->font);
|
|
||||||
mCoreShader->setPostProcessing(vertices->postProcessing);
|
|
||||||
GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, numVertices));
|
GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, numVertices));
|
||||||
mLastShader = mCoreShader;
|
mLastShader = mCoreShader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (vertices->shaders & SHADER_BLUR_HORIZONTAL) {
|
else if (vertices->shaders & Shader::BLUR_HORIZONTAL) {
|
||||||
if (mBlurHorizontalShader == nullptr)
|
if (mBlurHorizontalShader == nullptr)
|
||||||
mBlurHorizontalShader = getShaderProgram(SHADER_BLUR_HORIZONTAL);
|
mBlurHorizontalShader = getShaderProgram(Shader::BLUR_HORIZONTAL);
|
||||||
if (mBlurHorizontalShader) {
|
if (mBlurHorizontalShader) {
|
||||||
if (mLastShader != mBlurHorizontalShader)
|
if (mLastShader != mBlurHorizontalShader)
|
||||||
mBlurHorizontalShader->activateShaders();
|
mBlurHorizontalShader->activateShaders();
|
||||||
|
@ -403,9 +401,9 @@ void RendererOpenGL::drawTriangleStrips(const Vertex* vertices,
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (vertices->shaders & SHADER_BLUR_VERTICAL) {
|
else if (vertices->shaders & Shader::BLUR_VERTICAL) {
|
||||||
if (mBlurVerticalShader == nullptr)
|
if (mBlurVerticalShader == nullptr)
|
||||||
mBlurVerticalShader = getShaderProgram(SHADER_BLUR_VERTICAL);
|
mBlurVerticalShader = getShaderProgram(Shader::BLUR_VERTICAL);
|
||||||
if (mBlurVerticalShader) {
|
if (mBlurVerticalShader) {
|
||||||
if (mLastShader != mBlurVerticalShader)
|
if (mLastShader != mBlurVerticalShader)
|
||||||
mBlurVerticalShader->activateShaders();
|
mBlurVerticalShader->activateShaders();
|
||||||
|
@ -420,9 +418,9 @@ void RendererOpenGL::drawTriangleStrips(const Vertex* vertices,
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (vertices->shaders & SHADER_SCANLINES) {
|
else if (vertices->shaders & Shader::SCANLINES) {
|
||||||
if (mScanlinelShader == nullptr)
|
if (mScanlinelShader == nullptr)
|
||||||
mScanlinelShader = getShaderProgram(SHADER_SCANLINES);
|
mScanlinelShader = getShaderProgram(Shader::SCANLINES);
|
||||||
float shaderWidth {width * 1.2f};
|
float shaderWidth {width * 1.2f};
|
||||||
// Scale the scanlines relative to screen resolution.
|
// Scale the scanlines relative to screen resolution.
|
||||||
float screenHeightModifier {getScreenHeightModifier()};
|
float screenHeightModifier {getScreenHeightModifier()};
|
||||||
|
@ -481,16 +479,16 @@ void RendererOpenGL::shaderPostprocessing(unsigned int shaders,
|
||||||
vertices->opacity = parameters.opacity;
|
vertices->opacity = parameters.opacity;
|
||||||
vertices->saturation = parameters.saturation;
|
vertices->saturation = parameters.saturation;
|
||||||
vertices->dimming = parameters.dimming;
|
vertices->dimming = parameters.dimming;
|
||||||
vertices->postProcessing = true;
|
vertices->shaderFlags = ShaderFlags::POST_PROCESSING;
|
||||||
|
|
||||||
if (shaders & SHADER_CORE)
|
if (shaders & Shader::CORE)
|
||||||
shaderList.push_back(SHADER_CORE);
|
shaderList.push_back(Shader::CORE);
|
||||||
if (shaders & SHADER_BLUR_HORIZONTAL)
|
if (shaders & Shader::BLUR_HORIZONTAL)
|
||||||
shaderList.push_back(SHADER_BLUR_HORIZONTAL);
|
shaderList.push_back(Shader::BLUR_HORIZONTAL);
|
||||||
if (shaders & SHADER_BLUR_VERTICAL)
|
if (shaders & Shader::BLUR_VERTICAL)
|
||||||
shaderList.push_back(SHADER_BLUR_VERTICAL);
|
shaderList.push_back(Shader::BLUR_VERTICAL);
|
||||||
if (shaders & SHADER_SCANLINES)
|
if (shaders & Shader::SCANLINES)
|
||||||
shaderList.push_back(SHADER_SCANLINES);
|
shaderList.push_back(Shader::SCANLINES);
|
||||||
|
|
||||||
setMatrix(getIdentity());
|
setMatrix(getIdentity());
|
||||||
bindTexture(mPostProcTexture1);
|
bindTexture(mPostProcTexture1);
|
||||||
|
@ -511,8 +509,8 @@ void RendererOpenGL::shaderPostprocessing(unsigned int shaders,
|
||||||
int shaderPasses = 1;
|
int shaderPasses = 1;
|
||||||
// For the blur shaders there is an optional variable to set the number of passes
|
// For the blur shaders there is an optional variable to set the number of passes
|
||||||
// to execute, which proportionally affects the blur amount.
|
// to execute, which proportionally affects the blur amount.
|
||||||
if (shaderList[i] == Renderer::SHADER_BLUR_HORIZONTAL ||
|
if (shaderList[i] == Renderer::Shader::BLUR_HORIZONTAL ||
|
||||||
shaderList[i] == Renderer::SHADER_BLUR_VERTICAL) {
|
shaderList[i] == Renderer::Shader::BLUR_VERTICAL) {
|
||||||
shaderPasses = parameters.blurPasses;
|
shaderPasses = parameters.blurPasses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,7 @@ ShaderOpenGL::ShaderOpenGL()
|
||||||
, mShaderOpacity {0}
|
, mShaderOpacity {0}
|
||||||
, mShaderSaturation {0}
|
, mShaderSaturation {0}
|
||||||
, mShaderDimming {0}
|
, mShaderDimming {0}
|
||||||
, mShaderBGRAToRGBA {0}
|
, mShaderFlags {0}
|
||||||
, mShaderFont {0}
|
|
||||||
, mShaderPostProcessing {0}
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,9 +123,7 @@ void ShaderOpenGL::getVariableLocations(GLuint programID)
|
||||||
mShaderOpacity = glGetUniformLocation(mProgramID, "opacity");
|
mShaderOpacity = glGetUniformLocation(mProgramID, "opacity");
|
||||||
mShaderSaturation = glGetUniformLocation(mProgramID, "saturation");
|
mShaderSaturation = glGetUniformLocation(mProgramID, "saturation");
|
||||||
mShaderDimming = glGetUniformLocation(mProgramID, "dimming");
|
mShaderDimming = glGetUniformLocation(mProgramID, "dimming");
|
||||||
mShaderBGRAToRGBA = glGetUniformLocation(mProgramID, "BGRAToRGBA");
|
mShaderFlags = glGetUniformLocation(mProgramID, "shaderFlags");
|
||||||
mShaderFont = glGetUniformLocation(mProgramID, "font");
|
|
||||||
mShaderPostProcessing = glGetUniformLocation(mProgramID, "postProcessing");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderOpenGL::setModelViewProjectionMatrix(glm::mat4 mvpMatrix)
|
void ShaderOpenGL::setModelViewProjectionMatrix(glm::mat4 mvpMatrix)
|
||||||
|
@ -178,22 +174,10 @@ void ShaderOpenGL::setDimming(GLfloat dimming)
|
||||||
GL_CHECK_ERROR(glUniform1f(mShaderDimming, dimming));
|
GL_CHECK_ERROR(glUniform1f(mShaderDimming, dimming));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderOpenGL::setBGRAToRGBA(GLboolean BGRAToRGBA)
|
void ShaderOpenGL::setFlags(GLuint flags)
|
||||||
{
|
{
|
||||||
if (mShaderBGRAToRGBA != -1)
|
if (mShaderFlags != -1)
|
||||||
GL_CHECK_ERROR(glUniform1i(mShaderBGRAToRGBA, BGRAToRGBA ? 1 : 0));
|
GL_CHECK_ERROR(glUniform1ui(mShaderFlags, flags));
|
||||||
}
|
|
||||||
|
|
||||||
void ShaderOpenGL::setFont(GLboolean font)
|
|
||||||
{
|
|
||||||
if (mShaderFont != -1)
|
|
||||||
GL_CHECK_ERROR(glUniform1i(mShaderFont, font ? 1 : 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ShaderOpenGL::setPostProcessing(GLboolean postProcessing)
|
|
||||||
{
|
|
||||||
if (mShaderPostProcessing != -1)
|
|
||||||
GL_CHECK_ERROR(glUniform1i(mShaderPostProcessing, postProcessing ? 1 : 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderOpenGL::activateShaders()
|
void ShaderOpenGL::activateShaders()
|
||||||
|
|
|
@ -71,9 +71,7 @@ public:
|
||||||
void setOpacity(GLfloat opacity);
|
void setOpacity(GLfloat opacity);
|
||||||
void setSaturation(GLfloat saturation);
|
void setSaturation(GLfloat saturation);
|
||||||
void setDimming(GLfloat dimming);
|
void setDimming(GLfloat dimming);
|
||||||
void setBGRAToRGBA(GLboolean BGRAToRGBA);
|
void setFlags(GLuint flags);
|
||||||
void setFont(GLboolean font);
|
|
||||||
void setPostProcessing(GLboolean postProcessing);
|
|
||||||
// Sets the shader program to use the loaded shaders.
|
// Sets the shader program to use the loaded shaders.
|
||||||
void activateShaders();
|
void activateShaders();
|
||||||
// Sets the shader program to 0 which reverts to the fixed function pipeline.
|
// Sets the shader program to 0 which reverts to the fixed function pipeline.
|
||||||
|
@ -97,9 +95,7 @@ private:
|
||||||
GLint mShaderOpacity;
|
GLint mShaderOpacity;
|
||||||
GLint mShaderSaturation;
|
GLint mShaderSaturation;
|
||||||
GLint mShaderDimming;
|
GLint mShaderDimming;
|
||||||
GLint mShaderBGRAToRGBA;
|
GLint mShaderFlags;
|
||||||
GLint mShaderFont;
|
|
||||||
GLint mShaderPostProcessing;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ES_CORE_RENDERER_SHADER_OPENGL_H
|
#endif // ES_CORE_RENDERER_SHADER_OPENGL_H
|
||||||
|
|
|
@ -397,7 +397,7 @@ void Font::renderTextCache(TextCache* cache)
|
||||||
assert(*it->textureIdPtr != 0);
|
assert(*it->textureIdPtr != 0);
|
||||||
|
|
||||||
auto vertexList = *it;
|
auto vertexList = *it;
|
||||||
it->verts[0].font = true;
|
it->verts[0].shaderFlags = Renderer::ShaderFlags::FONT_TEXTURE;
|
||||||
|
|
||||||
mRenderer->bindTexture(*it->textureIdPtr);
|
mRenderer->bindTexture(*it->textureIdPtr);
|
||||||
mRenderer->drawTriangleStrips(&it->verts[0],
|
mRenderer->drawTriangleStrips(&it->verts[0],
|
||||||
|
|
|
@ -63,24 +63,27 @@ COMPAT_VARYING COMPAT_PRECISION vec2 texCoord;
|
||||||
uniform COMPAT_PRECISION float opacity;
|
uniform COMPAT_PRECISION float opacity;
|
||||||
uniform COMPAT_PRECISION float saturation;
|
uniform COMPAT_PRECISION float saturation;
|
||||||
uniform COMPAT_PRECISION float dimming;
|
uniform COMPAT_PRECISION float dimming;
|
||||||
uniform int BGRAToRGBA;
|
uniform unsigned int shaderFlags;
|
||||||
uniform int font;
|
uniform sampler2D textureSampler;
|
||||||
uniform int postProcessing;
|
|
||||||
uniform sampler2D myTexture;
|
// shaderFlags:
|
||||||
|
// 0x00000001 - BGRA to RGBA conversion
|
||||||
|
// 0x00000002 - Font texture
|
||||||
|
// 0x00000004 - Post processing
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
COMPAT_PRECISION vec4 sampledColor = COMPAT_TEXTURE(myTexture, texCoord);
|
COMPAT_PRECISION vec4 sampledColor = COMPAT_TEXTURE(textureSampler, texCoord);
|
||||||
|
|
||||||
// For fonts the alpha information is stored in the red channel.
|
// For fonts the alpha information is stored in the red channel.
|
||||||
if (font == 1)
|
if (0u != (shaderFlags & 2u))
|
||||||
sampledColor = vec4(1.0f, 1.0f, 1.0f, sampledColor.r);
|
sampledColor = vec4(1.0f, 1.0f, 1.0f, sampledColor.r);
|
||||||
|
|
||||||
sampledColor *= color;
|
sampledColor *= color;
|
||||||
|
|
||||||
// When post-processing we drop the alpha channel to avoid strange issues
|
// When post-processing we drop the alpha channel to avoid strange issues
|
||||||
// with some graphics drivers.
|
// with some graphics drivers.
|
||||||
if (postProcessing == 1)
|
if (0u != (shaderFlags & 4u))
|
||||||
sampledColor.a = 1.0f;
|
sampledColor.a = 1.0f;
|
||||||
|
|
||||||
// Opacity.
|
// Opacity.
|
||||||
|
@ -101,7 +104,7 @@ void main()
|
||||||
}
|
}
|
||||||
|
|
||||||
// BGRA to RGBA conversion.
|
// BGRA to RGBA conversion.
|
||||||
if (BGRAToRGBA == 1)
|
if (0u != (shaderFlags & 1u))
|
||||||
sampledColor = vec4(sampledColor.bgr, sampledColor.a);
|
sampledColor = vec4(sampledColor.bgr, sampledColor.a);
|
||||||
|
|
||||||
FragColor = sampledColor;
|
FragColor = sampledColor;
|
||||||
|
|
Loading…
Reference in a new issue