Danbias/Code/OysterGraphics/Render/GuiRenderer.cpp

95 lines
2.4 KiB
C++
Raw Normal View History

2014-02-07 15:52:07 +01:00
#include "GuiRenderer.h"
#include "Resources.h"
#include "../Definitions/GraphicalDefinition.h"
2014-02-07 11:52:51 +01:00
namespace Oyster
{
namespace Graphics
{
namespace Render
2014-02-11 13:29:19 +01:00
{
const int TEXT_NR_LETTERS=95;
const float TEXT_SPACING=1.8f;
2014-02-11 13:29:19 +01:00
void Gui::Begin2DRender()
2014-02-07 11:52:51 +01:00
{
2014-02-11 13:29:19 +01:00
Core::PipelineManager::SetRenderPass(Render::Resources::Gui::Pass);
}
2014-02-07 11:52:51 +01:00
2014-02-11 13:29:19 +01:00
void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float2 pos, Math::Float2 size)
{
Core::deviceContext->PSSetShaderResources(0,1,&tex);
pos *= 2;
pos -= 1;
pos.y *= -1;
Definitions::GuiData gd;
gd.Translation = Math::Matrix::identity;
gd.Translation.m41 = pos.x;
gd.Translation.m42 = pos.y;
gd.Translation.m11 = size.x;
gd.Translation.m22 = size.y;
void* data = Render::Resources::Gui::Data.Map();
memcpy(data,&gd,sizeof(Definitions::GuiData));
Render::Resources::Gui::Data.Unmap();
Core::deviceContext->Draw(1,0);
}
2014-02-07 13:47:09 +01:00
2014-02-11 13:29:19 +01:00
void Gui::Begin2DTextRender()
{
Resources::Gui::Text::Vertex.Apply();
Core::PipelineManager::SetRenderPass(Resources::Gui::Text::Pass);
}
void Gui::RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size)
{
size.x = size.x / (text.length() * TEXT_SPACING /2);
2014-02-07 13:47:09 +01:00
2014-02-11 13:29:19 +01:00
pos *= 2;
pos -= 1;
pos.y *= -1;
2014-02-07 13:47:09 +01:00
pos.x = pos.x - (size.x * (text.length()-1) * TEXT_SPACING /2);
2014-02-11 13:29:19 +01:00
Definitions::GuiData gd;
2014-02-07 13:47:09 +01:00
2014-02-11 13:29:19 +01:00
gd.Translation = Math::Matrix::identity;
gd.Translation.m41 = pos.x;
2014-02-11 13:29:19 +01:00
gd.Translation.m42 = pos.y;
gd.Translation.m11 = size.x;
gd.Translation.m22 = size.y;
2014-02-07 13:47:09 +01:00
2014-02-11 13:29:19 +01:00
void* data = Render::Resources::Gui::Data.Map();
memcpy(data,&gd,sizeof(Definitions::GuiData));
Render::Resources::Gui::Data.Unmap();
Definitions::Text2D tmpInst;
void* dest = Resources::Gui::Text::Vertex.Map();
Definitions::Text2D* dataView = reinterpret_cast<Definitions::Text2D*>(dest);
//tmpInst.charOffset=_pos;
for (unsigned int i=0; i<text.length(); i++)
{
tmpInst.coff=(1.0f/TEXT_NR_LETTERS);
tmpInst.offset=text[i]-32;
tmpInst.pos=i*(size.x * TEXT_SPACING);
2014-02-11 13:29:19 +01:00
//float tst=getCharID(_str[i]);
//tmpInst.offset=tst;
//tmpInst.charOffset.x=_pos.x-i*TEXT_SIZE;
//tmpInst.data=tst;
dataView[i]=tmpInst;
2014-02-07 11:52:51 +01:00
}
2014-02-11 13:29:19 +01:00
//TextInstances[_id].NumLetters=instances;
Resources::Gui::Text::Vertex.Unmap();
Core::deviceContext->Draw(text.length(), 0);
2014-02-07 11:52:51 +01:00
}
}
}
}