93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
#ifndef IVertexShader11_h__
|
|
#define IVertexShader11_h__
|
|
|
|
|
|
#include <d3d11.h>
|
|
#include <dxgi.h>
|
|
#include <d3dx11.h>
|
|
#include "render/IShader.h"
|
|
#include "render/IMacroDefine.h"
|
|
#include <vector>
|
|
#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<IMacroDefine>* 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<IMacroDefine>* 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__
|