web-dev-qa-db-ja.com

表面とテクスチャの違い(SDL /一般)

テクスチャと表面の違いは何ですか?誰でも簡単な言葉で私に説明できますか? SDL2SDL_SurfaceおよびSDL_Textureとして使用されているのを見ました。 SDL_TextureSDL_Surfaceから作成され、これはイメージ/ビットマップから作成されます。両方ともピクセルのコレクションです。しかし、それらの主な違いはわかりません(GPUで何かする必要がありますか?)

私はそれをググってみましたが、私が見つけたすべての説明は複雑すぎて、コンピューターグラフィックスのことを深く掘り下げることなくそれらを理解することができませんでした。

69
dev-null

基本的に、あなたの仮定は「GPUで何かをしなければならないのですか?」は正しい。

SDL_Surfaceは、softwareレンダリングで使用されます。 saloomi2012 が正しく認識されるように、ソフトウェアレンダリングでは、通常のRAM=を使用して画像データを保存します。したがって、ほとんどの場合、サーフェスに関連付けられたデータバッファーに直接アクセスできますそのコンテンツを変更します。つまり、CPUを使用しているため、software名です。

一方、SDL_Textureは、ハードウェアレンダリングで使用され、テクスチャはVRAMに保存され、直接アクセスできません。 SDL_Surfaceと同様。レンダリング操作はGPUによって加速され、OpenGLまたはDirectX(Windowsでのみ使用可能)APIを内部的に使用します。APIはビデオハードウェアを使用するため、hardwareレンダリング名。

言うまでもなく、ハードウェアレンダリングはソフトウェアレンダリングよりも桁違いに高速であり、常に主要なオプションとして考慮されるべきです。

69
Petr Abdulin

SDL_Textureは、通常のRAMではなく、ビデオカードのVRAMにロードされます。

7
saloomi2012

サーフェスはRAMを使用し、テクスチャはサーフェスよりも高速なビデオカードを使用します。

2
Evander

詳細については、次を参照してください。

https://thenumbat.github.io/cpp-course/sdl2/05/05.html

前のレッスンで述べたように、テクスチャはサーフェスに相当するGPUレンダリングです。したがって、テクスチャはほとんどの場合、SDL_CreateTextureFromSurface()関数を使用して、サーフェスから作成されます。この関数は多かれ少なかれあなたが期待することをします。パラメータはレンダリングコンテキストとテクスチャを作成するサーフェスです。他の作成関数と同様に、失敗するとNULLを返します。

お役に立てばと思います!

0
omotto