Skip to content

Commit

Permalink
OpenGL: support sprite's Tint (Color)
Browse files Browse the repository at this point in the history
  • Loading branch information
ivan-mogilko committed Jul 27, 2022
1 parent 4f0578a commit fee1c4e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 11 deletions.
2 changes: 1 addition & 1 deletion ags_sprite3d/ogl/OGLHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct ShaderProgram

GLuint MVPMatrix = 0;
GLuint TextureId = 0;
GLuint Alpha = 0;
GLuint Color = 0;
};

unsigned CreateTexture(unsigned char const* data, int width, int height, bool alpha = false);
Expand Down
18 changes: 8 additions & 10 deletions ags_sprite3d/ogl/OGLRenderObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,12 @@ varying vec2 v_TexCoord;
void main() {
v_TexCoord = a_TexCoord;
gl_Position = uMVPMatrix * vec4(a_Position.xy, 0.0, 1.0);
// gl_Position = vec4(a_Position.xy, 0.0, 1.0);
}
)EOS";


static const auto transparency_fragment_shader_src = ""
static const auto default_fragment_shader_src = ""
#if AGS_OPENGL_ES2
"#version 100 \n"
"precision mediump float; \n"
Expand All @@ -41,25 +40,24 @@ static const auto transparency_fragment_shader_src = ""
#endif
R"EOS(
uniform sampler2D textID;
uniform float alpha;
uniform vec4 rgba;
varying vec2 v_TexCoord;
void main()
{
void main() {
vec4 src_col = texture2D(textID, v_TexCoord);
gl_FragColor = vec4(src_col.xyz, src_col.w * alpha);
// gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
gl_FragColor = vec4(src_col.x * rgba.x, src_col.y * rgba.y,
src_col.z * rgba.z, src_col.w * rgba.w);
}
)EOS";


bool CreateDefaultShader(ShaderProgram &prg)
{
if (!CreateShaderProgram(prg, "Default", default_vertex_shader_src, transparency_fragment_shader_src)) return false;
if (!CreateShaderProgram(prg, "Default", default_vertex_shader_src, default_fragment_shader_src)) return false;
prg.MVPMatrix = glGetUniformLocation(prg.Program, "uMVPMatrix");
prg.TextureId = glGetUniformLocation(prg.Program, "textID");
prg.Alpha = glGetUniformLocation(prg.Program, "alpha");
prg.Color = glGetUniformLocation(prg.Program, "rgba");
return true;
}

Expand Down Expand Up @@ -239,7 +237,7 @@ void OGLRenderObject::Render(const Point &pos, const PointF &scaling, float rota
const ShaderProgram &program = defaultProgram;
glUseProgram(program.Program);
glUniform1i(program.TextureId, 0);
glUniform1f(program.Alpha, rgba.a);
glUniform4f(program.Color, rgba.r, rgba.g, rgba.b, rgba.a);
glUniformMatrix4fv(program.MVPMatrix, 1, GL_FALSE, world.marr);

glActiveTexture(GL_TEXTURE0);
Expand Down

0 comments on commit fee1c4e

Please sign in to comment.