mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-06-02 01:47:41 +00:00
Added a userdata parameter for EGL attribute callbacks
Fixes https://github.com/libsdl-org/SDL/issues/11013
This commit is contained in:
parent
798c9574d0
commit
eced9f58a9
5 changed files with 15 additions and 10 deletions
|
@ -243,8 +243,8 @@ typedef int SDL_EGLint;
|
|||
*
|
||||
* \since This datatype is available since SDL 3.0.0.
|
||||
*/
|
||||
typedef SDL_EGLAttrib *(SDLCALL *SDL_EGLAttribArrayCallback)(void);
|
||||
typedef SDL_EGLint *(SDLCALL *SDL_EGLIntArrayCallback)(void);
|
||||
typedef SDL_EGLAttrib *(SDLCALL *SDL_EGLAttribArrayCallback)(void *userdata);
|
||||
typedef SDL_EGLint *(SDLCALL *SDL_EGLIntArrayCallback)(void *userdata);
|
||||
|
||||
/**
|
||||
* An enumeration of OpenGL configuration attributes.
|
||||
|
@ -2756,13 +2756,14 @@ extern SDL_DECLSPEC SDL_EGLSurface SDLCALL SDL_EGL_GetWindowSurface(SDL_Window *
|
|||
* \param surfaceAttribCallback callback for attributes to pass to
|
||||
* eglCreateSurface.
|
||||
* \param contextAttribCallback callback for attributes to pass to
|
||||
* eglCreateContext.
|
||||
* eglCreateContext.
|
||||
* \param userdata a pointer that is passed to the callbacks.
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*/
|
||||
extern SDL_DECLSPEC void SDLCALL SDL_EGL_SetAttributeCallbacks(SDL_EGLAttribArrayCallback platformAttribCallback,
|
||||
SDL_EGLIntArrayCallback surfaceAttribCallback,
|
||||
SDL_EGLIntArrayCallback contextAttribCallback);
|
||||
SDL_EGLIntArrayCallback contextAttribCallback, void *userdata);
|
||||
|
||||
/**
|
||||
* Set the swap interval for the current OpenGL context.
|
||||
|
|
|
@ -199,7 +199,7 @@ SDL_DYNAPI_PROC(SDL_EGLConfig,SDL_EGL_GetCurrentConfig,(void),(),return)
|
|||
SDL_DYNAPI_PROC(SDL_EGLDisplay,SDL_EGL_GetCurrentDisplay,(void),(),return)
|
||||
SDL_DYNAPI_PROC(SDL_FunctionPointer,SDL_EGL_GetProcAddress,(const char *a),(a),return)
|
||||
SDL_DYNAPI_PROC(SDL_EGLSurface,SDL_EGL_GetWindowSurface,(SDL_Window *a),(a),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_EGL_SetAttributeCallbacks,(SDL_EGLAttribArrayCallback a, SDL_EGLIntArrayCallback b, SDL_EGLIntArrayCallback c),(a,b,c),)
|
||||
SDL_DYNAPI_PROC(void,SDL_EGL_SetAttributeCallbacks,(SDL_EGLAttribArrayCallback a, SDL_EGLIntArrayCallback b, SDL_EGLIntArrayCallback c, void *d),(a,b,c,d),)
|
||||
SDL_DYNAPI_PROC(bool,SDL_EnableScreenSaver,(void),(),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_EndGPUComputePass,(SDL_GPUComputePass *a),(a),)
|
||||
SDL_DYNAPI_PROC(void,SDL_EndGPUCopyPass,(SDL_GPUCopyPass *a),(a),)
|
||||
|
|
|
@ -529,7 +529,7 @@ bool SDL_EGL_LoadLibrary(SDL_VideoDevice *_this, const char *egl_path, NativeDis
|
|||
if (_this->egl_data->eglGetPlatformDisplay) {
|
||||
EGLAttrib *attribs = NULL;
|
||||
if (_this->egl_platformattrib_callback) {
|
||||
attribs = _this->egl_platformattrib_callback();
|
||||
attribs = _this->egl_platformattrib_callback(_this->egl_attrib_callback_userdata);
|
||||
if (!attribs) {
|
||||
_this->gl_config.driver_loaded = 0;
|
||||
*_this->gl_config.driver_path = '\0';
|
||||
|
@ -1038,7 +1038,7 @@ SDL_GLContext SDL_EGL_CreateContext(SDL_VideoDevice *_this, EGLSurface egl_surfa
|
|||
if (_this->egl_contextattrib_callback) {
|
||||
const int maxAttribs = sizeof(attribs) / sizeof(attribs[0]);
|
||||
EGLint *userAttribs, *userAttribP;
|
||||
userAttribs = _this->egl_contextattrib_callback();
|
||||
userAttribs = _this->egl_contextattrib_callback(_this->egl_attrib_callback_userdata);
|
||||
if (!userAttribs) {
|
||||
_this->gl_config.driver_loaded = 0;
|
||||
*_this->gl_config.driver_path = '\0';
|
||||
|
@ -1264,7 +1264,7 @@ EGLSurface SDL_EGL_CreateSurface(SDL_VideoDevice *_this, SDL_Window *window, Nat
|
|||
if (_this->egl_surfaceattrib_callback) {
|
||||
const int maxAttribs = sizeof(attribs) / sizeof(attribs[0]);
|
||||
EGLint *userAttribs, *userAttribP;
|
||||
userAttribs = _this->egl_surfaceattrib_callback();
|
||||
userAttribs = _this->egl_surfaceattrib_callback(_this->egl_attrib_callback_userdata);
|
||||
if (!userAttribs) {
|
||||
_this->gl_config.driver_loaded = 0;
|
||||
*_this->gl_config.driver_path = '\0';
|
||||
|
|
|
@ -443,6 +443,7 @@ struct SDL_VideoDevice
|
|||
SDL_EGLAttribArrayCallback egl_platformattrib_callback;
|
||||
SDL_EGLIntArrayCallback egl_surfaceattrib_callback;
|
||||
SDL_EGLIntArrayCallback egl_contextattrib_callback;
|
||||
void *egl_attrib_callback_userdata;
|
||||
|
||||
/* * * */
|
||||
// Cache current GL context; don't call the OS when it hasn't changed.
|
||||
|
|
|
@ -4448,8 +4448,9 @@ void SDL_GL_DeduceMaxSupportedESProfile(int *major, int *minor)
|
|||
}
|
||||
|
||||
void SDL_EGL_SetAttributeCallbacks(SDL_EGLAttribArrayCallback platformAttribCallback,
|
||||
SDL_EGLIntArrayCallback surfaceAttribCallback,
|
||||
SDL_EGLIntArrayCallback contextAttribCallback)
|
||||
SDL_EGLIntArrayCallback surfaceAttribCallback,
|
||||
SDL_EGLIntArrayCallback contextAttribCallback,
|
||||
void *userdata)
|
||||
{
|
||||
if (!_this) {
|
||||
return;
|
||||
|
@ -4457,6 +4458,7 @@ void SDL_EGL_SetAttributeCallbacks(SDL_EGLAttribArrayCallback platformAttribCall
|
|||
_this->egl_platformattrib_callback = platformAttribCallback;
|
||||
_this->egl_surfaceattrib_callback = surfaceAttribCallback;
|
||||
_this->egl_contextattrib_callback = contextAttribCallback;
|
||||
_this->egl_attrib_callback_userdata = userdata;
|
||||
}
|
||||
|
||||
void SDL_GL_ResetAttributes(void)
|
||||
|
@ -4468,6 +4470,7 @@ void SDL_GL_ResetAttributes(void)
|
|||
_this->egl_platformattrib_callback = NULL;
|
||||
_this->egl_surfaceattrib_callback = NULL;
|
||||
_this->egl_contextattrib_callback = NULL;
|
||||
_this->egl_attrib_callback_userdata = NULL;
|
||||
|
||||
_this->gl_config.red_size = 8;
|
||||
_this->gl_config.green_size = 8;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue