..Continued on from my previous question僅繪製一個紋理的OpenGL ES iPhone
的一部分我有一個320×480幀緩衝器RGB565我希望在iPhone上使用OpenGL ES 1.0繪製。
- (void)setupView
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, (int[4]){0, 0, 480, 320});
glEnable(GL_TEXTURE_2D);
}
// Updates the OpenGL view when the timer fires
- (void)drawView
{
// Make sure that you are drawing to the current context
[EAGLContext setCurrentContext:context];
//Get the 320*480 buffer
const int8_t * frameBuf = [source getNextBuffer];
//Create enough storage for a 512x512 power of 2 texture
int8_t lBuf[2*512*512];
memcpy (lBuf, frameBuf, 320*480*2);
//Upload the texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, lBuf);
//Draw it
glDrawTexiOES(0, 0, 1, 480, 320);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
如果我在512 * 512產生原始紋理輸出被裁剪錯誤,但除此之外看起來不錯。然而,使用320 * 480的要求輸出尺寸,一切都會失真和混亂。
我非常確定這是我將幀緩存複製到新的512 * 512緩衝區的方式。我曾試過這個例程
int8_t lBuf[512][512][2];
const char * frameDataP = frameData;
for (int ii = 0; ii < 480; ++ii) {
memcpy(lBuf[ii], frameDataP, 320);
frameDataP += 320;
}
哪個更好,但寬度似乎被拉伸,高度被搞亂。
任何幫助表示讚賞。
Ben的加載爲RGB565(16bpp) - 每個像素兩個字節是正確的。 – 2010-06-11 15:26:28