SDL 2.0
video.c File Reference
#include "../../SDL_internal.h"
#include "../SDL_sysvideo.h"
#include "sdl_qnx.h"
+ Include dependency graph for video.c:

Go to the source code of this file.

Functions

static int videoInit (_THIS)
 
static void videoQuit (_THIS)
 
static int createWindow (_THIS, SDL_Window *window)
 
static int createWindowFramebuffer (_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
 
static int updateWindowFramebuffer (_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
 
static void pumpEvents (_THIS)
 
static void setWindowSize (_THIS, SDL_Window *window)
 
static void showWindow (_THIS, SDL_Window *window)
 
static void hideWindow (_THIS, SDL_Window *window)
 
static void destroyWindow (_THIS, SDL_Window *window)
 
static void deleteDevice (SDL_VideoDevice *device)
 
static SDL_VideoDevicecreateDevice (int devindex)
 
static int available ()
 

Variables

static screen_context_t context
 
static screen_event_t event
 
VideoBootStrap QNX_bootstrap
 

Function Documentation

◆ available()

static int available ( )
static

Definition at line 356 of file video.c.

357{
358 return 1;
359}

Referenced by SDL_VideoInit().

◆ createDevice()

static SDL_VideoDevice * createDevice ( int  devindex)
static

Creates the QNX video plugin used by SDL.

Parameters
devindexUnused
Returns
Initialized device if successful, NULL otherwise

Definition at line 321 of file video.c.

322{
324
326 if (device == NULL) {
327 return NULL;
328 }
329
330 device->driverdata = NULL;
331 device->VideoInit = videoInit;
332 device->VideoQuit = videoQuit;
333 device->CreateSDLWindow = createWindow;
334 device->CreateWindowFramebuffer = createWindowFramebuffer;
335 device->UpdateWindowFramebuffer = updateWindowFramebuffer;
336 device->SetWindowSize = setWindowSize;
337 device->ShowWindow = showWindow;
338 device->HideWindow = hideWindow;
339 device->PumpEvents = pumpEvents;
340 device->DestroyWindow = destroyWindow;
341
342 device->GL_LoadLibrary = glLoadLibrary;
343 device->GL_GetProcAddress = glGetProcAddress;
344 device->GL_CreateContext = glCreateContext;
345 device->GL_SetSwapInterval = glSetSwapInterval;
346 device->GL_SwapWindow = glSwapWindow;
347 device->GL_MakeCurrent = glMakeCurrent;
348 device->GL_DeleteContext = glDeleteContext;
349 device->GL_UnloadLibrary = glUnloadLibrary;
350
351 device->free = deleteDevice;
352 return device;
353}
#define SDL_calloc
#define NULL
Definition: begin_code.h:167
int glMakeCurrent(_THIS, SDL_Window *window, SDL_GLContext context)
Definition: gl.c:249
void * glGetProcAddress(_THIS, const char *proc)
Definition: gl.c:158
int glSetSwapInterval(_THIS, int interval)
Definition: gl.c:218
int glLoadLibrary(_THIS, const char *name)
Definition: gl.c:136
int glSwapWindow(_THIS, SDL_Window *window)
Definition: gl.c:234
void glUnloadLibrary(_THIS)
Definition: gl.c:282
void glDeleteContext(_THIS, SDL_GLContext context)
Definition: gl.c:272
SDL_GLContext glCreateContext(_THIS, SDL_Window *window)
Definition: gl.c:171
static SDL_AudioDeviceID device
Definition: loopwave.c:37
static void hideWindow(_THIS, SDL_Window *window)
Definition: video.c:280
static void showWindow(_THIS, SDL_Window *window)
Definition: video.c:265
static void pumpEvents(_THIS)
Definition: video.c:211
static void destroyWindow(_THIS, SDL_Window *window)
Definition: video.c:295
static int createWindow(_THIS, SDL_Window *window)
Definition: video.c:71
static void videoQuit(_THIS)
Definition: video.c:59
static void deleteDevice(SDL_VideoDevice *device)
Definition: video.c:310
static int updateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
Definition: video.c:190
static void setWindowSize(_THIS, SDL_Window *window)
Definition: video.c:246
static int videoInit(_THIS)
Definition: video.c:36
static int createWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
Definition: video.c:154

References createWindow(), createWindowFramebuffer(), deleteDevice(), destroyWindow(), device, glCreateContext(), glDeleteContext(), glGetProcAddress(), glLoadLibrary(), glMakeCurrent(), glSetSwapInterval(), glSwapWindow(), glUnloadLibrary(), hideWindow(), NULL, pumpEvents(), SDL_calloc, setWindowSize(), showWindow(), updateWindowFramebuffer(), videoInit(), and videoQuit().

◆ createWindow()

static int createWindow ( _THIS  ,
SDL_Window window 
)
static

Creates a new native Screen window and associates it with the given SDL window.

Parameters
_THIS
windowSDL window to initialize
Returns
0 if successful, -1 on error

Definition at line 71 of file video.c.

72{
73 window_impl_t *impl;
74 int size[2];
75 int numbufs;
76 int format;
77 int usage;
78
79 impl = SDL_calloc(1, sizeof(*impl));
80 if (impl == NULL) {
81 return -1;
82 }
83
84 // Create a native window.
85 if (screen_create_window(&impl->window, context) < 0) {
86 goto fail;
87 }
88
89 // Set the native window's size to match the SDL window.
90 size[0] = window->w;
91 size[1] = window->h;
92
93 if (screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_SIZE,
94 size) < 0) {
95 goto fail;
96 }
97
98 if (screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_SOURCE_SIZE,
99 size) < 0) {
100 goto fail;
101 }
102
103 // Create window buffer(s).
104 if (window->flags & SDL_WINDOW_OPENGL) {
105 if (glGetConfig(&impl->conf, &format) < 0) {
106 goto fail;
107 }
108 numbufs = 2;
109
110 usage = SCREEN_USAGE_OPENGL_ES2;
111 if (screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_USAGE,
112 &usage) < 0) {
113 return -1;
114 }
115 } else {
116 format = SCREEN_FORMAT_RGBX8888;
117 numbufs = 1;
118 }
119
120 // Set pixel format.
121 if (screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_FORMAT,
122 &format) < 0) {
123 goto fail;
124 }
125
126 // Create buffer(s).
127 if (screen_create_window_buffers(impl->window, numbufs) < 0) {
128 goto fail;
129 }
130
131 window->driverdata = impl;
132 return 0;
133
134fail:
135 if (impl->window) {
136 screen_destroy_window(impl->window);
137 }
138
139 SDL_free(impl);
140 return -1;
141}
#define SDL_free
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1572
GLsizeiptr size
GLsizeiptr const void GLenum usage
@ SDL_WINDOW_OPENGL
Definition: SDL_video.h:101
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
int glGetConfig(EGLConfig *pconf, int *pformat)
Definition: gl.c:68
screen_window_t window
Definition: sdl_qnx.h:31
EGLConfig conf
Definition: sdl_qnx.h:33
static screen_context_t context
Definition: video.c:25

