Direct2Dを試す

まだ案件が決まったわけでは無いので、

ネットでよい記事が無いかを探していたところ、

こちらが見つかりました。

http://dioltista.blogspot.com/2019/04/c-directx11_25.html

#pragma once

#include <windows.h>

class Window
{
public:
    HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow);
    static HWND GethWnd();
private:
    static HWND g_hWnd;
};
#include "Main.h"
#include "DirectX.h"

HWND Window::g_hWnd = nullptr;

//--------------------------------------------------------------------------------------
// 前方宣言
//--------------------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    Window win;

    if (FAILED(win.InitWindow(hInstance, nCmdShow)))
        return 0;

    DirectX11 dx;

    if (FAILED(dx.InitDevice()))
        return 0;

    // メインメッセージループ
    MSG msg = { 0 };
    while (WM_QUIT != msg.message)
    {
        if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            dx.Render();
        }
    }

    return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return 0;
}

HRESULT Window::InitWindow(HINSTANCE hInstance, int nCmdShow)
{
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = nullptr;
    wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName = nullptr;
    wcex.lpszClassName = L"WindowClass";
    wcex.hIconSm = nullptr;
    if (!RegisterClassEx(&wcex))
        return E_FAIL;

    RECT rc = { 0, 0, 800, 600 };
    AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
    g_hWnd = CreateWindow(L"WindowClass", L"DirectX11の初期化(クラス化)",
        WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
        CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInstance,
        nullptr);
    if (!g_hWnd)
        return E_FAIL;

    ShowWindow(g_hWnd, nCmdShow);

    return S_OK;
}

HWND Window::GethWnd()
{
    return g_hWnd;
}
#pragma once

#pragma comment(lib,"d3d11.lib")
#include <d3d11_1.h>
#include <directxcolors.h>

class DirectX11
{
public:
    DirectX11();
    ~DirectX11();
    HRESULT InitDevice();
    void Render();
private:
    ID3D11Device* pd3dDevice;
    ID3D11Device1* pd3dDevice1;
    ID3D11DeviceContext* pImmediateContext;
    ID3D11DeviceContext1* pImmediateContext1;
    IDXGISwapChain* pSwapChain;
    IDXGISwapChain1* pSwapChain1;
    ID3D11RenderTargetView* pRenderTargetView;
};
#include "Main.h"
#include "DirectX.h"

DirectX11::DirectX11()
{
    pd3dDevice = nullptr;
    pd3dDevice1 = nullptr;
    pImmediateContext = nullptr;
    pImmediateContext1 = nullptr;
    pSwapChain = nullptr;
    pSwapChain1 = nullptr;
    pRenderTargetView = nullptr;
}

DirectX11::~DirectX11()
{
    if (pImmediateContext) pImmediateContext->ClearState();

    if (pRenderTargetView) pRenderTargetView->Release();
    if (pSwapChain1) pSwapChain1->Release();
    if (pSwapChain) pSwapChain->Release();
    if (pImmediateContext1) pImmediateContext1->Release();
    if (pImmediateContext) pImmediateContext->Release();
    if (pd3dDevice1) pd3dDevice1->Release();
    if (pd3dDevice) pd3dDevice->Release();
}

