SDL - Simple DirectMedia Layer
Download & Compile
% sudo apt-get install libsdl1.2-dev
SDL.lib SDLmain.lib opengl32.lib
g++ `sdl-config --cflags --libs` -lGL sample.cpp -o sample
cmake準備
- CMakeLists.txt
#
# CMakeFileLists.txt
#
# > cmake .
#
# 要求するCMakeのバージョン
cmake_minimum_required(VERSION 2.6)
# build type
set(CMAKE_BUILD_TYPE DEBUG)
# compile option (DEBUG)
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
set(CMAKE_C_FLAGS_DEBUG "-g -Wall")
# compile option (Release)
set(CMAKE_CXX_FLAGS_RELEASE "-Wall -O3")
set(CMAKE_C_FLAGS_RELEASE "-Wall -O3")
# インストール先
# CMAKE_INSTALL_PREFIX(...)
############################################################
set(PROJ_NAME run.x)
set(TARGET ${PROJ_NAME})
set(SDL_PATH /usr)
# プロジェクト名
project(${PROJ_NAME})
# インクルードパスの追加
include_directories(${SDL_PATH}/include)
# ライブラリパスの追加
link_directories(${SDL_PATH}/lib)
# 実行ファイルとソースファイル群
add_executable(${TARGET} main.cpp)
# ライブラリ
target_link_libraries(${TARGET} SDL GL GLU)
# マクロ設定 [-D]
#add_definitions(-D)
Empty Project
- main.cpp
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <GL/gl.h>
#include <GL/glu.h>
static bool initSDL(int width, int height);
static void initGL();
static void reshape(GLsizei w, GLsizei h);
static void process_events();
static void draw();
bool initSDL(int width, int height)
{
const SDL_VideoInfo* info;
const SDL_Surface *surf;
int bpp = 0;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "Video initialization Failed : " << SDL_GetError() << "\n";
SDL_Quit();
return false;
}
info = SDL_GetVideoInfo();
if (!info) {
std::cerr << "Video query failed : " << SDL_GetError() << "\n";
}
bpp = info->vfmt->BitsPerPixel;
SDL_GL_SetAttribute(SDL_GL_RED_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
//atexit(SDL_Quit);
surf = SDL_SetVideoMode(width, height, bpp, SDL_OPENGL|SDL_RESIZABLE);
if (!surf) {
std::cerr << SDL_GetError() << "\n";
SDL_Quit();
return false;
}
reshape(width, height);
return true;
}
void initGL()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
}
void reshape(GLsizei w, GLsizei h)
{
glViewport(0, 0, w, h);
glOrtho(0.0, w, h, 0.0, -1.0, 1.0);
}
void process_events()
{
SDL_Surface *surf;
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
std::exit(1);
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_ESCAPE: std::exit(0);
break;
default:
break;
}
break;
case SDL_VIDEORESIZE:
SDL_FreeSurface(surf);
surf = SDL_SetVideoMode(event.resize.w, event.resize.h, 32, SDL_OPENGL|SDL_RESIZABLE);
reshape(static_cast<GLsizei>(event.resize.w), static_cast<GLsizei>(event.resize.h));
break;
}
}
}
void draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glLoadIdentity();
// 四角形を描く
glBegin(GL_QUADS);
{
glColor3f(1.0, 1.0f, 1.0); // white
// 4つの頂点を指定
glVertex3f(100.0f, 100.0f, 0);
glVertex3f(540.0f, 100.0f, 0);
glVertex3f(540.0f, 380.0f, 0);
glVertex3f(100.0f, 380.0f, 0);
}
glEnd();
SDL_GL_SwapBuffers();
}
int main(int argc, char* argv[])
{
if (!initSDL(640, 480)) {
std::exit(1);
}
// initialize OpenGL
initGL();
// simLoop
while (true) {
process_events();
draw();
}
return 0;
}
表示

参考
http://www.tacoworks.jp/software/SDLdoc-jp/html/index.html
添付ファイル