Some Memorandum

DirectX11に挑む素人の備忘録。

DirectX11曲線描画失敗の巻

PS4で忙しかった(現実逃避)

 

いろいろやってて行き詰ったので現状整理。

 

目的

DirectXの機能でもって、y=(1-t)^3とかのグラフを描く。

曲線を描くことになる。

 

手段

いきなりBezier曲線とかハードル高そう(小並感)

クッソ短い直線大量に並べたろ!

 

結果

直線をずらして引いていくことには成功した。

ただ、一本引くごとに前の一本は消される(絶望)

うーんこの

 

考察

深く理解せずにあちこちのサイトからパクってきたツケがまわってきましたねぇ!

void RendererBase::Render()

とやらの中で

DrawLine()

で直線を描いてる。

void RendererBase::Render()がぐるぐるまわって画面が更新されてるんだと思うけど、

前に描いたヤツも保持、とかできないのか。できるだろうけど流石に。

調べよう。

スマートポインタとは

2ヶ月ぶりぐらい更新。

 

C++のスマートポインタ

(○○_ptrみたいなやつ)

について。

 

C++でポインタをnew(実体化、インスタンス化)して使うときは、使い終わったらdelete(メモリ解放)してやらないといけない。

でも、これを忘れてしまうと非常に面倒な、場合によっては脆弱性を孕んだ危険なバグになってしまうらしい。

 

で、これを避けるために用意されたのがスマートポインタ。

スマートは『賢い』的な意味。

 

スマートポインタはdeleteしなくても、自分が参照されてない(どこからも必要とされてない)と気付くと、勝手にメモリ解放してくれる。

 

かしこい。

WINAPIとは

Windowアプリケーションを作るときに使うインターフェース(関数群、的なもの)。



専用の型がいくつかある。

BYTE型
HRESULT型
LRESULT型
UINT型

などなど。

とはいえ、typedefで名前がついてるだけで実際はunsigned char型だったり、LONG型だったりらしい。ビビるわぁ!!



コンソールアプリケーションでは

int main(void)
{
  //処理書く
}

だったけど、
Windowアプリケーションでは

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
  //処理書く
}

こうなる。


詳しい中身

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )

第一引数インスタンスハンドル(プログラムを識別する為のハンドル)
第二引数:現在使われていない(?)
第三引数コマンドライン引数
第四引数:ウィンドウの表示状態の指定

参考サイト:WINAPIとは | WINAPI入門~bituse~

スケルトンコードとは

プログラムを書くときにいっっっっっっつも使うテンプレコードのこと。

骨組みコード。


たとえば

#include <stdio.h>

void main{



return 0;

}

みたいな。

当然だが書く言語や分野とかでスケルトンコードは違う。

そういった目的に合わせて、最近の開発環境たちはスケルトンコードを書いといてくれる。やりますねぇ!

typedefとは

typedef(タイプデフ)は、プログラミング言語のCとC++のキーワードである。

これはデータ型に新しい名前をつけるために使用される。

プログラマが容易にソースコードを理解できるようにすることが目的である。

typedefなし
int coxes;
int jaffa;
...
coxes++;
...
if (jaffa == 10)
...
typedefあり
typedef int Apples;
typedef int Oranges;
Apples coxes;
Oranges jaffa;
...
coxes++;
...
if (jaffa == 10)
...

typedef - Wikipedia

LRESULT・HRESULTとは

LRESULT は通常、ウィンドウプロシージャの戻り値としてよく使われます。

LRESULTは「LONG型の戻り値」です。
ウィンドウプロシージャの戻り値等で使われますが、
意味的にはそれ以上の特定用途はありません。
つまり、各関数やAPIの仕様でその値の意味が決まります。

 

HRESULTは、COMのインターフェイスにおいて戻り値用に定義された型です。
DirectX等はCOMベースなので、基本的にHRESULTが帰ってきます。

COMのインターフェイスの戻り値。
これはHRESULTで戻すのが基本的なルールです。

環境にもよりますが大抵はどちらもlong 型の typedef だったりします。

要するにエラー判定用戻り値の型

boolは二択(0or1)、こいつらは複数(double型だから)

oshiete.goo.ne.jp

ハンドルとは

ハンドルってのはいわゆるポインタみたいなもんで、
メモリ上のどこかに存在するリソースの場所を特定するための物です。
多分実体は void * が typedef で別名定義されてるだけだと思います。

detail.chiebukuro.yahoo.co.jp