HRESULT DirectX11::InitDevice()
{
    HRESULT hr = S_OK;

    RECT rc;
    GetClientRect(Window::GethWnd(), &rc);
    UINT width = rc.right - rc.left;
    UINT height = rc.bottom - rc.top;

    UINT createDeviceFlags = 0;
#ifdef _DEBUG
    createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif

    D3D_DRIVER_TYPE driverTypes[] =
    {
        D3D_DRIVER_TYPE_HARDWARE,
        D3D_DRIVER_TYPE_WARP,
        D3D_DRIVER_TYPE_REFERENCE,
    };
    UINT numDriverTypes = ARRAYSIZE(driverTypes);

    D3D_FEATURE_LEVEL featureLevels[] =
    {
        D3D_FEATURE_LEVEL_11_1,
        D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1,
        D3D_FEATURE_LEVEL_10_0,
    };
    UINT numFeatureLevels = ARRAYSIZE(featureLevels);

    D3D_DRIVER_TYPE g_driverType = D3D_DRIVER_TYPE_NULL;
    D3D_FEATURE_LEVEL g_featureLevel = D3D_FEATURE_LEVEL_11_0;
    for (UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++)
    {
        g_driverType = driverTypes[driverTypeIndex];
        hr = D3D11CreateDevice(nullptr, g_driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels,
            D3D11_SDK_VERSION, &pd3dDevice, &g_featureLevel, &pImmediateContext);

        if (hr == E_INVALIDARG)
        {
            hr = D3D11CreateDevice(nullptr, g_driverType, nullptr, createDeviceFlags, &featureLevels[1], numFeatureLevels - 1,
                D3D11_SDK_VERSION, &pd3dDevice, &g_featureLevel, &pImmediateContext);
        }

        if (SUCCEEDED(hr))
            break;
    }
    if (FAILED(hr))
        return hr;

    IDXGIFactory1* dxgiFactory = nullptr;
    {
        IDXGIDevice* dxgiDevice = nullptr;
        hr = pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), reinterpret_cast<void**>(&dxgiDevice));
        if (SUCCEEDED(hr))
        {
            IDXGIAdapter* adapter = nullptr;
            hr = dxgiDevice->GetAdapter(&adapter);
            if (SUCCEEDED(hr))
            {
                hr = adapter->GetParent(__uuidof(IDXGIFactory1), reinterpret_cast<void**>(&dxgiFactory));
                adapter->Release();
            }
            dxgiDevice->Release();
        }
    }
    if (FAILED(hr))
        return hr;

    IDXGIFactory2* dxgiFactory2 = nullptr;
    hr = dxgiFactory->QueryInterface(__uuidof(IDXGIFactory2), reinterpret_cast<void**>(&dxgiFactory2));
    if (dxgiFactory2)
    {
        hr = pd3dDevice->QueryInterface(__uuidof(ID3D11Device1), reinterpret_cast<void**>(&pd3dDevice1));
        if (SUCCEEDED(hr))
        {
            (void)pImmediateContext->QueryInterface(__uuidof(ID3D11DeviceContext1), reinterpret_cast<void**>(&pImmediateContext1));
        }

        DXGI_SWAP_CHAIN_DESC1 sd = {};
        sd.Width = width;
        sd.Height = height;
        sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
        sd.SampleDesc.Count = 1;
        sd.SampleDesc.Quality = 0;
        sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
        sd.BufferCount = 1;

        hr = dxgiFactory2->CreateSwapChainForHwnd(pd3dDevice, Window::GethWnd(), &sd, nullptr, nullptr, &pSwapChain1);
        if (SUCCEEDED(hr))
        {
            hr = pSwapChain1->QueryInterface(__uuidof(IDXGISwapChain), reinterpret_cast<void**>(&pSwapChain));
        }

        dxgiFactory2->Release();
    }
    else
    {
        DXGI_SWAP_CHAIN_DESC sd = {};
        sd.BufferCount = 1;
        sd.BufferDesc.Width = width;
        sd.BufferDesc.Height = height;
        sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
        sd.BufferDesc.RefreshRate.Numerator = 60;
        sd.BufferDesc.RefreshRate.Denominator = 1;
        sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
        sd.OutputWindow = Window::GethWnd();
        sd.SampleDesc.Count = 1;
        sd.SampleDesc.Quality = 0;
        sd.Windowed = TRUE;

        hr = dxgiFactory->CreateSwapChain(pd3dDevice, &sd, &pSwapChain);
    }

    dxgiFactory->MakeWindowAssociation(Window::GethWnd(), DXGI_MWA_NO_ALT_ENTER);

    dxgiFactory->Release();

    if (FAILED(hr))
        return hr;

    ID3D11Texture2D* pBackBuffer = nullptr;
    hr = pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&pBackBuffer));
    if (FAILED(hr))
        return hr;

    hr = pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &pRenderTargetView);
    pBackBuffer->Release();
    if (FAILED(hr))
        return hr;

    pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView, nullptr);

    D3D11_VIEWPORT vp;
    vp.Width = (FLOAT)width;
    vp.Height = (FLOAT)height;
    vp.MinDepth = 0.0f;
    vp.MaxDepth = 1.0f;
    vp.TopLeftX = 0;
    vp.TopLeftY = 0;
    pImmediateContext->RSSetViewports(1, &vp);

    return S_OK;
}

void DirectX11::Render()
{
    pImmediateContext->ClearRenderTargetView(pRenderTargetView, DirectX::Colors::Aquamarine);
    pSwapChain->Present(0, 0);
}

今使用しているVisual Studio2022でも動作しました。

とはいえ、やっていることはDirectXを初期化して表示しているだけなので、

