Browse thread
ocaml+sdl+opengl ?
- Florent Monnier
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2010-04-11 (17:45) |
From: | Florent Monnier <monnier.florent@g...> |
Subject: | ocaml+sdl+opengl ? |
Hi, I'm trying to use ocamlsdl for the windowing of an OpenGL application. You will find below 2 test files, one using LablGL and one using glMLite. I have made these test: sdl+glMLite in interpreted mode => OK, everything works all right sdl+LablGL in interpreted mode => Failure sdl+glMLite in native code => Failure sdl+LablGL in native code => Failure The exception is raised by the function Sdlvideo.set_video_mode which is a function from ocamlsdl, so it is very strange that changing the OpenGL bindings changes the behaviour! Here are respectively the commands I use: ocaml -I +glMLite GL.cma bigarray.cma -I +sdl sdl.cma test.ml ocaml -I +lablGL lablgl.cma bigarray.cma -I +sdl sdl.cma test.ml ocamlopt -I +glMLite GL.cmxa bigarray.cmxa -I +sdl sdl.cmxa test.ml -o test ocamlopt -I +lablGL lablgl.cmxa bigarray.cmxa -I +sdl sdl.cmxa test.ml -o test Does someone have an idea or a clue about how to fix the problem? (The code is right, otherwise the first test wouldn't work. Also the exact equivalent in pure C does work right.) ================================ let display() = GlClear.clear [`color]; GlDraw.begins `triangles; GlDraw.color (0.0, 1.0, 0.0); GlDraw.vertex2 (-0.5, -0.5); GlDraw.vertex2 ( 0.0, 0.5); GlDraw.vertex2 (0.5, -0.5); GlDraw.ends(); Sdlgl.swap_buffers() let () = Sdl.init [`EVERYTHING]; let _ = Sdlvideo.set_video_mode ~w:640 ~h:480 ~bpp:0 [`OPENGL; `DOUBLEBUF] in let rec loop() = match Sdlevent.poll() with | Some Sdlevent.KEYDOWN { Sdlevent.keysym = Sdlkey.KEY_ESCAPE } | Some Sdlevent.QUIT -> () | _ -> display(); loop() in loop(); Sdl.quit() ================================ open GL let display() = glClear [GL_COLOR_BUFFER_BIT]; glBegin GL_TRIANGLES; glColor3 0.0 1.0 0.0; glVertex2 (-0.5) (-0.5); glVertex2 ( 0.0) ( 0.5); glVertex2 ( 0.5) (-0.5); glEnd(); Sdlgl.swap_buffers() let () = Sdl.init [`EVERYTHING]; let _ = Sdlvideo.set_video_mode ~w:640 ~h:480 ~bpp:0 [`OPENGL; `DOUBLEBUF] in let rec loop() = match Sdlevent.poll() with | Some Sdlevent.KEYDOWN { Sdlevent.keysym = Sdlkey.KEY_ESCAPE } | Some Sdlevent.QUIT -> () | _ -> display(); loop() in loop(); Sdl.quit() ================================