SDL2纹理重复/包装属性

时间:2014-07-27 00:37:34

标签: textures sdl sdl-2

我想在SDL2(SDL_RenderCopy)中使用纹理重复,并且无法找到方法。 通过纹理重复我的意思是给出两倍于纹理大小的纹理坐标,并在表面上平铺两次。像这样:http://www.felixgers.de/teaching/jogl/textureClamp.html

任何人都知道如何在SDL中做到这一点?我自己需要访问openGL函数吗?

感谢,

1 个答案:

答案 0 :(得分:2)

这不是一个理想的解决方案,但如果您不想沿着使用OpenGL功能的路线前进:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, DEFAULT_TEXTURE_WRAP );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, DEFAULT_TEXTURE_WRAP ); 

然后,您可以在绘制时动态计算源和目标。例如,假设您的纹理为100x100,屏幕绘制区域为150x150。从左上角开始,您会看到第一次调用时可以适应完整的纹理

SDL_Rect dest = {0,0,100,100}
SDL_RenderCopy(renderer, texture, NULL, &dest);

---------
|    |  |
|    |  |
------  |
|       |
---------

所以现在你可以看到你必须只绘制50像素宽的纹理,但仍然是整个高度并从点100,0开始

SDL_Rect src = {0,0,50,100}
SDL_Rect dest = {100,0,50,100}
SDL_RenderCopy(renderer, texture, &src, &dest);

---------
|    |  |
|    |  |
--------|
|       |
---------

您可以将其用于迭代并整理计算以使其适合您。正如我所说,它不是理想的,但它是另一种选择。