1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-06-25 22:09:35 +00:00

Add TextDrawer::setTextColor method.

This commit is contained in:
Sergey Lipskiy 2017-05-26 16:00:01 +07:00
parent 08f2b8be31
commit d89e48df46
10 changed files with 35 additions and 13 deletions

View File

@ -249,7 +249,7 @@ ShaderProgram * Context::createOrientationCorrectionShader()
return m_impl->createOrientationCorrectionShader();
}
ShaderProgram * Context::createTextDrawerShader()
TextDrawerShaderProgram * Context::createTextDrawerShader()
{
return m_impl->createTextDrawerShader();
}

View File

@ -220,7 +220,7 @@ namespace graphics {
ShaderProgram * createOrientationCorrectionShader();
ShaderProgram * createTextDrawerShader();
TextDrawerShaderProgram * createTextDrawerShader();
void resetShaderProgram();

View File

@ -55,7 +55,7 @@ namespace graphics {
virtual ShaderProgram * createTexrectCopyShader() = 0;
virtual ShaderProgram * createGammaCorrectionShader() = 0;
virtual ShaderProgram * createOrientationCorrectionShader() = 0;
virtual ShaderProgram * createTextDrawerShader() = 0;
virtual TextDrawerShaderProgram * createTextDrawerShader() = 0;
virtual void resetShaderProgram() = 0;
virtual void drawTriangles(const Context::DrawTriangleParameters & _params) = 0;
virtual void drawRects(const Context::DrawRectParameters & _params) = 0;

View File

@ -435,8 +435,8 @@ namespace glsl {
/*---------------SpecialShader-------------*/
template<class VertexBody, class FragmentBody>
class SpecialShader : public graphics::ShaderProgram
template<class VertexBody, class FragmentBody, class Base = graphics::ShaderProgram>
class SpecialShader : public Base
{
public:
SpecialShader(const opengl::GLInfo & _glinfo,
@ -692,7 +692,7 @@ namespace glsl {
/*---------------TexrectDrawerShader-------------*/
typedef SpecialShader<VertexShaderTexturedRect, TextDraw> TextDrawerShaderBase;
typedef SpecialShader<VertexShaderTexturedRect, TextDraw, graphics::TextDrawerShaderProgram> TextDrawerShaderBase;
class TextDrawerShader : public TextDrawerShaderBase
{
@ -707,10 +707,19 @@ namespace glsl {
m_useProgram->useProgram(m_program);
const int texLoc = glGetUniformLocation(GLuint(m_program), "uTex0");
glUniform1i(texLoc, 0);
const int colorLoc = glGetUniformLocation(GLuint(m_program), "uColor");
glUniform4fv(colorLoc, 1, config.font.colorf);
m_colorLoc = glGetUniformLocation(GLuint(m_program), "uColor");
glUniform4fv(m_colorLoc, 1, config.font.colorf);
m_useProgram->useProgram(graphics::ObjectHandle::null);
}
void setTextColor(float * _color) override {
m_useProgram->useProgram(m_program);
glUniform4fv(m_colorLoc, 1, _color);
m_useProgram->useProgram(graphics::ObjectHandle::null);
}
private:
int m_colorLoc;
};
/*---------------SpecialShadersFactory-------------*/
@ -766,7 +775,7 @@ namespace glsl {
return new OrientationCorrectionShader(m_glinfo, m_useProgram, m_vertexHeader, m_fragmentHeader, m_fragmentEnd);
}
graphics::ShaderProgram * SpecialShadersFactory::createTextDrawerShader() const
graphics::TextDrawerShaderProgram * SpecialShadersFactory::createTextDrawerShader() const
{
return new TextDrawerShader(m_glinfo, m_useProgram, m_vertexHeader, m_fragmentHeader, m_fragmentEnd);
}

View File

@ -36,7 +36,7 @@ namespace glsl {
graphics::ShaderProgram * createOrientationCorrectionShader() const;
graphics::ShaderProgram * createTextDrawerShader() const;
graphics::TextDrawerShaderProgram * createTextDrawerShader() const;
private:
const opengl::GLInfo & m_glinfo;

View File

@ -371,7 +371,7 @@ graphics::ShaderProgram * ContextImpl::createOrientationCorrectionShader()
return m_specialShadersFactory->createOrientationCorrectionShader();
}
graphics::ShaderProgram * ContextImpl::createTextDrawerShader()
graphics::TextDrawerShaderProgram * ContextImpl::createTextDrawerShader()
{
return m_specialShadersFactory->createTextDrawerShader();
}

View File

@ -118,7 +118,7 @@ namespace opengl {
graphics::ShaderProgram * createOrientationCorrectionShader() override;
graphics::ShaderProgram * createTextDrawerShader() override;
graphics::TextDrawerShaderProgram * createTextDrawerShader() override;
void resetShaderProgram() override;

View File

@ -27,4 +27,9 @@ namespace graphics {
virtual void setEnableAlphaTest(int _enable) = 0;
};
class TextDrawerShaderProgram : public ShaderProgram
{
public:
virtual void setTextColor(float * _color) = 0;
};
}

View File

@ -371,3 +371,9 @@ void TextDrawer::getTextSize(const char *_pText, float & _w, float & _h) const
_w += bw;
_h += bh;
}
void TextDrawer::setTextColor(float * _color)
{
if (m_program)
m_program->setTextColor(_color);
}

View File

@ -18,9 +18,11 @@ public:
void getTextSize(const char *_pText, float & _w, float & _h) const;
void setTextColor(float * _color);
private:
std::unique_ptr<Atlas> m_atlas;
std::unique_ptr<graphics::ShaderProgram> m_program;
std::unique_ptr<graphics::TextDrawerShaderProgram> m_program;
};
extern TextDrawer g_textDrawer;