У меня есть UIView, который я хотел бы сопоставить с лицом моей формы. Все это работает, но я хотел бы, чтобы это работало с графикой сетчатки на iPhone 5. Я установил свойство contentScale моего слоя openGL на 2.0, но, тем не менее, результат немного размыт. Так что размер правильный, просто кажется, что я использовал графику без сетчатки для изображения на дисплее сетчатки. Так что «единственное», что мне нужно сделать, это сказать iPhone, что это должно быть вдвое больше пикселей. Я попробовал решение, предложенное DarthMike, но, к сожалению, безрезультатно.
Здесь я инициализирую и добавляю его в свое представление:
MyOpenGLView *view = [[MyOpenGLView alloc] initWithFrame:CGRectMake(0, dY, 230,230) context:context];
view.contentScaleFactor = 2.0;
view.layer.contentsScale = 2.0;
view.delegate = view;
view.drawableDepthFormat = GLKViewDrawableDepthFormat16;
[view setupGL];
[self.view addSubview:view];
Здесь я отображаю представление в контексте и добавляю его как текстуру
MyViewToBeTheTexture *textureView = [[MyViewToBeTheTexture alloc]initWithFrame:CGRectMake(0, 0, 230, 230)];
self.effect.texture2d0.enabled = true;
// make space for an RGBA image of the view
GLubyte *pixelBuffer = (GLubyte *)malloc(
4 *
textureView.bounds.size.width *
textureView.bounds.size.height);
// create a suitable CoreGraphics context
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context =
CGBitmapContextCreate(pixelBuffer,
textureView.bounds.size.width, textureView.bounds.size.height,
8, 4*textureView.bounds.size.width,
colourSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colourSpace);
// draw the view to the buffer
[textureView.layer renderInContext:context];
// upload to OpenGL
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGBA,
textureView.bounds.size.width, textureView.bounds.size.height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, pixelBuffer);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glGenBuffers(1, &texArray);
glBindBuffer(GL_ARRAY_BUFFER, texArray);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0,0);
glBufferData(GL_ARRAY_BUFFER, sizeof(TexCoords), TexCoords, GL_STATIC_DRAW);