mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-05-28 05:52:38 +00:00
I think clean up DX11 code a bit. Used "smart" pointers to avoid need to manually AddRef/Release in many places. Eliminated the D3DBlob class (replaced with just D3D10CreateBlob). Eliminated some Init/Shutdown functions (moved stuff into ctors/dtors). This should not affect behavior at all, only code maintainability.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7421 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
c316417a34
commit
3d5d205c73
40 changed files with 1384 additions and 1611 deletions
|
@ -34,36 +34,35 @@ namespace D3D
|
|||
class UtilVertexBuffer
|
||||
{
|
||||
public:
|
||||
UtilVertexBuffer(int size) : buf(NULL), offset(0), max_size(size)
|
||||
UtilVertexBuffer(UINT size)
|
||||
: offset(0), max_size(size)
|
||||
{
|
||||
D3D11_BUFFER_DESC desc = CD3D11_BUFFER_DESC(max_size, D3D11_BIND_VERTEX_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
|
||||
device->CreateBuffer(&desc, NULL, &buf);
|
||||
}
|
||||
~UtilVertexBuffer()
|
||||
{
|
||||
buf->Release();
|
||||
D3D11_BUFFER_DESC desc = CD3D11_BUFFER_DESC(max_size, D3D11_BIND_VERTEX_BUFFER,
|
||||
D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
|
||||
m_buf = CreateBufferShared(&desc, NULL);
|
||||
}
|
||||
|
||||
// returns vertex offset to the new data
|
||||
int AppendData(void* data, int size, int vertex_size)
|
||||
int AppendData(void* data, UINT size, UINT vertex_size)
|
||||
{
|
||||
D3D11_MAPPED_SUBRESOURCE map;
|
||||
if(offset + size >= max_size)
|
||||
if (offset + size >= max_size)
|
||||
{
|
||||
// wrap buffer around and notify observers
|
||||
offset = 0;
|
||||
context->Map(buf, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
|
||||
g_context->Map(m_buf, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
|
||||
|
||||
for(std::list<bool*>::iterator it = observers.begin(); it != observers.end(); ++it)
|
||||
**it = true;
|
||||
for each (auto obs in observers)
|
||||
*obs = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
context->Map(buf, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map);
|
||||
g_context->Map(m_buf, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map);
|
||||
}
|
||||
offset = ((offset+vertex_size-1)/vertex_size)*vertex_size; // align offset to vertex_size bytes
|
||||
|
||||
offset = ((offset+vertex_size - 1) / vertex_size) * vertex_size; // align offset to vertex_size bytes
|
||||
memcpy((u8*)map.pData + offset, data, size);
|
||||
context->Unmap(buf, 0);
|
||||
g_context->Unmap(m_buf, 0);
|
||||
|
||||
offset += size;
|
||||
return (offset - size) / vertex_size;
|
||||
|
@ -74,18 +73,18 @@ public:
|
|||
observers.push_back(observer);
|
||||
}
|
||||
|
||||
inline ID3D11Buffer* &GetBuffer() { return buf; }
|
||||
ID3D11Buffer*const& GetBuffer() { return m_buf; }
|
||||
|
||||
private:
|
||||
ID3D11Buffer* buf;
|
||||
int offset;
|
||||
int max_size;
|
||||
SharedPtr<ID3D11Buffer> m_buf;
|
||||
UINT offset;
|
||||
UINT max_size;
|
||||
|
||||
std::list<bool*> observers;
|
||||
};
|
||||
|
||||
CD3DFont font;
|
||||
UtilVertexBuffer* util_vbuf = NULL;
|
||||
std::unique_ptr<UtilVertexBuffer> util_vbuf;
|
||||
|
||||
#define MAX_NUM_VERTICES 50*6
|
||||
struct FONT2DVERTEX {
|
||||
|
@ -104,13 +103,10 @@ inline FONT2DVERTEX InitFont2DVertex(float x, float y, u32 color, float tu, floa
|
|||
return v;
|
||||
}
|
||||
|
||||
CD3DFont::CD3DFont() : m_dwTexWidth(512), m_dwTexHeight(512)
|
||||
CD3DFont::CD3DFont()
|
||||
: m_dwTexWidth(512), m_dwTexHeight(512)
|
||||
{
|
||||
m_pTexture = NULL;
|
||||
m_pVB = NULL;
|
||||
m_InputLayout = NULL;
|
||||
m_pshader = NULL;
|
||||
m_vshader = NULL;
|
||||
}
|
||||
|
||||
const char fontpixshader[] = {
|
||||
|
@ -224,21 +220,20 @@ int CD3DFont::Init()
|
|||
// Create a new texture for the font
|
||||
// possible optimization: store the converted data in a buffer and fill the texture on creation.
|
||||
// That way, we can use a static texture
|
||||
ID3D11Texture2D* buftex;
|
||||
D3D11_TEXTURE2D_DESC texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R8G8B8A8_UNORM, m_dwTexWidth, m_dwTexHeight,
|
||||
1, 1, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_DYNAMIC,
|
||||
D3D11_CPU_ACCESS_WRITE);
|
||||
hr = device->CreateTexture2D(&texdesc, NULL, &buftex);
|
||||
if (FAILED(hr))
|
||||
1, 1, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
|
||||
|
||||
auto buftex = CreateTexture2DShared(&texdesc, NULL);
|
||||
if (!buftex)
|
||||
{
|
||||
PanicAlert("Failed to create font texture");
|
||||
return hr;
|
||||
return S_FALSE;
|
||||
}
|
||||
D3D::SetDebugObjectName((ID3D11DeviceChild*)buftex, "texture of a CD3DFont object");
|
||||
D3D::SetDebugObjectName(buftex, "texture of a CD3DFont object");
|
||||
|
||||
// Lock the surface and write the alpha values for the set pixels
|
||||
D3D11_MAPPED_SUBRESOURCE texmap;
|
||||
hr = context->Map(buftex, 0, D3D11_MAP_WRITE_DISCARD, 0, &texmap);
|
||||
hr = g_context->Map(buftex, 0, D3D11_MAP_WRITE_DISCARD, 0, &texmap);
|
||||
if (FAILED(hr)) PanicAlert("Failed to map a texture at %s %d\n", __FILE__, __LINE__);
|
||||
|
||||
for (y = 0; y < m_dwTexHeight; y++)
|
||||
|
@ -252,10 +247,12 @@ int CD3DFont::Init()
|
|||
}
|
||||
|
||||
// Done updating texture, so clean up used objects
|
||||
context->Unmap(buftex, 0);
|
||||
hr = D3D::device->CreateShaderResourceView(buftex, NULL, &m_pTexture);
|
||||
if (FAILED(hr)) PanicAlert("Failed to create shader resource view at %s %d\n", __FILE__, __LINE__);
|
||||
SAFE_RELEASE(buftex);
|
||||
g_context->Unmap(buftex, 0);
|
||||
hr = D3D::g_device->CreateShaderResourceView(buftex, NULL, &m_pTexture);
|
||||
if (FAILED(hr))
|
||||
PanicAlert("Failed to create shader resource view at %s %d\n", __FILE__, __LINE__);
|
||||
|
||||
buftex.reset();
|
||||
|
||||
SelectObject(hDC, hOldbmBitmap);
|
||||
DeleteObject(hbmBitmap);
|
||||
|
@ -265,15 +262,16 @@ int CD3DFont::Init()
|
|||
|
||||
// setup device objects for drawing
|
||||
m_pshader = D3D::CompileAndCreatePixelShader(fontpixshader, sizeof(fontpixshader));
|
||||
if (m_pshader == NULL) PanicAlert("Failed to create pixel shader, %s %d\n", __FILE__, __LINE__);
|
||||
D3D::SetDebugObjectName((ID3D11DeviceChild*)m_pshader, "pixel shader of a CD3DFont object");
|
||||
if (!m_pshader)
|
||||
PanicAlert("Failed to create pixel shader, %s %d\n", __FILE__, __LINE__);
|
||||
D3D::SetDebugObjectName(m_pshader, "pixel shader of a CD3DFont object");
|
||||
|
||||
D3DBlob* vsbytecode;
|
||||
D3D::CompileVertexShader(fontvertshader, sizeof(fontvertshader), &vsbytecode);
|
||||
if (vsbytecode == NULL) PanicAlert("Failed to compile vertex shader, %s %d\n", __FILE__, __LINE__);
|
||||
m_vshader = D3D::CreateVertexShaderFromByteCode(vsbytecode);
|
||||
if (m_vshader == NULL) PanicAlert("Failed to create vertex shader, %s %d\n", __FILE__, __LINE__);
|
||||
D3D::SetDebugObjectName((ID3D11DeviceChild*)m_vshader, "vertex shader of a CD3DFont object");
|
||||
SharedPtr<ID3D10Blob> vsbytecode;
|
||||
m_vshader = D3D::CompileAndCreateVertexShader(fontvertshader, sizeof(fontvertshader), std::addressof(vsbytecode));
|
||||
|
||||
if (!m_vshader)
|
||||
PanicAlert("Failed to compile/create vertex shader, %s %d\n", __FILE__, __LINE__);
|
||||
D3D::SetDebugObjectName(m_vshader, "vertex shader of a CD3DFont object");
|
||||
|
||||
const D3D11_INPUT_ELEMENT_DESC desc[] =
|
||||
{
|
||||
|
@ -281,9 +279,11 @@ int CD3DFont::Init()
|
|||
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||
};
|
||||
hr = D3D::device->CreateInputLayout(desc, 3, vsbytecode->Data(), vsbytecode->Size(), &m_InputLayout);
|
||||
if (FAILED(hr)) PanicAlert("Failed to create input layout, %s %d\n", __FILE__, __LINE__);
|
||||
SAFE_RELEASE(vsbytecode);
|
||||
|
||||
m_InputLayout = CreateInputLayoutShared(desc, 3, vsbytecode->GetBufferPointer(),
|
||||
vsbytecode->GetBufferSize());
|
||||
if (!m_InputLayout)
|
||||
PanicAlert("Failed to create input layout, %s %d\n", __FILE__, __LINE__);
|
||||
|
||||
D3D11_BLEND_DESC blenddesc;
|
||||
blenddesc.AlphaToCoverageEnable = FALSE;
|
||||
|
@ -296,34 +296,37 @@ int CD3DFont::Init()
|
|||
blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
|
||||
blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
|
||||
blenddesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
|
||||
hr = D3D::device->CreateBlendState(&blenddesc, &m_blendstate);
|
||||
CHECK(hr==S_OK, "Create font blend state");
|
||||
D3D::SetDebugObjectName((ID3D11DeviceChild*)m_blendstate, "blend state of a CD3DFont object");
|
||||
m_blendstate = CreateBlendStateShared(&blenddesc);
|
||||
CHECK(m_blendstate, "Create font blend state");
|
||||
D3D::SetDebugObjectName(m_blendstate, "blend state of a CD3DFont object");
|
||||
|
||||
D3D11_RASTERIZER_DESC rastdesc = CD3D11_RASTERIZER_DESC(D3D11_FILL_SOLID, D3D11_CULL_NONE, false, 0, 0.f, 0.f, false, false, false, false);
|
||||
hr = D3D::device->CreateRasterizerState(&rastdesc, &m_raststate);
|
||||
D3D11_RASTERIZER_DESC rastdesc = CD3D11_RASTERIZER_DESC(D3D11_FILL_SOLID, D3D11_CULL_NONE,
|
||||
false, 0, 0.f, 0.f, false, false, false, false);
|
||||
hr = D3D::g_device->CreateRasterizerState(&rastdesc, &m_raststate);
|
||||
CHECK(hr==S_OK, "Create font rasterizer state");
|
||||
D3D::SetDebugObjectName((ID3D11DeviceChild*)m_raststate, "rasterizer state of a CD3DFont object");
|
||||
D3D::SetDebugObjectName(m_raststate, "rasterizer state of a CD3DFont object");
|
||||
|
||||
D3D11_BUFFER_DESC vbdesc = CD3D11_BUFFER_DESC(MAX_NUM_VERTICES*sizeof(FONT2DVERTEX), D3D11_BIND_VERTEX_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
|
||||
if (FAILED(hr = device->CreateBuffer(&vbdesc, NULL, &m_pVB)))
|
||||
D3D11_BUFFER_DESC vbdesc = CD3D11_BUFFER_DESC(MAX_NUM_VERTICES * sizeof(FONT2DVERTEX),
|
||||
D3D11_BIND_VERTEX_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
|
||||
m_pVB = CreateBufferShared(&vbdesc, NULL);
|
||||
if (!m_pVB)
|
||||
{
|
||||
PanicAlert("Failed to create font vertex buffer at %s, line %d\n", __FILE__, __LINE__);
|
||||
return hr;
|
||||
}
|
||||
D3D::SetDebugObjectName((ID3D11DeviceChild*)m_pVB, "vertex buffer of a CD3DFont object");
|
||||
D3D::SetDebugObjectName(m_pVB, "vertex buffer of a CD3DFont object");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
int CD3DFont::Shutdown()
|
||||
{
|
||||
SAFE_RELEASE(m_pVB);
|
||||
m_pVB.reset();
|
||||
SAFE_RELEASE(m_pTexture);
|
||||
SAFE_RELEASE(m_InputLayout);
|
||||
SAFE_RELEASE(m_pshader);
|
||||
SAFE_RELEASE(m_vshader);
|
||||
m_InputLayout.reset();
|
||||
m_pshader.reset();
|
||||
m_vshader.reset();
|
||||
|
||||
SAFE_RELEASE(m_blendstate);
|
||||
m_blendstate.reset();
|
||||
SAFE_RELEASE(m_raststate);
|
||||
|
||||
return S_OK;
|
||||
|
@ -351,7 +354,7 @@ int CD3DFont::DrawTextScaled(float x, float y, float size, float spacing, u32 dw
|
|||
int dwNumTriangles = 0L;
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE vbmap;
|
||||
HRESULT hr = context->Map(m_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vbmap);
|
||||
HRESULT hr = g_context->Map(m_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vbmap);
|
||||
if (FAILED(hr)) PanicAlert("Mapping vertex buffer failed, %s %d\n", __FILE__, __LINE__);
|
||||
pVertices = (D3D::FONT2DVERTEX*)vbmap.pData;
|
||||
|
||||
|
@ -360,12 +363,12 @@ int CD3DFont::DrawTextScaled(float x, float y, float size, float spacing, u32 dw
|
|||
D3D::stateman->PushRasterizerState(m_raststate);
|
||||
D3D::stateman->Apply();
|
||||
|
||||
D3D::context->PSSetShader(m_pshader, NULL, 0);
|
||||
D3D::context->VSSetShader(m_vshader, NULL, 0);
|
||||
D3D::g_context->PSSetShader(m_pshader, NULL, 0);
|
||||
D3D::g_context->VSSetShader(m_vshader, NULL, 0);
|
||||
|
||||
D3D::context->IASetInputLayout(m_InputLayout);
|
||||
D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
D3D::context->PSSetShaderResources(0, 1, &m_pTexture);
|
||||
D3D::g_context->IASetInputLayout(m_InputLayout);
|
||||
D3D::g_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
D3D::g_context->PSSetShaderResources(0, 1, &m_pTexture);
|
||||
|
||||
float fStartX = sx;
|
||||
while (c = *strText++)
|
||||
|
@ -402,14 +405,14 @@ int CD3DFont::DrawTextScaled(float x, float y, float size, float spacing, u32 dw
|
|||
|
||||
if (dwNumTriangles * 3 > (MAX_NUM_VERTICES - 6))
|
||||
{
|
||||
context->Unmap(m_pVB, 0);
|
||||
g_context->Unmap(m_pVB, 0);
|
||||
|
||||
D3D::context->IASetVertexBuffers(0, 1, &m_pVB, &stride, &bufoffset);
|
||||
D3D::context->Draw(3 * dwNumTriangles, 0);
|
||||
D3D::g_context->IASetVertexBuffers(0, 1, &m_pVB, &stride, &bufoffset);
|
||||
D3D::g_context->Draw(3 * dwNumTriangles, 0);
|
||||
|
||||
dwNumTriangles = 0;
|
||||
D3D11_MAPPED_SUBRESOURCE vbmap;
|
||||
hr = context->Map(m_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vbmap);
|
||||
hr = g_context->Map(m_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vbmap);
|
||||
if (FAILED(hr)) PanicAlert("Mapping vertex buffer failed, %s %d\n", __FILE__, __LINE__);
|
||||
pVertices = (D3D::FONT2DVERTEX*)vbmap.pData;
|
||||
}
|
||||
|
@ -417,11 +420,11 @@ int CD3DFont::DrawTextScaled(float x, float y, float size, float spacing, u32 dw
|
|||
}
|
||||
|
||||
// Unlock and render the vertex buffer
|
||||
context->Unmap(m_pVB, 0);
|
||||
g_context->Unmap(m_pVB, 0);
|
||||
if (dwNumTriangles > 0)
|
||||
{
|
||||
D3D::context->IASetVertexBuffers(0, 1, &m_pVB, &stride, &bufoffset);
|
||||
D3D::context->Draw(3 * dwNumTriangles, 0);
|
||||
D3D::g_context->IASetVertexBuffers(0, 1, &m_pVB, &stride, &bufoffset);
|
||||
D3D::g_context->Draw(3 * dwNumTriangles, 0);
|
||||
}
|
||||
D3D::stateman->PopBlendState();
|
||||
D3D::stateman->PopRasterizerState();
|
||||
|
@ -467,18 +470,25 @@ bool stq_observer, stsq_observer, cq_observer, clearq_observer;
|
|||
|
||||
void InitUtils()
|
||||
{
|
||||
util_vbuf = new UtilVertexBuffer(0x4000);
|
||||
util_vbuf.reset(new UtilVertexBuffer(0x4000));
|
||||
|
||||
float border[4] = { 0.f, 0.f, 0.f, 0.f };
|
||||
D3D11_SAMPLER_DESC samDesc = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_POINT, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, 0.f, 1, D3D11_COMPARISON_ALWAYS, border, 0.f, 0.f);
|
||||
HRESULT hr = D3D::device->CreateSamplerState(&samDesc, &point_copy_sampler);
|
||||
if (FAILED(hr)) PanicAlert("Failed to create sampler state at %s %d\n", __FILE__, __LINE__);
|
||||
else SetDebugObjectName((ID3D11DeviceChild*)point_copy_sampler, "point copy sampler state");
|
||||
const float border[4] = { 0.f, 0.f, 0.f, 0.f };
|
||||
D3D11_SAMPLER_DESC samDesc = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_POINT,
|
||||
D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER,
|
||||
0.f, 1, D3D11_COMPARISON_ALWAYS, border, 0.f, 0.f);
|
||||
HRESULT hr = D3D::g_device->CreateSamplerState(&samDesc, &point_copy_sampler);
|
||||
if (FAILED(hr))
|
||||
PanicAlert("Failed to create sampler state at %s %d\n", __FILE__, __LINE__);
|
||||
else
|
||||
SetDebugObjectName(point_copy_sampler, "point copy sampler state");
|
||||
|
||||
samDesc = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, 0.f, 1, D3D11_COMPARISON_ALWAYS, border, 0.f, 0.f);
|
||||
hr = D3D::device->CreateSamplerState(&samDesc, &linear_copy_sampler);
|
||||
if (FAILED(hr)) PanicAlert("Failed to create sampler state at %s %d\n", __FILE__, __LINE__);
|
||||
else SetDebugObjectName((ID3D11DeviceChild*)linear_copy_sampler, "linear copy sampler state");
|
||||
samDesc = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_BORDER,
|
||||
D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, 0.f, 1, D3D11_COMPARISON_ALWAYS, border, 0.f, 0.f);
|
||||
hr = D3D::g_device->CreateSamplerState(&samDesc, &linear_copy_sampler);
|
||||
if (FAILED(hr))
|
||||
PanicAlert("Failed to create sampler state at %s %d\n", __FILE__, __LINE__);
|
||||
else
|
||||
SetDebugObjectName(linear_copy_sampler, "linear copy sampler state");
|
||||
|
||||
// cached data used to avoid unnecessarily reloading the vertex buffers
|
||||
memset(&tex_quad_data, 0, sizeof(tex_quad_data));
|
||||
|
@ -501,17 +511,17 @@ void ShutdownUtils()
|
|||
font.Shutdown();
|
||||
SAFE_RELEASE(point_copy_sampler);
|
||||
SAFE_RELEASE(linear_copy_sampler);
|
||||
SAFE_DELETE(util_vbuf);
|
||||
util_vbuf.reset();
|
||||
}
|
||||
|
||||
void SetPointCopySampler()
|
||||
{
|
||||
D3D::context->PSSetSamplers(0, 1, &point_copy_sampler);
|
||||
D3D::g_context->PSSetSamplers(0, 1, &point_copy_sampler);
|
||||
}
|
||||
|
||||
void SetLinearCopySampler()
|
||||
{
|
||||
D3D::context->PSSetSamplers(0, 1, &linear_copy_sampler);
|
||||
D3D::g_context->PSSetSamplers(0, 1, &linear_copy_sampler);
|
||||
}
|
||||
|
||||
void drawShadedTexQuad(ID3D11ShaderResourceView* texture,
|
||||
|
@ -555,17 +565,17 @@ void drawShadedTexQuad(ID3D11ShaderResourceView* texture,
|
|||
UINT stride = sizeof(STQVertex);
|
||||
UINT offset = 0;
|
||||
|
||||
D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
D3D::context->IASetInputLayout(layout);
|
||||
D3D::context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
D3D::context->PSSetShader(PShader, NULL, 0);
|
||||
D3D::context->PSSetShaderResources(0, 1, &texture);
|
||||
D3D::context->VSSetShader(Vshader, NULL, 0);
|
||||
D3D::g_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
D3D::g_context->IASetInputLayout(layout);
|
||||
D3D::g_context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
D3D::g_context->PSSetShader(PShader, NULL, 0);
|
||||
D3D::g_context->PSSetShaderResources(0, 1, &texture);
|
||||
D3D::g_context->VSSetShader(Vshader, NULL, 0);
|
||||
D3D::stateman->Apply();
|
||||
D3D::context->Draw(4, stq_offset);
|
||||
D3D::g_context->Draw(4, stq_offset);
|
||||
|
||||
ID3D11ShaderResourceView* texres = NULL;
|
||||
context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
|
||||
g_context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
|
||||
}
|
||||
|
||||
void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
|
||||
|
@ -612,17 +622,17 @@ void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
|
|||
UINT stride = sizeof(STSQVertex);
|
||||
UINT offset = 0;
|
||||
|
||||
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
context->IASetInputLayout(layout);
|
||||
context->PSSetShaderResources(0, 1, &texture);
|
||||
context->PSSetShader(PShader, NULL, 0);
|
||||
context->VSSetShader(Vshader, NULL, 0);
|
||||
g_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
g_context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
g_context->IASetInputLayout(layout);
|
||||
g_context->PSSetShaderResources(0, 1, &texture);
|
||||
g_context->PSSetShader(PShader, NULL, 0);
|
||||
g_context->VSSetShader(Vshader, NULL, 0);
|
||||
stateman->Apply();
|
||||
context->Draw(4, stsq_offset);
|
||||
g_context->Draw(4, stsq_offset);
|
||||
|
||||
ID3D11ShaderResourceView* texres = NULL;
|
||||
context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
|
||||
g_context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
|
||||
}
|
||||
|
||||
// Fills a certain area of the current render target with the specified color
|
||||
|
@ -651,17 +661,17 @@ void drawColorQuad(u32 Color, float x1, float y1, float x2, float y2)
|
|||
draw_quad_data.col = Color;
|
||||
}
|
||||
|
||||
context->VSSetShader(VertexShaderCache::GetClearVertexShader(), NULL, 0);
|
||||
context->PSSetShader(PixelShaderCache::GetClearProgram(), NULL, 0);
|
||||
context->IASetInputLayout(VertexShaderCache::GetClearInputLayout());
|
||||
g_context->VSSetShader(VertexShaderCache::GetClearVertexShader(), NULL, 0);
|
||||
g_context->PSSetShader(PixelShaderCache::GetClearProgram(), NULL, 0);
|
||||
g_context->IASetInputLayout(VertexShaderCache::GetClearInputLayout());
|
||||
|
||||
UINT stride = sizeof(ColVertex);
|
||||
UINT offset = 0;
|
||||
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
g_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
g_context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
|
||||
stateman->Apply();
|
||||
context->Draw(4, cq_offset);
|
||||
g_context->Draw(4, cq_offset);
|
||||
}
|
||||
|
||||
void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexShader* Vshader, ID3D11InputLayout* layout)
|
||||
|
@ -681,16 +691,16 @@ void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexS
|
|||
clear_quad_data.col = Color;
|
||||
clear_quad_data.z = z;
|
||||
}
|
||||
context->VSSetShader(Vshader, NULL, 0);
|
||||
context->PSSetShader(PShader, NULL, 0);
|
||||
context->IASetInputLayout(layout);
|
||||
g_context->VSSetShader(Vshader, NULL, 0);
|
||||
g_context->PSSetShader(PShader, NULL, 0);
|
||||
g_context->IASetInputLayout(layout);
|
||||
|
||||
UINT stride = sizeof(ClearVertex);
|
||||
UINT offset = 0;
|
||||
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
g_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
g_context->IASetVertexBuffers(0, 1, &util_vbuf->GetBuffer(), &stride, &offset);
|
||||
stateman->Apply();
|
||||
context->Draw(4, clearq_offset);
|
||||
g_context->Draw(4, clearq_offset);
|
||||
}
|
||||
|
||||
} // namespace D3D
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue