Skip to content

Instantly share code, notes, and snippets.

@kayru
Created April 21, 2012 12:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kayru/2436983 to your computer and use it in GitHub Desktop.
Save kayru/2436983 to your computer and use it in GitHub Desktop.
Data build jamrules
# JamPlus script
MODEL_TOOL = "..\\bin\\datatool.exe" ;
TEXTURE_TOOL = "..\\scripts\\win32\\texconv.exe" ;
SHADER_TOOL = "..\\scripts\\win32\\fxc.exe" ;
# --------------------------------------------------------------------------
actions ModelAction
{
$(MODEL_TOOL) model "$(2)" "$(1)"
}
actions TextureActionDXT5
{
$(TEXTURE_TOOL) -nologo -f DXT5 -o "$(1:D:\\)" "$(2:\\)"
}
actions TextureActionDXT1
{
$(TEXTURE_TOOL) -nologo -f DXT1 -o "$(1:D:\\)" "$(2:\\)"
}
actions TextureActionA8R8G8B8
{
$(TEXTURE_TOOL) -nologo -f A8R8G8B8 -o "$(1:D:\\)" "$(2:\\)"
}
actions CopyAction
{
copy "$(2:\\)" "$(1:\\)" >nul
}
actions quietly ignore MakeDirAction
{
mkdir $(<:\\) >nul 2>&1
}
actions quietly ignore DeleteAction
{
del /F $(>:\\) >nul 2>&1
}
actions CompileVertexShaderAction
{
"$(SHADER_TOOL)" /nologo /Tvs_3_0 /Zi /D_PC_ /D_DX9_ /Fo"$(1)" "$(2)"
}
actions CompilePixelShaderAction
{
"$(SHADER_TOOL)" /nologo /Tps_3_0 /Zi /D_PC_ /D_DX9_ /Fo"$(1)" "$(2)"
}
rule MakeFileDir TARGET
{
local DIR = $(TARGET:D) ;
MakeDirAction $(DIR) ;
Needs $(TARGET) : $(DIR) ;
}
rule ModelRule SOURCE
{
SRC_FILE = $(PATH_CONTENT)/$(SOURCE) ;
DST_FILE = $(PATH_DATA)/$(SOURCE:S=.model) ;
MakeFileDir $(DST_FILE) ;
ModelAction $(DST_FILE) : $(SRC_FILE) ;
UseCommandLine $(DST_FILE) : $(MODEL_VERSION) ;
Depends $(DST_FILE) : $(MODEL_TOOL) ;
Depends $(DST_FILE) : $(SRC_FILE) ;
Depends all : $(DST_FILE) ;
Depends models : $(DST_FILE) ;
}
rule CopyFileRule SOURCE
{
SRC_FILE = $(PATH_CONTENT)/$(SOURCE) ;
DST_FILE = $(PATH_DATA)/$(SOURCE) ;
MakeFileDir $(DST_FILE) ;
CopyAction $(DST_FILE) : $(SRC_FILE) ;
Depends $(DST_FILE) : $(SRC_FILE) ;
Depends all : $(DST_FILE) ;
}
rule TextureRule SOURCE
{
SRC_FILE = $(SOURCE) ;
DST_FILE = $(PATH_DATA)/$(SRC_FILE:S=.dds) ;
MakeFileDir $(DST_FILE) ;
local TEXTURE_FORMAT ;
if ( $(SOURCE:L:I="_normal\\..*" )
{
TEXTURE_FORMAT = "normal" ;
TextureActionA8R8G8B8 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_n\\..*" )
{
TEXTURE_FORMAT = "normal" ;
TextureActionA8R8G8B8 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_ddn\\..*" )
{
TEXTURE_FORMAT = "normal" ;
TextureActionA8R8G8B8 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_du\\..*" )
{
TEXTURE_FORMAT = "diffuse_uncompressed" ;
TextureActionA8R8G8B8 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_level\\..*" )
{
TEXTURE_FORMAT = "specular_level" ;
TextureActionDXT5 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_specular\\..*" )
{
TEXTURE_FORMAT = "specular_level" ;
TextureActionDXT5 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_gloss\\..*" )
{
TEXTURE_FORMAT = "specular_gloss" ;
TextureActionDXT5 $(DST_FILE) : $(SRC_FILE) ;
}
else if ( $(SOURCE:L:I="_ao\\..*" )
{
TEXTURE_FORMAT = "ao" ;
TextureActionDXT1 $(DST_FILE) : $(SRC_FILE) ;
}
else
{
TEXTURE_FORMAT = "default" ;
TextureActionDXT1 $(DST_FILE) : $(SRC_FILE) ;
}
UseCommandLine $(DST_FILE) : $(TEXTURE_VERSION) $(TEXTURE_FORMAT) ;
Depends $(DST_FILE) : $(SRC_FILE) ;
Depends all : $(DST_FILE) ;
Depends textures : $(DST_FILE) ;
}
rule ShaderBuildRule SOURCE
{
local DST_FILE = $(PATH_DATA)/$(FILENAME).bin ;
local SRC_FILE = $(PATH_CONTENT)/$(SOURCE) ;
MakeFileDir $(DST_FILE) ;
if ( $(FILENAME:L:I=psh$) )
{
CompilePixelShaderAction $(DST_FILE) : $(SRC_FILE) ;
}
if ( $(FILENAME:L:I=vsh$) )
{
CompileVertexShaderAction $(DST_FILE) : $(SRC_FILE) ;
}
Depends $(DST_FILE) : $(SRC_FILE) ;
Depends all : $(DST_FILE) ;
Depends shaders : $(DST_FILE) ;
}
rule ContentBuildRule SOURCE
{
if ( $(SOURCE:L:I=".png$") )
{
TextureRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I=".jpg$") )
{
TextureRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I=".tga$") )
{
TextureRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I=".dds$") )
{
CopyFileRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I="\\.x$") )
{
ModelRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I="\\.svn$" )
{
# nothing
}
else if ( $(SOURCE:L:I="\\.max$" )
{
# nothing
}
else if ( $(SOURCE:L:I="\\.psd$" )
{
# nothing
}
else if ( $(SOURCE:L:I="\\.py$" )
{
# nothing
}
else if ( $(SOURCE:L:I="\\.txt$" )
{
# nothing
}
else if ( $(SOURCE:L:I="\\.log$" )
{
# nothing
}
else if ( $(SOURCE:L:I="\\.psh$" )
{
ShaderBuildRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I="\\.vsh$" )
{
ShaderBuildRule $(SOURCE) ;
}
else if ( $(SOURCE:L:I=".scenexml$") )
{
CopyFileRule $(SOURCE) ;
}
else
{
Echo Warning rule not found for $(SOURCE) ;
}
}
rule CopyDirectoryRule DIRECTORY : MASK
{
for FILENAME in [ Glob $(DIRECTORY) : $(MASK) ] { CopyFileRule $(FILENAME) ; }
}
rule BuildDirectoryRule DIRECTORY : MASK
{
for FILENAME in [ Glob $(DIRECTORY) : $(MASK) ] { ContentBuildRule $(FILENAME) ; }
}
rule RecursiveBuildDirectoryRule DIRECTORY : MASK
{
for FILENAME in [ Glob $(DIRECTORY) : $(MASK) ] { ContentBuildRule $(FILENAME) ; }
for CURRENT_DIRECTORY in [ Glob $(DIRECTORY) : */ ]
{
RecursiveBuildDirectoryRule $(CURRENT_DIRECTORY) : $(MASK) ;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment