EIFFELZONE - EiffelFURY 2D Graphics
and Multimedia Library
Sourceforge
Project Page - http://sourceforge.net/projects/eiffelzone
Introduction
In general,
EiffelFURY is a re-constitution of the WEX library written by Andreas
Leitner and Robin van Ommeren. While the WEX library has seen
many additions in recent years, only the multimedia portions (MCI
Devices) and splash windows were included in the new EiffelFURY
library. The idea was to combine the multimedia capabilities
provided in WEX, with new support for 2D (GDI) primatives enabling
anyone to make simple multimedia or graphical applications for the
win32 platforms. This is by far not a complete 2D and multimedia
library, but intends to serve as an introduction to many of the
principles behind game, multimedia and graphics programming for
Windows.
For a real life example of a commercial product using the EiffelFURY
library please check out the Strategic
Command product page found here:
http://www.battlefront.com/products/stratcom/stratcom.html
In addition, since
EiffelFURY makes use of the standard winmm
and gdi32 dynamically linked
libraries found on all win32 platforms, all compiled programs will not
require any special downloads or installations to be performed by the
user. This library is open source and all comments and additions
are welcome.
New Additions
New additions to
the EiffelFURY library include:
- Transparent Blitting - this enables you to blit
non-rectangular shapes to any valid device context
- Embossing Images - this allows for simple 3D effects in 2D
environments
- Tiling Images - this enhancement allows you to tile an
image easily across a device context
- Low Resolution Timer - this timer allows for up to
1-millisecond delays, much more accurate than the windows timer ~ 55
milliseconds, and is extremely useful in animations and multimedia
applications.
- Time Delay - allows for accurate pausing in
multimedia and game applications, essential in controlling animations
and entry points. See class FURY_DELAY for more detail
- Enumerating the Display Settings on the
current system - this allows you to safely change the
display settings to new pixel resolutions as well as bit depths
- FURY_DISPLAY_CONTROL_WINDOW
- FURY_FULL_SCREEN_WINDOW
(usefull in multimedia or game applications)
- New Fury.lib file - similar to wel.lib, enables
specific linking to this pre-built lib avoiding messy object path
declarations in your Ace file
Changes
Changes from the
previous WEX library include:
* Renaming and
reorganization of some classes
* use of
ISE´s new external `C´ struct calls
* use of
ISE´s new LACE option for address expressions thus requiring
subsequent class changes
* minor bug
fixes including a casting issue in the old dgv_win.h file
Conventions Used
All examples use
the new LACE option for address expressions, therefore this must be
included in all Ace files in order to have a proper compile. Also
I have adopted the use all capital letters for CONSTANTS found
throughout the library classes and examples. This is a common
convention used in other multimedia/graphics libraries and
documentations such as DirectX 7.0, so this is just for consistency.
Getting Started
In order to use the
EiffelFURY
library you will need a copy of ISE Eiffel v5.1 or greater for Windows
95/98/NT/2000/XP and WEL. Also, it is recommended that you use
Microsoft's Visual C++ for C-complilations. EiffelFURY has yet to
be tested with any other C compiler but this should be possible with
minor modifications to an EiffelFURY project´s ACE file.
When getting started with
EiffelFURY, it is also a good idea to be familiar with WEL and
ISE´s Resource Bench tool. Good knowledge of these is
extremely useful in building EiffelFURY applications and will also save
you time during your development phases. These can be reviewed at
the following links:
Installation Guide
The best way to install EiffelFURY
is to use the library folder provided with the ISE distribution of
Eiffel. In your $ISE_EIFFEL\library path, add a folder named
fury. Copy the unzipped `fury´ library files to this
folder. In this distribution of EiffelFURY there is also a
fury.lib file provided, so it will not be necessary to link to
winmm.lib as was the previous case with WEX.
All projects should then have the
following references in thier ACE file for proper compilation:
default
address_expression (yes)
...
cluster
--
FURY
all
fury:
"$ISE_EIFFEL\library\fury"
exclude "spec"; "examples"
end
-- WEL
all wel:
"$ISE_EIFFEL\library\wel"
...
external
include_path:
"$(ISE_EIFFEL)\library\fury\spec\windows\include",
"$(ISE_EIFFEL)\library\wel\spec\windows\include",
...
object:
"$(ISE_EIFFEL)\library\fury\spec\msc\lib\fury.lib",
"$(ISE_EIFFEL)\library\wel\spec\msc\lib\wel.lib",
...
end
Examples
Within
the EiffelFURY distribution package you will find several examples that
highlight the new features of the
EiffelFURY library as well as examples based upon the previous WEX
library. These examples are considered a tutorial style
introduction
to EiffelFURY and will change over time as EiffelFURY development
progresses. These examples can be found under the 'examples'
directory of the EiffelFURY distribution package.
EiffelFURY Tutorial 1
In
this example, transparent blitting is introduced. This is a
simple
animation that makes use of the idle action in the windows messaging
system. A frame rate counter is also provided to display the relative
speed of the animation.
EiffelFURY Tutorial 2
In
this example, the emobss image feature from class FURY_DC_ROUTINES is
introduced producing a raised 3-D effect for text.
EiffelFURY Tutorial 3
In
this example, use of the windows MCI capabilites is introduced.
This
example is built upon the previous WEX library and allows you to load
and play *.midi, *.wav, *.avi and cd-rom music files.
EiffelFURY Tutorial 4
In
this example, enumeration of display settings is introduced. The
example shows how to safely change display modes given a list of them
on the current system.