RetroArch/menu/drivers/shared.h
2015-06-20 23:42:30 +02:00

116 lines
2.8 KiB
C

/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2015 - Daniel De Matteis
*
* RetroArch 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 Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch 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 for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _DISP_SHARED_H
#define _DISP_SHARED_H
#include "../menu_setting.h"
#include "../menu_display.h"
#include "../menu_cbs.h"
#ifdef HAVE_OPENGL
#include "../../gfx/drivers/gl_common.h"
static INLINE void menu_gl_draw_frame(
const shader_backend_t *shader,
struct gl_coords *coords,
math_matrix_4x4 *mat,
bool blend,
GLuint texture
)
{
driver_t *driver = driver_get_ptr();
glBindTexture(GL_TEXTURE_2D, texture);
shader->set_coords(coords);
shader->set_mvp(driver->video_data, mat);
if (blend)
glEnable(GL_BLEND);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
if (blend)
glDisable(GL_BLEND);
}
static INLINE void gl_menu_frame_background(
menu_handle_t *menu,
settings_t *settings,
gl_t *gl,
GLuint texture,
float handle_alpha,
float alpha,
bool force_transparency)
{
struct gl_coords coords;
static const GLfloat vertex[] = {
0, 0,
1, 0,
0, 1,
1, 1,
};
global_t *global = global_get_ptr();
static const GLfloat tex_coord[] = {
0, 1,
1, 1,
0, 0,
1, 0,
};
GLfloat color[] = {
1.0f, 1.0f, 1.0f, handle_alpha,
1.0f, 1.0f, 1.0f, handle_alpha,
1.0f, 1.0f, 1.0f, handle_alpha,
1.0f, 1.0f, 1.0f, handle_alpha,
};
if (alpha > handle_alpha)
alpha = handle_alpha;
GLfloat black_color[] = {
0.0f, 0.0f, 0.0f, alpha,
0.0f, 0.0f, 0.0f, alpha,
0.0f, 0.0f, 0.0f, alpha,
0.0f, 0.0f, 0.0f, alpha,
};
coords.vertices = 4;
coords.vertex = vertex;
coords.tex_coord = tex_coord;
coords.lut_tex_coord = tex_coord;
coords.color = black_color;
menu_display_set_viewport();
if ((settings->menu.pause_libretro
|| !global->main_is_init || (global->core_type == CORE_TYPE_DUMMY))
&& !force_transparency
&& texture)
coords.color = color;
menu_gl_draw_frame(gl->shader, &coords,
&gl->mvp_no_rot, true, texture);
gl->coords.color = gl->white_color_ptr;
}
#endif
#endif