mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-24 22:10:01 +00:00
113 lines
2.8 KiB
C++
113 lines
2.8 KiB
C++
// Copyright (c) 2012- PPSSPP Project.
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, version 2.0 or later versions.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License 2.0 for more details.
|
|
|
|
// A copy of the GPL 2.0 should have been included with the program.
|
|
// If not, see http://www.gnu.org/licenses/
|
|
|
|
// Official git repository and contact information can be found at
|
|
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
|
|
|
#include "gfx_es2/glsl_program.h"
|
|
#include "gfx_es2/gl_state.h"
|
|
#include "UIShader.h"
|
|
|
|
static GLSLProgram *glslModulate;
|
|
static GLSLProgram *glslPlain;
|
|
|
|
static const char modulate_fs[] =
|
|
"#ifdef GL_ES\n"
|
|
"precision lowp float;\n"
|
|
"#endif\n"
|
|
"uniform sampler2D sampler0;\n"
|
|
"varying vec2 v_texcoord0;\n"
|
|
"varying vec4 v_color;\n"
|
|
"void main() {\n"
|
|
" gl_FragColor = texture2D(sampler0, v_texcoord0) * v_color;\n"
|
|
"}\n";
|
|
|
|
static const char modulate_vs[] =
|
|
"attribute vec4 a_position;\n"
|
|
"attribute vec4 a_color;\n"
|
|
"attribute vec2 a_texcoord0;\n"
|
|
"uniform mat4 u_worldviewproj;\n"
|
|
"varying vec2 v_texcoord0;\n"
|
|
"varying vec4 v_color;\n"
|
|
"void main() {\n"
|
|
" v_texcoord0 = a_texcoord0;\n"
|
|
" v_color = a_color;\n"
|
|
" gl_Position = u_worldviewproj * a_position;\n"
|
|
"}\n";
|
|
|
|
static const char plain_fs[] =
|
|
"#ifdef GL_ES\n"
|
|
"precision lowp float;\n"
|
|
"#endif\n"
|
|
"varying vec4 v_color;\n"
|
|
"void main() {\n"
|
|
" gl_FragColor = v_color;\n"
|
|
"}\n";
|
|
|
|
static const char plain_vs[] =
|
|
"attribute vec4 a_position;\n"
|
|
"attribute vec4 a_color;\n"
|
|
"uniform mat4 u_worldviewproj;\n"
|
|
"varying vec4 v_color;\n"
|
|
"void main() {\n"
|
|
" v_color = a_color;\n"
|
|
" gl_Position = u_worldviewproj * a_position;\n"
|
|
"}\n";
|
|
|
|
void UIShader_Init() {
|
|
// Compile UI shaders
|
|
glslModulate = glsl_create_source(modulate_vs, modulate_fs);
|
|
glslPlain = glsl_create_source(plain_vs, plain_fs);
|
|
}
|
|
|
|
GLSLProgram *UIShader_Get()
|
|
{
|
|
return glslModulate;
|
|
}
|
|
|
|
|
|
GLSLProgram *UIShader_GetPlain()
|
|
{
|
|
return glslPlain;
|
|
}
|
|
|
|
void UIShader_Shutdown()
|
|
{
|
|
glsl_destroy(glslModulate);
|
|
glsl_destroy(glslPlain);
|
|
}
|
|
|
|
void UIShader_Prepare()
|
|
{
|
|
// Draw 2D overlay stuff
|
|
glstate.cullFace.disable();
|
|
glstate.depthTest.disable();
|
|
glstate.scissorTest.disable();
|
|
glstate.stencilTest.disable();
|
|
#if !defined(USING_GLES2)
|
|
glstate.colorLogicOp.disable();
|
|
#endif
|
|
glstate.dither.enable();
|
|
|
|
glstate.blend.enable();
|
|
glstate.blendFuncSeparate.set(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
glstate.blendEquation.set(GL_FUNC_ADD);
|
|
|
|
glstate.depthWrite.set(GL_TRUE);
|
|
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
|
glstate.Restore();
|
|
|
|
uiTexture->Bind(0);
|
|
}
|