int SDL_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* srcrect, const SDL_Rect* dstrect)
renderer | レンダリングコンテキスト |
texture | コピー元テクスチャ (詳細を参照すること) |
srcrect | コピー元のSDL_Rect. NULLのとき全体 |
dstrect | コピー先のSDL_Rect. NULLのとき全体. テクスチャはこの領域に合うように拡大縮小される. |
#include "SDL.h"
#define SHAPE_SIZE 16
int main(int argc, char *argv[])
{
SDL_Window* Main_Window;
SDL_Renderer* Main_Renderer;
SDL_Surface* Loading_Surf;
SDL_Texture* Background_Tx;
SDL_Texture* BlueShapes;
/* レンダリングする(テクスチャ内の)コピー元と(画面の)コピー先の領域 */
SDL_Rect SrcR;
SDL_Rect DestR;
SrcR.x = 0;
SrcR.y = 0;
SrcR.w = SHAPE_SIZE;
SrcR.h = SHAPE_SIZE;
DestR.x = 640 / 2 - SHAPE_SIZE / 2;
DestR.y = 580 / 2 - SHAPE_SIZE / 2;
DestR.w = SHAPE_SIZE;
DestR.h = SHAPE_SIZE;
/* レンダリングの前にウィンドウとレンダラーを生成する */
Main_Window = SDL_CreateWindow("SDL_RenderCopy Example",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 580, 0);
Main_Renderer = SDL_CreateRenderer(Main_Window, -1, SDL_RENDERER_ACCELERATED);
/* 背景画像を読み込む. SDL_LoadBMP()はサーフェイスを戻すので,
それを高速にコピーできるテクスチャに変換する */
Loading_Surf = SDL_LoadBMP("Background.bmp");
Background_Tx = SDL_CreateTextureFromSurface(Main_Renderer, Loading_Surf);
SDL_FreeSurface(Loading_Surf); /* テクスチャは得られた -> サーフェイスを解放する */
/* 追加のテクスチャを読み込む */
Loading_Surf = SDL_LoadBMP("Blueshapes.bmp");
BlueShapes = SDL_CreateTextureFromSurface(Main_Renderer, Loading_Surf);
SDL_FreeSurface(Loading_Surf);
/* ここが最も関心のある部分である.
Blueshapes.bmpの選択された部分を画面の中央にレンダリングする */
int i;
int n;
for(i=0;i<2;i++)
{
for(n=0;n<4;n++)
{
SrcR.x = SHAPE_SIZE * (n % 2);
if(n > 1)
{
SrcR.y = SHAPE_SIZE;
}
else
{
SrcR.y = 0;
}
/* 背景をレンダリングする. NULLはコピー元とコピー先がデフォルトであることを意味する */
SDL_RenderCopy(Main_Renderer, Background_Tx, NULL, NULL);
/* 図形をレンダリングしてアニメーションにする */
SDL_RenderCopy(Main_Renderer, BlueShapes, &SrcR, &DestR);
SDL_RenderPresent(Main_Renderer);
SDL_Delay(500);
}
}
/* このレンダラーは大きなキャンバスのようなものである:
RenderCopy()で画像を加えると, その度に上書きされる.
新しいデータがどのようにブレンドされるかは変更できる.
あなたの「絵」が完成すれば, それをSDL_RenderPresent()を使って見せることができる */
/* SDL 1.2ユーザへのヒント: レンダラーが理解しづらいならば, 1.2のサーフェイスとコピーに置き換えて,
レンダラーはメインサーフェイス, SDL_RenderCopy()はメインサーフェイスへのコピー,
SDL_RenderPresent()は旧バージョンのSDL_Flip()関数と考えればよいかもしれない */
SDL_DestroyTexture(BlueShapes);
SDL_DestroyTexture(Background_Tx);
SDL_DestroyRenderer(Main_Renderer);
SDL_DestroyWindow(Main_Window);
SDL_Quit();
return 0;
}
テクスチャはSDL_SetTextureBlendMode()で設定したブレンドモードでコピー先のテクスチャとブレンドされる.
テクスチャの色はSDL_SetTextureColorMod()で設定した色の影響を受ける.
テクスチャのα値はSDL_SetTextureAlphaMod()で設定したα値の影響を受ける.