ここまではほぼテンプレの処理。

大事なのは、ここに何を書くか、という処理ですね。

経済ニュース(01/27)

米経済、FRBが望む形で減速-なお残るリセッションのリスク – ブルームバーグ

2022年10ー12月(第4四半期)の米経済成長率は市場予想を上回る伸びとなり、成長を阻害することなくインフレを抑制したい米金融当局が望むような緩やかな減速となった。

トヨタなど自動車大手の偽エアバッグ 販売疑いで男4人逮捕 全国初摘発|TBS NEWS DIG – TBS NEWS DIG Powered by JNN

トヨタなど大手自動車メーカーの偽のロゴマークをつけたエアバッグを販売したなどとして、警視庁が男4人を逮捕しました。偽エアバッグの摘発は、全国初です。群馬県桐生市の中古車販売店の従業員でパキスタン人のイスラール・ミアン・アリ容疑者(36)ら4人は去年、「トヨタ」や「ホンダ」「日産」の偽物のロゴがつけられたエアバッグ…

【更新】JR西、26日午後もダイヤ乱れ 帰宅ラッシュ直撃、神戸線などで振り替え輸送 28日も運転見合わせの可能性 – 神戸新聞NEXT

JR西日本によると26日朝、ダイヤに乱れが発生した際にダイヤ情報を修正するための一部機能が停止し、JR神戸線や京都線、山陽本線など関西の主要各線で遅れや運休が発生した。

米GDP、10〜12月2.9%増 高インフレ下で堅調さ示す(写真=ロイター) – 日本経済新聞

【ワシントン=高見浩輔】米商務省が26日発表した2022年10〜12月期の実質国内総生産(GDP、季節調整済み)速報値は、前期比の年率換算で2.9%増だった。高インフレの下でも底堅い経済成長が続いた。先行きの景気後退懸念はなお強い。利上げを続ける米連邦準備理事会(FRB)の思惑通り、適度に経済を減速できるかが焦点となる。市場予想は2.8%だった。22年7〜9月期の成長率は10月時点の速報値が2

【電気代高騰】常連客「ゲームまで(料金が)上がるとは…」 – 日テレNEWS

電気料金の値上げが今年も家計を悩ませています。電気代の高騰に耐えきれず、シンボルとなっている街灯の撤去を決めた商店街もあります。    ◇“最強寒波”の影響で心配していることを、都内で聞きました。主婦(30代)「うちはオイルヒーターとか、ホットカーペット使ったりしてるので、この時期は余計に電気を使うので、すごく出…

スズキ、軽商用EVを2023年度投入へ 2030年度までに日本市場にEV6モデル展開 – Car Watch

スズキは1月26日、2030年度に向けた成長戦略を発表。その中で、4輪車のBEV(バッテリ電気自動車)投入計画が公表され、日本では2023年度に軽商用BEVを投入することを明らかにした。

資金不足で閉鎖状態続く「納骨堂問題」利用者と意見交換 不動産会社側はあらためて”存続の意向”示すも札幌市は… (23/01/26 20:40) – 北海道ニュースUHB

運営する宗教法人の資金不足などをきっかけに、2022年10月から閉鎖状態となっている北海道札幌・東区の納骨堂をめぐり、1月25日競売で土地建物を落札した不動産会社が、今後の対応などについて利用者と意見交換しました。 札幌市東区の納骨堂、御霊堂元町は、運営する宗教法人が事実上経営破綻し、代表とも連絡がとれなくなり、…

MBCニュース | 商業エリアは「アミュ ウィー」中央駅西口「JR鹿児島中央ビル」4月頃開業テナント一覧 – MBC 南日本放送

鹿児島のニュース MBC南日本放送

アルファ ロメオ、新型SUV「トナーレ」発表会 新開発エンジンや先進装備など“DNAを受け継ぎすべてを兼ね備えた”モデル – Car Watch

アルファ ロメオ(Stellantisジャパン)は1月26日、ブランド初となるマイルドハイブリッド(MHEV)を搭載した新型ミドルサイズSUV「トナーレ」の発表会を開催した。トナーレの発売日は2月18日。

トヨタ社長に53歳の佐藤恒治氏 豊田章男氏「平穏な年はなかった」:朝日新聞デジタル – 朝日新聞デジタル

トヨタ自動車は26日、豊田章男社長(66)が4月1日付で会長に就き、佐藤恒治執行役員(53)を社長に昇格させる人事を発表した。トヨタの社長交代は約14年ぶり。急速に進む自動車の電動化の流れの中で、ト…

