前回、
1.C++、stlを覚える
2.glut使って「GLUTによる「手抜き」OpenGL入門あたりを網羅する」
・
・
・
的なノリのつもりで書いていたんだけど
1はvectorの使い方を学んだあたりで飽きてしまったorz
2は6章ぐらいまで、進んでいたら
ISLeさんが言っていたSDLを思いだす。
↓
glut覚えた後にSDL覚えるの面倒くさいと思いはじめる。
↓
SDLを最初から使った方が効率良いのでは? と感じはじめる。
↓
よし、チュートリアルと他の方が書いたソースを参考にしてSDLでOpenGLを学ぼう!
てな感じで、とりあえず書いてみました。
//g++ -o test.o main.cpp -lSDL -lGL -lGLU
#include "SDL/SDL.h"
#include "SDL/SDL_opengl.h"
#include
const int WIN_WIDTH = 400;
const int WIN_HEIGHT = 400;
void QuitGame(int code) {
SDL_Quit();
exit(code);
}
void KeyDown(SDL_keysym *keysym) {
switch(keysym->sym) {
case SDLK_ESCAPE:
QuitGame(0);
break;
default:
break;
}
}
void ProcessEvents(void) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
KeyDown(&event.key.keysym);
break;
case SDL_QUIT:
QuitGame(0);
break;
default:
break;
}
}
}
void DrawScreen(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3d(1.0, 0.0, 0.0);
glVertex2d(-0.9, -0.9);
glColor3d(0.0, 1.0, 0.0);
glVertex2d(0.9, -0.9);
glColor3d(0.0, 0.0, 1.0);
glVertex2d(0.9, 0.9);
glColor3d(1.0, 1.0, 0.0);
glVertex2d(-0.9, 0.9);
glEnd();
glFlush();
SDL_GL_SwapBuffers();
}
void MainSetup(int width, int height) {
const SDL_VideoInfo *info;
int bpp;
int videoMode;
if (SDL_Init(SDL_INIT_VIDEO) vfmt->BitsPerPixel;
videoMode = SDL_OPENGL;
if (SDL_SetVideoMode(WIN_WIDTH, WIN_WIDTH, bpp, videoMode) == 0) {
fprintf(stderr, "ビデオモードのセットに失敗しました: %s\n", SDL_GetError());
QuitGame(1);
}
SDL_WM_SetCaption("SDL & OpenGL TEST", NULL);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
glClearColor(0.0, 0.0, 1.0, 1.0);
glShadeModel(GL_SMOOTH);
}
void MainLoop() {
while (1) {
ProcessEvents();
DrawScreen();
}
}
int main(int argc, char* argv[]) {
MainSetup(WIN_WIDTH, WIN_HEIGHT);
MainLoop();
return 0;
}
最初「#include "SDL.h"」
にしていたら、コンパイラエラー出てて解決策がわからなくて凄い悩んでいました。
まぁ、includeフォルダを見てみたらSDLというフォルダが入っていたというオチ。
チュートリアルや参考にしたソースだと"SDL.h"だったので全然意識していませんでした。
気をつけないとなぁ。。。