#ifndef IVertexShader11_h__ #define IVertexShader11_h__ #include #include #include #include "render/IShader.h" #include "render/IMacroDefine.h" #include #include "Globals.h" namespace LifeGraphics { class IVertexShader11 : public IShader { public: ID3D11VertexShader* g_shader; ID3DBlob* g_bytecode; ID3D11Device* g_device; IVertexShader11(ID3D11Device* device) { g_device = device; } ~IVertexShader11() { SAFE_RELEASE(g_bytecode); SAFE_RELEASE(g_shader); } void* Disassemble() { return 0; } SHADER_TYPE getShaderType() { return ST_VS; } char* GetByteCode() { return (char*)0; } void Compile(LifeCore::IDataStreamPtr stream, std::vector* defines) { char* shader = new char[stream->Length()]; stream->Read(shader, stream->Length()); Compile(shader, stream->Length(), defines); delete[]shader; } void Compile(const char* pData, int length, std::vector* defines) { HRESULT hr; g_bytecode = NULL; ID3D10Blob* errorBlob; if(!defines) { hr = D3DX11CompileFromMemory(pData, length, "system_shader", NULL, NULL, "main_VS", "vs_5_0",0,0,NULL, &g_bytecode,&errorBlob, NULL); } else { //create macro D3D10_SHADER_MACRO* macros = new D3D10_SHADER_MACRO[defines->size() + 1]; int cnt = defines->size(); for(int i = 0; i < cnt; i++) { macros[i].Definition = defines[0][i].definition.c_str(); macros[i].Name = defines[0][i].name.c_str(); } D3D10_SHADER_MACRO m; m.Definition = NULL; m.Name = NULL; macros[cnt] = m; hr = D3DX11CompileFromMemory(pData, length, "system_shader", macros, NULL, "main_VS", "vs_5_0",0,0,NULL, &g_bytecode,&errorBlob, NULL); delete[] macros; } if( FAILED( hr ) ) { printf("SHADER COMPILE ERROR: %s", errorBlob->GetBufferPointer()); } hr = g_device->CreateVertexShader(g_bytecode->GetBufferPointer(), g_bytecode->GetBufferSize(), NULL, &g_shader); } void Load(LifeCore::IDataStreamPtr src) { printf("Load VS is not implemented: %i\n", src->Length()); } void CompleteAsyncRequest(IResource* source) { //printf("VS async not implemented: %s\n", source->Name.c_str()); } }; } #endif // IPixelShader11_h__