POSIX printf()
поддерживает позиционные аргументы.
printf("Hi %1$s, you are %2$s.", name, status);
printf("Vous êtes %2$s, bonjour %1$s !", name, status);
Вот как я это делаю.
Я определяю переменную текстуры (я использую класс Apple Texture2D
, но вы можете использовать идентификатор текстуры OpenGL, если вы хочу) и буфер кадра:
Texture2d * texture;
GLuint textureFrameBuffer;
Затем в какой-то момент я создаю текстуру, буфер кадра и присоединяю буфер рендеринга. Это вам нужно сделать только один раз:
texture = [[Texture2D alloc] initWithData:0
pixelFormat:kTexture2DPixelFormat_RGB888
pixelsWide:32
pixelsHigh:32
contentSize:CGSizeMake(width, height)];
// create framebuffer
glGenFramebuffersOES(1, &textureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);
// attach renderbuffer
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture.name, 0);
// unbind frame buffer
glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0);
Каждый раз, когда я хочу выполнить рендеринг текстуры, я делаю:
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);
...
// GL commands
...
glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0);
Что касается вашего вопроса 3, вот и все, вы можете использовать текстуру, как любую другую текстуру.