SDL_CreateTexture
Use this function to create a texture for a rendering context.
使用该函数可以为特定渲染器创造一个纹理。
Syntax 语法
SDL_Texture* SDL_CreateTexture(SDL_Renderer* renderer,
Uint32 format,
int access,
int w,
int h)
Function Parameters 函数参数
renderer | the rendering context | 渲染器 |
format | one of the enumerated values in SDL_PixelFormatEnum; see Remarks for details | SDL_PixelFormatEnum枚举中的一个值,参考Remarks以获取详细信息 |
access | one of the enumerated values in SDL_TextureAccess; see Remarks for details | SDL_TextureAccess枚举中的一个值,参考Remarks以获取详细信息 |
w | the width of the texture in pixels | 该纹理的宽度,以像素为单位 |
h | the 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 代码示例
#include "SDL.h"
/* Moving Rectangle 移动的矩形*/
int main(int argc, char *argv[])
{
SDL_Window *window;
SDL_Renderer *renderer;
SDL_Texture *texture;
SDL_Event event;
SDL_Rect r;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return 3;
}
window = SDL_CreateWindow("SDL_CreateTexture",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
1024, 768,
SDL_WINDOW_RESIZABLE);
r.w = 100;
r.h = 50;
renderer = SDL_CreateRenderer(window, -1, 0);
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 1024, 768);
while (1) {
SDL_PollEvent(&event);
if(event.type == SDL_QUIT)
break;
r.x=rand()%500;
r.y=rand()%500;
SDL_SetRenderTarget(renderer, texture);
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
SDL_RenderClear(renderer);
SDL_RenderDrawRect(renderer,&r);
SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0x00);
SDL_RenderFillRect(renderer, &r);
SDL_SetRenderTarget(renderer, NULL);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_Quit();
return 0;
}
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_RGBA32 | alias for RGBA byte array of color data, for the current platform (>= SDL 2.0.5) |
SDL_PIXELFORMAT_ARGB32 | alias for ARGB byte array of color data, for the current platform (>= SDL 2.0.5) |
SDL_PIXELFORMAT_BGRA32 | alias for BGRA byte array of color data, for the current platform (>= SDL 2.0.5) |
SDL_PIXELFORMAT_ABGR32 | alias for ABGR byte array of color data, for the current platform (>= SDL 2.0.5) |
SDL_PIXELFORMAT_YV12 | planar mode: Y + V + U (3 planes) |
SDL_PIXELFORMAT_IYUV | planar mode: Y + U + V (3 planes) |
SDL_PIXELFORMAT_YUY2 | packed mode: Y0+U0+Y1+V0 (1 plane) |
SDL_PIXELFORMAT_UYVY | packed mode: U0+Y0+V0+Y1 (1 plane) |
SDL_PIXELFORMAT_YVYU | packed mode: Y0+V0+Y1+U0 (1 plane) |
SDL_PIXELFORMAT_NV12 | planar mode: Y + U/V interleaved (2 planes) (>= SDL 2.0.4) |
SDL_PIXELFORMAT_NV21 | planar mode: Y + V/U interleaved (2 planes) (>= SDL 2.0.4) |
access may be one of the following:
参数access可以是以下值中的一个:
SDL_TEXTUREACCESS_STATIC | changes rarely, not lockable | 纹理几乎不会改变,不可被锁定 |
SDL_TEXTUREACCESS_STREAMING | changes frequently, lockable | 纹理经常会改变,可以被锁定 |
SDL_TEXTUREACCESS_TARGET | can 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