==============================================================================
eFX 2.0 - Readme
==============================================================================

Please read this readme before you continue with installing ...

==============================================================================

Contents:
---------

1. About
   1.1 Introduction
   1.2 Features
2. Installation
   2.1 Requirements
   2.2 Installation
   2.3 Configuration
3. Shaders
4. Credits

==============================================================================

About:
------

It's been a while since I released my post processing injector called "eFX" to
the public. Back then it was more of a pilot project then anything really useful,
goal was to show off what is possible in comparison to the number of post
processing injectors available. I believe it's time for the next step, codename
"eFX 2.0". The name is actually pretty stupid and might change lateron, but it
does the job right now. "eFX 2.0" was completly written from sceatch using the
knowledge earned from coding the first show off version. The internal structure
is completly new and there's probably not more left from the first version, than
the idea of an all-in-one injector for Direct3D and OpenGl (and possibly more)
with focus sitting on a maximum of customizability.

Features:
---------

A small and shortened list of features:

- Support for Direct3D 9, 10, 10.1, 11, 11.1, OpenGl (all of these, implemented in
  one library file)
- HLSL Effects like syntax for OpenGl part using GLSL shaders (custom parser by me
  for maximum control)
- Full windows 8.1 support
- Full control from the shader, using parameter annotations to declare which variable
  should get what information
- Access to unlimited (well, limited by the driver) amount of rendertargets to
  write too, instead of using the backbuffer
- Real multipass support
- Performance! Comparing render times reveals another true advantage of "eFX", its
  high speed
- Ingame configuration with a mouse controllable menu (load new shaders from file,
  reload/enable/disable them, change the main settings and a whole lot more)
- Take screenshots of your shaders (the menu is hidden on them)
- Several injection methods supported (wrapper, external injector application, …)
- Detailed log! Multiple log levels to choose from for debugging purpose
- Crash reporter! “eFX” will automaticly create a minidump useful for me to fix the
  bug if a crash occurs. This dump contains debugging information describing the
  type of exception that occured and where. It could even send me that data directly
  if you allow it.
- ...

==============================================================================

Requirements:
-------------

Just the Visual C++ Redistributable which you probably already have installed:
http://www.microsoft.com/download/details.aspx?id=30679

Installation:
-------------

Installation process is pretty straight forward and similar to the one of
"eFX 1.0". Choose either “eFX32″ or “eFX64″ depending on your game using 32
or 64 bit (it doesn't care about the operating system here). Rename the file
to one of the supported wrappers and put it into directory your games executable
lies in.

The supported wrapper names include:
- d3d9 (Direct3D 9)
- d3d10 (Direct3D 10)
- d3d10_1 (Direct3D 10.1)
- d3d11 (Direct3D 11 and 11.1)
- dxgi
- dinput8
- xinput1_3
- opengl32 (OpenGL)
- ...

Rename "eFX" into one of these depending on what the game uses and it should be
auto loaded. A splash screen is shown on successfull loadup and initiallation.
Just cycle through these filenames until you found something working. If "eFX"
is loaded but nothing happens in your game, it can mean that it missed to
hook the graphical API. Try to disable dynamic hooking by setting "hook_dynamic"
to "false" in your config file. If it still does not work try to also set
"hook_all" to "true" and check the log file.

Configuration:
--------------

The settings file delivered with this readme already describes the various options
in comment headers of each section.

If you want to add a new shader file, create a new entry beginning with
"effect_file" in the "EFFECT" section and attach some path to it, which points to
it. Set "effect_enabled" to "true" or hit the toggle key (defaults to "SCROLL LOCK")
once the game started to activate the shader.

But this is not it yet. Hit the settings key (default is "PAUSE") and a small menu
with a number of options and controls will pop up.
You can toggle a framerate counter seperatly with "INSERT" or whatever key it is
bound to.

==============================================================================

Shaders:
--------

The effect framework is the most powerful one supporting HLSL and GLSL all in
one rush and moving all of the control right into the shader file, instead of
using hardcoded values or additional configuration files. The keyword to make
this possible are "annotations". These are little extra information you can
add to parameters, techniques and passes which control what they do and how.

A shader parameter usually looks like this:

[uniform] [texture2D, ...] tex < [...] >;
                                   ^---- Annotations
                            ^----------- Name
                ^----------------------- Classtype

To set the type way "eFX" should handle a parameter, you need to specify a "type"
annotation. This one holds a string identifier representing what the intention
of the variable is.

Currently supported values are:
- "input" (Will retrieve the backbuffer image)
- "output" (Can be used as a rendertarget for passes)
- "texture" (Specify together with a "path" annotation to load an image file
  from disk to be stored in here)
- ... (More coming soon)

Check the examples coming with this readme to get a closer look at the syntax
and how it is used.

==============================================================================

Credits:
--------

It would not have been possible without the following people ...

Special thanks go to ...

- Andrej Dudenhefner (mrhaandi)
  Helped me with issues I bumped into.
- Christian Jensen (CeeJay)
  Had the idea to use shader annotations for parameter tweaking and was a great
  help and always a nice person to talk to.

I would also like to thank these ...

- Kukkimonsuta
  Got me on the idea to write a general effect interface for all graphic APIs.
- Boulotaur2024
  For letting me get a view on his source, which solved some small issues of mine.

Additional libraries used ...

- AntTweakbar by Philippe Decaudin
- CrashRpt by Michael Carruth, ...
- GLEW by Milan Ikits, Marcelo E. Magallon, Lev Povalahev, ...
- MinHook by Tsuda Kageyu
- SOIL by Jonathan Dummer, Sean Barret


I'm really sorry if I forgot somebody here. Thank you to all those who helped
making this project reality.

You can also retrieve this list from the bottom of the ingame settings menu!

==============================================================================
Crosire
==============================================================================