I think the most difficult SWF is dialog.bswf. An impressive Action Script code.
Not sure about D3 but in BFG a GDM (game dialog messages) is a complex layer of interaction between C++ code and SWF (GUI).
And it uses SetGlobal/GetGlobal (swf variables as I think).
That theoretically allows to jump on any (not hard-coded) menu handlers. E.g. not only CAMPAIGN -> NEW GAME -> GAME TYPE -> ... but in any sequence.
****************update:
After extract resources I see in /basedev/renderprogs next folders:
cgb (Cg NVIDIA?)
gl (with old or revised D3 .vfp files)
glsl
hlsl
Questions:
1. In what format I must create own shaders for BFG?
Anybody got an working GLSL/HLSL shaders?
2. How to use non-ARB shaders?
I can't see any new vertexProgram/fragmentProgram (glsl,hlsl,cg) into .mtr (except .vfp).
*******************
Hmm, as I see in RenderProgs_GLSL.cpp .cg (and perhaps .hlsl) was converted by engine.
GLuint idRenderProgManager::LoadGLSLShader( GLenum target, const char * name, idList<int> & uniforms ) {
idStr inFile;
idStr outFileHLSL;
idStr outFileGLSL;
idStr outFileUniforms;
inFile.Format( "renderprogs\\%s", name );
inFile.StripFileExtension();
outFileHLSL.Format( "renderprogs\\glsl\\%s", name );
outFileHLSL.StripFileExtension();
outFileGLSL.Format( "renderprogs\\glsl\\%s", name );
outFileGLSL.StripFileExtension();
outFileUniforms.Format( "renderprogs\\glsl\\%s", name );
outFileUniforms.StripFileExtension();
if ( target == GL_FRAGMENT_SHADER ) {
inFile += ".pixel";
outFileHLSL += "_fragment.hlsl";
outFileGLSL += "_fragment.glsl";
outFileUniforms += "_fragment.uniforms";
} else {
inFile += ".vertex";
outFileHLSL += "_vertex.hlsl";
outFileGLSL += "_vertex.glsl";
outFileUniforms += "_vertex.uniforms";
}
Still not clear.