References window_impl_t::conf, context, glGetConfig(), NULL, SDL_calloc, SDL_free, SDL_WINDOW_OPENGL, and window_impl_t::window.

Referenced by createDevice().

◆ createWindowFramebuffer()

static int createWindowFramebuffer ( _THIS  ,
SDL_Window window,
Uint32 format,
void **  pixels,
int *  pitch 
)
static

Gets a pointer to the Screen buffer associated with the given window. Note that the buffer is actually created in createWindow().

Parameters
_THIS
windowSDL window to get the buffer for
[out]pixlesHolds a pointer to the window's buffer
[out]formatHolds the pixel format for the buffer
[out]pitchHolds the number of bytes per line
Returns
0 if successful, -1 on error

Definition at line 154 of file video.c.

156{
157 window_impl_t *impl = (window_impl_t *)window->driverdata;
158 screen_buffer_t buffer;
159
160 // Get a pointer to the buffer's memory.
161 if (screen_get_window_property_pv(impl->window, SCREEN_PROPERTY_BUFFERS,
162 (void **)&buffer) < 0) {
163 return -1;
164 }
165
166 if (screen_get_buffer_property_pv(buffer, SCREEN_PROPERTY_POINTER,
167 pixels) < 0) {
168 return -1;
169 }
170
171 // Set format and pitch.
172 if (screen_get_buffer_property_iv(buffer, SCREEN_PROPERTY_STRIDE,
173 pitch) < 0) {
174 return -1;
175 }
176
178 return 0;
179}
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1572
GLuint buffer
@ SDL_PIXELFORMAT_RGB888
Definition: SDL_pixels.h:236

References SDL_PIXELFORMAT_RGB888, and window_impl_t::window.

Referenced by createDevice().

◆ deleteDevice()

static void deleteDevice ( SDL_VideoDevice device)
static

Frees the plugin object created by createDevice().

Parameters
devicePlugin object to free

Definition at line 310 of file video.c.

311{
313}

References device, and SDL_free.

Referenced by createDevice().

◆ destroyWindow()

static void destroyWindow ( _THIS  ,
SDL_Window window 
)
static

Destroys the native window associated with the given SDL window.

Parameters
_THIS
windowSDL window that is being destroyed

Definition at line 295 of file video.c.

296{
297 window_impl_t *impl = (window_impl_t *)window->driverdata;
298
299 if (impl) {
300 screen_destroy_window(impl->window);
301 window->driverdata = NULL;
302 }
303}

References NULL, and window_impl_t::window.

Referenced by createDevice().

◆ hideWindow()

static void hideWindow ( _THIS  ,
SDL_Window window 
)
static

