By default, SDL creates an OpenGL 2.1 context on macOS for an OpenGL renderer. As a consequence, mipmapping is not supported. Force to use a core profile context, to get a higher version. Before: INFO: Renderer: opengl INFO: OpenGL version: 2.1 NVIDIA-14.0.32 355.11.11.10.10.143 WARN: Trilinear filtering disabled (OpenGL 3.0+ or ES 2.0+ required) After: INFO: Renderer: opengl DEBUG: Creating OpenGL Core Profile context INFO: OpenGL version: 4.1 NVIDIA-14.0.32 355.11.11.10.10.143 INFO: Trilinear filtering enabled when running with: scrcpy --verbosity=debug --render-driver=opengl Note: Since SDL_CreateRenderer() causes a fallback to OpenGL 2.1, the profile and version attributes have to be set and the context created _after_. PR #3895 <https://github.com/Genymobile/scrcpy/pull/3895> Signed-off-by: Romain Vimont <rom@rom1v.com>
46 lines
888 B
C
46 lines
888 B
C
#ifndef SC_DISPLAY_H
|
|
#define SC_DISPLAY_H
|
|
|
|
#include "common.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <libavformat/avformat.h>
|
|
#include <SDL2/SDL.h>
|
|
|
|
#include "coords.h"
|
|
#include "opengl.h"
|
|
|
|
#ifdef __APPLE__
|
|
# define SC_DISPLAY_FORCE_OPENGL_CORE_PROFILE
|
|
#endif
|
|
|
|
struct sc_display {
|
|
SDL_Renderer *renderer;
|
|
SDL_Texture *texture;
|
|
|
|
struct sc_opengl gl;
|
|
#ifdef SC_DISPLAY_FORCE_OPENGL_CORE_PROFILE
|
|
SDL_GLContext *gl_context;
|
|
#endif
|
|
|
|
bool mipmaps;
|
|
};
|
|
|
|
bool
|
|
sc_display_init(struct sc_display *display, SDL_Window *window, bool mipmaps);
|
|
|
|
void
|
|
sc_display_destroy(struct sc_display *display);
|
|
|
|
bool
|
|
sc_display_set_texture_size(struct sc_display *display, struct sc_size size);
|
|
|
|
bool
|
|
sc_display_update_texture(struct sc_display *display, const AVFrame *frame);
|
|
|
|
bool
|
|
sc_display_render(struct sc_display *display, const SDL_Rect *geometry,
|
|
unsigned rotation);
|
|
|
|
#endif
|