Skip to content

Commit

Permalink
20200111
Browse files Browse the repository at this point in the history
  • Loading branch information
cflw committed Jan 11, 2020
1 parent f58bc0a commit aef0704
Show file tree
Hide file tree
Showing 13 changed files with 150 additions and 94 deletions.
3 changes: 2 additions & 1 deletion cflw代码库/cflw代码库.vcxproj.user
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
11 changes: 6 additions & 5 deletions cflw代码库/cflw图形_d2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -451,11 +451,12 @@ void C画文本::f绘制文本布局(IDWriteTextLayout *a布局) const {
}
void C画文本::f绘制文本布局(IDWriteTextLayout *a布局, IDWriteTextRenderer *a文本渲染) const {
assert(a文本渲染);
ComPtr<ID2D1Layer> v层;
m渲染目标->CreateLayer(&v层);
m渲染目标->PushLayer({D2D1::InfiniteRect(), nullptr, D2D1_ANTIALIAS_MODE_ALIASED, D2D1::IdentityMatrix(), 1, m画笔.Get(), D2D1_LAYER_OPTIONS_NONE}, v层.Get());
//注意:入层出层会大幅度降低效率
//ComPtr<ID2D1Layer> v层;
//m渲染目标->CreateLayer(&v层);
//m渲染目标->PushLayer({D2D1::InfiniteRect(), nullptr, D2D1_ANTIALIAS_MODE_ALIASED, D2D1::IdentityMatrix(), 1, m画笔.Get(), D2D1_LAYER_OPTIONS_NONE}, v层.Get());
a布局->Draw(nullptr, a文本渲染, m矩形.left, m矩形.top);
m渲染目标->PopLayer();
//m渲染目标->PopLayer();
}
void C画文本::f绘制文本布局(C修改文本布局 &a布局) const {
f绘制文本布局(a布局.m布局);
Expand Down Expand Up @@ -573,7 +574,7 @@ void C修改路径几何::f直线(const 数学::S向量2 &a0, const 数学::S向
}
void C修改路径几何::f圆弧(const 数学::S向量2 &a圆心, float a半径, float a始, float a弧度, bool a顺时针) {
assert(a弧度 <= 数学::c二π<float>);
const float v方向符号 = a顺时针 ? -1 : 1;
const float v方向符号 = a顺时针 ? -1.f : 1.f;
const 数学::S向量2 v开始点 = a圆心 + 数学::S向量2::fc方向r(a半径, a始);
const 数学::S向量2 v结束点 = a圆心 + 数学::S向量2::fc方向r(a半径, a始 + v方向符号 * a弧度);
const D2D1_SWEEP_DIRECTION v顺时针 = a顺时针 ? D2D1_SWEEP_DIRECTION_CLOCKWISE : D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE;
Expand Down
2 changes: 1 addition & 1 deletion cflw代码库/cflw图形_d2d.inl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "cflw图形_d2d.h"
namespace cflw::图形::d2d {
template<typename t> ComPtr<IDXGISurface> f取表面(const ComPtr<t> &a) {
Expand Down
45 changes: 23 additions & 22 deletions cflw代码库/cflw图形_d3d12.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ HRESULT C三维::f初始化设备(HRESULT(C创建设备::*af取显卡)(IDXGIAdap
HRESULT hr = S_OK;
ComPtr<IDXGIAdapter3> v显卡;
if (af取显卡 == nullptr) {
af取显卡 = &C创建设备::f取显卡_首选;
af取显卡 = &C创建设备::f取显卡_性能;
}
hr = (v创建设备.*af取显卡)(&v显卡);
if (FAILED(hr)) {
Expand Down Expand Up @@ -254,6 +254,7 @@ HRESULT C三维::f创建图形管线(tp图形管线 &a, const D3D12_GRAPHICS_PIP
}
assert(a描述.PrimitiveTopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED);
//创建
//注意:I卡可能会报错D3D12 ERROR: ID3D12Device::CreateVertexShader: Shader is corrupt or in an unrecognized format. [ STATE_CREATION ERROR #67: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]。换成其他显卡则正常。
HRESULT hr = m设备->CreateGraphicsPipelineState(&a描述, IID_PPV_ARGS(&a));
if (FAILED(hr)) {
return hr;
Expand Down Expand Up @@ -505,7 +506,11 @@ HRESULT C创建设备::f取软件适配器(IDXGIAdapter3 **a显卡) {
return m工厂->EnumWarpAdapter(IID_PPV_ARGS(a显卡));
}
HRESULT C创建设备::f创建设备(IDXGIAdapter3 *a显卡, ID3D12Device **a设备) {
HRESULT hr = D3D12CreateDevice(a显卡, c最低功能级别, IID_PPV_ARGS(a设备));
HRESULT hr = D3D12EnableExperimentalFeatures(1, &D3D12ExperimentalShaderModels, nullptr, nullptr);
if (FAILED(hr)) {
return hr;
}
hr = D3D12CreateDevice(a显卡, c最低功能级别, IID_PPV_ARGS(a设备));
return hr;
}
//==============================================================================
Expand Down Expand Up @@ -675,14 +680,6 @@ const D3D12_CPU_DESCRIPTOR_HANDLE &C深度模板管理::fg当前视图() const {
ID3D12Resource *C深度模板管理::fg当前资源() const {
return m深度模板[*m帧索引].Get();
}

//==============================================================================
// 资源
//==============================================================================
void C常量缓冲::f复制(void *a数据, size_t a大小) {
assert(m映射);
memcpy(m映射, a数据, a大小);
}
//==============================================================================
// 渲染状态
//==============================================================================
Expand Down Expand Up @@ -839,7 +836,7 @@ void C根签名参数::f清空() {
}
C根签名参数 &C根签名参数::f添加描述符(E类型 a类型, UINT a寄存器, UINT a空间, E着色器 a可见性) {
f实现_添加索引(E根参数类型::e描述符);
D3D12_ROOT_PARAMETER v参数;
D3D12_ROOT_PARAMETER v参数 = {};
v参数.ParameterType = f计算根参数类型(a类型);
v参数.Descriptor.ShaderRegister = a寄存器;
v参数.Descriptor.RegisterSpace = a空间;
Expand Down Expand Up @@ -964,14 +961,26 @@ D3D12_DESCRIPTOR_RANGE_TYPE C根签名参数::f计算描述范围类型(E类型
//==============================================================================
C自动映射::C自动映射(ID3D12Resource *a):
m资源(a) {
HRESULT hr = m资源->Map(0, nullptr, &m指针);
HRESULT hr = m资源->Map(0, nullptr, (void**)&m数据);
if (FAILED(hr)) {
throw;
}
}
C自动映射::~C自动映射() {
m资源->Unmap(0, nullptr);
}
void C自动映射::f映射并复制(ID3D12Resource *a资源, const void *a数据, size_t a大小) {
void *v数据;
HRESULT hr = a资源->Map(0, nullptr, &v数据);
if (FAILED(hr)) {
throw;
}
memcpy(v数据, a数据, a大小);
a资源->Unmap(0, nullptr);
}
void C自动映射::f复制(const void *a数据, size_t a大小) {
memcpy(m数据, a数据, a大小);
}
//==============================================================================
// 资源工厂
//==============================================================================
Expand All @@ -997,13 +1006,7 @@ HRESULT C缓冲工厂::f创建上传资源(ComPtr<ID3D12Resource> &a, const void
}
a->SetName(L"上传");
if (a数据) {
void *vp;
hr = a->Map(0, nullptr, &vp);
if (FAILED(hr)) {
return hr;
}
memcpy(vp, a数据, a数据大小);
a->Unmap(0, nullptr);
C自动映射::f映射并复制(a.Get(), a数据, a数据大小);
}
return S_OK;
}
Expand Down Expand Up @@ -1071,9 +1074,7 @@ HRESULT C缓冲工厂::f创建常量(tp常量 &a, const void *a数据, UINT a类
if (FAILED(hr)) {
return hr;
}
const D3D12_RANGE v范围{0, 0};
v->m资源->Map(0, &v范围, (void**)&v->m映射);
memcpy(v->m映射, a数据, a数据大小);
C自动映射::f映射并复制(v->m资源.Get(), a数据, a数据大小);
//结束
a = std::move(v);
return S_OK;
Expand Down
7 changes: 3 additions & 4 deletions cflw代码库/cflw图形_d3d12.h
Original file line number Diff line number Diff line change
Expand Up @@ -392,11 +392,8 @@ class C常量缓冲 {
operator D3D12_GPU_VIRTUAL_ADDRESS() const {
return m资源->GetGPUVirtualAddress();
}
void f复制(void *数据, size_t a大小);
ComPtr<ID3D12Resource> m资源;
ComPtr<ID3D12DescriptorHeap> m描述符堆;
std::byte *m映射;
const UINT *m帧索引;
};
class C顶点缓冲 {
public:
Expand Down Expand Up @@ -458,8 +455,10 @@ class C自动映射 {
public:
C自动映射(ID3D12Resource*);
~C自动映射();
static void f映射并复制(ID3D12Resource *资源, const void *数据, size_t 大小);
void f复制(const void *数据, size_t 大小);
ComPtr<ID3D12Resource> m资源;
void *m指针;
std::byte *m数据 = nullptr;
};
//==============================================================================
// 工厂
Expand Down
14 changes: 12 additions & 2 deletions cflw代码库/cflw图形_dx着色器.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "cflw图形_dx着色器.h"
#include <sstream>
#include "cflw图形_dx着色器.h"
namespace cflw::图形::dx着色器 {
HRESULT C着色器工厂::f初始化(const wchar_t *a着色模型) {
HRESULT hr;
Expand Down Expand Up @@ -48,8 +49,17 @@ HRESULT C着色器工厂::f编译着色器(ComPtr<IDxcBlob> &a输出, const wcha
if (FAILED(hr)) {
return hr;
}
static const wchar_t *va参数[] = {
#ifdef _DEBUG
L"-Zi", //DXC_ARG_DEBUG
L"-Od", //DXC_ARG_SKIP_OPTIMIZATIONS
#else
L"-O3", //DXC_ARG_OPTIMIZATION_LEVEL3
#endif
//L"-Vd", //DXC_ARG_SKIP_VALIDATION
};
ComPtr<IDxcOperationResult> v结果;
hr = m编译器->Compile(v源.Get(), a文件名, a入口, a着色模型, nullptr, 0, nullptr, 0, nullptr, &v结果);
hr = m编译器->Compile(v源.Get(), a文件名, a入口, a着色模型, va参数, _countof(va参数), nullptr, 0, nullptr, &v结果);
if (FAILED(hr)) {
return hr;
}
Expand Down
4 changes: 2 additions & 2 deletions cflw代码库/cflw工具_循环.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,10 @@ template<typename t容器> class C前后 final : public I循环<C前后<t容器>
typedef decltype(std::declval<t容器>().begin()) t迭代器;
struct S引用 {
t指针 m前, m这, m后;
bool fw前() const {
bool fi前() const {
return m前 == m这;
}
bool fw后() const {
bool fi后() const {
return m后 == m这;
}
};
Expand Down
60 changes: 33 additions & 27 deletions cflw代码库/cflw数学_平面几何.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,19 +266,18 @@ S圆形 S圆形::fc坐标半径(const S向量2 &a坐标, float a半径) {
S圆形 S圆形::fc坐标直径(const S向量2 &a坐标, float a直径) {
return S圆形(a坐标, a直径 * 0.5f);
}
S向量2 S圆形::f取点r(const float &r) const {
S向量2 S圆形::fg点r(const float &r) const {
S向量2 v = S向量2::fc方向r(m半径, r);
v += m坐标;
return v;
return v + m坐标;
}
S向量2 S圆形::f取点d(const float &d) const {
return f取点r(d * c度到弧度<float>);
S向量2 S圆形::fg点d(const float &d) const {
return fg点r(d * c度到弧度<float>);
}
S向量2 S圆形::f离边最近点(const S圆形 &p圆) const {
const float m方向1 = m坐标.f到点方向r(p圆.m坐标);
const S向量2 m点1 = f取点r(m方向1);
const S向量2 m点1 = fg点r(m方向1);
const float m方向2 = p圆.m坐标.f到点方向r(m坐标);
const S向量2 m点2 = p圆.f取点r(m方向2);
const S向量2 m点2 = p圆.fgr(m方向2);
return S向量2((m点1.x + m点2.x) / 2, (m点1.y + m点2.y) / 2);
}
bool S圆形::f包含判定(const S向量2 &p) const {
Expand Down Expand Up @@ -331,6 +330,12 @@ S矩形 S矩形::fc对角点(const S向量2 &a, const S向量2 &b) {
v.m半尺寸.y = std::abs(a.y - b.y) / 2;
return v;
}
S向量2 S矩形::fg点(float X, float Y) const {
S向量2 v顶点;
v顶点.x = X * m半尺寸.x;
v顶点.y = Y * m半尺寸.y;
return v顶点 + m坐标;
}
S向量2 S矩形::fg中心() const {
return m坐标;
}
Expand Down Expand Up @@ -384,6 +389,9 @@ S矩形 S矩形::f下边移(float y) const {
S旋转矩形::S旋转矩形(const S向量2 &a坐标, const S向量2 &a半尺寸, float a方向):
m坐标(a坐标), m半尺寸(a半尺寸), m方向(a方向) {
}
S旋转矩形::S旋转矩形(const S矩形 &a矩形, float a方向):
m坐标(a矩形.m坐标), m半尺寸(a矩形.m半尺寸), m方向(a方向) {
}
S旋转矩形 S旋转矩形::fc线段(const S向量2 &a点0, const S向量2 &a点1, float a宽) {
S旋转矩形 v;
v.m坐标 = (a点0 + a点1) / 2;
Expand Down Expand Up @@ -450,11 +458,9 @@ S窗口矩形 S旋转矩形::f到窗口矩形(float x, float y) {
// 窗口矩形
//=============================================================================
S窗口矩形::S窗口矩形() :S窗口矩形{0, 0, 0, 0} {}
S窗口矩形::S窗口矩形(float p左, float p上, float p右, float p下) :
m左(p左),
m上(p上),
m右(p右),
m下(p下) {}
S窗口矩形::S窗口矩形(float a左, float a上, float a右, float a下) :
m左(a左), m上(a上), m右(a右), m下(a下) {
}
S窗口矩形::S窗口矩形(const S向量2 &a1, const S向量2 &a2) {
if (a1.x < a2.x) {
m左 = a1.x;
Expand All @@ -471,8 +477,8 @@ S窗口矩形::S窗口矩形(const S向量2 &a1, const S向量2 &a2) {
m下 = a1.x;
}
}
S窗口矩形 S窗口矩形::fc坐标半尺寸(const S向量2 &a坐标, const S向量2 &p半尺寸) {
return{a坐标.x - p半尺寸.x, a坐标.y - p半尺寸.y, a坐标.x + p半尺寸.x, a坐标.y + p半尺寸.y};
S窗口矩形 S窗口矩形::fc坐标半尺寸(const S向量2 &a坐标, const S向量2 &a半尺寸) {
return{a坐标.x - a半尺寸.x, a坐标.y - a半尺寸.y, a坐标.x + a半尺寸.x, a坐标.y + a半尺寸.y};
}
float S窗口矩形::fg宽() {
return m右 - m左;
Expand All @@ -486,25 +492,25 @@ S向量2 S窗口矩形::fg中心() {
S向量2 S窗口矩形::fg半尺寸() {
return{fg宽() / 2, fg高() / 2};
}
S窗口矩形 S窗口矩形::f对齐左边(float p) {
return{p, m上, p + fg宽(), m下};
S窗口矩形 S窗口矩形::f对齐左边(float a左) {
return{a左, m上, a左 + fg宽(), m下};
}
S窗口矩形 S窗口矩形::f对齐上边(float p) {
return{m左, p, m右, p + fg高()};
S窗口矩形 S窗口矩形::f对齐上边(float a上) {
return{m左, a上, m右, a上 + fg高()};
}
S窗口矩形 S窗口矩形::f对齐右边(float p) {
return{p - fg宽(), m上, p, m下};
S窗口矩形 S窗口矩形::f对齐右边(float a右) {
return{a右 - fg宽(), m上, a右, m下};
}
S窗口矩形 S窗口矩形::f对齐下边(float p) {
return{m左, p - fg高(), m右, p};
S窗口矩形 S窗口矩形::f对齐下边(float a下) {
return{m左, a下 - fg高(), m右, a下};
}
S窗口矩形 S窗口矩形::f对齐中心(const S向量2 &p) {
S窗口矩形 S窗口矩形::f对齐中心(const S向量2 &a中心) {
const float m半宽 = fg宽() / 2;
const float m半高 = fg高() / 2;
return{p.x - m半宽, p.y - m半高, p.x + m半宽, p.y + m半高};
return{a中心.x - m半宽, a中心.y - m半高, a中心.x + m半宽, a中心.y + m半高};
}
S窗口矩形 S窗口矩形::f移动(const S向量2 &p) {
return{m左 + p.x, m上 + p.y, m右 + p.x, m下 + p.y};
S窗口矩形 S窗口矩形::f移动(const S向量2 &a移动) {
return{m左 + a移动.x, m上 + a移动.y, m右 + a移动.x, m下 + a移动.y};
}
S旋转矩形 S窗口矩形::f到直角矩形(float x, float y) {
S向量2 m中心 = fg中心();
Expand Down Expand Up @@ -845,7 +851,7 @@ S向量2 S旋转椭圆::f取点(float t) const {
// 圆角矩形
//=============================================================================
S圆角矩形::S圆角矩形() : m坐标(), m半尺寸(), m角半径() {}
S圆角矩形::S圆角矩形(const S向量2 &a坐标, const S向量2 &p半尺寸, const S向量2 &p角半径) : m坐标(a坐标), m半尺寸(p半尺寸), m角半径(p角半径) {}
S圆角矩形::S圆角矩形(const S向量2 &a坐标, const S向量2 &a半尺寸, const S向量2 &p角半径) : m坐标(a坐标), m半尺寸(a半尺寸), m角半径(p角半径) {}


}
6 changes: 4 additions & 2 deletions cflw代码库/cflw数学_平面几何.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ struct S圆形 {
S圆形(const S向量2 &, const float &);
static S圆形 fc坐标半径(const S向量2 &, float);
static S圆形 fc坐标直径(const S向量2 &, float);
S向量2 f取点r(const float &方向) const;
S向量2 f取点d(const float &方向) const;
S向量2 fg点r(const float &方向) const;
S向量2 fg点d(const float &方向) const;
S向量2 f离边最近点(const S圆形 &) const;
bool f包含判定(const S向量2 &) const;
float f中线切线夹角r(const S向量2 &) const; //中线=过圆心与一点的直线
Expand All @@ -41,6 +41,7 @@ struct S矩形 {
static S矩形 fc坐标半尺寸(const S向量2 &, const S向量2 &);
static S矩形 fc正方形(const S向量2 &, float 边长);
static S矩形 fc对角点(const S向量2 &, const S向量2 &);
S向量2 fg点(float x, float y) const;
S向量2 fg中心() const;
S向量2 fg半尺寸() const;
S向量2 fg尺寸() const;
Expand All @@ -61,6 +62,7 @@ struct S旋转矩形 {
float m方向 = 0;
S旋转矩形() = default;
S旋转矩形(const S向量2 &, const S向量2 &, float);
S旋转矩形(const S矩形 &, float);
static S旋转矩形 fc线段(const S向量2 &, const S向量2 &, float 宽度 = 0);
static S旋转矩形 fc左上右下(float 左, float 上, float 右, float 下, float 方向 = 0);
static S旋转矩形 fc坐标尺寸(const S向量2 &, const S向量2 &, float 方向 = 0);
Expand Down
Loading

0 comments on commit aef0704

Please sign in to comment.