mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
feat: 不再使用顶点缓冲区,而是由顶点着色器生成坐标
This commit is contained in:
parent
1bacd72ee7
commit
fe476338ce
10 changed files with 274 additions and 337 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#include "pch.h"
|
||||
#include "CursorRenderer.h"
|
||||
#include "App.h"
|
||||
#include "Utils.h"
|
||||
|
||||
using namespace DirectX;
|
||||
|
||||
|
|
@ -54,7 +55,7 @@ bool CursorRenderer::Initialize(ComPtr<ID3D11Texture2D> input, ComPtr<ID3D11Text
|
|||
destRect.bottom = destRect.top + inputDesc.Height;
|
||||
}
|
||||
|
||||
if (App::GetInstance().IsAdjustCursorSpeed()) {
|
||||
/*if (App::GetInstance().IsAdjustCursorSpeed()) {
|
||||
// 设置鼠标移动速度
|
||||
if (SystemParametersInfo(SPI_GETMOUSESPEED, 0, &_cursorSpeed, 0)) {
|
||||
const RECT& srcClient = app.GetSrcClientRect();
|
||||
|
|
@ -71,7 +72,7 @@ bool CursorRenderer::Initialize(ComPtr<ID3D11Texture2D> input, ComPtr<ID3D11Text
|
|||
}
|
||||
|
||||
SPDLOG_LOGGER_INFO(logger, "已调整光标移速");
|
||||
}
|
||||
}*/
|
||||
|
||||
HRESULT hr = renderer.GetRenderTargetView(output.Get(), &_outputRtv);
|
||||
if (FAILED(hr)) {
|
||||
|
|
@ -88,44 +89,16 @@ bool CursorRenderer::Initialize(ComPtr<ID3D11Texture2D> input, ComPtr<ID3D11Text
|
|||
_vp.MinDepth = 0.0f;
|
||||
_vp.MaxDepth = 1.0f;
|
||||
|
||||
_vsShader = renderer.GetVSShader();
|
||||
_vtxLayout = renderer.GetInputLayout();
|
||||
_sampler = renderer.GetSampler(Renderer::FilterType::POINT).Get();
|
||||
|
||||
SimpleVertex vertices[] = {
|
||||
{ XMFLOAT3(-1.0f, 1.0f, 0.5f), XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f) },
|
||||
{ XMFLOAT3(1.0f, 1.0f, 0.5f), XMFLOAT4(1.0f, 0.0f, 0.0f, 0.0f) },
|
||||
{ XMFLOAT3(-1.0f, -1.0f, 0.5f), XMFLOAT4(0.0f, 1.0f, 0.0f, 0.0f) },
|
||||
{ XMFLOAT3(1.0f, -1.0f, 0.5f), XMFLOAT4(1.0f, 1.0f, 0.0f, 0.0f) }
|
||||
};
|
||||
D3D11_BUFFER_DESC bd = {};
|
||||
bd.Usage = D3D11_USAGE_DEFAULT;
|
||||
bd.ByteWidth = sizeof(vertices);
|
||||
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||
|
||||
D3D11_SUBRESOURCE_DATA InitData = {};
|
||||
InitData.pSysMem = vertices;
|
||||
hr = _d3dDevice->CreateBuffer(&bd, &InitData, &_vtxBuffer);
|
||||
if (FAILED(hr)) {
|
||||
SPDLOG_LOGGER_ERROR(logger, fmt::sprintf("创建顶点缓冲区失败\n\tHRESULT:0x%X", hr));
|
||||
return false;
|
||||
}
|
||||
|
||||
ComPtr<ID3DBlob> blob = nullptr;
|
||||
ComPtr<ID3DBlob> errorMsgs = nullptr;
|
||||
hr = D3DCompile(pixelShader, sizeof(pixelShader), nullptr, nullptr, nullptr,
|
||||
"PS", "ps_5_0", D3DCOMPILE_ENABLE_STRICTNESS, 0, &blob, &errorMsgs);
|
||||
if (FAILED(hr)) {
|
||||
if (errorMsgs) {
|
||||
SPDLOG_LOGGER_ERROR(logger, fmt::sprintf(
|
||||
"编译像素着色器失败:%s\n\tHRESULT:0x%X", (const char*)errorMsgs->GetBufferPointer(), hr));
|
||||
}
|
||||
if (!Utils::CompilePixelShader(pixelShader, sizeof(pixelShader), &blob)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
hr = renderer.GetD3DDevice()->CreatePixelShader(blob->GetBufferPointer(), blob->GetBufferSize(), nullptr, &_psShader);
|
||||
if (FAILED(hr)) {
|
||||
SPDLOG_LOGGER_CRITICAL(logger, fmt::sprintf("创建像素着色器失败\n\tHRESULT:0x%X", hr));
|
||||
SPDLOG_LOGGER_ERROR(logger, fmt::sprintf("创建像素着色器失败\n\tHRESULT:0x%X", hr));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -153,15 +126,6 @@ void CursorRenderer::Draw() {
|
|||
_d3dDC->OMSetRenderTargets(1, &_outputRtv, nullptr);
|
||||
_d3dDC->RSSetViewports(1, &_vp);
|
||||
|
||||
_d3dDC->IASetInputLayout(_vtxLayout.Get());
|
||||
|
||||
UINT stride = sizeof(SimpleVertex);
|
||||
UINT offset = 0;
|
||||
auto t = _vtxBuffer.Get();
|
||||
_d3dDC->IASetVertexBuffers(0, 1, &t, &stride, &offset);
|
||||
|
||||
_d3dDC->VSSetShader(_vsShader.Get(), nullptr, 0);
|
||||
|
||||
_d3dDC->PSSetShader(_psShader.Get(), nullptr, 0);
|
||||
_d3dDC->PSSetSamplers(0, 1, &_sampler);
|
||||
_d3dDC->PSSetShaderResources(0, 1, &_inputSrv);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue