SDL with OpenGL【v0.10】

トントン
記事: 100
登録日時: 14年前

SDL with OpenGL【v0.10】

投稿記事 by トントン » 13年前

計画なんてあってないようなものだと改めて思う。

前回、
1.C++、stlを覚える
2.glut使って「GLUTによる「手抜き」OpenGL入門あたりを網羅する」




的なノリのつもりで書いていたんだけど
1はvectorの使い方を学んだあたりで飽きてしまったorz

2は6章ぐらいまで、進んでいたら

ISLeさんが言っていたSDLを思いだす。
 ↓
glut覚えた後にSDL覚えるの面倒くさいと思いはじめる。
 ↓
SDLを最初から使った方が効率良いのでは? と感じはじめる。
 ↓
よし、チュートリアルと他の方が書いたソースを参考にしてSDLでOpenGLを学ぼう!

てな感じで、とりあえず書いてみました。

CODE:

//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"だったので全然意識していませんでした。
気をつけないとなぁ。。。

コメントはまだありません。