|
ALLEGRO_DIRECT3D not defined in this scope |
Arthur Kalliokoski
Second in Command
February 2005
|
I tried using They all watch too much MSNBC... they get ideas. |
Erin Maus
Member #7,537
July 2006
|
I'm pretty sure you need to add this include: #include <allegro5/allegro_direct3d.h> --- |
Arthur Kalliokoski
Second in Command
February 2005
|
I just tried that (in Linux) and it complains now about /usr/local/include/allegro5/allegro_direct3d.h:20:18: fatal error: d3d9.h: No such file or directory . I'm trying to differentiate between which graphic library is in effect without too many #ifdefs. They all watch too much MSNBC... they get ideas. |
SiegeLord
Member #7,827
October 2006
|
It used to be so that you had to include "allegro_direct3d.h" for the ALLEGRO_DIRECT3D and "allegro_opengl.h" for ALLEGRO_OPENGL. Then, for some reason, ALLEGRO_OPENGL was moved into the main allegro include, which left ALLEGRO_DIRECT3D inexplicably in its own header. EDIT: Incidentally, the reason why those were originally hidden away was to make it a tiny bit harder to write non-portable code. The thinking was that if you used the code in non-platform specific headers you'd automatically get portable code. Now with ALLEGRO_OPENGL being in the non-platform specific header, this is sort of moot... "For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18 |
Arthur Kalliokoski
Second in Command
February 2005
|
OTOH, I looked at <allegro5/allegro_direct3d.h> on the Mingw includes and it says /* Display creation flag. */ #define ALLEGRO_DIRECT3D ALLEGRO_DIRECT3D_INTERNAL
which would seem to indicate that Linux should fail to create a display when ALLEGRO_DIRECT3D_INTERNAL was passed to al_set_new_display_flags(). Just a small error, though. They all watch too much MSNBC... they get ideas. |
SiegeLord
Member #7,827
October 2006
|
ALLEGRO_DIRECT3D_INTERNAL is internal though. It's not documented, and you're not supposed to use it. "For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18 |
Thomas Fjellstrom
Member #476
June 2000
|
Not to mention that D3D is the default, and you shouldn't need to explicitly specify it. -- |
Arthur Kalliokoski
Second in Command
February 2005
|
Well, now I have this (no idea what would happen on OSX or Android) active_gl = al_get_display_flags(display) & ALLEGRO_OPENGL; if(active_gl & ALLEGRO_OPENGL) { zz_draw_focus = &zz_draw_ogl_focus; } else //fall through to direct3d { zz_draw_focus = &zz_draw_d3d_focus; } I'll probably replace it with some private defines instead of putting the code directly in there. They all watch too much MSNBC... they get ideas. |
Thomas Fjellstrom
Member #476
June 2000
|
Everything but Windows is GL. That is a decent way of doing it. -- |
Elias
Member #358
May 2000
|
ALLEGRO_OPENGL always was public. And using Allegro to write a (platform-independent) OpenGL game is one of the use cases, it makes a lot of sense to do, including under Windows. -- |
SiegeLord
Member #7,827
October 2006
|
Elias said: ALLEGRO_OPENGL always was public. No, it wasn't: git diff -r 17ccbaa{^,} -- include/allegro5/display_new.h diff --git a/include/allegro5/display_new.h b/include/allegro5/display_new.h index ee111c9..8302dc9 100644 --- a/include/allegro5/display_new.h +++ b/include/allegro5/display_new.h @@ -12,21 +12,20 @@ #endif /* Possible bit combinations for the flags parameter of al_create_display. */ - -#define ALLEGRO_WINDOWED 1 -#define ALLEGRO_FULLSCREEN 2 -// moved to allegro_opengl.h -//#define ALLEGRO_OPENGL 4 -// moved to allegro_direct3d.h -//#define ALLEGRO_DIRECT3D 8 -#define ALLEGRO_RESIZABLE 16 -//#define ALLEGRO_SINGLEBUFFER 32 -#define ALLEGRO_NOFRAME 64 -#define ALLEGRO_GENERATE_EXPOSE_EVENTS 128 -//is something using 256? didn't seem to work... -#define ALLEGRO_FULLSCREEN_WINDOW 512 +enum { + ALLEGRO_WINDOWED = 1 << 0, + ALLEGRO_FULLSCREEN = 1 << 1, + ALLEGRO_OPENGL = 1 << 2, + ALLEGRO_DIRECT3D_INTERNAL = 1 << 3, + ALLEGRO_RESIZABLE = 1 << 4, + ALLEGRO_NOFRAME = 1 << 5, + ALLEGRO_GENERATE_EXPOSE_EVENTS = 1 << 6, + ALLEGRO_OPENGL_3_0 = 1 << 7, + ALLEGRO_OPENGL_FORWARD_COMPATIBLE = 1 << 8, + ALLEGRO_FULLSCREEN_WINDOW = 1 << 9, /* This is set to mark a display used only internally. */ -#define ALLEGRO_INTERNAL 1024 + ALLEGRO_INTERNAL = 1 << 10 +}; /* Possible parameters for al_set_display_option. * Make sure to update ALLEGRO_EXTRA_DISPLAY_SETTINGS if you modify
git show 17ccbaa commit 17ccbaa2b3e7c4230971495c5e10e531c1bc4679 Author: Elias Pschernig <elias@users.sourceforge.net> Date: Sun Apr 4 20:58:11 2010 +0000 Fixed display flags which were in various #defines across several headers.
git diff -r 2f8d56{^,} -- include/allegro5/display_new.h diff --git a/include/allegro5/display_new.h b/include/allegro5/display_new.h index 55550cc..7617c6a 100644 --- a/include/allegro5/display_new.h +++ b/include/allegro5/display_new.h @@ -15,7 +15,8 @@ #define ALLEGRO_WINDOWED 1 #define ALLEGRO_FULLSCREEN 2 -#define ALLEGRO_OPENGL 4 +// moved to a5_opengl.h +//#define ALLEGRO_OPENGL 4 #define ALLEGRO_DIRECT3D 8 //#define ALLEGRO_GENERATE_UPDATE_EVENTS 64 #define ALLEGRO_RESIZABLE 16
git show 2f8d56 commit 2f8d565525fef076a31494dd71ef0b4b0884709c Author: Milan Mimica <mmimica@users.sourceforge.net> Date: Sun Oct 12 11:23:08 2008 +0000 To prevent namespce pollution, and accidental usage of OpenGL-specific functions, programs using OpenGL must include allegro5/a5_opengl.h from now on.
Quote: And using Allegro to write a (platform-independent) OpenGL game is one of the use cases, it makes a lot of sense to do, including under Windows. Pretty sure Allegro can be compiled without OpenGL support on Windows. "For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18 |
Sebastian Steinhauer
Member #12,449
December 2010
|
Having ALLEGRO_OPENGL in the "default" headers while ALLEGRO_DIRECT3D needs to have allegro_direct3d.h included is a bit irritating. To have no problems with that I wrote some lines to work around this problem. 1#ifdef ALLEGRO_WINDOWS
2#include <allegro5/allegro_direct3d.h>
3#else
4#define ALLEGRO_DIRECT3D 0 /* dummy define for non Win systems */
5#endif /* ALLEGRO_WINDOWS */
This helps me having D3D on Unix systems, too. (In my project the user can choose the renderer if he wants to).8-) |
Peter Wang
Member #23
April 2000
|
Please don't do that. At worst, alias ALLEGRO_DIRECT3D to ALLEGRO_DIRECT3D_INTERNAL.
|
Thomas Fjellstrom
Member #476
June 2000
|
Or don't include the D3D stuff on systems that don't have D3D... Doesn't really make sense to provide the user an option to select between D3D and OpenGL on linux for example. -- |
|