Browse Source

WindowSDL GL driver support and more error checks

Thomas Buck 11 years ago
parent
commit
f50d7d6c3a
3 changed files with 59 additions and 7 deletions
  1. 2
    0
      include/Window.h
  2. 3
    0
      include/WindowSDL.h
  3. 54
    7
      src/WindowSDL.cpp

+ 2
- 0
include/Window.h View File

25
      */
25
      */
26
     virtual ~Window();
26
     virtual ~Window();
27
 
27
 
28
+    virtual void setDriver(const char *driver) = 0;
29
+
28
     virtual void setSize(unsigned int width, unsigned int height) = 0;
30
     virtual void setSize(unsigned int width, unsigned int height) = 0;
29
 
31
 
30
     virtual void setFullscreen(bool fullscreen) = 0;
32
     virtual void setFullscreen(bool fullscreen) = 0;

+ 3
- 0
include/WindowSDL.h View File

28
      */
28
      */
29
     virtual ~WindowSDL();
29
     virtual ~WindowSDL();
30
 
30
 
31
+    virtual void setDriver(const char *driver);
32
+
31
     virtual void setSize(unsigned int width, unsigned int height);
33
     virtual void setSize(unsigned int width, unsigned int height);
32
 
34
 
33
     virtual void setFullscreen(bool fullscreen);
35
     virtual void setFullscreen(bool fullscreen);
40
 
42
 
41
 private:
43
 private:
42
     bool mInit;
44
     bool mInit;
45
+    char *mDriver;
43
     unsigned int mWidth;
46
     unsigned int mWidth;
44
     unsigned int mHeight;
47
     unsigned int mHeight;
45
     bool mFullscreen;
48
     bool mFullscreen;

+ 54
- 7
src/WindowSDL.cpp View File

5
  * \author xythobuz
5
  * \author xythobuz
6
  */
6
  */
7
 
7
 
8
+#include <cstdio>
8
 #include <assert.h>
9
 #include <assert.h>
9
 
10
 
10
 #include "config.h"
11
 #include "config.h"
12
+#include "utils/strings.h"
11
 #include "WindowSDL.h"
13
 #include "WindowSDL.h"
12
 
14
 
13
 WindowSDL::WindowSDL() {
15
 WindowSDL::WindowSDL() {
14
     mInit = false;
16
     mInit = false;
17
+    mDriver = NULL;
15
     mWidth = DEFAULT_WIDTH;
18
     mWidth = DEFAULT_WIDTH;
16
     mHeight = DEFAULT_HEIGHT;
19
     mHeight = DEFAULT_HEIGHT;
17
     mFullscreen = false;
20
     mFullscreen = false;
21
 }
24
 }
22
 
25
 
23
 WindowSDL::~WindowSDL() {
26
 WindowSDL::~WindowSDL() {
27
+    if (mDriver)
28
+        delete [] mDriver;
29
+}
30
+
31
+void WindowSDL::setDriver(const char *driver) {
32
+    assert(driver != NULL);
33
+    assert(driver[0] != '\0');
24
 
34
 
35
+    mDriver = bufferString("%s", driver);
25
 }
36
 }
26
 
37
 
27
 void WindowSDL::setSize(unsigned int width, unsigned int height) {
38
 void WindowSDL::setSize(unsigned int width, unsigned int height) {
62
 }
73
 }
63
 
74
 
64
 int WindowSDL::initialize() {
75
 int WindowSDL::initialize() {
65
-    SDL_Init(SDL_INIT_VIDEO);
76
+    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
77
+        printf("SDL Error: %s\n", SDL_GetError());
78
+        return -1;
79
+    }
66
 
80
 
67
-    mInit = true;
81
+#ifndef __APPLE__
82
+    assert(mDriver != NULL);
83
+    assert(mDriver[0] != '\0');
84
+    if (SDL_GL_LoadLibrary(mDriver) < 0) {
85
+        SDL_ClearError();
86
+        if (SDL_GL_LoadLibrary("libGL.so") < 0) {
87
+            SDL_ClearError();
88
+            if (SDL_GL_LoadLibrary("libGL.so.1") < 0) {
89
+                printf("Could not load OpenGL driver!\n");
90
+                printf("SDL Error: %s\n", SDL_GetError());
91
+                return -2;
92
+            }
93
+        }
94
+    }
95
+#endif
68
 
96
 
69
     int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
97
     int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
70
     if (mFullscreen)
98
     if (mFullscreen)
71
         flags |= SDL_WINDOW_FULLSCREEN;
99
         flags |= SDL_WINDOW_FULLSCREEN;
72
 
100
 
101
+    mInit = true;
73
     setMousegrab(mMousegrab);
102
     setMousegrab(mMousegrab);
74
 
103
 
75
-    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
76
-    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
77
-    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
78
-    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
79
-    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
104
+    if ((SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5) != 0)
105
+        || (SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5) != 0)
106
+        || (SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5) != 0)
107
+        || (SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16) != 0)
108
+        || (SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1) != 0)) {
109
+        printf("SDL Error: %s\n", SDL_GetError());
110
+        mInit = false;
111
+        return -3;
112
+    }
80
 
113
 
81
     mWindow = SDL_CreateWindow(VERSION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
114
     mWindow = SDL_CreateWindow(VERSION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
82
                 mWidth, mHeight, flags);
115
                 mWidth, mHeight, flags);
116
+    if (mWindow == NULL) {
117
+        printf("SDL Error: %s\n", SDL_GetError());
118
+        mInit = false;
119
+        return -4;
120
+    }
121
+
83
     mGLContext = SDL_GL_CreateContext(mWindow);
122
     mGLContext = SDL_GL_CreateContext(mWindow);
123
+    if (mGLContext == NULL) {
124
+        printf("SDL Error: %s\n", SDL_GetError());
125
+        mInit = false;
126
+        return -5;
127
+    }
128
+
84
     setSize(mWidth, mHeight);
129
     setSize(mWidth, mHeight);
85
 
130
 
86
     return 0;
131
     return 0;
90
     assert(s != NULL);
135
     assert(s != NULL);
91
     assert(s->text != NULL);
136
     assert(s->text != NULL);
92
     assert(mInit == true);
137
     assert(mInit == true);
138
+
139
+
93
 }
140
 }
94
 
141
 

Loading…
Cancel
Save