*
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#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__
|
||||
Reference in New Issue
Block a user