Makes the native window associated with the given SDL window invisible.

Parameters
_THIS
windowSDL window to update

Definition at line 280 of file video.c.

281{
282 window_impl_t *impl = (window_impl_t *)window->driverdata;
283 const int visible = 0;
284
285 screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_VISIBLE,
286 &visible);
287}

References window_impl_t::window.

Referenced by createDevice().

◆ pumpEvents()

static void pumpEvents ( _THIS  )
static

Runs the main event loop.

Parameters
_THIS

Definition at line 211 of file video.c.

212{
213 int type;
214
215 for (;;) {
216 if (screen_get_event(context, event, 0) < 0) {
217 break;
218 }
219
220 if (screen_get_event_property_iv(event, SCREEN_PROPERTY_TYPE, &type)
221 < 0) {
222 break;
223 }
224
225 if (type == SCREEN_EVENT_NONE) {
226 break;
227 }
228
229 switch (type) {
230 case SCREEN_EVENT_KEYBOARD:
232 break;
233
234 default:
235 break;
236 }
237 }
238}
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1571
struct _cl_event * event
void handleKeyboardEvent(screen_event_t event)
Definition: keyboard.c:99

References context, and handleKeyboardEvent().

Referenced by createDevice().

◆ setWindowSize()

static void setWindowSize ( _THIS  ,
SDL_Window window 
)
static

Updates the size of the native window using the geometry of the SDL window.

Parameters
_THIS
windowSDL window to update

Definition at line 246 of file video.c.

247{
248 window_impl_t *impl = (window_impl_t *)window->driverdata;
249 int size[2];
250
251 size[0] = window->w;
252 size[1] = window->h;
253
254 screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_SIZE, size);
255 screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_SOURCE_SIZE,
256 size);
257}

References window_impl_t::window.

Referenced by createDevice().

◆ showWindow()

static void showWindow ( _THIS  ,
SDL_Window window 
)
static

Makes the native window associated with the given SDL window visible.

Parameters
_THIS
windowSDL window to update

Definition at line 265 of file video.c.

266{
267 window_impl_t *impl = (window_impl_t *)window->driverdata;
268 const int visible = 1;
269
270 screen_set_window_property_iv(impl->window, SCREEN_PROPERTY_VISIBLE,
271 &visible);
272}

References window_impl_t::window.

Referenced by createDevice().

◆ updateWindowFramebuffer()

static int updateWindowFramebuffer ( _THIS  ,
SDL_Window window,
const SDL_Rect rects,
int  numrects 
)
static

Informs the window manager that the window needs to be updated.

Parameters
_THIS
windowThe window to update
rectsAn array of reectangular areas to update
numrectsRect array length
Returns
0 if successful, -1 on error

Definition at line 190 of file video.c.

192{
193 window_impl_t *impl = (window_impl_t *)window->driverdata;
194 screen_buffer_t buffer;
195
196 if (screen_get_window_property_pv(impl->window, SCREEN_PROPERTY_BUFFERS,
197 (void **)&buffer) < 0) {
198 return -1;
199 }
200
201 screen_post_window(impl->window, buffer, numrects, (int *)rects, 0);
202 screen_flush_context(context, 0);
203 return 0;
204}
EGLSurface EGLint * rects
Definition: eglext.h:282

References context, and window_impl_t::window.

Referenced by createDevice().

◆ videoInit()

static int videoInit ( _THIS  )
static

Initializes the QNX video plugin. Creates the Screen context and event handles used for all window operations by the plugin.

Parameters
_THIS
Returns
0 if successful, -1 on error

Definition at line 36 of file video.c.

37{
38 SDL_VideoDisplay display;
39
40 if (screen_create_context(&context, 0) < 0) {
41 return -1;
42 }
43
44 if (screen_create_event(&event) < 0) {
45 return -1;
46 }
47
48 SDL_zero(display);
49
50 if (SDL_AddVideoDisplay(&display) < 0) {
51 return -1;
52 }
53
55 return 0;
56}
#define SDL_zero(x)
Definition: SDL_stdinc.h:416
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
Definition: SDL_video.c:603
static SDL_VideoDevice * _this
Definition: SDL_video.c:118

References _this, context, SDL_VideoDevice::num_displays, SDL_AddVideoDisplay(), and SDL_zero.

Referenced by createDevice().

◆ videoQuit()

static void videoQuit ( _THIS  )
static

Definition at line 59 of file video.c.

60{
61}

Referenced by createDevice().

Variable Documentation

◆ context

◆ event

screen_event_t event
static

Definition at line 26 of file video.c.

◆ QNX_bootstrap

VideoBootStrap QNX_bootstrap
Initial value:
= {
"qnx", "QNX Screen",
}
static int available()
Definition: video.c:356
static SDL_VideoDevice * createDevice(int devindex)
Definition: video.c:321

Definition at line 361 of file video.c.