

# Framework

### 低レベルAPIを使用し、
### 時代に合わせたフレームワークの作成を目指して作成しているものです。

<理由>  
昨今のゲームに対して、自分が考えている問題点として、  
増えるリソースの量が膨大になり  
レベルデザインやブラッシュアップに使用する時間が少なくなっているのではないかと考えました。  

これを、何とかする方法を考えた結果、今の現状もそうなっていると思うのですが、
優秀なレベルエディターを使用し、制作することで、作業の効率化を図ることで、改善が見込めるのでは？  
と考えました。  

<目標として対応させる予定のAPI>  

・DirectX11  
・OpenGL4.3以上またはOpenGL4.0以上  
・Vulkan

<興味のあるAPI>  
・WebGL2.0  

## 対応APIについて

<対応予定のAPIの選出の理由>  
  
・DirectX11の理由、  
低レベルAPIの入門としては、ネットの文献なども多く、シェーダー関連の技術の投稿も多いためもっとも入りやすいように感じたため。また、後述のVulkanの弱点を補えるため。  
  
・OpenGL4.3以上またはOpenGL4.0以上の理由、  
OpenGLを対応させてい理由として、Vulkanがあるとはいえ、あらゆる場面で最も使われているAPIであり、組み込みも沢山あり、それらの場面では、初期化以外のコードに関しては、大体使いまわせるため。  
OpenGLを対応させることで、現時点でVulkanの手の届かない範囲をカバーできる。

@ バージョンに関して  
OpenGL4.3からコンピュートシェーダーが使用できるため、DirectX11の抽象化の際無いと、面倒くさいことになると思ったため。しかし、OpenGLESやWebGLには、そもそもGeometryShaderなどがないため、結局Unityと同じくモバイル用（向け）のシェーダーと分けることで、解決することにしたため、バージョンの指定にあまり意味がなくなりました。
それで、最もDirectX11と性能が近しいOpenGL4.0辺りで良いのかなぁと考えています。  

・Vulkan  
クロノスが策定したため、マルチプラットフォームで使用することが出来、これだけ対応させれば  
マルチプラットフォームのフレームワークが完成するため、個人的に最強だなぁと感じているAPIなのですが、  
問題点として、難しすぎて分からないこと、  
GTX650(確かこの辺りだったと思います)以上のGPUが入っていないと動かない点などがあります。  
これによって、昔のPCなどが対応から外れてしまうため、  
Windows7以降の対応が多いDirectX11(DirectX12でない理由)、  
winodws以外のプラットフォームでOpenGLも対応させたい理由となります。  
  
  

<興味のあるAPIについて>  
・WebGL2.0  
2017年入ったころに2.0が発表され、バージョンアップしたことで、色々賑わっているような気がしています。  
frameworkとしてthree.jsなどがあり、ソースコードも実質オープンソースみたいなものなので、波に乗れば、  
流行ったりするのではないかと考えています。  
デモシーンなども、WebGLのものが増えてきているらしいです。  
   

## フレームワークの設計について  

point @ 出来うる限り後の変更に対応させやすいように変更時の実装方法を2種類は用意しておく。  
point @ 必要十分レベルで処理速度に配慮した設計を行う。  
point @ 折角の低レベルAPIなのでWrapによるオーバーヘッドを出来る限り軽減して設計する。  
point @ あとで、多様な動きが可能そうなものに関しては、オブザーバーで組む。



   





