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


83

テクスチャと表面の違いは何ですか?簡単な言葉で誰かが私に説明できますか?SDL2asSDL_Surfaceとで使われているのを見ましたSDL_TextureSDL_Textureが作成され、SDL_Surfaceそこから画像/ビットマップから作成されます。どちらもピクセルのコレクションです。しかし、私はそれらの間の主な違いを見ていません(GPUで何かをしなければなりませんか?)

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


7
ここに私の答えを見てみましょう:stackoverflow.com/questions/21007329/what-is-a-sdl-renderer/...それは説明しますSDL_TextureSDL_Surface同様にSDL_Renderer。一般に、SDL_Textureはレンダリングに使用されるものですが、SDL_Imageまたはを使用してテクスチャ情報をロードSDL_ttfすると、データはSDL_Surface
olevegard 2014年

@olevegardその答えはほとんどコピーペーストです、私は本当にいくつかの知識を持った答えが欲しいです。
この

3
さて、あなたが想定するように、SDL_Surface一方で、画素の単なる集まりですSDL_Textureされan efficient, driver-specific representation of pixel data、それはGPUが使用することができることを意味しwiki.libsdl.org/SDL_Texture。それはあなたの質問に答えましたか?詳細を理解するには、コンピュータグラフィックスをさらに深く掘り下げる必要があります
olevegard 2014年

2
@olevegard残念ながら、あなたはそれをあなたの答えに書かなかった。これがあなたのチャンスです。
この

回答:


84

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

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

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

言うまでもなく、ハードウェアレンダリングはソフトウェアレンダリングよりも桁違いに高速であり、常に主要なオプションと見なす必要があります。


4
ハードウェアアクセラレーションが利用できる場合、SDL_Surfaceを使用する利点はありますか?たとえば、小さなレンダリング操作の場合、ハードウェアに移動するためのオーバーヘッドが大きすぎますか?
ティモス2015

3
@Timmosハードウェアレンダリングは常にソフトウェアよりも高速になります。ただし、ソフトウェアサーフェスには、CPUアクセス可能なメインメモリに格納されているため、データを直接書き込むことができるという1つの利点があります。これは、たとえばビデオゲームで手続き的に生成されたコンテンツとして、リアルタイムでテクスチャを生成する場合に役立ちます。(ただし、最近では、シェーダーを使用してGPUで多くの種類の手続き型生成を実行することもできます。)
cemper93 2016

1
@Timmosサーフェスの処理、生成、完全な読み取り/書き込み制御の方法を完全に制御できます。つまり、制御はサーフェスが提供するものです。GPUメーカーはGPUへの直接アクセスを許可していないため、OpenGLおよびそのようなAPIはGPUで動作する必要があります。そのため、OpenGLまたはDXの非効率性について不満を言う人や、これらのAPIが行う愚かなことをよく耳にします。より速くまたはより効率的に何かを書くことができますが、GPUにアクセスできないため、できません。
トレバーハート

8

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



1

それについてのより多くの情報があります:

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

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

お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.