[解決済み】SDLレンダラとは何ですか?
質問
SDL2 を使い始めたのですが、SDL_Renderer が何であるかを理解するのに苦労しています。
それは何ですか?何をするものですか?SDL_Renderer、SDL_Window、SDL_Surface、SDL_Textureの違いとその関連性は何ですか?
この入門用コードを理解しようとしたときに問題がありました。
#include <iostream>
#include <SDL2/SDL.h>
int main()
{
/* Starting SDL */
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Create a Window */
SDL_Window *window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (window == nullptr) {
std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Create a Render */
SDL_Renderer *render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (render == nullptr) {
std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Load bitmap image */
SDL_Surface *bmp = SDL_LoadBMP("./Tutorial/res/Lesson1/hello.bmp");
if (bmp == nullptr) {
std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Upload surface to render, and then, free the surface */
SDL_Texture *texture = SDL_CreateTextureFromSurface(render, bmp);
SDL_FreeSurface(bmp);
if (texture == nullptr){
std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Draw the render on window */
SDL_RenderClear(render); // Fill render with color
SDL_RenderCopy(render, texture, NULL, NULL); // Copy the texture into render
SDL_RenderPresent(render); // Show render on window
/* Wait 2 seconds */
SDL_Delay(5000);
/* Free all objects*/
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
/* Quit program */
SDL_Quit();
return 0;
}
私はTwinklebearチュートリアル(SDL Wikiで提案されている)を使用し、SDL Wikiドキュメントやいくつかの本も調べました。しかし、それらはすべて、私がこれらの定義を知っていることを前提としています。
どのように解決するのですか?
SDL_ウィンドウ
SDL_Window
は Window 自体に関するすべての情報(サイズ、位置、フル スクリーン、ボーダーなど)を保持する構造体です。
SDL_レンダラ
SDL_Renderer
は、すべてのレンダリングを処理する構造体です。この構造体は
SDL_Window
の中でしかレンダリングできないので
SDL_Window
. また、レンダリングに関連する設定も記録されます。には、いくつかの重要な機能が関連付けられています。
SDL_Renderer
-
SDL_SetRenderDrawColor(renderer, r, g, b, a);
これは、画面をクリアする色を設定するものです ( 下記参照 ) -
SDL_RenderClear(renderer);
上記で設定した描画色でレンダリングターゲットをクリアします。 -
SDL_RenderCopy(
この関数はおそらく最もよく使うことになるでしょう。SDL_Texture
で、以下のパラメータを持っています。-
SDL_Renderer* renderer,
レンダリングに使用するレンダラーを指定します。 -
SDL_Texture* texture,
レンダリングしたいテクスチャ。 -
const SDL_Rect* srcrect,
レンダリングしたいテクスチャの部分。テクスチャ全体をレンダリングする場合はNULL。 -
const SDL_Rect* dstrect)
ウィンドウ内のテクスチャをレンダリングしたい場所。もし、この幅と高さがSDL_Rect
がテクスチャ自体の寸法より小さいか大きい場合、テクスチャはこのSDL_Rect
-
-
SDL_RenderPresent(renderer);
他のSDL_Render*関数は、非表示のターゲットに描画します。この関数はそのすべてを受け取り、レンダラーに結びついたウィンドウに描画します。
SDL_テクスチャとSDL_サーフェス
は
SDL_Renderer
をレンダリングします。
SDL_Texture
これは、1つの要素のピクセル情報を格納するものです。これは、新しいバージョンの
SDL_Surface
というのは、ほとんど同じです。違いは、ほとんど
SDL_Surface
は、単に
struct
はピクセル情報を含むが
SDL_Texture
は、効率的でドライバ固有のピクセルデータ表現である。
SDL_Surface*をSDL_Textureに変換するには、次のようにします。
SDL_Texture* SDL_CreateTextureFromSurface(SDL_Renderer* renderer,
SDL_Surface* surface)
この後、SDL_Surface を解放するために
SDL_FreeSurface( SDL_Surface* surface )
もう一つの重要な違いは
SDL_Surface
はソフトウェアレンダリング(CPU経由)であるのに対し
SDL_Texture
は、ハードウェアレンダリング(GPU経由)を使用しています。
SDL_矩形
SDL で最もシンプルな構造体です。4 つのショートカットだけが含まれています。
x, y
で、位置を保持し
w, h
は、幅と高さを保持する。
ここで重要なのは
0, 0
は、SDLでは左上の角です。そのため、より高い
y
-の値は低いことを意味し、右下隅の座標は
x + w, y + h
SDL2については、私のサイトで詳しく紹介しています。 ブログ
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] テスト
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー