Adam Johnson
12 years ago
4 changed files with 224 additions and 0 deletions
Binary file not shown.
@ -0,0 +1,16 @@ |
|||||||
|
include_directories("../../Plasma/CoreLib") |
||||||
|
|
||||||
|
if(WIN32) |
||||||
|
include_directories(${DirectX_INCLUDE_DIR}) |
||||||
|
endif(WIN32) |
||||||
|
|
||||||
|
set(plShaderAssembler_SOURCES |
||||||
|
main.cpp |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
add_executable(plShaderAssembler ${plShaderAssembler_SOURCES}) |
||||||
|
target_link_libraries(plShaderAssembler ${DirectX_LIBRARIES}) |
||||||
|
target_link_libraries(plShaderAssembler CoreLib) |
||||||
|
|
||||||
|
source_group("Source Files" FILES ${plShaderAssembler_SOURCES}) |
@ -0,0 +1,207 @@ |
|||||||
|
// AssShader.cpp : Defines the entry point for the console application.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <D3d9.h> |
||||||
|
#include <D3dx9core.h> |
||||||
|
|
||||||
|
#include "plFileSystem.h" |
||||||
|
|
||||||
|
void ICreateHeader(const char* const varName, const char* const fileName, FILE* fp, LPD3DXBUFFER shader) |
||||||
|
{ |
||||||
|
fprintf(fp, "\n\n\n"); |
||||||
|
|
||||||
|
int byteLen = shader->GetBufferSize(); |
||||||
|
int quadLen = byteLen >> 2; |
||||||
|
|
||||||
|
unsigned char* codes = (unsigned char*)shader->GetBufferPointer(); |
||||||
|
|
||||||
|
fprintf(fp, "static const uint32_t %sbyteLen = %d;\n\n", varName, byteLen); |
||||||
|
fprintf(fp, "static const uint8_t %sCodes[] = {\n", varName); |
||||||
|
|
||||||
|
int i; |
||||||
|
for( i = 0; i < quadLen-1; i++ ) |
||||||
|
{ |
||||||
|
fprintf(fp, "\t0x%x,", *codes++); |
||||||
|
fprintf(fp, "\t0x%x,", *codes++); |
||||||
|
fprintf(fp, "\t0x%x,", *codes++); |
||||||
|
fprintf(fp, "\t0x%x,\n", *codes++); |
||||||
|
} |
||||||
|
fprintf(fp, "\t0x%x,", *codes++); |
||||||
|
fprintf(fp, "\t0x%x,", *codes++); |
||||||
|
fprintf(fp, "\t0x%x,", *codes++); |
||||||
|
fprintf(fp, "\t0x%x\n", *codes++); |
||||||
|
fprintf(fp, "\t};"); |
||||||
|
fprintf(fp, "\n\n"); |
||||||
|
|
||||||
|
fprintf(fp, "static const plShaderDecl %sDecl(\"%s\", %s, %sbyteLen, %sCodes);\n\n", varName, fileName, varName, varName, varName); |
||||||
|
fprintf(fp, "static const plShaderRegister %sRegister(&%sDecl);\n\n", varName, varName); |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char* argv[]) |
||||||
|
{ |
||||||
|
if( argc < 2 ) |
||||||
|
{ |
||||||
|
printf("%s <file0> <file1> ...\n", argv[0]); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
const char* const * nameList = 0L; |
||||||
|
int numNames = 0; |
||||||
|
if( !_stricmp(argv[1], "all") ) |
||||||
|
{ |
||||||
|
// Cut and paste enum and add kNumEnumNames to end
|
||||||
|
// so you don't have to count.
|
||||||
|
enum { |
||||||
|
vs_WaveFixedFin6, |
||||||
|
ps_WaveFixed, |
||||||
|
vs_CompCosines, |
||||||
|
ps_CompCosines, |
||||||
|
vs_ShoreLeave6, |
||||||
|
ps_ShoreLeave6, |
||||||
|
vs_WaveRip, |
||||||
|
ps_WaveRip, |
||||||
|
vs_WaveDec1Lay, |
||||||
|
vs_WaveDec2Lay11, |
||||||
|
vs_WaveDec2Lay12, |
||||||
|
vs_WaveDecEnv, |
||||||
|
ps_CbaseAbase, |
||||||
|
ps_CalphaAbase, |
||||||
|
ps_CalphaAMult, |
||||||
|
ps_CalphaAadd, |
||||||
|
ps_CaddAbase, |
||||||
|
ps_CaddAMult, |
||||||
|
ps_CaddAAdd, |
||||||
|
ps_CmultAbase, |
||||||
|
ps_CmultAMult, |
||||||
|
ps_CmultAAdd, |
||||||
|
ps_WaveDecEnv, |
||||||
|
vs_WaveGraph2, |
||||||
|
ps_WaveGraph, |
||||||
|
vs_WaveGridFin, |
||||||
|
ps_WaveGrid, |
||||||
|
vs_BiasNormals, |
||||||
|
ps_BiasNormals, |
||||||
|
vs_ShoreLeave7, |
||||||
|
vs_WaveRip7, |
||||||
|
ps_MoreCosines, |
||||||
|
vs_WaveDec1Lay_7, |
||||||
|
vs_WaveDec2Lay11_7, |
||||||
|
vs_WaveDec2Lay12_7, |
||||||
|
vs_WaveDecEnv_7, |
||||||
|
vs_WaveFixedFin7, |
||||||
|
vs_GrassShader, |
||||||
|
ps_GrassShader, |
||||||
|
|
||||||
|
kNumEnumNames |
||||||
|
}; |
||||||
|
|
||||||
|
// Just copy in the enum and use Replace on
|
||||||
|
// vs_ => "vs_
|
||||||
|
// ps_ => "ps_
|
||||||
|
// , => ",
|
||||||
|
const char* kEnumNames[kNumEnumNames] = { |
||||||
|
"vs_WaveFixedFin6", |
||||||
|
"ps_WaveFixed", |
||||||
|
"vs_CompCosines", |
||||||
|
"ps_CompCosines", |
||||||
|
"vs_ShoreLeave6", |
||||||
|
"ps_ShoreLeave6", |
||||||
|
"vs_WaveRip", |
||||||
|
"ps_WaveRip", |
||||||
|
"vs_WaveDec1Lay", |
||||||
|
"vs_WaveDec2Lay11", |
||||||
|
"vs_WaveDec2Lay12", |
||||||
|
"vs_WaveDecEnv", |
||||||
|
"ps_CbaseAbase", |
||||||
|
"ps_CalphaAbase", |
||||||
|
"ps_CalphaAMult", |
||||||
|
"ps_CalphaAadd", |
||||||
|
"ps_CaddAbase", |
||||||
|
"ps_CaddAMult", |
||||||
|
"ps_CaddAAdd", |
||||||
|
"ps_CmultAbase", |
||||||
|
"ps_CmultAMult", |
||||||
|
"ps_CmultAAdd", |
||||||
|
"ps_WaveDecEnv", |
||||||
|
"vs_WaveGraph2", |
||||||
|
"ps_WaveGraph", |
||||||
|
"vs_WaveGridFin", |
||||||
|
"ps_WaveGrid", |
||||||
|
"vs_BiasNormals", |
||||||
|
"ps_BiasNormals", |
||||||
|
"vs_ShoreLeave7", |
||||||
|
"vs_WaveRip7", |
||||||
|
"ps_MoreCosines", |
||||||
|
"vs_WaveDec1Lay_7", |
||||||
|
"vs_WaveDec2Lay11_7", |
||||||
|
"vs_WaveDec2Lay12_7", |
||||||
|
"vs_WaveDecEnv_7", |
||||||
|
"vs_WaveFixedFin7", |
||||||
|
"vs_GrassShader", |
||||||
|
"ps_GrassShader" |
||||||
|
}; |
||||||
|
|
||||||
|
nameList = kEnumNames; |
||||||
|
numNames = kNumEnumNames; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
nameList = argv+1; |
||||||
|
numNames = argc-1; |
||||||
|
} |
||||||
|
int i; |
||||||
|
for( i = 0; i < numNames; i++ ) |
||||||
|
{ |
||||||
|
const char* name = nameList[i]; |
||||||
|
|
||||||
|
char varName[512]; |
||||||
|
strcpy(varName, name); |
||||||
|
char* p = strrchr(varName, '.'); |
||||||
|
if( p ) |
||||||
|
*p = 0; |
||||||
|
|
||||||
|
char inFile[512]; |
||||||
|
sprintf(inFile, "%s.inl", varName); |
||||||
|
|
||||||
|
char outFile[512]; |
||||||
|
sprintf(outFile, "%s.h", varName); |
||||||
|
|
||||||
|
printf("Processing %s into %s\n", name, outFile); |
||||||
|
FILE* fp = fopen(outFile, "w"); |
||||||
|
if( !fp ) |
||||||
|
{ |
||||||
|
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); |
||||||
|
printf("Error opening file %s for output\n"); |
||||||
|
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
LPD3DXBUFFER compiledShader = 0L; |
||||||
|
LPD3DXBUFFER compilationErrors = 0L; |
||||||
|
DWORD flags = 0; |
||||||
|
LPD3DXINCLUDE include = 0L; |
||||||
|
|
||||||
|
HRESULT hr = D3DXAssembleShaderFromFile( |
||||||
|
inFile, |
||||||
|
0L, |
||||||
|
include, |
||||||
|
flags, |
||||||
|
&compiledShader, |
||||||
|
&compilationErrors); |
||||||
|
|
||||||
|
if( FAILED(hr) ) |
||||||
|
{ |
||||||
|
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); |
||||||
|
printf(compilationErrors ? (char*)compilationErrors->GetBufferPointer() : "File not found"); |
||||||
|
continue; |
||||||
|
} |
||||||
|
sprintf(inFile, "sha/%s.inl", varName); |
||||||
|
|
||||||
|
ICreateHeader(varName, inFile, fp, compiledShader); |
||||||
|
|
||||||
|
fclose(fp); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue