SDL_CreateTexture

Use this function to create a texture for a rendering context.
使用该函数可以为特定渲染器创造一个纹理。

Syntax 语法

  1. SDL_Texture* SDL_CreateTexture(SDL_Renderer* renderer,
  2. Uint32 format,
  3. int access,
  4. int w,
  5. int h)

Function Parameters 函数参数

rendererthe rendering context渲染器
formatone of the enumerated values in SDL_PixelFormatEnum; see Remarks for detailsSDL_PixelFormatEnum枚举中的一个值,参考Remarks以获取详细信息
accessone of the enumerated values in SDL_TextureAccess; see Remarks for detailsSDL_TextureAccess枚举中的一个值,参考Remarks以获取详细信息
wthe width of the texture in pixels该纹理的宽度,以像素为单位
hthe height of the texture in pixels该纹理的高度,以像素为单位

Return Value 返回值

Returns a pointer to the created texture or NULL if no rendering context was active, the format was unsupported, or the width or height were out of range; call SDL_GetError() for more information.
返回一个指针指向被创造的纹理,但如果没有活动的渲染器,或者format格式不被支持,或者宽度或高度超过限度,则返回NULL,调用SDL_GetError()以获取更多的错误信息。

Code Examples 代码示例

  1. #include "SDL.h"
  2. /* Moving Rectangle 移动的矩形*/
  3. int main(int argc, char *argv[])
  4. {
  5. SDL_Window *window;
  6. SDL_Renderer *renderer;
  7. SDL_Texture *texture;
  8. SDL_Event event;
  9. SDL_Rect r;
  10. if (SDL_Init(SDL_INIT_VIDEO) < 0) {
  11. SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
  12. return 3;
  13. }
  14. window = SDL_CreateWindow("SDL_CreateTexture",
  15. SDL_WINDOWPOS_UNDEFINED,
  16. SDL_WINDOWPOS_UNDEFINED,
  17. 1024, 768,
  18. SDL_WINDOW_RESIZABLE);
  19. r.w = 100;
  20. r.h = 50;
  21. renderer = SDL_CreateRenderer(window, -1, 0);
  22. texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 1024, 768);
  23. while (1) {
  24. SDL_PollEvent(&event);
  25. if(event.type == SDL_QUIT)
  26. break;
  27. r.x=rand()%500;
  28. r.y=rand()%500;
  29. SDL_SetRenderTarget(renderer, texture);
  30. SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
  31. SDL_RenderClear(renderer);
  32. SDL_RenderDrawRect(renderer,&r);
  33. SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0x00);
  34. SDL_RenderFillRect(renderer, &r);
  35. SDL_SetRenderTarget(renderer, NULL);
  36. SDL_RenderCopy(renderer, texture, NULL, NULL);
  37. SDL_RenderPresent(renderer);
  38. }
  39. SDL_DestroyRenderer(renderer);
  40. SDL_Quit();
  41. return 0;
  42. }

Remarks 注意

format may be one of the following:
参数format可以是以下值中的一个:

SDL_PIXELFORMAT_UNKNOWN
SDL_PIXELFORMAT_INDEX1LSB
SDL_PIXELFORMAT_INDEX1MSB
SDL_PIXELFORMAT_INDEX4LSB
SDL_PIXELFORMAT_INDEX4MSB
SDL_PIXELFORMAT_INDEX8
SDL_PIXELFORMAT_RGB332
SDL_PIXELFORMAT_RGB444
SDL_PIXELFORMAT_RGB555
SDL_PIXELFORMAT_BGR555
SDL_PIXELFORMAT_ARGB4444
SDL_PIXELFORMAT_RGBA4444
SDL_PIXELFORMAT_ABGR4444
SDL_PIXELFORMAT_BGRA4444
SDL_PIXELFORMAT_ARGB1555
SDL_PIXELFORMAT_RGBA5551
SDL_PIXELFORMAT_ABGR1555
SDL_PIXELFORMAT_BGRA5551
SDL_PIXELFORMAT_RGB565
SDL_PIXELFORMAT_BGR565
SDL_PIXELFORMAT_RGB24
SDL_PIXELFORMAT_BGR24
SDL_PIXELFORMAT_RGB888
SDL_PIXELFORMAT_RGBX8888
SDL_PIXELFORMAT_BGR888
SDL_PIXELFORMAT_BGRX8888
SDL_PIXELFORMAT_ARGB8888
SDL_PIXELFORMAT_RGBA8888
SDL_PIXELFORMAT_ABGR8888
SDL_PIXELFORMAT_BGRA8888
SDL_PIXELFORMAT_ARGB2101010
SDL_PIXELFORMAT_RGBA32alias for RGBA byte array of color data, for the current platform (>= SDL 2.0.5)
SDL_PIXELFORMAT_ARGB32alias for ARGB byte array of color data, for the current platform (>= SDL 2.0.5)
SDL_PIXELFORMAT_BGRA32alias for BGRA byte array of color data, for the current platform (>= SDL 2.0.5)
SDL_PIXELFORMAT_ABGR32alias for ABGR byte array of color data, for the current platform (>= SDL 2.0.5)
SDL_PIXELFORMAT_YV12planar mode: Y + V + U (3 planes)
SDL_PIXELFORMAT_IYUVplanar mode: Y + U + V (3 planes)
SDL_PIXELFORMAT_YUY2packed mode: Y0+U0+Y1+V0 (1 plane)
SDL_PIXELFORMAT_UYVYpacked mode: U0+Y0+V0+Y1 (1 plane)
SDL_PIXELFORMAT_YVYUpacked mode: Y0+V0+Y1+U0 (1 plane)
SDL_PIXELFORMAT_NV12planar mode: Y + U/V interleaved (2 planes) (>= SDL 2.0.4)
SDL_PIXELFORMAT_NV21planar mode: Y + V/U interleaved (2 planes) (>= SDL 2.0.4)

access may be one of the following:
参数access可以是以下值中的一个:

SDL_TEXTUREACCESS_STATICchanges rarely, not lockable纹理几乎不会改变,不可被锁定
SDL_TEXTUREACCESS_STREAMINGchanges frequently, lockable纹理经常会改变,可以被锁定
SDL_TEXTUREACCESS_TARGETcan be used as a render target纹理可以作为渲染目标

You can set the texture scaling method by setting SDL_HINT_RENDER_SCALE_QUALITY before creating the texture.
在创造纹理之前,你可以设置SDL_HINT_RENDER_SCALE_QUALITY的值来设定纹理的缩放质量。

Related Functions 相关函数

SDL_CreateTextureFromSurface
SDL_DestroyTexture
SDL_QueryTexture
SDL_UpdateTexture


Translated by SteDeshain
Reference to http://wiki.libsdl.org/SDL_CreateTexture