mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 16:33:02 +00:00
65979986a9
This is done in several steps: 1. refactor MPGLContext -> struct ra_ctx 2. move GL-specific stuff in vo_opengl into opengl/context.c 3. generalize context creation to support other APIs, and add --gpu-api 4. rename all of the --opengl- options that are no longer opengl-specific 5. move all of the stuff from opengl/* that isn't GL-specific into gpu/ (note: opengl/gl_utils.h became opengl/utils.h) 6. rename vo_opengl to vo_gpu 7. to handle window screenshots, the short-term approach was to just add it to ra_swchain_fns. Long term (and for vulkan) this has to be moved to ra itself (and vo_gpu altered to compensate), but this was a stop-gap measure to prevent this commit from getting too big 8. move ra->fns->flush to ra_gl_ctx instead 9. some other minor changes that I've probably already forgotten Note: This is one half of a major refactor, the other half of which is provided by rossy's following commit. This commit enables support for all linux platforms, while his version enables support for all non-linux platforms. Note 2: vo_opengl_cb.c also re-uses ra_gl_ctx so it benefits from the --opengl- options like --opengl-early-flush, --opengl-finish etc. Should be a strict superset of the old functionality. Disclaimer: Since I have no way of compiling mpv on all platforms, some of these ports were done blindly. Specifically, the blind ports included context_mali_fbdev.c and context_rpi.c. Since they're both based on egl_helpers, the port should have gone smoothly without any major changes required. But if somebody complains about a compile error on those platforms (assuming anybody actually uses them), you know where to complain.
52 lines
1.9 KiB
C
52 lines
1.9 KiB
C
#ifndef MPGL_FORMATS_H_
|
|
#define MPGL_FORMATS_H_
|
|
|
|
#include "common.h"
|
|
|
|
struct gl_format {
|
|
const char *name; // symbolic name for user interaction/debugging
|
|
GLint internal_format; // glTexImage argument
|
|
GLenum format; // glTexImage argument
|
|
GLenum type; // e.g. GL_UNSIGNED_SHORT
|
|
int flags; // F_* flags
|
|
};
|
|
|
|
enum {
|
|
// --- gl_format.flags
|
|
|
|
// Version flags. If at least 1 flag matches, the format entry is considered
|
|
// supported on the current GL context.
|
|
F_GL2 = 1 << 0, // GL2.1-only
|
|
F_GL3 = 1 << 1, // GL3.0 or later
|
|
F_ES2 = 1 << 2, // ES2-only
|
|
F_ES3 = 1 << 3, // ES3.0 or later
|
|
F_ES32 = 1 << 4, // ES3.2 or later
|
|
F_EXT16 = 1 << 5, // ES with GL_EXT_texture_norm16
|
|
F_EXTF16 = 1 << 6, // GL_EXT_color_buffer_half_float
|
|
F_GL2F = 1 << 7, // GL2.1-only with texture_rg + texture_float + FBOs
|
|
F_APPL = 1 << 8, // GL_APPLE_rgb_422
|
|
|
|
// Feature flags. They are additional and signal presence of features.
|
|
F_CR = 1 << 16, // color-renderable
|
|
F_TF = 1 << 17, // texture-filterable with GL_LINEAR
|
|
F_CF = F_CR | F_TF,
|
|
F_F16 = 1 << 18, // uses half-floats (16 bit) internally, even though
|
|
// the format is still GL_FLOAT (32 bit)
|
|
|
|
// --- Other constants.
|
|
MPGL_TYPE_UNORM = RA_CTYPE_UNORM, // normalized integer (fixed point) formats
|
|
MPGL_TYPE_UINT = RA_CTYPE_UINT, // full integer formats
|
|
MPGL_TYPE_FLOAT = RA_CTYPE_FLOAT, // float formats (both full and half)
|
|
};
|
|
|
|
extern const struct gl_format gl_formats[];
|
|
|
|
int gl_format_feature_flags(GL *gl);
|
|
int gl_format_type(const struct gl_format *format);
|
|
GLenum gl_integer_format_to_base(GLenum format);
|
|
int gl_component_size(GLenum type);
|
|
int gl_format_components(GLenum format);
|
|
int gl_bytes_per_pixel(GLenum format, GLenum type);
|
|
|
|
#endif
|