西武池袋線 池袋〜所沢間など運転見合わせ|NHK 首都圏のニュース – nhk.or.jp

【NHK】西武鉄道のホームページによりますと西武池袋線は、午後6時44分ごろ、ひばりヶ丘駅と東久留米駅の間で起きた人身事故のため池袋駅と所沢駅の間の…

就職氷河期世代…家族のために再チャレンジ 正規雇用を目指し地方公務員・社会人枠の採用試験へ – ライブドアニュース – livedoor

現在の30代後半から40代前半の方は、「就職氷河期世代」と呼ばれ、学校卒業後の就職活動がとても困難な世代でした。就職氷河期世代が社会の担い手となっている現在、どのようなことを感じながら生活しているのでしょ

京王井の頭線 約2時間半運転見合わせ 受験生など2万4000人影響 – nhk.or.jp

京王井の頭線は、東京 杉並区の富士見ヶ丘駅で26日朝、線路の切り替え部分が故障し、富士見ヶ丘駅と吉祥寺駅の間の上下線でお…

長期金利誘導「柔軟に」 IMF、日銀緩和の修正提案 – 日本経済新聞

国際通貨基金(IMF)は26日、日銀の金融緩和の修正提案を盛り込んだ声明を公表した。0.5%以下に抑えている長期金利に柔軟性を持たせ、市場の歪(ゆが)みを解消するとともに、インフレが進む事態に備えるよう促した。IMFの提案が日銀の政策に直接影響することはないが、市場にくすぶる金融政策の修正観測を強める可能性がある。年に1度の対日経済審査を終えて公表した。日本が低インフレに戻る可能性を念頭に、金

すかいらーくの新業態、飲茶TERRACE「桃菜」1号店が町田市にオープン – グルメ Watch

すかいらーくホールディングスは2月1日、新業態のレストランとなる飲茶TERRACE「桃菜」(とうさい)の1号店を東京都町田市鶴川にオープンする。

低PBR企業に資本効率の改善迫る 東証が開示拡充要請へ – 日本経済新聞

東京証券取引所は2023年春にも、株価が1株あたり純資産の何倍に当たるかを示すPBR(株価純資産倍率)が低い企業に対し、改善策などの開示拡充を求める方針だ。株主から集めた資金を有効活用できていない上場企業が多いとして投資家から問題視されている。株主総会でも反対票が増える可能性があり、企業は資本効率の改善が急務となる。PBRは1倍が解散価値を示し、これを下回ると企業の収益力が投資家の期待に沿わず

最強寒波で「予防的通行止め」…福井県の評価とドライバーの本音 「解除見込み時間知りたい」の声に管理者は… – 福井新聞

福井県内が猛吹雪に見舞われた1月24日、北陸自動車道と国道8号、舞鶴若狭自動車道、国道27号などが約6時間にわたって同時通行止めになった。福井県の担当者は「視界不良で危険な状態だった。未然に大きな滞留を防ぐ意味では効果があった」と分析する。道路管理者は通行止めの可能性を事前に周知していたものの影響は大きく、ドライバーは、解除見通しの早期発信や次回発表時刻の明示など、より利用者目線の対応を求めた。

ITニュース(01/27)

投資グループ中心メンバー 所得税24億円滞納で差し押さえ – nhk.or.jp

「暗号資産に投資すれば多額の配当が得られる」などとして国に無登録で投資を募った罪で有罪判決が確定した投資グループの中心メ…

「DbD」開発元による新作「Meet Your Maker」のPC向けオープンβテストは2月6日~14日に実施へ。Steamアカウントがあれば参加可能 – 4Gamer.net

「Dead by Daylight」を展開するBehaviour Interactiveは本日,新作「Meet Your Maker」のオープンβテストを,日本時間2023年2月6日23:00から2月14日13:59まで実施すると発表した。Steam Nextフェスの一部として実施される予定(つまりPC向け)で,Steamアカウントがあれば誰でも参加できる。

ハワイ上空に出現した謎の光るグルグル。これはなんだ? – GIZMODO JAPAN

UFOじゃなかった。1月18日、ハワイはマウナケアの上空に謎の渦が出現。移動しながらクルクル回る渦とその中心にある強い光。これは一体なんなのでしょうか…。まさかUFO…じゃなくて、なんとSpaceXによるファルコン9ロケット打ち上げが関係している可能性が高いのだそう。マウナケアにある自然科学研究機構国立天文台ハワイ観測所のすばる望遠鏡が渦の様子を捉えていました。ツイートや動画もアップされています

