This commit is well documented, so no need to tell you my life story. Full Unicode patch with RTL Support & BiDi logic. Removed the legacy codePage, normalised to UTF8 (65001). It also comes with: CTRL + A : select text (highlighted) CTRL + C : copy CTRL + V : paste CTRL + X : cut CTRL + Y : redo CTRL + Z : undo
78 lines
1.4 KiB
C++
78 lines
1.4 KiB
C++
#include "StdAfx.h"
|
|
#include "GrpVertexShader.h"
|
|
#include "GrpD3DXBuffer.h"
|
|
#include "StateManager.h"
|
|
|
|
#include <utf8.h>
|
|
|
|
CVertexShader::CVertexShader()
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CVertexShader::~CVertexShader()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
void CVertexShader::Initialize()
|
|
{
|
|
m_handle=0;
|
|
}
|
|
|
|
void CVertexShader::Destroy()
|
|
{
|
|
if (m_handle)
|
|
{
|
|
m_handle->Release();
|
|
m_handle = nullptr;
|
|
}
|
|
}
|
|
|
|
bool CVertexShader::CreateFromDiskFile(const char* c_szFileName, const DWORD* c_pdwVertexDecl)
|
|
{
|
|
Destroy();
|
|
|
|
if (!c_szFileName || !*c_szFileName)
|
|
return false;
|
|
|
|
// UTF-8 → UTF-16 for D3DX
|
|
std::wstring wFileName = Utf8ToWide(c_szFileName);
|
|
|
|
LPD3DXBUFFER lpd3dxShaderBuffer = nullptr;
|
|
LPD3DXBUFFER lpd3dxErrorBuffer = nullptr;
|
|
|
|
HRESULT hr = D3DXAssembleShaderFromFileW(
|
|
wFileName.c_str(),
|
|
nullptr,
|
|
nullptr,
|
|
0,
|
|
&lpd3dxShaderBuffer,
|
|
&lpd3dxErrorBuffer
|
|
);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
if (lpd3dxErrorBuffer)
|
|
{
|
|
const char* err = (const char*)lpd3dxErrorBuffer->GetBufferPointer();
|
|
TraceError("Vertex shader compile error: %s", err);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
if (FAILED(
|
|
ms_lpd3dDevice->CreateVertexShader(
|
|
(const DWORD*)lpd3dxShaderBuffer->GetBufferPointer(),
|
|
&m_handle
|
|
)))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
void CVertexShader::Set()
|
|
{
|
|
STATEMANAGER.SetVertexShader(m_handle);
|
|
}
|