Google製プログラミング言語「Dart」v3.0 alphaがプレビュー公開 ほか – 窓の杜

HomePod miniの温湿度センサーはこう使います – GIZMODO JAPAN

めちゃくちゃ便利です。実はHomePod miniには、温湿度センサーが搭載されていたことがわかっていましたが、なぜか機能として解放されていませんでした。最新バージョンにアップデートすることで、いつでも部屋の温度と湿度が確認できるようになったんです。これは嬉しい!HomePod miniで部屋の温度と湿度を確認する方法 HomePod miniの温度/湿度センサーを有効にするには、本体を最新バー

盲目の経営コンサルが指南する、リーダーが「覚醒するための条件」 – Forbes JAPAN

『情熱大陸』出演で注目される起業家や、数々の大企業が秋波を送るスタートアップなど、多くの経営者が絶大な信頼を寄せる「盲目の経営コンサルタント」をご存知だろうか。経営者たちの答えのない苦しみに対峙し、彼らを『覚醒』させてきた成澤俊輔に、本誌編…

M2 Mac miniのベンチマークスコアがMac Proを上回る! – iPhone Mania

2月3日発売のM2チップ搭載Mac miniのベンチマークスコアが、Mac Proのベンチマークスコアを上回っていると、テック系YouTuberが証拠画像とともにTwitterに投稿しました。価格差8…

ASUS,OC仕様のGeForce RTX 3060 Ti搭載カード計2製品を発売 – 4Gamer.net

DUAL-RTX3060TI-O8GD6X,TUF-RTX3060TI-O8GD6X-GAMING 配信元 ASUS JAPAN 配信日 2023/01/26 ASUSよりNVIDIA GeForce RTX 3060 Tiを搭載したビデオカード、DUAL-RTX3060TI-O8GD6XとTUF-RTX3060TI-O8GD6X-GAMINGを発表 ASUS JAPAN株式会社は、NVIDIA GeForce RTX 3060 Tiを搭載したビデオカード、DUAL…

SNKのSTG「プレヒストリックアイル2 原始島」がAndroid/iOS「アケアカNEOGEO」より本日配信 – GAME Watch

SNKは、Android/iOS用シューティング「プレヒストリックアイル2 原始島 アケアカNEOGEO」の配信を本日1月26日より開始した。価格は650円(税込)。

PS5の3万円高級コントローラー「デュアルセンス エッジ」は、値段に見合った満足感と使いやすさを提供してくれるゲーマーを考えまくりなコントローラーだった – 電ファミニコゲーマー

コントローラーって選択肢が多くないですか?漠然とした書き出しで記事をはじめてしまいましたが、事実として最近はサードパーティ含めて多種多様なコントローラーが発売されていますよね。  私自身は基本的に、PS4でいうDUALSHOCK 4やPS5でいうDualSenseといった、ゲーム機メーカー自身のコントローラーを買っておけば問題ないと考えているのですが……。

『アトミックハート』がゴールド(製品化の最終段階にあるソフトウェアの完成)を報告。作中に登場する重要な施設「3826施設」の紹介映像も公開 – 電ファミニコゲーマー

MundfishはアクションRPG『Atomic Heart』のゴールド(製品化の最終段階にあるソフトウェアの完成)を報告した。

ロシアのGoogleこと「Yandex」の40GB超のGitリポジトリが漏えい – GIGAZINE(ギガジン)

大規模データベースのリーク情報やハッキングツールなどを提供する場として人気のサイバー犯罪フォーラムBreachForums上で、borderline2023というユーザーがYandexの40GB超のGitリポジトリをリークしたと主張しています。

楽天モバイル、ホームルーター専用の新料金プラン「Rakuten Turbo」&5G対応ルーター「Rakuten Turbo 5G」 – ケータイ Watch

楽天モバイルは、データ容量無制限のホームルーター専用料金プラン「Rakuten Turbo」の提供を開始した。キャンペーンが実施されており、3年間は月額3685円で利用できる。4年目以降の料金は月額4840円。

次世代Mac ProはメモリもGPUもアップグレードできない!? – iPhone Mania

今年、または来年発売と予測される次世代Mac Proについて、Bloombergのマーク・ガーマン記者が、RAM(メモリ)もGPUもアップグレードできないモデルになるとの予測を、Twitterに投稿し…